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

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

Прислать задачи, реклама - @privatevoidmain
Download Telegram
у нас ибшники требуют установить на макос софт, который все логирует и делает скрин экрана каждую минуту🫡, или предлагают работать через rdp. ну или можно перейти на винду

Как у вас в компании с этим?

👍- нет следящего софта
👎- есть следящий софт
🤔- есть тайм-трекер
👍129👎36🤔27😱51
Озон
interface Cache {
// Метод для обновления каша через мутацию
void bulkUpdate(Updater updater);
// Метод, который принимает индексы для чтения
long[] bulkRead(int[] indices);
}

// Интерфейс, через который пользователи каша обновляют его
interface Updater {
void updateCurrentState(long[] currentCacheState);
}

public void main() {
var cache = new SimpleCache();
cache.bulkUpdate(arr -> { arr[0] = 123; arr[1] = 456; });
var cacheValues = cache.bulkRead(new int[]{1, 2});
System.out.println(Arrays.toString(cacheValues));
}


Нужно реализовать "кэш", который хранит лонги по индексу. Размер кэша - 10 элементов.
Реализует два метода: void bulkUpdate(Updater updater) и long[] bulkRead(int[] indices).
bulkUpdate обновляет значения пачкой в текущем состоянии кэша, in-place.
bulkRead получает пачкой необходимые лонги из кэша по индексам.

Условия:
- Есть N (константа) потоков которые кэш читают.
- Есть 1 поток, который кэш обновляет.
- Читатель должен быть защищён от dirty-read. То есть, если происходит мутация A -> B, то читатель должен видеть только конечное состояние (A или B), но никогда промежуточное.
- Чтение должно быть неблокирующим.
- Запись может быть блокирующей.
- Входные данные можно считать всегда валидными (не null; индексы только от 0 до 9 включительно).


#ozon
Прислать задачу | Подписаться
🤔5
Яндекс

/**
* Постамат - автоматическая станция приёма/выдачи посылок.
* В маркете формируются заказы, и хочется добавить возможность получения через постамат.
* Запускаем MVP: небольшая аудитория пользователей, несколько постаматов в Москве.
* При заказе пользователь сможет выбрать, что хочет получить заказ в постамате.
*
* В рамках задачи нужно реализовать код для MVP решения:
* - курьер привозит заказ и пробует положить его в ячейку, указывая номер заказа. Постамат сам выбирает ячейку и возвращает в ответ. Она откроется вызывающим этот метод кодом.
* - после того, как заказ положили в ячейку, пользователю отправляется СМС c кодом получения. Заказ будет ждать вечно
* - в случае любых ошибок - курьер забирает заказ назад и попробует положить заказ в ячейку на следующий день (для MVP это ок)
* - пользователь может получить заказ по коду выдачи из СМС. При вводе кода выдачи постамат должен вывести на экран текст "ваш заказ ХХХ в ячейке YYY", ячейка откроется сама.
*
* Ограничения:
* - все ячейки одного размера, но их может быть разное количество, зависит от конкретного постамата
* - один заказ - одна коробка, она влезает в ячейку
* - ячейки каждого постамата пронумерованы
* - каждый постамат сам хранит своё состояние
*
* Для отправки сообщения пользователю надо использовать клиент UserNotificationApi.
*/
class PostalBox {
private final UserNotificationApi notificationApi;

// нужно реализовать методы хранения и выдачи заказа
}

/**
* Синхронный клиент, вызывающий postalbox.notify.market.yandex.net
* Реализацию интерфейса описывать не нужно.
*/
interface UserNotificationApi {
// нужно описать метод(ы) для отправки сообщения с кодом выдачи
// в ответ придёт код выдачи, который был отправлен пользователю
}

#yandex
Прислать задачу | Подписаться
💩15👍2
Тбанк

Программист Изосим хочет в отпуск, длительностью не меньше, чем k дней подряд. Тимлид Иннокентий не отпускает Изосима в отпуск, если в день отсутствия Изосима будет релиз.

На вход получаем k — минимальную продолжительность отпуска, на который согласен Изосим, и список дней в виде массива из чисел 0 (релиза не будет) и 1 (запланирован релиз).

Найти количество вариантов для отпуска Изосим, с учетом того, что отпуск не должен прерываться рабочими днями.

findDayoffs(2, [0,0,1,0,0]) -> 2
findDayoffs(1, [0,0,1,0]) -> 4 // Три варианта продолжительностью 1 день и один вариант 2 дня
findDayoffs(3, [0,0,1,0,0]) -> 0

#tbank
Прислать задачу | Подписаться
💩41😁1
Сбер #repeat #sql

Вывести имена клиентов, у которых на активных(status = open) счетах больше 10000
CREATE TABLE clients
(
client_id int primary key,
name varchar(100),
manager varchar(255)
);

