Задачи с собеседований😎
156 subscribers
169 photos
16 videos
2 files
384 links
Всем привет!

Будем сюда выкладывать реальные задачи и вопросы с собеседований

@privatevoidmain - по всем вопросам

Еще больше задач с собеседований на нашем основном канале - https://t.me/+SlsR25MJs_1iYTcy
Download Telegram
Ozon #sql
-- // user
-- id | firstname | lastname | birth
-- 1 | Ivan | Petrov | 1996-05-01
-- 2 | Anna | Petrova | 1999-06-01
-- 3 | Anna | Petrova | 1990-10-02

-- // purchase
-- sku | price | user_id | date
-- 1 | 5500 | 1 | 2021-02-15
-- 1 | 5700 | 1 | 2021-01-15
-- 2 | 4000 | 1 | 2021-02-14
-- 3 | 8000 | 2 | 2021-03-01
-- 4 | 400 | 2 | 2021-03-02

-- // ban_list
-- user_id | date_from
-- 1 | 2021-03-08

-- Нужно вывести:

-- 1. Вывести уникальные комбинации пользователя и id товара
-- для всех покупок, совершенных пользователями до того,
-- как их забанили.
-- Отсортировать сначала по имени пользователя, потом по SKU

-- TODO

-- 2. Найти пользователей, которые совершили покупок
-- на сумму больше 5000р. Вывести их имена в формате:
-- id пользователя | имя | фамилия | сумма покупок

-- TODO

#ozon
Прислать задачу | Подписаться
CallbackSchedulerTest1.java
1.1 KB
Яндекс Маркет

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

Сразу спойлер - интервьюер видел идеальное решение через PriorityQueue, но ConcurrentHashMap вроде тоже зашел.

#yandex
Прислать задачу | Подписаться
Появились разговоры, что хедхантер будет бороться с накруткой опыта через Госуслуги и подтверждение по ЭТК, а компании все чаще требуют подтвердить опыт перед собеседованием или наймом. Поэтому провел опрос у себя в канале среди работающих Java-разработчиков.

Получилось:
— ~82% работают по ТК
— ~18% - ГПХ / ИП / самозанятость / неофициально

1. У кого ТК, бояться нечего, им даже станет легче, если хх будет отсеивать кандидатов с неподтвержденным опытом.
2. Тем, кто оформлен по гпх, ип, самозанятость, неофициально, будет сложнее доказать свой опыт. Рекомендую заранее сохранять договоры, акты и т.д.
3. Кто вкатывается🫡
История "нарисую 3 года и прокатит" постепенно умирает.


Раньше "умеешь — берём"
Сейчас "докажи, что умеешь и где работал"
С 2024 года веду этот канал.

И всё это время… ни разу нормально не показал свой личный блог. Хотя именно с него всё начиналось.

Подписывайтесь, ставьте лайки, жмите на колокольчик - https://t.me/+MQKYKZ5jr4owNzU6
ВТБ (2025)

/**
* Что будет выведено в консоль?
*/
public static void main(String[] args) {
Map<Person, String> map = new HashMap<>();
Person person1 = new Person("Alice");
Person person2 = new Person("Alice");

map.put(person1, "Person 1");
System.out.println(map.get(person2));

}

#vtb
Прислать задачу | Подписаться
ВТБ (2025)

/**
* Необходимо получить список пользователей,
* которые состоят в группе, начинающейся на "Х"
*/

class SomeConsumer {
public List<User> consume(Stream<User> usersStream) {
//TODO
return usersStream.
}
}

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

}

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

#vtb
Прислать задачу | Подписаться
ВТБ (2025)

