Реальные задачи с собеседований | Java
3.79K subscribers
284 photos
43 videos
508 links
Буду сюда выкладывать реальные задачи и вопросы с собеседований, без копипаста с интернета и других каналов)

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

Прислать задачи, реклама - @privatevoidmain
Download Telegram
unknown company #unknown

Небольшая контора предложила решить такую задачу на собесе

1. Метод должен принять на вход путь к локальному файлу в формате xlsx и число N
2. В файле в столбик находятся целые числа
3. Метод должен вернуть N-ное минимальное число из файла
4. Для поиска нельзя использовать библиотечные функции типа сортировки массива, нужно предложить и реализовать эффективный алгоритм (это важно)

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

Дан массив натуральных чисел, числа могут повторяться. Необходимо выбрать из них k чисел так, чтобы разность максимального и минимального из выбранных была минимальной. Вернуть эту разность.

[10,100,300,200,1000,20,30] k=3 -> 20

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

Вы — backend-разработчик в интернет-магазинеВы — backend-разработчик в интернет-магазине.
Дела идут в гору и магазин ре
😁22🤷‍♂5😱4🤔3
Яндекс #repeat (чуть изменили описание задачи, убрали название "рога и копыта") )

Вы — backend-разработчик в интернет-магазине.
Дела идут в гору и магазин решил повысить лояльность покупателей, предоставляя им персональные скидки.
К вам обратился product owner с задачей создать простую систему лояльности,
которая предоставляет процентную скидку на корзину.
Размер скидки зависит от покупателя.
Аналитики уже определили, какие скидки должны быть предоставлены покупателям.


## Определения

Корзина - список покупок покупателя.

Покупка:
- id товара
- цена
- итоговая стоимость c учетом скидки

Скидка. Для покупателя может быть задан % скидки (целое число).


## Задача
Написать часть новой системы лояльности, которая:
- на вход получает id покупателя и корзину
- вычисляет и применяет скидки
- возвращает корзину, в которой учтены скидки. Скидка учитывается в стоимости покупки

#yandex
Прислать задачу | Подписаться
5
WB #repeat(была подобная задача, но не вб)
Есть матрица n на m. 1-суша, 0-вода. Нужно сосчитать кол-во островов.
Остров - это произвольный фрагмент суши, не соединенный с другими участками суши.
Связь по диагонали - не считается. Все, что за пределами матрицы - вода

Example 1:

Input: grid = [
["1", "1", "1", "1", "0"],
["1", "1", "0", "1", "0"],
["1", "1", "0", "0", "0"],
["0", "0", "0", "0", "0"]
]

Output: 1

Example 2:

Input: grid = [
["1", "1", "0", "0", "0"],
["1", "1", "0", "0", "0"],
["0", "0", "1", "0", "0"],
["0", "0", "0", "1", "1"]
]

Output: 3

#wilberries
Прислать задачу | Подписаться
👍11
Статистика зарплат с хабра

можно посмотреть как меняются зп, выбрать разные языки и уровни (но нужно заполнить анкету и внести данные о своей зарплате)
9💩8😁2😢2👍1😱1
Газпромбанк

Написать метод для разворота списка

// node1->node2->node3 ---> node3->node2->node1
class Node{
Node left;
Node right;
int value;
}

#gazprombank
Прислать задачу | Подписаться
😢41
Озон #sql

### Есть две таблицы
- tab1
id
1
2
3

- tab2
id
1
1
2
2

Скажите количество строк в результирующей таблице при
1. inner join
2. left join
3. cross join


#ozon
Прислать задачу | Подписаться
2👏2
Озон
Дана строка s. нужно найти первый не повторяющийся символ в строке и вернуть его индекс. Если такого символа нет, вернуть -1

Пример:
input: abcbaad
output: 2


#ozon
Прислать задачу | Подписаться
Озон

Реализовать свой перечислимый тип (enum), как если бы до появления современного enum в Java 1.5.

Нужно реализовать контракт современного Java-enum:
- можно легко получать любое значение энума
- безопасное сравнение значений по ссылке (==)
- каждое значение имеет строковое имя, совпадающее с названием значения
- каждое значение имеет целочисленный идентификатор ordinal, который содержит номер значения в порядке его объявления в энуме
- можно получить список всех значений энума
- можно получить значение по его ordinal
- можно получить значение по его имени

Для примера можно взять список валют. Важно, чтобы список был потенциально расширяемым, потому что качество кода будет определять, насколько беспроблемно в будущем пройдет добавление значений в энум.

class Currency {
// TODO
}

// Currency.USD == Currency.USD true


#ozon
Прислать задачу | Подписаться
💩8🤔3
This media is not supported in your browser
VIEW IN TELEGRAM
когда знаешь, что у подписчиков есть задачи, но не можешь доказать

за 3 недели было 5 задач от 2 подписчиков🫡
😁16👍2
web tech

Сделать ревью
public class UserUpdater {
    @Autowired
    private CompanyRepository companyRepository;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RemoteUserInfoProvider remoteUserInfoProvider;

    private Logger logger = Logger.getLogger(UserUpdater.class.getName());

    public void fillUsersData() {
        try {
            companyRepository.findAll().forEach(company ->
                    updateUsersData(company.getUsers())
            );
        } catch (Exception e) {
            logger.error("Error");
        }

    }

    @Transactional
    private void updateUsersData(
            List<User> users
    ) {
        // tx.begin
        userRepository.lockUsers(users);
        users.parallelStream().forEach(user -> {
                    UserInfo userInfo = remoteUserInfoProvider.getUserInfo(user.getId());
                    user.updateData(userRepository); // update user fields
                    userRepository.save(user);
                }
        );
    }
}

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

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

👍- нет следящего софта
👎- есть следящий софт
🤔- есть тайм-трекер
👍113👎33🤔22😱4
Озон
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
Прислать задачу | Подписаться
💩13👍2