คำถามสัมภาษณ์ Angular ที่ควรเตรียมตัว

โดย Aaron Cao · อัปเดตเมื่อ

คำถามสัมภาษณ์ Angular ที่ควรเตรียมตัว
ให้เตรียมเรื่อง change detection ก่อน ว่าอะไรเป็นตัวกระตุ้นการตรวจสอบ OnPush เปลี่ยนอะไร และ signals เข้ามาเกี่ยวข้องตรงไหน ต่อมาคือ dependency injection การเลือก operator ของ RxJS และการล้าง subscription กระบวนการสัมภาษณ์ส่วนใหญ่จะมีแบบฝึกหัดสดเพิ่มเข้ามาด้วย มักเป็นการค้นหาแบบ typeahead ที่สร้างด้วย service, debounceTime และ switchMap

ให้เตรียมเรื่อง 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 ที่แชร์กัน หรือมีหน้าจอของคุณที่มองเห็นได้ และทุกอย่างบนหน้าจอนั้นผู้สัมภาษณ์จะเห็นหมด ผู้ช่วยควรอยู่ในขั้นตอนเตรียมตัวและรอบสัมภาษณ์ที่ขับเคลื่อนด้วยบทสนทนา ไม่ใช่บนหน้าจอที่แชร์กัน รูปแบบไหนอนุญาตอะไรบ้างอยู่ใน ประเภทของการสัมภาษณ์

คำถามที่พบบ่อย

ยังต้องรู้จัก NgModules อยู่ไหม

ในระดับที่อ่านเข้าใจ ต้องรู้ Angular ที่ใช้งานจริงจำนวนมากยังรันอยู่บน NgModules ดังนั้นควรเตรียมคำถามว่า module หนึ่งประกาศอะไรบ้าง และ providedIn เข้ามาแทนที่ provider array ส่วนใหญ่ได้อย่างไร คำถามเกี่ยวกับโค้ดใหม่จะถามในบริบทของ standalone component ซึ่งเป็นค่าเริ่มต้นในเวอร์ชันล่าสุด

AngularJS เหมือนกับ Angular หรือไม่

ไม่เหมือนกัน และบางครั้งผู้สัมภาษณ์ก็ตรวจสอบเรื่องนี้ AngularJS คือสาย 1.x ที่มี scope, digest cycle และ controller ส่วน Angular ตั้งแต่เวอร์ชัน 2 เป็นต้นไป คือ framework แยกต่างหากที่สร้างบน TypeScript และ component หากคำอธิบายงานเขียนว่า AngularJS ให้ยืนยันก่อนว่าหมายถึงตัวไหน ก่อนที่จะเริ่มเตรียมตัว

ถ้าทีมใช้ signals ต้องรู้ RxJS มากแค่ไหน

ยังต้องรู้เยอะอยู่ดี signals ครอบคลุม state ของ component ได้ดี แต่การเรียก HTTP, event ของ router และ stream ค่าของ form ยังคงเป็น observable ดังนั้นการเลือก operator และการล้างค่ายังคงเกิดขึ้นเรื่อย ๆ ทีมส่วนใหญ่ใช้ทั้งสองแบบผสมกัน และการอธิบายว่าแต่ละแบบเหมาะกับอะไรก็เป็นคำถามระดับ senior ที่พบบ่อย

ผู้สัมภาษณ์ถามเรื่อง testing หรือไม่

ส่วนใหญ่จะถามในเชิงกลยุทธ์มากกว่าการจำ API ควรเตรียมตอบว่าคุณจะทดสอบอะไรในระดับ component เทียบกับ end to end, TestBed ตั้งค่า component อย่างไร และคุณจะ fake service อย่างไร การบอกข้อแลกเปลี่ยนสำคัญกว่าการท่องจำ matcher

ควรพูดถึง Angular ได้กี่เวอร์ชัน

เวอร์ชันที่คุณเคยใช้งาน บวกกับสิ่งที่เปลี่ยนไปตั้งแต่นั้น ผู้สัมภาษณ์ถามเรื่อง standalone component, control flow block และ signals เพราะคำตอบเหล่านี้บ่งบอกความทันสมัยของคุณ การบอกว่าคุณ ship เวอร์ชันไหนล่าสุด และให้เหตุผลเกี่ยวกับส่วนที่เหลือ ถือเป็นคำตอบที่สมบูรณ์

คำถามที่เกี่ยวข้อง

← เพิ่มเติมเกี่ยวกับ คำถามสัมภาษณ์ตามตำแหน่งและหัวข้อ