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

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

Прислать задачи, реклама - @privatevoidmain
Download Telegram
Сбер
@Data
@AllArgsConstructor
public static class Person {

public Integer id;
public String firstName;
public String secondName;
public String lastName;
}




@Test
public void test() {
List<Person> persons = new ArrayList<>();
persons.add(new Person(1,"Ivan","Vasya","Petr"));
persons.add(new Person(2,"Ivan","Vasya","Petr"));
persons.add(new Person(3,"Ivan","Vasya","Petr"));
persons.add(new Person(4,"Ivan","Gupta","Ivan"));
persons.add(new Person(5,"Petr","Rama","Igor"));

Collection<Person> uniquePersons = unique(persons);
assert uniquePersons.size() == 3;
}

//Unique collection by combination first-second-last names
public static Collection<Person> unique(List<Person> persons){
//Реализовать
}

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

public interface UserNotificationApi {
void sendCode(String orderId, String code);
}

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

public ??? placeOrder(??? orderId) {
}
public ??? getOrder(??? receiveCode) {
}
}

#yandex
Прислать задачу
| Подписаться
👍15❤1
Яндекс на стажера

public interface WeightedRandomPicker {
void add(int value, int weight);
int getRandom();
}
Реализовать структуру, которая добавляет элемент и его вес, и с определенной вероятностью возвращает его.
То есть для элементов
(1,2,3,4) с весом (1,2,3,4)
getRandom() должен вернуть 1 с вероятностью 1/10, 2 с вероятностью 1/5, 3 с вероятностью 3/10 и 4 с вероятностью 2/5

#yandex
Прислать задачу
| Подписаться
💩6😁2👍1
x5

4) UserService рефакторинг
@Service
public class UserService {
    // Стандартный Spring репозиторий
    private final UserRepository repo;
   
   
    // Сервис email оповещений. Для отправки письма делает запрос в сторонний сервис.
    private final EmailNotificationService service;
   
   
    // Сервис аудита, важно чтобы он не влиял на основной flow даже если не смог сохранить информацию
    private final AuditService auditService;
 
    @Transactional
    public List<User> getAll() {
        return repo.findAll();
    }
 
    @Transactional
    public List<User> saveAll(List<User> users) {
        repo.saveAll(users);
        try {
            users.forEach(user -> service.notify(user));
        } catch (Exception ex) {
            System.out.println("Error sending email");
        }
 
        logCreateOperation(saved);
    }
 
    @Transactional()
    private void logCreateOperation(List<User> users) {
        auditService.log("Users created: " + users.size());
    }
}

#x5tech
Прислать задачу | Подписаться
👍4😁3
x5
3) Пространственная, временная сложность
var matrix[n][n]
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < 100_000_000; k++) {
            sout(matrix[i][j])
        }
    }
}

#x5tech
Прислать задачу | Подписаться
🤯3
x5

2) class User {
  String name;
  int age;
} // Из List<User> вернуть имена пользователей, которые страше 16 лет, и их имена начинаются на Я

#x5tech
Прислать задачу | Подписаться
😁15👍1
Яндекс

/*
Реализуйте throttler для ограничения частоты событий от IoT устройств.
Датчики отправляют события, но нужно контролировать их частоту для экономии bandwidth.

Требования:
- Использование sliding window алгоритма
- Потокобезопасность - события приходят из разных потоков
- Очистка устаревших записей
*/

import java.time.*;
import java.util.*;
import java.util.concurrent.*;

class EventThrottler {
private final int maxEventsByDevice;
private final Duration windowDuration;

public EventThrottler(int maxEventsByDevice, Duration windowDuration) {
this.maxEventsByDevice = maxEventsByDevice;
this.windowDuration = windowDuration;
}

/**
* Проверяет, можно ли принять eventCount событий от устройства.
* Каждое устройство имеет свой независимый лимит.
*
* @param deviceId идентификатор устройства
* @param eventCount количество событий для добавления
* @return true если события приняты, false если превышен лимит
*/
public boolean shouldAcceptEvent(String deviceId, int eventCount) {
// TODO: реализуйте sliding window алгоритм

return false;
}
}

@Test
public void testBasicEventThrottling() throws InterruptedException {
EventThrottler throttler = new EventThrottler(3, Duration.ofSeconds(1));

String deviceId = "sensor-temp-01";

assertTrue(throttler.shouldAcceptEvent(deviceId, 1));
assertTrue(throttler.shouldAcceptEvent(deviceId, 2));

// 4-е событие должно быть отклонено
assertFalse(throttler.shouldAcceptEvent(deviceId, 1));

Thread.sleep(1100);
assertTrue(throttler.shouldAcceptEvent(deviceId, 1));
}

#yandex
Прислать задачу
| Подписаться
🤯8💩1
Яндекс (стажировка)
Дана строка.
Найти количество её непрерывных подстрок,
которые содержат все уникальные символы из этой строки хотя бы по одному разу.

#yandex
Прислать задачу
| Подписаться
👍1
Яндекс🔥
/**
* Пересечение двух отсортированных массивов.
*
* Даны два отсортированных массива целых чисел.
* Напишите функцию, которая вернёт новый отсортированный список
* с пересечением элементов.
*
* Input: a=[2, 3, 3, 8, 11, 20], b=[5, 9, 9, 11, 13, 20, 24]
* Output: [11, 20]
*/


#yandex
Прислать задачу
| Подписаться
🔥9🤷‍♂6
Всех с окончанием рабочей недели
#fridaymemes
🤔30😁18💩3❤1🔥1😢1
Сбер

// Что выведет данный код? Почему?
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 20;
calculate(a, b);

System.out.println("a = " + a + ", b = " + b);
}

public static void calculate(int a, int b) {
a = a + b;
}
}

#sber
Прислать задачу | Подписаться
😁11🤔1
Всех с окончанием рабочей недели (теперь точно)
#fridaymemes от подписчика
😁36😢2
Сбер
//Напишите метод для подсчета количества конкретных слов в строке (уникальное слово - количество повторений).
Пример строки:
One of the most famous statues in the world stands on an island in New York. This statue is the Statue of Liberty - a woman holding a torch. Visitors can go inside the statue. The statue is so large that as many as twelve people can stand inside the torch.

#sber
Прислать задачу | Подписаться
#itone
CREATE TABLE person (
id uuid PRIMARY KEY,
age int2 NOT NULL,
town text NOT NULL,
sex CHAR(1) NOT NULL CHECK(sex IN ('M','F')),
lastName text NOT NULL,
firstName varchar(20) NOT NULL,
middleName text
);

-- 1) Как добавить друзей для person (друзья - та же сущность person)?

-- 2) Самый популярный поисковый запрос

select * from person
where
town = :town
and age between (:min, :max)
and sex = :sex;

-- Запрос сильно тормозит. Как понять причину?

Прислать задачу | Подписаться
👍1
Вот и мне прилетела верификация от антропика😏

У кого то получилось разрулить и избежать бана?
😢10👏1
Альфабанк
public class StreamQuiz { public static void main(String[] args) { List<Integer> numbers = List.of(4, 3, 7, 4, 2);
Set<Integer> result = numbers.stream()
.peek(n -> System.out.println("Peek 1: " + n))
.filter(n -> n >= 3)
.peek(n -> System.out.println("Peek 2: " + n))
.sorted()
.peek(n -> System.out.println("Peek 3: " + n))
.collect(Collectors.toSet());

System.out.println("Result: " + result);
}
}

#alfabank
Прислать задачу | Подписаться
❤2