คำถามสัมภาษณ์ Spring Boot

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

คำถามสัมภาษณ์ Spring Boot
ควรเตรียมรับคำถามเกี่ยวกับ autoconfiguration และ starter, dependency injection และ bean scope, profile และการตั้งค่าภายนอก, Spring Data JPA, REST controller และการจัดการ exception, testing slice และ Actuator รอบสัมภาษณ์ระดับ senior จะเพิ่มเรื่องขอบเขตของ transaction, การทำ caching และพฤติกรรมของ service เมื่อมีการรีสตาร์ตซ้ำ ๆ

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

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

Spring กับ Spring Boot ต่างกันอย่างไร?

Spring คือ framework พื้นฐาน ส่วน Spring Boot เพิ่ม autoconfiguration ที่มีแนวทางชัดเจน, starter dependency และ embedded server เข้ามา เพื่อให้ service รันได้โดยไม่ต้องมีไฟล์ configuration ภายนอก

ทำไม constructor injection ถึงถูกเลือกใช้มากกว่า?

มันทำให้ dependency ชัดเจนและจำเป็นต้องมี ทำให้ field เป็น final ได้ และสร้าง object ในการทดสอบได้โดยไม่ต้องใช้ container ส่วน field injection จะซ่อน dependency ที่ขาดหายไว้จนกว่าจะถึง runtime

ปัญหา N บวก 1 คืออะไร?

query หนึ่งโหลดรายการมา จากนั้นแต่ละรายการก็ไปกระตุ้นอีก query สำหรับความสัมพันธ์ของมัน แก้ได้ด้วย fetch join, entity graph หรือ batch fetching แทนที่จะโหลดทุกอย่างแบบ eager

endpoint ของ Actuator ตัวไหนเสี่ยงถ้าเปิดเผยออกไป?

อะไรก็ตามที่เปิดเผย configuration, environment หรือสถานะของ heap ควรเปิดเผยแค่ health และ metrics ผ่านช่องทาง monitoring ของคุณ และเก็บส่วนที่เหลือไว้หลัง authentication หรือปิดไปเลย

คำถาม Spring Boot สำหรับตำแหน่ง senior ลึกแค่ไหน?

รอบสัมภาษณ์ senior จะย้ายจากเรื่อง annotation ไปสู่ behavior เช่น ขอบเขตของ proxy, การส่งต่อ transaction, ความถูกต้องของ cache, ประสิทธิภาพตอน startup และพฤติกรรมของ service ระหว่างการทำ rolling restart

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

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