Andaikata Anda ditanya dalam sebuah wawancara "Bagaimana Anda akan menerapkan Pencarian Google?" Bagaimana Anda menjawab pertanyaan seperti itu? Mungkin ada sumber daya di luar sana yang menjelaskan bagaimana beberapa bagian di Google diimplementasikan (BigTable, MapReduce, PageRank, ...), tetapi itu tidak sepenuhnya cocok dalam sebuah wawancara.
Arsitektur keseluruhan apa yang akan Anda gunakan, dan bagaimana Anda akan menjelaskannya dalam rentang waktu 15-30 menit?
Saya akan mulai dengan menjelaskan bagaimana membangun mesin pencari yang menangani ~ 100rb dokumen, kemudian memperluas ini melalui sharding ke sekitar 50 juta dokumen, kemudian mungkin lompatan arsitektur / teknis.
Ini adalah pemandangan 20.000 kaki. Yang saya suka adalah detailnya - bagaimana Anda akan menjawabnya dalam sebuah wawancara. Struktur data mana yang akan Anda gunakan. Layanan / mesin apa yang tersusun dari arsitektur Anda. Akan seperti apa latensi kueri? Bagaimana dengan gangguan otak? Dll ...
sumber
Jawaban:
Pertimbangkan meta-point: apa yang dicari pewawancara?
Sebuah pertanyaan besar seperti itu tidak mencari Anda untuk membuang-buang waktu Anda dalam seluk beluk menerapkan algoritma tipe PageRank atau bagaimana melakukan pengindeksan terdistribusi. Alih-alih, fokuslah pada gambaran lengkap tentang apa yang akan diambil. Sepertinya Anda sudah tahu semua bagian besar (BigTable, PageRank, Peta / Kurangi). Jadi pertanyaannya adalah, bagaimana Anda benar-benar menyatukan mereka?
Ini tikaman saya.
Fase 1: Infrastruktur Pengindeksan (menghabiskan 5 menit untuk menjelaskan)
Fase pertama penerapan Google (atau mesin pencari) adalah membuat pengindeks. Ini adalah perangkat lunak yang merayapi kumpulan data dan menghasilkan hasilnya dalam struktur data yang lebih efisien untuk melakukan pembacaan.
Untuk menerapkan ini, pertimbangkan dua bagian: crawler dan pengindeks.
Tugas crawler web adalah untuk spider tautan halaman web dan membuangnya ke dalam satu set. Langkah paling penting di sini adalah untuk menghindari terjebak dalam infinite loop atau pada konten yang dihasilkan tanpa batas. Tempatkan masing-masing tautan ini dalam satu file teks besar (untuk saat ini).
Kedua, pengindeks akan berjalan sebagai bagian dari pekerjaan Map / Reduce. (Memetakan fungsi ke setiap item dalam input, dan kemudian Mengurangi hasilnya menjadi satu 'hal'.) Pengindeks akan mengambil satu tautan web, mengambil situs web, dan mengubahnya menjadi file indeks. (Diskusikan berikutnya.) Langkah reduksi hanya akan menggabungkan semua file indeks ini menjadi satu unit. (Daripada jutaan file yang lepas.) Karena langkah-langkah pengindeksan dapat dilakukan secara paralel, Anda dapat mengolah pekerjaan Peta / Perkecil ini di pusat data yang besar dan sewenang-wenang.
Fase 2: Spesifikasi Algoritma Pengindeksan (luangkan 10 menit untuk menjelaskan)
Setelah Anda menyatakan bagaimana Anda akan memproses halaman web, bagian selanjutnya adalah menjelaskan bagaimana Anda dapat menghitung hasil yang bermakna. Jawaban singkat di sini adalah 'peta lebih banyak / Mengurangi', tetapi pertimbangkan hal-hal yang dapat Anda lakukan:
Sayangnya saya tidak cukup tahu tentang macam-macam cara untuk menganalisis dan memproses data menjadi super bermanfaat. Tetapi ide umum adalah cara yang dapat diskalakan untuk menganalisis data Anda .
Fase 3: Melayani Hasil (luangkan 10 menit untuk menjelaskan)
Fase akhir sebenarnya melayani hasil. Semoga Anda telah membagikan beberapa wawasan menarik tentang cara menganalisis data halaman web, tetapi pertanyaannya adalah bagaimana Anda sebenarnya menanyakannya? Secara anekdot, 10% permintaan pencarian Google setiap hari belum pernah terlihat sebelumnya. Ini berarti Anda tidak dapat menyimpan hasil sebelumnya.
Anda tidak dapat memiliki satu 'pencarian' dari indeks web Anda, jadi mana yang akan Anda coba? Bagaimana Anda melihat indeks yang berbeda? (Mungkin menggabungkan hasil - mungkin kata kunci 'stackoverflow' muncul sangat banyak dalam beberapa indeks.)
Juga, bagaimana Anda melihatnya? Apa jenis pendekatan yang dapat Anda gunakan untuk membaca data dari sejumlah besar informasi dengan cepat? (Jangan ragu untuk memberi nama pada basis data NoSQL favorit Anda di sini dan / atau lihat apa yang dimaksud dengan BigTable Google.) Sekalipun Anda memiliki indeks luar biasa yang sangat akurat, Anda perlu cara untuk menemukan data di dalamnya dengan cepat. (Misalnya, cari nomor pangkat untuk 'stackoverflow.com' di dalam file 200GB.)
Masalah Acak (sisa waktu)
Setelah Anda menutupi 'tulang-tulang' mesin pencari Anda, jangan ragu untuk mencari tahu tentang setiap topik yang Anda ketahui.
Jelas ada lebih dari 15 menit materi untuk dibahas di sini, tapi semoga cukup untuk memulai.
sumber
The posting di Quora menghasilkan yang artikel asli yang diterbitkan oleh Sergey Brin dan Larry Page. Tampaknya menjadi referensi yang sangat baik untuk jenis pertanyaan ini.
sumber