กระบวนการคิดทั่วไปสำหรับคำถามสัมภาษณ์“ คุณจะสร้างเว็บไซต์ / แอพนี้” อย่างไร [ปิด]


14

ฉันได้รวบรวมคำถามสัมภาษณ์มากมายเช่น "อธิบายว่าคุณจะออกแบบแอพพลิเคชั่นอัลบั้มรูปได้อย่างไร", "อธิบายว่าคุณจะออกแบบคุณสมบัติเฉพาะของเว็บไซต์นี้ได้อย่างไร" (เช่นกดไลค์บน Facebook แนะนำใน Amazon ตะกร้าสินค้าเกม แจ็คสีดำ) ถ้าเป็นเช่นนั้นจะเกิดอะไรขึ้น คุณจะเปลี่ยนอะไร

ดูเหมือนว่าสิ่งนี้คาดหวังว่าสคีมาฐานข้อมูลหรือคำจำกัดความของคลาส (หรือทั้งสองอย่าง?) ฉันได้เรียนรู้เกี่ยวกับฐานข้อมูลในโรงเรียนแล้ว แต่ฉันไม่เคยออกแบบแอปพลิเคชันมาก่อนและมีปัญหาในการรู้ว่าจะเริ่มจากที่ใดการออกแบบที่ฉันออกแบบมานั้นมี "ดี" และสิ่งที่ฉันสามารถเปลี่ยนได้

มีวิธีการทั่วไปหรือกระบวนการคิดเมื่อออกแบบระบบเหล่านี้หรือไม่? และปัญหา / ปัญหาทั่วไปที่ดูเหมือนจะเกิดขึ้นมากในการออกแบบที่ฉันควรพยายามหลีกเลี่ยง? ใครบางคนอาจจะแนะนำให้ฉันผ่านหนึ่ง (หรือมากกว่าทั้งหมดในขณะที่เปรียบเทียบความต้องการของแต่ละคน) และอธิบาย:

1) คุณคิดอย่างไรกับเอนทิตีที่ต้องการ? 2) คุณตัดสินใจได้อย่างไรว่าความสัมพันธ์ทุกอย่างจะมีอะไรบ้าง 3) คุณรวมการปรับปรุงประสิทธิภาพไว้ในการออกแบบของคุณอย่างไร 4) ฉันจะใช้คลาสหรือฐานข้อมูลหรือไม่ มันสร้างความแตกต่าง (เช่นฉันจะมีคลาสที่ไม่สามารถแปลเป็นตารางฐานข้อมูลจริง ๆ ได้หรือไม่)

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

ความตั้งใจของฉัน: ด้วยแอพแชร์รูปภาพฉันจะมีคลาส / ตาราง: รูปภาพและผู้ใช้อย่างแน่นอน

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

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

ฉันแค่หวังให้กฎ / แนวทางทั่วไปปฏิบัติตามเพราะตอนนี้ฉันไม่รู้ว่าจะบอกได้อย่างไรว่าสถาปัตยกรรมที่ดีสำหรับระบบขนาดใหญ่นั้นมีลักษณะอย่างไร


1
สมมติว่าคุณกำลังเข้ารหัสอัลบั้มรูปเป็นโครงการงานอดิเรก แทนที่จะถามว่า "ฉันไปถูกทางแล้ว" (แน่นอนเพราะความต้องการทั้งหมดจะได้รับการติดตามในบางวิธี) คุณอาจถามว่า "มันรู้สึกว่าแง่มุมของการออกแบบนี้ทำให้สิ่งต่าง ๆ ไม่สะดวกโดยไม่จำเป็นเราสามารถเปลี่ยนสิ่งต่าง ๆ เพื่อทำให้ทุกอย่างง่ายขึ้นได้ไหม? " แต่คุณจะรู้ได้อย่างไรว่ามีบางแง่มุมที่ไม่สุภาพในการออกแบบ โดยทำงานผ่านการทดลองทางความคิดเช่นกรณีใช้งานและกรณีเลวร้ายที่สุด นอกจากนี้: "ข้อกำหนดในการเข้าสู่ระบบนี้ค่อนข้างบ่อยเราสามารถหาห้องสมุดแทนที่จะสร้างมันเองได้หรือไม่"
Evgeni Sergeev

คำตอบ:


19

ประเด็นของคำถามดังกล่าวคือการประเมินว่าคุณมีทักษะการใช้งานซอฟต์แวร์จริงหรือไม่ คุณได้เรียนรู้ทฤษฎีบางอย่าง แต่ความรู้เชิงทฤษฎีสามารถดำเนินไปได้ วิธีเดียวที่จะเข้าใจการพัฒนาซอฟต์แวร์อย่างแท้จริงคือการลงมือทำ

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

