คำถามสัมภาษณ์ Spring Boot
โดย Aaron Cao · อัปเดตเมื่อ

ควรเตรียมรับคำถามเกี่ยวกับ autoconfiguration และ starter, dependency injection และ bean scope, profile และการตั้งค่าภายนอก, Spring Data JPA, REST controller และการจัดการ exception, testing slice และ Actuator รอบสัมภาษณ์ระดับ senior จะเพิ่มเรื่องขอบเขตของ transaction, การทำ caching และพฤติกรรมของ service เมื่อมีการรีสตาร์ตซ้ำ ๆ
ผู้สัมภาษณ์ถามอะไรบ้างเกี่ยวกับ autoconfiguration และ starter?
คุณอาจใช้ Spring Boot ทุกวันโดยไม่เคยอ่าน startup log ของมันเลย และผู้สัมภาษณ์ก็รู้เรื่องนี้ดี จึงมักเริ่มต้นคำถามจากจุดนี้ ส่วนนี้ครอบคลุมคำถามที่ตรวจสอบว่าคุณเข้าใจ framework จริง ๆ หรือรู้แค่ค่าเริ่มต้นของมัน
@SpringBootApplicationรวมอะไรเข้าด้วยกันจริง ๆ และจะเกิดอะไรขึ้นถ้าเอาส่วนใดส่วนหนึ่งออก?- autoconfiguration ตัดสินใจอย่างไรว่าจะตั้งค่าอะไร และ conditional annotation มีบทบาทอย่างไร?
- starter คืออะไร และข้างในมีอะไรนอกจาก dependency?
- จะ override หรือ disable autoconfiguration เฉพาะจุดได้อย่างไร?
- embedded server มาจากไหน และจะสลับใช้ตัวอื่นได้อย่างไร?
คำตอบที่ดีจะเชื่อมโยงกลไกเข้ากับสิ่งที่คุณเคยทำจริง เช่น bean ที่คุณต้อง exclude, starter ที่คุณเคยเปลี่ยน หรือ startup failure ที่คุณเคยตามรอยผ่าน condition evaluation report
คำถามเกี่ยวกับ core container และข้อมูลที่พบบ่อยมีอะไรบ้าง?
- Dependency injection constructor เทียบกับ field injection ทำไม constructor injection ถึงถูกเลือกใช้มากกว่า และจะแก้ปัญหาอย่างไรเมื่อมี bean ผู้สมัครสองตัวที่ type เดียวกัน
- Bean lifecycle และ scope ทำไม singleton ถึงเป็นค่าเริ่มต้น เมื่อไหร่ที่ scope แบบ request หรือ prototype ถึงเหมาะสม และอะไรที่ทำให้การแชร์ singleton bean ไม่ปลอดภัย
- Configuration ลำดับความสำคัญของ property, profile ตามแต่ละ environment และความแตกต่างระหว่าง
@ConfigurationPropertiesกับการ inject ค่าแบบกระจัดกระจาย - Spring Data JPA derived query method ปัญหา N บวก 1 lazy เทียบกับ eager fetching และเมื่อไหร่ที่ควรใช้ native query
- Transaction proxy ของ
@Transactionalดักจับอะไรจริง ๆ ทำไม self-invocation ถึงข้าม transaction ไปเงียบ ๆ และ rollback rule ทำงานร่วมกับ checked exception อย่างไร
คำถามเรื่อง transaction proxy คือจุดที่คำตอบซึ่งดูมั่นใจมักพังทลายบ่อยที่สุด ดังนั้นควรเตรียมอธิบายขอบเขตของ proxy แทนที่จะแค่บอกชื่อ annotation
ควรพูดถึง REST design, การทดสอบ และการดำเนินงานอย่างไร?
นอกเหนือจาก container ผู้สัมภาษณ์อยากเห็นส่วนที่สำคัญในสภาพแวดล้อม production ด้วย ในชั้น web การเลือก status code, validation และการจัดการ error แบบรวมศูนย์ด้วย @ControllerAdvice แทนการเขียน try-catch ในทุก controller ในเรื่องการทดสอบ ความแตกต่างระหว่าง @SpringBootTest แบบเต็มกับ slice อย่างเช่น web-layer test และทำไมการเริ่ม context ทั้งหมดเพื่อทดสอบ controller เดียวจึงเป็นนิสัยที่ช้า ในด้านการดำเนินงาน Actuator เปิดเผยอะไร endpoint ไหนที่ห้ามเปิดสู่สาธารณะ และ health check ช่วยขับเคลื่อนการ deploy อย่างไร
ลองนึกถึงวิศวกร backend คนหนึ่งที่กำลังสัมภาษณ์ตำแหน่งระดับกลางที่บริษัทโลจิสติกส์ เธอถูกถามว่าทำไม scheduled job บางครั้งเขียนข้อมูลไม่ครบ แทนที่จะเดา เธอไล่ดูขอบเขตของ transaction ทีละขั้น สังเกตว่า job นั้นเรียก transactional method บนตัวมันเอง และอธิบายพฤติกรรมของ proxy ที่ทำให้การเรียกนั้นถูกข้ามไป ผู้สัมภาษณ์เปลี่ยนไปคุยเรื่อง offer ทันที เพราะคำตอบแสดงนิสัยการ debug ไม่ใช่คำนิยามที่ท่องจำมา
ชุดคำถามสำหรับภาษาและ framework อื่น ๆ ถูกรวบรวมไว้ที่ question banks
ควรฝึกฝนอย่างไร และผู้ช่วยแบบสดเหมาะกับจุดไหน?
ลองอ่าน startup log ของ service ตัวเองสักครั้งจนสามารถเล่าเรื่องมันได้ จากนั้นฝึกพูดออกเสียงดัง ๆ เพราะช่องว่างระหว่างการรู้จักแนวคิดหนึ่งกับการอธิบายมันภายในสี่สิบวินาทีคือสิ่งที่ตัดสินผลของรอบสัมภาษณ์เหล่านี้ AI interviewer บนหน้า /mock-interview สามารถถามคำถามต่อเนื่องที่คุณเองอาจนึกไม่ถึง
ระหว่างการสัมภาษณ์วิดีโอแบบพูดสด SubcueAI จะถอดคำถามของผู้สัมภาษณ์เป็นข้อความ และแสดงโครงสร้างคำตอบที่แนะนำในฝั่งของคุณ ไม่ว่าจะเป็น overlay บนเดสก์ท็อปใน macOS และ Windows หรือ side panel ของส่วนขยายเบราว์เซอร์ Chromium ไม่มี meeting bot เข้าร่วมสาย และไม่มีอะไรถูก inject เข้าไปในหน้าประชุม ขีดจำกัดที่ตรงไปตรงมาคือรอบ coding หากย้ายไปอยู่บนแพลตฟอร์มที่มีการจับตาหน้าจอหรือมีผู้คุมสอบ ความช่วยเหลือแบบสดจะอยู่นอกขอบเขตทันที และถ้าคุณแชร์หน้าจอ ทุกอย่างบนนั้นจะมองเห็นได้หมด