Сиань Shangxue Тан Упражнение 09,10 | Java Программирование написаны вопросы интервью

1. Учитывая, б два файла, каждый из которых хранит 5000000000 URL, URL приходилось по 64 байт каждый, предел памяти 4G, позволяют выяснить, общий URL - адрес файла б?
Схема 1: безопасность может быть оценен размер каждого файла 50G × 64 = 320G, гораздо больше , чем предел памяти 4G. Невозможно быть полностью загружена в память обработки. Рассмотрим способы и властвуй.
Траверса файл а, получается для каждого URL, а затем на основе полученных значений сохраняются в URL небольшого файла 1000 (далее) в. Так что каждый маленький файл примерно 300M.
Траверса файл Ь, и с таким же образом , как URL 1000 хранятся в соответствующих небольших файлов (далее). После этой обработки, все же URL возможны в соответствующем небольших файлах (), маленькие файлы не соответствуют не имеют один и тот же URL. Затем вычисляется так же, пока 1000 маленький файл URL может быть.
Каждый из файлов меньшего размера при оценке в том же URL, который может храниться в небольшой файл URL в hash_set. Тогда для каждого URL - адреса еще маленькие файлы, чтобы увидеть , если он находится в только что построенном hash_set, если да, то общий URL, сохранить в файл внутри него.
Сценарий 2: Если определенная частота ошибок разрешена, вы можете использовать фильтр Блума, 4G память , вероятно , может представлять 34 миллиардов бит. Будет ли один из файлов в URL , используя Bloom фильтр 34 млрд отображенный в этот бит, а затем один за другим , чтобы прочитать URL - адрес другой файл, проверьте , будет ли фильтр Блума, если это так, то URL должен быть общий URL (обратите внимание , что будут какие - то частота ошибок).
2. Есть 10 файлов, каждый файл 1G, каждая строка каждого файла хранится в запросе пользователя, запрос может быть повторен для каждого файла. Мы просим вас отсортировать по частоте запроса.
Схема 1:
последовательно считывает файл 10, в соответствии с хэш (запроса) 10% от результата запроса записывается в другой файл 10 (называемый) в. Такой вновь генерируется для каждого размера файла также об. 1G (предполагая , что случайный хэш - функцию).
Глядя на 2G память о машине, для того , чтобы использовать hash_map (запрос, query_count) для подсчета количества раз возникают каждый запрос. Используйте Быстрый / ворох / сортировки слияния сортировки по числу вхождений. Запрос и сортирует соответствующий query_cout вывод в файл. Это привело к 10 отсортированного файла (обозначаемое).
Эти 10 файлов сортировка слияние (сочетание внешней сортировки и сортировки).
Сценарий 2:
общее количество общего запроса ограничено, но число повторений более просто, возможно для всех запроса, одноразовый может быть добавлен к памяти. Таким образом, мы можем использовать TRIE / hash_map другой прямой , чтобы подсчитать количество раз появляется каждый запрос, а затем нажмите число вхождений сделать быстрый / кучи / сортировка слиянием на это.
Схема 3:
Похожа на схему 1, но хэш в готовом, разделенном на множество файлов, множество файлов, подлежащая обработке, распределенная архитектуру для процесса (например, MapReduce), и , наконец , сливается.
3. 1G имеет размер документа , в котором каждая строка представляет собой слово, размер слова составляет не более 16 байт, размер памяти предел составляет 1М. Возвращает максимальную частоту 100 слов.
Последовательная чтение файла, для каждого слова х, принять, а затем внести небольшие файлы 5000 (далее) в соответствии с этим значением. Так что каждый файл, вероятно , около 200к. Если файл превышает 1M любой размер, мы можем продолжать делить вниз таким же образом , чтобы знать размер разложения мелких файлов не более 1М. Для каждого маленького файла, и соответствующей статистической частоты слова каждого документа , который появляется в (The Trie может быть использовано / hash_map и т.д.), а частота максимум 100 слов (содержащих 100 могут быть самые маленькие узлы стека) появляется принято, и до 100 слов и соответствующей частоты , хранящейся в файле, так что они получают 5000 документа. Следующий шаг будет поставить 5000 процесс файла слияния (аналог сортировки слияния) из.
4. Массивные данные журнала , чтобы извлечь большую часть дня , чтобы посетить ряд Baidu , что IP.
IP - адрес имеет максимум 2 ^ 32 = 4G необязательные значения случаев, он не полностью загружен в обработку памяти;
рассмотреть вопрос об использовании разрыва и побеждают идею, согласно% 1024 значению Hash IP-адреса (IP), журналы массовой IP хранятся в 1024 небольшой файл , так что каждый маленький файл , содержащий максимум 4 МБ IP - адреса;
объяснить , почему здесь с помощью хэш - функция% 1024 значения (IP), если нет, то прямая классификацию, то, может такую ситуацию, есть IP присутствуют в каждом маленьком файле, и этот IP не обязательно самое большое количество в небольшой файл, то конечный результат может быть проблематично выбрать, так что здесь с 1024% значение хеш - функции с (IP), так путем вычисления значения хэш - функции IP, IP, безусловно , поставить тот же файл, конечно, другое значение IP Hash может быть таким же, есть небольшой файл.
Для каждого маленьких файлов, вы можете создать IP-ключ, количество вхождений для значения хэш - карты, одновременно зафиксировали наибольшее количество IP - адресов , которые в настоящее время появляются,
вы можете получить количество вхождений до 1024 небольших файлов, IP, а затем на основе обычный алгоритм сортировки , полученный в целом появляется наибольшее количество IP.

рекомендация

отblog.51cto.com/14512197/2437139