คุณจะใช้ Google Search อย่างไร [ปิด]


44

สมมติว่าคุณถูกถามในการสัมภาษณ์ "คุณจะใช้ Google Search อย่างไร" คุณจะตอบคำถามนี้อย่างไร อาจมีแหล่งข้อมูลที่อธิบายว่ามีการใช้งานชิ้นส่วนบางอย่างใน Google ได้อย่างไร (BigTable, MapReduce, PageRank, ... ) แต่ไม่เหมาะสำหรับการสัมภาษณ์

คุณจะใช้สถาปัตยกรรมใดโดยรวมและคุณจะอธิบายสิ่งนี้อย่างไรในช่วงเวลา 15-30 นาที

ฉันจะเริ่มต้นด้วยการอธิบายวิธีสร้างเครื่องมือค้นหาที่จัดการกับเอกสาร ~ 100k แล้วขยายสิ่งนี้ด้วยการส่งผ่านเอกสารประมาณ 50 ล้านเอกสารจากนั้นอาจก้าวกระโดดทางสถาปัตยกรรม / ทางเทคนิคอื่น

นี่คือมุมมอง 20,000 ฟุต สิ่งที่ฉันต้องการคือรายละเอียด - คุณจะตอบอย่างไรในการสัมภาษณ์ โครงสร้างข้อมูลใดที่คุณจะใช้ สถาปัตยกรรมของคุณประกอบด้วยบริการ / เครื่องจักรใด เวลาแฝงของแบบสอบถามทั่วไปจะเป็นอย่างไร สิ่งที่เกี่ยวกับปัญหา failover / split brain? ฯลฯ ...


1
นั่นเป็นคำถามสัมภาษณ์ พวกเขากำลังมองหารายละเอียดเท่าไหร่?
Paddy

1
ที่จริงแล้วเป็นคำถามที่ฉันใช้เมื่อฉันได้สัมภาษณ์บ้างซักพัก ความงามคือจำนวนรายละเอียดที่คุณให้นั้นขึ้นอยู่กับคุณและเวลาที่ผู้สัมภาษณ์ต้องการใช้เวลากับเรื่องนี้
ripper234

2
"แผนที่ลดลงโปรดถามคำถามต่อไป" "เราจะโทรหาคุณ"

2
คำถามที่ดี แต่ประเภทที่คุณสามารถใช้เวลาตอบคำถาม บางทีฉันอาจบุกเข้าไปใน google witha แฟลชไดรฟ์

ฉันคิดว่านี่เป็นคำถามที่ดีแม้ว่าฉันจะพบว่ามันค่อนข้างท่วมท้น ฉันเพิ่งคิดว่าจะสร้างอัลกอริทึมสำหรับบทความ "น้ำหนัก" ในเว็บไซต์ข่าว (ในทางทฤษฎีเท่านั้นสิ่งที่ทำให้ฉันยังคงอยู่ในห้องอาบน้ำ :) และฉันยอมรับว่าฉันคิดว่าแม้แต่ความคิดนี้ก็ค่อนข้างยาก / มีความซับซ้อน

คำตอบ:


45

พิจารณา meta-point: ผู้สัมภาษณ์ต้องการหาอะไร

คำถามมหึมาเช่นนี้ไม่ต้องการให้คุณเสียเวลาในการใช้อัลกอริทึมแบบ PageRank หรือวิธีการจัดทำดัชนีแบบกระจาย ให้เน้นไปที่ภาพที่สมบูรณ์ของสิ่งที่จะถ่ายทำแทน ดูเหมือนคุณจะรู้แล้วว่าชิ้นใหญ่ ๆ ทั้งหมด (BigTable, PageRank, Map / Reduce) ดังนั้นคำถามคือคุณจะโยงพวกเขาเข้าด้วยกันได้อย่างไร?

นี่คือแทงของฉัน

ขั้นตอนที่ 1: การจัดทำดัชนีโครงสร้างพื้นฐาน (ใช้เวลาอธิบาย 5 นาที)

