Реальные задачи с собеседований | Java
4.5K subscribers
292 photos
58 videos
2 files
604 links
Буду сюда выкладывать реальные задачи и вопросы с собеседований, без копипаста с интернета и других каналов)

Ссылка для друга - https://t.me/+K4vJFdalwlthYTQy

Прислать задачи, реклама - @privatevoidmain
Download Telegram
Сбер
// Input: ['A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'D', 'C', 'C']
// Output: [A, B, A, B, C, C, D]
//Удаление элементов из списка, начиная с 3 повторения

#sber
Прислать задачу | Подписаться
1👍1
Uzum


Что выведет код?
Запустится ли он?
Что такое CountDownLatch?
Как решить проблему в этом коде? Предложить несколько вариантов и реализовать каждый.
public class Application {

private static int counter1 = 0;
private static int counter2 = 0;

public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(100_000);
ExecutorService executorService = Executors.newFixedThreadPool(100);

for (int i = 0; i < 100_000; i++) {
executorService.submit(() -> {
counter1++;
counter2++;
});
countDownLatch.countDown();
}

countDownLatch.await();

System.out.println(counter1);
System.out.println(counter2);

}

}

Прислать задачу | Подписаться
3👍1
Uzum

Какие проблемы тут возникнут если этот блок вызовет 2 человека одновременно?
@Transactional(isolation = Isolation.REPEATABLE_READ)
{
var product = productDao.findById(id);
var newPrice = product.getPrice - 100; //вычисляется очень долго (сложная логика)
product.setPrice(newPrice);
productDao.save(product);
}

Прислать задачу | Подписаться
1👍1
Uzum

Провести код ревью, назвать проблемы. Потом написать решение одной из проблем

@Slf4j
public class SyncServiceImpl implements SyncService {

    @Autowired
    private SellerRestClient restClient;
    @Autowired
    private ShopRepository shopRepository;
    @Autowired
    private ProductRepository productRepository;
    @Autowired
    private KafkaTemplate<String, ProductDto> kafkaTemplate;

