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

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

Прислать задачи, реклама - @privatevoidmain
Download Telegram
Тинькоф

/**
* 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;
}

#tbank | Подписаться
👍104
This media is not supported in your browser
VIEW IN TELEGRAM
Всех с окончанием рабочей недели)
#fridaymemes
😁21🥰32👍2🤯1
Открытые решения (#repeat)

Что будет выведено на экран?
#opensolution | Подписаться
👍4
ЧТо будет выведено?
Anonymous Quiz
16%
true
21%
false
63%
Ошибка компиляции
😱13🔥2
Астон

Получить из листа students лист books

public class Student {
private String name;
private List<Book> books;
}

List<Student> students;

List<Book> books =

#aston | Прислать задачу | Подписаться
😁8👎2😱1
ВКонтакте
// Нужно написать функцию, которая принимает на вход строку, 
// а на выходе возвращает для каждого уникального символа максимальное число его
// беспрерывных повторений.

// Input: aafbaaaaffc
// Output: a:4 b:1 f:2 c:1


class Solution {
public String solve(String input) {
}
}

#vk | Подписаться
👍5😱1
Лига цифровой экономики #repeat

Найти первый неповторяющийся элемент
int[] arr = {9, 4, 9, 9, -1, 0, 6, 7, 4, 5, -1, 0};

#digitalleague | Подписаться
👍5
IT ONE (#repeat)
public class Main {

//Найти первый неповторяющийся элемент в массиве целых чисел
public static void main(String[] args) {
int[] arr = {9, 4, 9, 6, 7, 4, 5};
int[] arr2 = {9, 4, 9, 6, 6, 4, 5};

System.out.println(nonRepeatable(arr)); //6
System.out.println(nonRepeatable(arr2)); // 5

}

#itone
Авито (#repeat)

Мы в Авито любим проводить соревнования, — недавно мы устроили чемпионат по шагам. И вот настало время подводить итоги!

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

Пример
# Пример 1
# ввод
statistics = [
[{ userId: 1, steps: 1000 }, { userId: 2, steps: 1500 }],
[{ userId: 2, steps: 1000 }]
]

# вывод
champions = { userIds: [2], steps: 2500 }

# Пример 2
statistics = [
[{ userId: 1, steps: 2000 }, { userId: 2, steps: 1500 }],
[{ userId: 2, steps: 4000 }, { userId: 1, steps: 3500 }]
]

# вывод
champions = { userIds: [1, 2], steps: 5500 }

#avito | Подписаться
👍2
Авито

Напишите функцию генерирующую все возможные правильные скобочные последовательности из n пар скобок.

#avito | Подписаться
Астон

Что будет выведено при вызове методов?

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


@Service
@RequiredArgsConstructor
@Sl4j
class ProductServiceImpl implements ProductService {
private final ProductRepository repository;
private OtherService otherService;
private Map<String, String> dictionary;

@PostConstruct
@Transactional
public void postConstruct(){
dictionary = otherService.getDictionary();
}

@Autowired
public void setOtherService(OtherService otherService) {
this.otherService = otherService;
}


/** Метод возвращает список обработанных Продуктов
*
* @param productIds
* @return
*/
@Transactional
public List<ProductProcessResult> processProducts(List<Long> productIds){
productIds.stream().map(productIds.mapToObject)
//TODO
}

@Transactional
public Product getProduct(Long id){

if(id == null){
throw new UnsupportedOperationException("Не поддерживается");
}
return repository.findById(id);
}

public ProductProcessResult process(Product product) throws IOException
if(product.getProductStatus() == PROCESSED){
throw new IOException("нельзя обрабатывать продукт в состоянии PROCESSED");
}
otherService.process(product);
product.setProductState(PROCESSED);
return product;
}
}

@Getter
@HashcodeAndEquals
public class Product {
enum ProductStatus{
NEW, PROCESSED
}

private int id;
private ProductStatus productStatus;
private String name;
private Double price;
private List<String> tags;

Product(int id, ProductStatus productStatus, String name, Double price, List<String> tags){
this.id = id;
this.productStatus = productStatus;
this.name = name;
this.price = price;
this.tags = tags;
}

}

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

Есть две таблицы счета и операции по счетам
account(account_id, create_dt, client_id, status, balance)
transaction (transaction_id, create_dt, status, amount, account_id)
Найти все счета по которым не было операций с первого января 2025 года

#rshb | Прислать задачу | Подписаться
Открытые решения (вроде #repeat)

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

public class Predicate {
public static void main(String... args) {
int i = 5;
i = i++ + ++i;
System.out.println(i);
}
}

#opensolution | Подписаться
👍3🥰1
Сбер

public class Test {
public static void main(String[] args) {
int[] num = {1, 4, 5, 88, 100};
int res = calculate(num);
System.out.println("AVG:" + res);
}

public static int calculate(int[] num) {
int sum = 0;
for (int i = 0; i <= num.length; i++) {
sum += num[i];
}
return sum;
}
}


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

1.
// Дана строка, состоящая из букв 'X', 'Y' и 'O'.
// Необходимо найти кратчайшее расстояние между буквами 'X' и 'Y', либо вывести 0, если 'X' либо 'Y' отсутствуют.

// Примеры:
// "YY" -> 0
// "XX" -> 0
// "XY" -> 1
// "YOX" -> 2
// "OOOXOOYOXO" -> 2
// "OOOXXOY"-> 2

#yandex | Прислать задачу | Подписаться
👍5
Яндекс
2.
// Например, даны два массива
// [1, 2, 3, 2, 0]

// [5, 1, 2, 7, 3, 2]

// Надо вернуть [1, 2, 2, 3]
// (порядок неважен)

#yandex | Прислать задачу | Подписаться
🤷‍♂7👍3