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

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

Прислать задачи, реклама - @privatevoidmain
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Рассказывайте, как прошла первая неделя после майских)
😁6
Домклик

Что будет выведено на экран, если в 7 строке произойдет исключение?

#domclick | Прислать задачу | Подписаться
👍10😁1
авито

- Есть функция aiWeatherForecast, которая через нейронную сеть вычисляет температуру за ~1 секунду.
- Есть highload ручка /weather с нагрузкой 10k RPS. Ручка обращается к методу getWeatherForecast для получения прогноза.

#avito| Прислать задачу | Подписаться
👍4
Райффанзенбанк

/*
Дана строка (возможно, пустая), состоящая из букв A-Z:

AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB

Нужно написать функцию RLE, которая на выходе даст строку вида:

A4B3C2XYZD4E3F3A6B28

И сгенерирует ошибку, если на вход пришла невалидная строка.

Пояснения:

Если символ встречается 1 раз, он остается без изменений;

Если символ повторяется более 1 раза, к нему добавляется количество повторений.
*/

#repeat
#raif | Прислать задачу | Подписаться
👍4
Сбер (#qa auto)

Написать функцию, которая выводит на экране текст счастливый билет, или не счастливый. входное число состоит из 6 цифр, билетик считается счастливым если первые 3 цифры в сумме равны сумме последним трем цифрам.

#sber | Прислать задачу | Подписаться
👍8
Астон

Что будет выведено на экран?

#aston | Прислать задачу | Подписаться
6👎1🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
За 5 минут до дейлика😂

Всех с окончанием рабочей недели)
#fridaymemes
😁275
авито (не 100%)

Что будет выведено?

#aston | Прислать задачу | Подписаться
😁15👍51
Сбер

Что будет при вызове метода it(), если произойдет ошибка
1. в insert()?
2. в update()?

#sber | Прислать задачу | Подписаться
👍7
СБЕР

Реализовать паттерн cache.
Если элементов > 1000, то удаляется самый старый элемент


