Задачи с собеседований😎
СтатистикаВсем привет! Будем сюда выкладывать реальные задачи и вопросы с собеседований @privatevoidmain - по всем вопросам Еще больше задач с собеседований на нашем основном канале - https://t.me/+SlsR25MJs_1iYTcy
- Последний пост
- 09:32
- Последнее чтение
- ещё не заходили
- Постов за неделю
- 1
- Всего постов
- 96
- Тип
- открытый
- Язык
- русский
- В каталоге с
- 12 авг.
- 1/24сутки в ленте
- 36
- 1/48двое суток
- 41
- 1/72трое суток
- 44
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
Сбер // 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 Прислать задачу | Подписаться
Альфа банк 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 Прислать задачу | Подписаться
cdti Необходимо перенести все нулевые элементы в конец массива, сохраняя относительный порядок элементов, не являющихся нулем. Решение должно производится на месте, без использования дополнительного массива, а также решение должно иметь минимальную сложность по времени и пространству. Input: [0, 1, 0, 3, 12] Output: [1, 3, 12, 0, 0] Прислать задачу | Подписаться
Сбер #sql -- Найти имена, которые встречаются более одного раза -- Таблица: users(id, name, ...) #sber Прислать задачу | Подписаться
Т банк (стажировка) #tbank Прислать задачу | Подписаться
Сбер /* * Дано дерево папок. Вывести названия папок рекурсивно * с отступами (как в IDE), где каждый уровень вложенности * добавляет отступ. * * Пример вывода: * src * main * java * service * repository * resources * test */ public static void printTree(File dir, int depth) { // TODO } #sber Прислать задачу | Подписаться
Яндекс /* Реализуйте простую 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 Прислать задачу | Подписаться
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); } } Прислать задачу | Подписаться
WB🔥 Реализовать функцию решения уравнения вида ax^2 + bx + c = 0. Результат работы вывести в консоль public void solve (double a, double b, double c) #wilberries Прислать задачу | Подписаться
Uzum Какие проблемы тут возникнут если этот блок вызовет 2 человека одновременно? @Transactional(isolation = Isolation.REPEATABLE_READ) { var product = productDao.findById(id); var newPrice = product.getPrice - 100; //вычисляется очень долго (сложная логика) product.setPrice(newPrice); productDao.save(product); } Прислать задачу | Подписаться
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); } } Прислать задачу | Подписаться
Сбер // Input: ['A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'D', 'C', 'C'] // Output: [A, B, A, B, C, C, D] //Удаление элементов из списка, начиная с 3 повторения #sber Прислать задачу | Подписаться
Яндекс /** Постамат - автоматическая станция приёма/выдачи посылок. В маркете формируются заказы, и хочется добавить возможность получения через постамат. Запускаем MVP: небольшая аудитория пользователей, несколько постаматов в Москве. При заказе пользователь сможет выбрать, что хочет получить заказ в постамате. <p> В рамках задачи нужно реализовать код для MVP решения: курьер привозит заказ и пробует положить его в ячейку, указывая номер заказа. Постамат сам выбирает ячейку и возвращает в ответ. Она откроется вызывающим этот метод кодом. после того, как заказ положили в ячейку, пользователю отправляется СМС c кодом получения. Заказ будет ждать вечно - <p> пользователь может получить заказ по коду выдачи из СМС. При вводе кода выдачи постамат должен вывести на экран текст "ваш заказ ХХХ в ячейке YYY", ячейка откроется сама. <p> Ограничения: все ячейки одного размера, но их может быть разное количество, зависит от конкретного постамата один заказ - одна коробка, она влезает в ячейку ячейки каждого постамата пронумерованы каждый постамат сам хранит своё состояние <p> Для отправки сообщения пользователю надо использовать клиент UserNotificationApi.*/ class PostalBox { private final UserNotificationApi notificationApi; public int placeOrder(Long orderId) { } public getOrder(Integer receiveCode) { } /** Синхронный клиент, вызывающий postalbox.notify.market.yandex.net Реализацию интерфейса описывать не нужно.*/ interface UserNotificationApi { // нужно описать метод(ы) для отправки сообщения с кодом выдачи boolean sendNotification(Long orderId, Integer code); } #yandex Прислать задачу | Подписаться
Тбанк (стажировка🤢) #tbank Прислать задачу | Подписаться
Сбер Сделать удаление элементов из списка, начиная с 3 повторений // Input: ['A', 'B', 'A', 'B', 'A', 'B', 'C', 'C', 'D', 'C', 'C'] // Output: [A, B, A, B, C, C, D] List<Character> removeDuplicates(List<Character> elements); #sber Прислать задачу | Подписаться
райф @Service class A { @Autowired private B b; // исходный вызов приходит сюда @Transactional public void doA() { // some work with BD A try { b.doB(); } catch (Exception ex) { // just log } } } @Service class B { @Transactional public void doB() { // some work with DB if (true) { // some operation with exception throw new IllegalStateException(); } } } // Вопрос: Какие изменения окажутся в БД: // 1. A and B // 2. A // 3. B // 4. nothing
Тбанк (стажировка) /* * Дана строка s, состоящая только из латинских строчных букв. * Назовем строку хорошей, если в ней в качестве подстроки * будут встречаться как строка "tbank", так и строка "study". * * Найти минимальное количество символов нужно поменять в строке, * чтобы получившаяся строка стала хорошей. * * Входные данные: * Строка s, где 10 <= |s| <= 10^5 * Гарантировано, что строка содержит только строчные буквы латинского алфавита. * * Выходные данные: * Одно число — минимальное количество символов нужно заменить * в старой строке так, чтобы встречались как подстрока "tbank", так и "study". * * Примеры: * "tbankstudy" -> 0 (уже содержит обе подстроки) * "studtbankk" -> 5 (нужно поменять 5 символов) */ public static int solve(String s) { // TODO } #tbank Прислать задачу | Подписаться
Тбанк (стажировка) /* * Дана строка s, которая содержит только цифры от 0 до 9, * в которой не все элементы равны 0. * Нужно переставить в ней цифры таким образом, чтобы число, * которое представляет данная строка, было минимально возможным, * а также чтобы в этой строке не было ведущих нулей. * * Число содержит ведущие нули, если число не равно нулю, * но при этом в начале числа стоит цифра 0. * Так, например, числа 01, 0303 содержат ведущие нули, * тогда как 0, 30000 нет. * * Входные данные: * Строка s, где 1 <= |s| <= 9 * Гарантируется, что в строке есть элемент, отличный от 0. * * Выходные данные: * Строка — минимально возможное число без ведущих нулей. * * Примеры: * "682902" -> "202689" * "01" -> "10" */ public static String solve(String s) { // TODO } #tbank Прислать задачу | Подписаться
Uzum Описать как такое будет работать от этапа что код написан до его выполнения на процессоре. Описать как можно данный код выполнить. Что такое интерпретаторы? Какие бывают? Что такое JIT и GraalVM? public class MainClass { public static void main(String[] args) { System.out.println("Hello, World!"); } } Прислать задачу | Подписаться
Яндекс Написать без спринга и с юнитами (за час) /* Вы — backend-разработчик в финтех компании. Компания предоставляет платежные услуги и должна контролировать лимиты пользователей. Product owner просит создать систему проверки лимитов перед проведением платежей. ## Определения Платеж: - id пользователя - сумма (в рублях с копейками) - тип операции (только списание) - время операции Лимиты пользователя: - суточный лимит по сумме (за 24 часа) - максимальный размер одной операции История операций: - список совершенных платежей пользователя ## Важно Настройки лимитов пользователей и история платежей предоставляются другими компонентами системы. Вам необходимо спроектировать контракты для получения этих данных. Реализацию этих компонентов делать не нужно. ## Задача Написать систему проверки лимитов, которая: - на вход получает платеж - проверяет лимиты - возвращает результат проверки: можно ли провести операцию - если нельзя, то указывает причину (какой именно лимит будет превышен) Проведение платежа не входит в вашу задачу - другая команда займется обработкой платежей после проверки. Ваша задача - только проверка возможности проведения платежа. ## Ограничения В рамках данной задачи считаем, что все платежи одного пользователя происходят строго последовательно. Во время проверки лимита не может быть проведен платеж того же пользователя. */ class PaymentsChecker { public ??? checkPayment(??? payment) { Написать систему проверки лимитов, которая: - на вход получает платеж - проверяет лимиты - возвращает результат проверки: можно ли провести операцию - если нельзя, то указывает причину (какой именно лимит будет превышен) // TODO implement } } interface PaymentsHistoryService { // TODO any functions } interface UserLimitsService { // TODO any functions } #yandex Прислать задачу | Подписаться