Розглянемо метаточку: що шукає інтерв'юер?
Таке запитання про мамонта не шукає, щоб ви витрачали свій час на непотрібну реалізацію алгоритму типу PageRank або на те, як робити розподілену індексацію. Натомість зосередьтеся на повній картині того, що б знадобилося. Здається, ви вже знаєте всі великі твори (BigTable, PageRank, Map / Reduce). Тож питання полягає в тому, як ви насправді з'єднуєте їх?
Ось мій удар.
Фаза 1: Індексація інфраструктури (витрачайте 5 хвилин на пояснення)
Перший етап впровадження Google (або будь-якої пошукової системи) - це створення індексатора. Це частина програмного забезпечення, яке сканує корпус даних і створює результати в структурі даних, яка є більш ефективною для читання.
Для цього слід розглянути дві частини: гусеничну та індексаторну.
Завдання веб-сканера полягає в тому, щоб павук посилання на веб-сторінки і скидання їх у набір. Найважливіший крок тут - не уникати нескінченного циклу або нескінченно створеного вмісту. Розмістіть кожне з цих посилань в одному масивному текстовому файлі (поки що).
По-друге, індексатор працюватиме як частина завдання Map / Reduce. (Позначте функцію на кожному елементі введення, а потім зменшіть результати на одну "річ".) Індексатор візьме єдине веб-посилання, отримає веб-сайт та перетворить його у файл індексу. (Обговорюється далі.) Крок зменшення буде просто об'єднання всіх цих файлів індексів в єдине ціле. (Замість мільйонів вільних файлів.) Оскільки кроки індексації можна робити паралельно, ви можете обробляти цю карту / скоротити завдання в довільно великому центрі обробки даних.
Фаза 2: Особливості алгоритмів індексації (витрачайте 10 хвилин на пояснення)
Після того, як ви заявили, як будете обробляти веб-сторінки, наступна частина пояснює, як можна обчислити значущі результати. Коротка відповідь тут - «набагато більше карт / зменшень», але врахуйте, що ви можете зробити:
- Для кожного веб-сайту підраховуйте кількість вхідних посилань. (Більш сильно пов’язані сторінки повинні бути "кращими".)
- Для кожного веб-сайту подивіться, як було представлено посилання. (Посилання в <h1> або <b> мають бути важливішими, ніж поховані в <h3>.)
- Для кожного веб-сайту подивіться кількість вихідних посилань. (Ніхто не любить спамерів.)
- Для кожного веб-сайту подивіться типи вживаних слів. Наприклад, "хеш" і "стіл", ймовірно, означає, що веб-сайт пов'язаний з інформатикою. З іншого боку, "хеш" та "брауні" означало б, що сайт був дещо іншим.
На жаль, я не знаю достатньо про різні способи аналізу та обробки даних, щоб бути дуже корисними. Але загальна ідея - це масштабовані способи аналізу ваших даних .
Фаза 3: Подання результатів (витрачайте 10 хвилин на пояснення)
Заключна фаза фактично служить результатам. Сподіваємось, ви поділилися цікавою інформацією щодо аналізу даних веб-сторінок, але питання полягає в тому, як ви насправді це запитуєте? Анекдотично 10% пошукових запитів Google щодня ніколи не бачили. Це означає, що ви не можете кешувати попередні результати.
У вас не може бути єдиного "пошуку" з ваших веб-індексів, і що б ви спробували? Як би ви переглядали різні показники? (Можливо, поєднуючи результати - можливо, ключове слово "stackoverflow" виявилося високо в декількох індексах.)
Крім того, як би ви це виглядали в будь-якому випадку? Які типи підходів можна скористатися для швидкого зчитування даних з величезної кількості інформації? (Не соромтеся вказати сюди свою улюблену базу даних NoSQL та / або вивчити, про що йдеться у BigTable Google.) Навіть якщо у вас є надзвичайно точний індекс, вам потрібен спосіб швидко знайти в ньому дані. (Наприклад, знайдіть номер рейтингу для 'stackoverflow.com' всередині файлу об'ємом 200 ГБ.)
Випадкові випуски (залишилось час)
Після того, як ви покриєте «кістки» вашої пошукової системи, не соромтеся заграти дірку на будь-яку окрему тему, про яку ви особливо добре знаєте.
- Виконання веб-сайту Frontend
- Керування центром обробки даних для вашої карти / зменшення завдань
- Поліпшення пошукової системи A / B тестування
- Інтеграція попереднього обсягу пошуку / тенденцій в індексацію. (Наприклад, очікуючи, що завантаження на сервері фронтенду зросте на 9-5 і відмирає на початку AM.)
Тут, очевидно, є більше 15 хвилин матеріалу для обговорення, але, сподіваємось, цього достатньо для початку.