#sber | Прислать задачу | Подписаться
👍1
Авито (#repeat)

На Авито размещено множество товаров, каждый из которых представлен числом.
У каждого покупателя есть потребность в товаре, также выраженная числом.
Если точного товара нет, покупатель выбирает ближайший по значению товар, что вызывает неудовлетворённость, равную разнице между его потребностью и купленным товаром.
Количество каждого товара не ограничено, и один товар могут купить несколько покупателей.
Рассчитайте суммарную неудовлетворённость всех покупателей.

Нужно написать функцию, которая примет на вход два массива: массив товаров и массив потребностей покупателей, вычислит сумму неудовлетворённостей всех покупателей и вернет результат в виде числа.

Пример
# Пример
# ввод
goods = [8, 3, 5]
buyerNeeds = [5, 6]
# вывод
res = 1 # первый покупатель покупает товар 5 и его неудовлетворённость = 0, второй также покупает товар 5 и его неудовлетворённость = 6-5 = 1

#avito | Подписаться
👍1
диип200

* Задача 1.
* Есть массив слов в котором может быть любое число элементов разной длины.
* Необходимо этот массив преобразовать в массив строк всех возможных комбинаций букв из этих слов пример:
*
* Пример входящего массива ["on", "job", "lake"].
* Результат выходящего:
* [
* "ojl",
* "oja",
* "ojk",
* "oje",
* "ool",
* "ooa",
* "ook",
* "ooe",
* "obl",
* "oba",
* "obk",
* "obe",
* "njl",
* "nja",
* "njk",
* "nje",
* ....
* ]
*
* function run(words: string[]): string[] {
* // напишите свой код
* }

Прислать задачу | Подписаться
диип200
Задача 2

Есть 3 сервиса.

Реклама баннерная (видео баннер, изображение, текстовый)
Курсы валют (код валюты, название, покупка, продажа)
Меню услуг (название, описание, изображение)

Есть клиентские приложения:

ЖК панель, которая отображает рекламу и курсы. Обращается к сервисам 1 и 2.
Терминал (киоск), который отображает меню услуг и выдает талончики. Может отображать курсы и рекламу. Обращается к сервису 1, 2, 3.

Необходимо:

Реализовать API для клиентских приложений.
Клиентские приложения (ЖК, Киоск) не должны отображать изменения, без подтверждения человека. Например: Мы изменили в сервисе рекламу, загрузили новую картинку или изменили существующую, она должна пройти модерацию человеком сначала, после подтверждения на ЖК будут видны изменения. Второй пример: Киоск отображает меню услуг, в адмике изменили название услуги, это название должна пройти модерацию, только после этого Киоск ее получит. До подтверждения, Киоск отображает старое название.

Прислать задачу | Подписаться
👍21
Rightline (аутстафф в тбанк)

Сделать код-ревью
/**
* API поиска авторов и их книг по имени автора (полное ФИО или часть имени в любом регистре).
* Также компонент при каждом поиске обновляет статистику по частоте использования поисковой строки (сбрасывается раз в сутки другой системой)
* При обнаружении популярного запроса (> 1000 запросов в сутки), по которому находится много авторов, отправляется алерт.
* Алерт должен отправляться не более 1 раза за сутки для каждого запроса
* Все классы на самом деле находятся в разных файлах, однако здесь представлены в одном месте для удобства
*/
@RestController
public class AuthorController {
@Autowired
private AuthorSearchService service;

@GetMapping("/authors")
public List<AuthorDto> readAllAuthors(@RequestParam String query) {
List<Author> authors = service.search(query);
return authors.stream().map(el -> {
return new Mapper().map(el);
}).collect(Collectors.toList());
}
}

@Component
public class AuthorSearchService {

@Autowired
private AuthorsRepository authorsRepository;
@Autowired
private StatisticsRepository statisticsRepository;

private AlertRestClient arc = new AlertRestClient();

// В query может быть как полностью ФИО, так и часть имени, например "Вадим Панов" или "панов"
@Transactional
public List<Author> search(String query) {
List<Author> authors = authorsRepository.findByNameContainingIgnoreCase(query);
Statistics s = statisticsRepository.findById(query).orElse(null);
if (s == null) s = new Statistics(query);
s.setNumbers(s.getNumbers() + 1);
statisticsRepository.save(s);
if (s.getNumbers() > 1000 && authors.size() > 1000) {
System.out.println("too popular search with too much data, sending an alert...");
arc.send(query, s.getNumbers(), authors.size());
}

return authors;
}
}


@Entity
@Data
public class Author {
@Id
@GeneratedValue
private Long id;

private String name;

@OneToMany(mappedBy = "author")
private List<Book> books;

public Author(String name) {
this.name = name;
}
}

@Entity
@Data
public class Statistics {
@Id
private String query;
private int numbers;

public Statistics(String query) {
this.query = query;
}
}


@Data
public class AuthorDto {
private Long id;
private String name;
private List<Book> books;
}


@Entity
@Data
public class Book {
private Long id;
private String name;
}

Прислать задачу | Подписаться
👍1
Яндекс
/*
Написать функцию, которая принимает 2 строки (текст и алфавит)
и возвращает самую короткую подстроку этого текста, в которой есть каждый символ из алфавита хотя бы по разу (но возможно и другие символы тоже).
Если подстрок подходящей длины несколько, нужно вернуть ту, которая находится ближе к началу текста.

Про вторую строку гарантируется, что она непустая и содержит только уникальные символы.

Примеры:
searchPangram("abacaba", "bc") == "bac" <- выбираем левую из двух одинаковой длины 'bac' и 'cab'
searchPangram("bacb", "bc") == "cb"
abbc ac => abbc
searchPangram("abacaba", "bcd") == ""
*/

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