Т-Банк · июль 2024

Тех собес на middle-senior Java Разработчик в Т-Банк

middle-senior Тех собес 1 задача

Условие

API поиска авторов и их книг по имени автора. При каждом поисковом запросе обновляется статистика по частоте использования поисковой строки (обновляется раз в сутки другой системой). При обнаружении популярного запроса (у которого находится много авторов), отправляется алерт. Алерт должен отправляться не более 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(author -> new AuthorDto(author.getName())) 
                      .collect(Collectors.toList()); 
    }
}
 
@Component 
public class AuthorSearchService { 
 
    @Autowired 
    private AuthorRepository authorRepository; 
 
    @Autowired 
    private StatisticsRepository statisticsRepository; 
 
    private AlertRestClient arc = new AlertRestClient(); 
 
    @Transactional 
    public List<Author> search(String query) { 
        List<Author> authors = authorRepository.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; 
    }
}

1. Задача: Проанализируйте представленный код и предложите улучшения.

Дополнительно

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