В настоящее время я готовлюсь к собеседованию, и это напомнило мне вопрос, который мне когда-то задавали в предыдущем интервью, что-то вроде этого:
"Вас попросили разработать какое-то программное обеспечение для непрерывного отображения 10 лучших поисковых запросов в Google. Вам предоставляется доступ к фиду, который предоставляет бесконечный поток поисковых запросов в режиме реального времени, которые в настоящее время ищутся в Google. и структуры данных, которые вы использовали бы для реализации. Вы должны разработать два варианта:
(i) Показывать 10 лучших поисковых запросов за все время (т.е. с тех пор, как вы начали читать фид).
(ii) Показывать только 10 лучших поисковых запросов за последний месяц, обновляемых почасово.
Вы можете использовать приближение, чтобы получить список из 10 лучших, но вы должны обосновать свои варианты. "
Я бомбил в этом интервью и до сих пор не знаю, как это реализовать.
Первая часть запрашивает 10 наиболее частых элементов в постоянно растущей подпоследовательности бесконечного списка. Я изучил алгоритмы выбора, но не смог найти ни одной онлайн-версии для решения этой проблемы.
Вторая часть использует конечный список, но из-за большого количества обрабатываемых данных вы не можете хранить весь месяц поисковых запросов в памяти и вычислять гистограмму каждый час.
Проблема осложняется тем фактом, что список топ-10 постоянно обновляется, поэтому почему-то вам нужно рассчитать верхнюю 10 по скользящему окну.
Любые идеи?