ขั้นตอนแรกของการนำ Google มาใช้ (หรือเครื่องมือค้นหาใด ๆ ) คือการสร้างตัวทำดัชนี นี่คือซอฟต์แวร์ส่วนหนึ่งที่รวบรวมข้อมูลคลังข้อมูลและสร้างผลลัพธ์ในโครงสร้างข้อมูลที่มีประสิทธิภาพมากขึ้นสำหรับการอ่าน

เมื่อต้องการใช้สิ่งนี้ให้พิจารณาสองส่วนคือโปรแกรมรวบรวมข้อมูลและตัวทำดัชนี

งานของซอฟต์แวร์รวบรวมข้อมูลเว็บคือการสไปเดอร์การเชื่อมโยงเว็บเพจและเทลงในชุด ขั้นตอนที่สำคัญที่สุดที่นี่คือการหลีกเลี่ยงการวนซ้ำไม่สิ้นสุดหรือเนื้อหาที่สร้างขึ้นอย่างไม่สิ้นสุด วางแต่ละลิงก์เหล่านี้ในไฟล์ข้อความขนาดใหญ่ (ตอนนี้)

ประการที่สองตัวสร้างดัชนีจะทำงานโดยเป็นส่วนหนึ่งของแผนที่ / ลดงาน (แมปฟังก์ชั่นกับทุกรายการในอินพุตจากนั้นลดผลลัพธ์ให้เป็น 'สิ่ง' เดียว) ตัวสร้างดัชนีจะใช้เว็บลิงค์เดียวดึงเว็บไซต์และแปลงเป็นไฟล์ดัชนี (กล่าวถึงต่อไป) ขั้นตอนการลดลงจะเป็นการรวมไฟล์ดัชนีทั้งหมดเหล่านี้ไว้ในหน่วยเดียว (แทนที่จะเป็นไฟล์เปล่าหลายล้านไฟล์) เนื่องจากขั้นตอนการทำดัชนีสามารถทำคู่ขนานกันได้คุณสามารถทำแผนที่นี้ / ลดงานข้ามศูนย์ข้อมูลขนาดใหญ่โดยพลการ

ขั้นตอนที่ 2: ความเฉพาะของอัลกอริทึมการทำดัชนี (ใช้เวลาอธิบาย 10 นาที)

เมื่อคุณระบุว่าคุณจะประมวลผลหน้าเว็บได้อย่างไรส่วนถัดไปคือการอธิบายว่าคุณสามารถคำนวณผลลัพธ์ที่มีความหมายได้อย่างไร คำตอบสั้น ๆ ที่นี่คือ 'แผนที่มากขึ้น / ลดน้อยลง' แต่ให้พิจารณาสิ่งต่าง ๆ ที่คุณสามารถทำได้:

  • สำหรับแต่ละเว็บไซต์ให้นับจำนวนลิงก์ที่เข้ามา (หน้าที่เชื่อมโยงไปยังหน้าเว็บที่เชื่อมโยงไปถึงมากขึ้นควรจะ 'ดีกว่า')
  • สำหรับแต่ละเว็บไซต์ให้ดูที่การนำเสนอลิงก์ (ลิงก์ใน <h1> หรือ <b> ควรสำคัญกว่าลิงก์ที่ฝังอยู่ใน <h3>)
  • สำหรับแต่ละเว็บไซต์ให้ดูที่จำนวนลิงก์ขาออก (ไม่มีใครชอบสแปมเมอร์)
  • สำหรับแต่ละเว็บไซต์ให้ดูที่ประเภทของคำที่ใช้ ตัวอย่างเช่น 'hash' และ 'table' อาจหมายถึงเว็บไซต์นั้นเกี่ยวข้องกับวิทยาการคอมพิวเตอร์ 'แฮช' และ 'บราวนี่' ในทางกลับกันนั่นก็หมายความว่าไซต์นั้นเกี่ยวกับบางสิ่งที่แตกต่างออกไป

