tgindex
З

Задачи с собеседований😎

Статистика

Всем привет! Будем сюда выкладывать реальные задачи и вопросы с собеседований @privatevoidmain - по всем вопросам Еще больше задач с собеседований на нашем основном канале - https://t.me/+SlsR25MJs_1iYTcy

Последний пост
09:32
Последнее чтение
ещё не заходили
Постов за неделю
1
Всего постов
96
Тип
открытый
Язык
русский
В каталоге с
12 авг.
Подписчики
156
0 за 5 дн.
Сутки
0
0,00%
Неделя
 
Месяц
 
Просмотров на пост
64
40 постов
Вовлечённость
41,0%
к подписчикам
Постов в день
0,1
всего 96
Упоминаний
0
каналов
Охват размещения
оценка
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 Прислать задачу | Подписаться