/**
* Оцени данный код на предмет работоспособности и потенциальных проблем
*/
@Service
@Transactional
public class UserService {

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUser(User user) {
userRepository.save(user);
sendWelcomeEmail(user);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
private void sendWelcomeEmail(User user) {
sendwelcome(user.getId());
}
}

#vtb
Прислать задачу | Подписаться
Сбер стахование

Что будет выведено?😏
public class Main {
public static void main(String[] args) throws Exception {
throwException();
}

static void throwException() throws Exception {
try {
throw new IOException();
} catch (IOException ex) {
System.err.println("IOException");
throw new IOException();
} catch (Exception ex) {
System.err.println("Exception");
throw new IOException();
} finally {
System.err.println("Finally");
throw new Exception();
}
}
}

#sber
Прислать задачу | Подписаться
Сбер стахование

//что будет выведено и почему?

public class Main {
public static void main(String[] args) throws Exception {
First first = new Second();
first.useTest();

Second second = new Second();
second.useTest();
second.callTest();
}
}

class First {
protected void test() {
System.out.println("First");
}

public void useTest() {
test();
}
}

class Second extends First {
@Override
protected void test() {
System.out.println("Second");
}

public void callTest() {
super.test();
}
}


#sber
Прислать задачу | Подписаться
Сбер стахование
//что будет выведено и почему?

public class Main {
public static void main(String[] args) throws Exception {
A a = new A();
List<String> list = new ArrayList<>();
a.f(list);
}
}

class A {
void f(Iterable<String> l) {
System.out.println("A");
}

void f(Collection<String> l) {
System.out.println("B");
}

void f(ArrayList<String> l) {
System.out.println("C");
}

void f(LinkedList<String> l) {
System.out.println("D");
}
}

#sber
Прислать задачу | Подписаться
какой-то банк (мб альфа или райф) #unknown

Есть таблица Person(name, age).
1. Написать запрос, который выведет имена и максимальный возраст для каждого имени
2. SQL вывести дубликаты по name+age
3.Реализовать метод List<Person> getTopAgeForName(List<Person> persons), который повторяет логику из первой задачи

Прислать задачу | Подписаться
Сбер страхование
//что не так в таком api?
//что если мы захотим расширить профиль, добавляя еще какой-то тип документа, как будем это делать?

GET https://hr-test.ru/api/user-profile/8001

Auth Type: Bearer Token

Response
{
"error": null,
"data": {
"id": 8001,
"FIO": "John Doe",
"seriesNumber": 4352 479893
}
}

#sber
Прислать задачу | Подписаться
Сбер страхование

Какая сложность у этого цикла?
for (int i = 0; i < n; ++i) {
for (int j = 1; j < n; j *= 2) {
//something
}
}

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

Написать без спринга и с юнитами (за час)
/*
Вы — backend-разработчик в финтех компании.
Компания предоставляет платежные услуги и должна контролировать лимиты пользователей.
Product owner просит создать систему проверки лимитов перед проведением платежей.

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

Платеж:
- id пользователя
- сумма (в рублях с копейками)
- тип операции (только списание)
- время операции

Лимиты пользователя:
- суточный лимит по сумме (за 24 часа)
- максимальный размер одной операции

История операций:
- список совершенных платежей пользователя

## Важно
Настройки лимитов пользователей и история платежей предоставляются другими компонентами системы.
Вам необходимо спроектировать контракты для получения этих данных.
Реализацию этих компонентов делать не нужно.

## Задача
Написать систему проверки лимитов, которая:
- на вход получает платеж
- проверяет лимиты
- возвращает результат проверки: можно ли провести операцию
- если нельзя, то указывает причину (какой именно лимит будет превышен)

Проведение платежа не входит в вашу задачу - другая команда займется обработкой платежей после проверки.
Ваша задача - только проверка возможности проведения платежа.

## Ограничения
В рамках данной задачи считаем, что все платежи одного пользователя происходят строго последовательно.
Во время проверки лимита не может быть проведен платеж того же пользователя.
*/
class PaymentsChecker {


public ??? checkPayment(??? payment) {
Написать систему проверки лимитов, которая:
- на вход получает платеж
- проверяет лимиты
- возвращает результат проверки: можно ли провести операцию
- если нельзя, то указывает причину (какой именно лимит будет превышен)
// TODO implement
}
}

interface PaymentsHistoryService {

// TODO any functions
}

interface UserLimitsService {

// TODO any functions
}

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

Описать как такое будет работать от этапа что код написан до его выполнения на процессоре. Описать как можно данный код выполнить.
Что такое интерпретаторы? Какие бывают? Что такое JIT и GraalVM?
public class MainClass {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

Прислать задачу | Подписаться
Тбанк (стажировка)

/*
* Дана строка 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
Прислать задачу | Подписаться