    @Schedule(cron = "* * * * * * ") // 1 sec
    @Override
    public void syncShops() {
        for (Shop shop : shopRepository.findAll()) {
            try {
                syncShop(shop);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Transactional
    @Override
    public void syncShop(Shop shop) {
        log.info("Syncing shop");
        shopRepository.lockShop(shop.getId()); // @Query(native = true, value = ""SELECT * FROM shop WHERE id = ? FOR UPDATE"")

        var products = shop.getNotSynchedProducts();
        products.parallelStream()
                .forEach(product -> {
                    log.info("Syncing product");
                    var seller = product.getSeller();
                    var sellerDetails = restClient.getLegalDetails(seller.getInn());

                    var dto = new ProductDto();
                    dto.setProduct(product);
                    dto.setSellerDetails(sellerDetails);

                    kafkaTemplate.send("product_details", "product", dto); // topic, key, value

                    product.setSynced(true);
                    productRepository.save(product);
                });
        shop.setSynced(true);
    }
}

Прислать задачу | Подписаться
2👍1
Яндекс
/*
Реализуйте простую pub-sub систему для обмена событиями между компонентами с возможностью отписки через токены.

Требования:
- Подписка на события должна возвращать уникальный токен
- Отписка происходит по токену
- События должны доставляться асинхронно
- Система должна быть потокобезопасной.
*/

import java.util.function.Consumer;

class OrderCreated {
final String orderId;

OrderCreated(String orderId) {
this.orderId = orderId;
}
}

// Токен подписки - можно использовать любую реализацию
interface SubscriptionToken {
}

interface EventBus extends AutoCloseable {
SubscriptionToken subscribe(Consumer<OrderCreated> handler);
void unsubscribe(SubscriptionToken token);
void publish(OrderCreated event);
}

@Test
public void testEventDeliveryWithToken() throws InterruptedException {
EventBus eventBus = new EventBusImpl();

AtomicInteger orderCount = new AtomicInteger();
AtomicReference<String> lastOrderId = new AtomicReference<>();

SubscriptionToken token = eventBus.subscribe(order -> {
orderCount.incrementAndGet();
lastOrderId.set(order.orderId);
});

eventBus.publish(new OrderCreated("ORDER-123"));
Thread.sleep(100);

assertEquals(1, orderCount.get());
assertEquals("ORDER-123", lastOrderId.get());
}

#yandex
Прислать задачу | Подписаться
💩151👍1
Сбер

/*
* Дано дерево папок. Вывести названия папок рекурсивно
* с отступами (как в IDE), где каждый уровень вложенности
* добавляет отступ.
*
* Пример вывода:
* src
* main
* java
* service
* repository
* resources
* test
*/
public static void printTree(File dir, int depth) {
// TODO
}

#sber
Прислать задачу | Подписаться
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Всех с окончанием рабочей недели)

первая ситуация также подходит для тимлидов😂😏

#fridaymemes
🔥10😢31
Сбер #sql

-- Найти имена, которые встречаются более одного раза
-- Таблица: users(id, name, ...)

#sber
Прислать задачу | Подписаться
😁22👍1
cdti
Необходимо перенести все нулевые элементы в конец массива, сохраняя относительный порядок элементов, не являющихся нулем. Решение должно производится на месте, без использования дополнительного массива, а также решение должно иметь минимальную сложность по времени и пространству.
Input: [0, 1, 0, 3, 12]
Output: [1, 3, 12, 0, 0]


Прислать задачу | Подписаться
Альфа банк

import lombok.Data;

@Data
class User {
private String username;
private Integer age;
private List<Group> groups;
}

@Data
class Group {
private String name;
private String description;
}

public class SomeConsumer {
// получить список пользователей которые состоят в группе, с наименованием начинающемся на "X"
public List<User> consume(Stream<User> usersStream) {

}
}

#alfabank
Прислать задачу | Подписаться
😁6👍1
Сбер

// 1. [Java Memory Model] - сколько объектов и в какой области памяти создано?
public void foo() {
Object[] array = {new Object(), new Object()};
log.info("");
}


public class Operator {
private String id;
private String fio;
}

Set<Operator> operators = new HashSet<>();
operators.add(new Operator("1", "Иванов"));
operators.add(new Operator("1", "Иванов"));

#sber
Прислать задачу | Подписаться
👍5
сбер #sql

// 6. Написать запрос, выводящий список клиентов у которых сумма значений ордеров > 100.
// [client]
// id
// fio

// [deal]
// id
// client_id
// amount

#sber
Прислать задачу | Подписаться
2👍1
WB🔥

Реализовать функцию решения уравнения вида ax^2 + bx + c = 0.
Результат работы вывести в консоль
public void solve (double a, double b, double c)


#wilberries
Прислать задачу | Подписаться
😁39🔥10
IW GROUP

сделать ревью
@RestController("/users")
public class UserController {

@Autowired
private final UserService userService;

@GetMapping("/get-by-id/{id}")
public ResponseEntity<UserEntity> getById(@PathVariable("id") Long id) {
return ResponseEntity.ok(userService.getById(id));
}

@GetMapping("/get-all")
public ResponseEntity<List<UserDto>> getAll() {
return ResponseEntity.ok(userService.getAll());
}

@PostMapping("/create")
public ResponseEntity<Void> create(UserDto userDto) {
userService.create(userDto);
return ResponseEntity.ok().build();
}

@PostMapping("/delete/{id}")
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {
userService.delete(id);
return ResponseEntity.ok().build();
}

@PostMapping("/update/{id}")
public ResponseEntity<Void> update(@PathVariable("id") Long id, UserDto userDto) {
userService.update(id, userDto);
return ResponseEntity.ok().build();
}
}

public interface UserService {

UserEntity getById(Long id);

List<UserDto> getAll();

void create(UserDto userDto);

void delete(Long id);

void update(Long id, UserDto userDto);
}

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {

UserJpaRepository userJpaRepository;
ArchiveJpaRepository archiveJpaRepository;
UserMapper userMapper;

public UserEntity getById(Long id) {
return userRepository.findById(id).get();
}

public void create(UserDto userDto) {
UserEntity user = userMapper.toEntity(userDto);
UserEntity userEntity = userRepository.save(user);
}

public void delete(Long id) {
UserEntity userEntity = userJpaRepository.findById(id).get();
archiveJpaRepository.save(userEntity);
userRepository.delete(id);
}

public void update(Long id, UserDto userDto) {
UserEntity user = userMapper.toEntity(userDto);
user.setId(id);
userRepository.save(user);
}

public List<UserDto> getAll() {
List<UserEntity> userEntities = userRepository.findAll()
.stream()
.filter(user -> user.getStatus().equals(NEW))
.toList();
userEntities.forEach(user -> user.setActualDate(now()));
return userMapper.toDtos(userEntities);
}
}

public interface UserRepository extends JpaRepository<UserEntity, Long> {

}

@Data
@Table("users")
public class UserEntity {

@Id
Long id;

String name;

@ManyToOne
@JoinColumn(name = "user_id")
Role role;

Status status;

LocalDateTime actualDate;
}

Прислать задачу | Подписаться
👍1
Сбер

Сколько раз отработает и что выведет:
for(int i = 0; i < 10;i++) {
i = 20;
}
System.out.println(i);

#sber
Прислать задачу | Подписаться
😁182👍1
WB🔥
/*
* Дан массив целых чисел. Переместить все нули в конец массива,
* сохранив относительный порядок остальных элементов.
* Изменения должны быть сделаны in-place (без создания копии массива).
*
* Примеры:
* [0, 1, 0, 3, 12] -> [1, 3, 12, 0, 0]
* [0, 0, 1] -> [1, 0, 0]
* [0] -> [0]
* [1] -> [1]
*/
private static int[] zeroToEnd(int[] ints) {
// TODO
}

#wilberries
Прислать задачу | Подписаться
😁7👍4