คำถามเช่น "ฉันจะใช้คลาสหรือฐานข้อมูลได้หรือไม่" แนะนำว่าคุณขาดความรู้พื้นฐานเกี่ยวกับสิ่งที่เป็นและวิธีการทำงาน คลาสเป็นกระบวนทัศน์สำหรับการจัดระเบียบโค้ดของคุณ ฐานข้อมูลเป็นวิธีการจัดเก็บข้อมูล พวกเขาเป็นสองแนวคิดที่ไม่เกี่ยวข้องโดยเนื้อแท้ นี่ไม่ใช่คำถาม / หรือคำถามใด ๆ

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


8

ดูเหมือนว่าสิ่งนี้คาดหวังว่าสคีมาฐานข้อมูลหรือคำจำกัดความของคลาส (หรือทั้งคู่?)

ฉันคิดว่าคุณให้ความสำคัญกับรายละเอียดมากเกินไปที่นี่ ด้วยคำถามนั้นผู้สรรหาไม่คาดหวังว่าจะมีคำอธิบายที่สมบูรณ์ของชั้นเรียนทั้งหมดที่คุณเขียน (ไม่เช่นนั้นพวกเขาจะขอให้คุณเขียนรหัสไม่ใช่พูดถึงมัน)

คำตอบของคุณต้องเกี่ยวกับภาพรวม - ชั้น, เลเยอร์, ​​แม้แต่วงจรชีวิตของโครงการและกระบวนการพัฒนาที่คุณจะวางไว้ อย่าลังเลที่จะถามคำถามเกี่ยวกับข้อกำหนดและสภาพแวดล้อมที่แอปพลิเคชันควรทำงานเพื่อปรับคำตอบของคุณ ตามที่ dan1111 ชี้ให้เห็นไม่มีสูตรทั่วไปสำหรับการออกแบบแอปพลิเคชันที่ถูกต้อง การออกแบบทั้งหมดขึ้นอยู่กับบริบท

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

นอกจากนี้หากคุณมีประสบการณ์น้อยจะเป็นเรื่องปกติที่จะพูดว่า "ฉันจะแสดงวิธีแก้ปัญหาโดยใช้ประเภทการออกแบบแอปพลิเคชันที่ฉันได้รับการสอนและใช้มาจนถึงตอนนี้ฉันรู้เรื่องนี้และแนวทางอื่น ๆ ที่ฉันสามารถอธิบายคุณได้ ตัวใหญ่ แต่ไม่เคยใช้มันเลยฉันเปิดใจกับการค้นพบและนำไปใช้กับคนอื่นด้วย "

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


2

ฉันคิดว่าฉันจะแสดงความคิดเห็นอย่างรวดเร็วสำหรับคำถามแรกของคุณ:

1) คุณคิดอย่างไรกับเอนทิตีที่ต้องการ?

สิ่งแรกที่ฉันทำสำหรับโครงการใหม่ไม่ว่าจะเป็นบนกระดานไวท์บอร์ดหรือกระดาษเปล่าแผ่นใหญ่เขียนสิ่งที่เกี่ยวกับร่างกายและแนวคิดเกี่ยวกับโครงการนั้นที่ฉันและทีมของฉันสามารถนึกได้ มันคือการระดมสมอง

คำนามมีแนวโน้มที่จะเป็นวัตถุคำกริยามีแนวโน้มที่จะใช้กรณีหรือวิธีการ

ทางกายภาพ: ภาพ (ชัดเจน!), ประเภทการแสดงผล, ระบบ, ไฟล์ภาพ, รูปแบบไฟล์, ผู้ใช้, วันที่ ....
แนวคิด: เพิ่ม, ลบ, บันทึก / จัดเก็บ, ดึง, จัดเรียง, ปรับเปลี่ยน, ดู / แสดงภาพ ....

ทำการเชื่อมต่อระหว่างคำนามและคำกริยา ผู้ใช้เพิ่มรูปภาพ (ดี - มีกรณีใช้อยู่!)

ฉันขอแนะนำให้ดู UML และรูปแบบการออกแบบและวิธีการใช้ใน OOD ทั่วไป (ข้อสังเกต - ฉันไม่ได้พูดถึงภาษาหรือฐานข้อมูลใด ๆ ด้านบนอย่าเลือกภาษาจากนั้นทำ OOD ของคุณทำ OOD ของคุณในแบบที่ OOL สามารถออกแบบได้

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