คำถามสัมภาษณ์ Angular ที่ควรเตรียมตัว
โดย Aaron Cao · อัปเดตเมื่อ

ให้เตรียมเรื่อง change detection ก่อน ว่าอะไรเป็นตัวกระตุ้นการตรวจสอบ OnPush เปลี่ยนอะไร และ signals เข้ามาเกี่ยวข้องตรงไหน ต่อมาคือ dependency injection การเลือก operator ของ RxJS และการล้าง subscription กระบวนการสัมภาษณ์ส่วนใหญ่จะมีแบบฝึกหัดสดเพิ่มเข้ามาด้วย มักเป็นการค้นหาแบบ typeahead ที่สร้างด้วย service, debounceTime และ switchMap
แนวคิด Angular แบบไหนที่ถูกถามบ่อยที่สุด
ขอบเขต API ของ Angular นั้นกว้างมาก และรายการคำถามที่เผยแพร่มักมองว่าทุก decorator มีโอกาสถูกถามเท่า ๆ กัน ซึ่งไม่เป็นความจริง ส่วนนี้ครอบคลุมพื้นที่ที่ตัดสินผลการสัมภาษณ์ส่วนใหญ่จริง ๆ เพื่อให้การฝึกซ้อมของคุณตรงกับการกระจายตัวจริง มีสี่กลุ่มหลักที่ครอบงำ:
- Change detection: อะไรกระตุ้นการตรวจสอบ Zone.js แพตช์ asynchronous API อย่างไร
OnPushเปลี่ยนอะไร และ signals ช่วยให้ Angular ข้ามงานได้อย่างไร - Dependency injection: hierarchical injector,
providedIn, injection token และฟังก์ชันinject()เทียบกับพารามิเตอร์ของ constructor - RxJS: observable เทียบกับ promise การเลือก operator ที่ถูกต้อง และการล้าง subscription ก่อนที่ component จะถูกทำลาย
- สถาปัตยกรรมของ component: standalone component, input และ output, content projection และ lifecycle hook
ความเข้าใจเรื่องเวอร์ชันสำคัญที่นี่มากกว่าการสัมภาษณ์ framework อื่น ๆ ส่วนใหญ่ เพราะ Angular เปลี่ยนทิศทาง standalone component, บล็อกควบคุมโฟลว์ในตัวอย่าง @if และ @for, deferrable view และ signals ล้วนมาพร้อมกับเวอร์ชันหลักล่าสุด ผู้สัมภาษณ์จึงมักถามว่าวันนี้คุณจะเขียนอย่างไร เทียบกับสิ่งที่ codebase เก่าใช้ การรู้ทั้งสองแบบ และอธิบายได้ว่าทำไม framework ถึงเปลี่ยน จะให้ความประทับใจดีกว่าการเลือกข้างใดข้างหนึ่ง
คำถามเรื่อง RxJS และ signals ลึกแค่ไหน
ลึกกว่าแค่ชื่อ operator คำถาม RxJS ที่แบ่งระดับฝีมือคือควรเลือก flattening operator ตัวไหน switchMap จะยกเลิก request ภายในตัวก่อนหน้า จึงเหมาะกับ typeahead ส่วน mergeMap รันทุกอย่างพร้อมกัน concatMap รักษาลำดับไว้ และ exhaustMap จะเพิกเฉยต่อ event ใหม่ขณะที่มีตัวหนึ่งกำลังทำงานอยู่ จึงเหมาะกับปุ่ม submit จากนั้นผู้สัมภาษณ์จะถามคำถามเรื่อง leak ว่าจะเกิดอะไรขึ้นกับ subscription ที่จัดการเอง เมื่อ component ถูกทำลาย และทำไม async pipe หรือ takeUntilDestroyed ถึงกำจัดปัญหานี้ได้
คำถามเรื่อง signals ใหม่กว่าและมักเริ่มจากแรงจูงใจมากกว่า API ควรเตรียมอธิบายว่า signal คืออะไร computed ได้ค่ามาจากมันอย่างไร effect มีไว้ทำอะไร และทำไม signals ถึงให้ Angular มีวิธีที่ละเอียดกว่าในการรู้ว่าอะไรเปลี่ยนไป แทนที่จะตรวจสอบ component tree ใหม่ทั้งหมด คำตอบที่ดีจะเชื่อมสองหัวข้อเข้าด้วยกัน คือทั้ง signals และ OnPush ช่วยลดงานของ change detection แต่ signals ทำโดยติดตามการอ่านค่า แทนที่จะจำกัดว่าการตรวจสอบจะรันเมื่อไร
ผู้สัมภาษณ์ไม่ได้คาดหวังว่าคุณจะเคยนำทุกฟีเจอร์ล่าสุดไปใช้งานจริงแล้ว พวกเขาคาดหวังให้คุณบอกว่าทำงานกับเวอร์ชันไหนล่าสุด และให้เหตุผลอย่างชัดเจนเกี่ยวกับส่วนที่เหลือ
ควรเตรียมตัวสำหรับแบบฝึกหัดเขียนโค้ดสดแบบไหนบ้าง
กระบวนการสัมภาษณ์ Angular ส่วนใหญ่จะให้สร้างอะไรบางอย่างเล็ก ๆ ขณะที่ผู้สัมภาษณ์เฝ้าดู แบบฝึกหัดที่เกิดขึ้นซ้ำ ๆ ค่อนข้างคงที่ในแต่ละบริษัท:
- เรียก API จาก service แล้วแสดงผลลัพธ์ด้วย async pipe
- สร้างการค้นหาแบบ typeahead ด้วย
debounceTime,distinctUntilChangedและswitchMap - เขียน reactive form ที่มี custom validator และสถานะข้อผิดพลาดที่มองเห็นได้
- ส่งข้อมูลระหว่าง component แม่และลูก แล้วยกขึ้นไปไว้ใน service
- เพิ่ม route ที่มี component แบบ lazy loaded และ guard
ตัวอย่างเช่น วิศวกร front-end ที่สัมภาษณ์ตำแหน่ง product ระดับกลาง อาจจะสร้าง typeahead ก่อน แล้วถูกถามต่อว่าจะเกิดอะไรขึ้นเมื่อ response มาไม่เรียงลำดับ จะแสดง loading state อย่างไร และควรเกิดอะไรขึ้นเมื่อผู้ใช้ล้างค่า input ส่วนขยายเหล่านี้แหละที่ตัดสินผลการสัมภาษณ์ ดังนั้นควรฝึกคำถามต่อยอดมากกว่าเส้นทางที่ราบรื่น ชุดคำถามใกล้เคียงที่รอบสัมภาษณ์ Angular ยังคงเปิดด้วย รวมถึงพื้นฐาน JavaScript และ TypeScript ล้วน ๆ อยู่ใน ศูนย์รวมคลังคำถาม
ฝึกซ้อมอย่างไรให้นำไปใช้ได้จริงในรอบสัมภาษณ์
การอ่านรายการคำถามสร้างความคุ้นเคย ไม่ใช่ความจำที่เรียกคืนได้ ในขณะที่รอบสัมภาษณ์ทดสอบความจำที่เรียกคืนได้ขณะมีคนเฝ้าดู ทางแก้คือการฝึกซ้ำในรูปแบบจริงของรอบสัมภาษณ์ สร้างแบบฝึกหัดมาตรฐานจากโปรเจกต์เปล่า พูดออกเสียงอธิบายการตัดสินใจเรื่อง change detection และ subscription ขณะพิมพ์ และรับมือกับการถูกขัดจังหวะโดยไม่หลุดประเด็น การทำชุดคำถามทั้งหมดแบบซ้อมพูดออกเสียง ทีละคำถามพร้อม follow-up คือจุดประสงค์ของ การฝึกสัมภาษณ์จำลอง
มีข้อจำกัดหนึ่งที่ควรพูดให้ชัดเจน รอบสัมภาษณ์สดของ Angular เกือบทั้งหมดจะรันใน editor ที่แชร์กัน หรือมีหน้าจอของคุณที่มองเห็นได้ และทุกอย่างบนหน้าจอนั้นผู้สัมภาษณ์จะเห็นหมด ผู้ช่วยควรอยู่ในขั้นตอนเตรียมตัวและรอบสัมภาษณ์ที่ขับเคลื่อนด้วยบทสนทนา ไม่ใช่บนหน้าจอที่แชร์กัน รูปแบบไหนอนุญาตอะไรบ้างอยู่ใน ประเภทของการสัมภาษณ์