น่าเสียดายที่ฉันยังไม่รู้จักวิธีการวิเคราะห์และประมวลผลข้อมูลที่เป็นประโยชน์มากพอ แต่ความคิดทั่วไปเป็นวิธีการขยายขีดความสามารถในการวิเคราะห์ข้อมูลของคุณ

ขั้นตอนที่ 3: การแสดงผลลัพธ์ (ใช้เวลาอธิบาย 10 นาที)

ขั้นตอนสุดท้ายคือการแสดงผลลัพธ์ หวังว่าคุณได้แบ่งปันข้อมูลเชิงลึกที่น่าสนใจเกี่ยวกับวิธีการวิเคราะห์ข้อมูลหน้าเว็บ แต่คำถามคือคุณจะค้นหาได้อย่างไร โดยทั่วไปแล้ว 10% ของคำค้นหาของ Google ในแต่ละวันไม่เคยเห็นมาก่อน ซึ่งหมายความว่าคุณไม่สามารถแคชผลลัพธ์ก่อนหน้า

คุณไม่สามารถ 'ค้นหา' จากดัชนีเว็บของคุณเดียวคุณจะลองทำอะไร คุณจะดูดัชนีต่างๆอย่างไร (อาจรวมผลลัพธ์ - คำหลัก 'stackoverflow' อาจมีดัชนีสูงหลายรายการ)

นอกจากนี้คุณจะค้นหามันอย่างไร? สิ่งที่ประเภทของวิธีการที่คุณสามารถใช้สำหรับอ่านข้อมูลจากขนาดใหญ่ปริมาณของข้อมูลได้อย่างรวดเร็ว? (อย่าลังเลที่จะตั้งชื่อฐานข้อมูล NoSQL ที่คุณชื่นชอบที่นี่และ / หรือดูว่า BigTable ของ Google เป็นอย่างไร) แม้ว่าคุณจะมีดัชนีที่ยอดเยี่ยมที่มีความแม่นยำสูงคุณต้องการวิธีในการค้นหาข้อมูลอย่างรวดเร็ว (เช่นค้นหาหมายเลขอันดับของ 'stackoverflow.com' ภายในไฟล์ 200GB)

ปัญหาสุ่ม (เวลาที่เหลือ)

เมื่อคุณครอบคลุม 'กระดูก' ของเครื่องมือค้นหาของคุณแล้วอย่าลังเลที่จะเจาะรูในหัวข้อใด ๆ ที่คุณมีความรู้เป็นพิเศษ

  • ประสิทธิภาพของส่วนหน้าของเว็บไซต์
  • การจัดการศูนย์ข้อมูลสำหรับแผนที่ / ลดงานของคุณ
  • การปรับปรุงการทดสอบเครื่องมือค้นหา A / B
  • การรวมปริมาณการค้นหา / แนวโน้มก่อนหน้าในการจัดทำดัชนี (เช่นคาดว่าเซิร์ฟเวอร์ส่วนหน้าจะโหลดได้ถึง 9-5 และจะตายในช่วงต้น AM)

เห็นได้ชัดว่ามีเนื้อหามากกว่า 15 นาทีที่จะพูดถึงที่นี่ แต่หวังว่ามันจะเพียงพอสำหรับคุณที่จะเริ่มต้น


1
นี่เป็นคำตอบที่ยอดเยี่ยม แต่ฉันรู้สึกว่ามันไม่ได้เริ่มต้นที่จะจัดการกับปัญหาของการสร้าง Google ฉันคิดว่าส่วนที่ท้าทายยิ่งกว่านั้นคือการแสดงผลลัพธ์เป็นส่วนหนึ่งของคำตอบของคุณและที่ซึ่งเวทมนตร์ของ Google ตั้งอยู่ ฉันมีความคิดเกี่ยวกับวิธีการออกแบบบางอย่างเช่นนั้น แต่ฉันก็น่าสนใจที่จะได้ยินคนอื่น
ripper234

ฉันถามเรื่องนี้กับ Quora - ฉันคิดว่ามันอาจมีผู้ชมที่จะตอบคำถามนี้ quora.com/…
ripper234

ลองดูคำตอบของฉัน
ripper234

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.