CREATE TABLE accounts
(
account_id int primary key,
client_id int,
account_number varchar(255),
balance decimal(10, 2),
created_at date,
status varchar(10),
foreign key (client_id) references clients (client_id)
);

#sber
Прислать задачу | Подписаться
😁2
Лига цифорвой экономики

Описание задачи и код по ссылке -
online-ide.com/rmF4kxy7d8
#digitalleague | Подписаться
3
WB #sql

Создать таблицу автор(id, name, age), книга(id, title, author_id), какие есть ограничения?

+ Если нужно, таблица связей для отношения многие‑ко‑многим.
Cделать запросы на получение автора по книге, где возраст автора меньше 40. Решить через JOIN.


#wilberries
Прислать задачу | Подписаться
Тбанк

// Необходимо написать функцию, которая получает строку с абсолютным UNIX-путем и возвращает укороченную версию, удаляя все ненужное:
// Input: "/foo/../test/../foo//bar/./baz"
// Output: "/foo/bar/baz"

// Обозначения:
// .. - возврат на директорию выше
// . - текущая директория (по сути, просто мусор)
// // - просто мусор
// Вне корневой директории выйти нельзя

#tbank
Прислать задачу | Подписаться
Конец года - самое время подводить итоги. Скоро запилю серию опросов, как у вас прошел 2025 (кого сократили, кто вкатился и т.п.)

пишите в комменты, какие еще опросы запостить
👍4💩41🤔1
Please open Telegram to view this post
VIEW IN TELEGRAM
😢5🔥21
На сколько выросла ваша зарплата внутри одной компании за 2025 год?
Anonymous Poll
12%
Менял работу/устроился в 2025
25%
Не выросла
7%
меньше 20
18%
20-50
7%
50-100
1%
100-150
2%
больше 150
12%
не работаю
15%
.
😢8🔥2
На сколько снизилась ваша зарплата в 2025 году внутри одной компании?
Anonymous Poll
32%
Зарплата выросла
30%
Зарплата не изменилась
2%
до 20 т.р
2%
20-50 т.р.
1%
50-100
1%
100-150
1%
больше 150
14%
не работаю
19%
.
😁61👏1😢1
Сбер

Ревью
class CodeProcessor {

public void process(List<Code> codes) {
for (Code code : codes) {
if (CodeType.ITCP == code.getCodeType()) {
doSmthngITCP();
}
else if (CodeType.TLS == code.getCodeType()) {
doSmthngTLS();
}
else if (CodeType.OTHER == code.getCodeType()) {
doSmthngOther();
}
else {
doDefault();
}
}
}

private void doSmthngITCP() {
System.out.println("Handling ITCP");
}

private void doSmthngTLS() {
System.out.println("Handling TLS");
}

private void doSmthngOther() {
System.out.println("Handling Other");
}

private void doDefault() {
System.out.println("Handling Default Case");
}
}

enum CodeType {
ITCP, TLS, OTHER
}

class Code {
private final CodeType codeType;

public Code(CodeType codeType) {
this.codeType = codeType;
}

public CodeType getCodeType() {
return codeType;
}
}

public class CodeProcessingApp {
public static void main(String[] args) {
List<Code> codes = Arrays.asList(
new Code(CodeType.ITCP),
new Code(CodeType.TLS),
new Code(CodeType.OTHER)
);

CodeProcessor processor = new CodeProcessor();
processor.process(codes);
}
}

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

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


//Отработает ли CountDownLatch нужное количество раз?
public class Increment {
private static int counter1 = 0;
private static int counter2 = 0;
Lock lock = new ReentranLock();

public static void main(String[] args) throws InterruptedException {
int tasksCount = 100_000;
CountDownLatch latch = new CountDownLatch(tasksCount);
ExecutorService executor = Executors.newFixedThreadPool(100);

for (int i = 0; i < tasksCount; i++) {
executor.submit(() -> {
counter1++;
counter2++;
latch.countDown();
});
}

latch.await();
//сколько будет выведено?
System.out.println(counter1);
System.out.println(counter2);
System.exit(0);
}
}

#tbank #repeat
Прислать задачу | Подписаться
👍2😱1
Газпромбанк

Сделать ревью
/**
* Метод работает не всегда корректно.
* Как его можно отрефакторить или переписать, и как проверить, что ничего не сломалось?
*
* Метод возвращает индекс элемента в последовательности чисел, который соответствует дубликату.
*
* @param numbers
* @return
*
* 1,2,3,4,4,5,6
* 4
*
*/
public int findDuplicateIndex(int... numbers) {

int[] countArray = new int[nubmers.length];
for (int i = 0; i < numbers.length; i++) {
int current = numbers[i];
if (countArray[current] > 0) {
return i;
} else {
countArray[current] += 1;
}
}
throw new CustomException("Duplicate not found!");
}

#gazprombank
Прислать задачу | Подписаться
👍42