Laravel

Laravel Distributed Systems

การสื่อสารแบบ queue-based, events, outbox pattern, idempotency, retries, circuit breaker, สัญญา API, การทำเวอร์ชัน, พื้นฐาน Saga

22 คำถามสัมภาษณ์·
Senior
1

outbox pattern ในระบบแบบกระจายของ Laravel คืออะไร?

คำตอบ

outbox pattern จะจัดเก็บ messages/events ลงในตาราง database ภายใน transaction เดียวกันกับข้อมูลทางธุรกิจ จากนั้นส่งออกแบบ asynchronous ในกระบวนการที่แยกต่างหาก ซึ่งรับประกันว่า messages จะถูกส่งเสมอแม้ระบบจะ crash หลังจาก commit DB แล้ว ShouldQueueAfterCommit ของ Laravel เป็นการ implement pattern นี้แบบบางส่วน เนื่องจากจะ dispatch job หลังจาก commit transaction เท่านั้น จึงหลีกเลี่ยง race condition ที่ job ทำงานก่อนที่ข้อมูลจะพร้อมใช้งาน

2

ความแตกต่างหลักระหว่าง ShouldQueue และ ShouldQueueAfterCommit คืออะไร?

คำตอบ

ShouldQueue จะ dispatch job ไปยัง queue ทันที แม้ว่า transaction DB จะยังไม่ถูก commit ซึ่งอาจทำให้เกิด race condition ส่วน ShouldQueueAfterCommit จะรอให้ transaction DB ทั้งหมดถูก commit ก่อนที่จะ dispatch job เพื่อให้แน่ใจว่าข้อมูลพร้อมใช้งานเมื่อ job ทำงาน ใช้ ShouldQueueAfterCommit สำหรับ job ที่ขึ้นอยู่กับข้อมูลที่เพิ่งสร้างหรือแก้ไขใน transaction เช่น job ส่ง email หลังจากสร้างคำสั่งซื้อ

3

idempotence ในบริบทของระบบแบบกระจายของ Laravel คืออะไร?

คำตอบ

idempotence หมายความว่าการดำเนินการสามารถถูกเรียกใช้ได้หลายครั้งโดยไม่เปลี่ยนผลลัพธ์เกินกว่าการเรียกใช้ครั้งแรก ใน Laravel สิ่งนี้ป้องกันผลข้างเคียงที่ไม่พึงประสงค์ระหว่างการ retries job หรือ messages ที่ซ้ำกัน ตัวอย่างเช่น job สร้างคำสั่งซื้อแบบ idempotent จะตรวจสอบว่าคำสั่งซื้อมีอยู่แล้วหรือไม่ก่อนที่จะสร้าง เพื่อหลีกเลี่ยงการซ้ำซ้อนหาก job ถูก retry หลังจาก timeout ใช้ ShouldBeUnique, WithoutOverlapping หรือ deduplicationId เพื่อรับประกัน idempotence

4

ข้อได้เปรียบหลักของการใช้ event แทนการ dispatch job โดยตรงสำหรับการสื่อสารระหว่าง service คืออะไร?

5

ควรใช้ ShouldBeEncrypted สำหรับ queued job ในบริบทใด?

+19 คำถามสัมภาษณ์

หัวข้อสัมภาษณ์ Laravel อื่นๆ

พื้นฐาน PHP

Junior
25 คำถาม

พื้นฐาน OOP ใน PHP

Junior
20 คำถาม

Composer & Autoloading

Junior
18 คำถาม

พื้นฐาน Laravel

Junior
20 คำถาม

Laravel Routing

Junior
20 คำถาม

Blade Templates

Junior
18 คำถาม

Request & Response

Junior
20 คำถาม

พื้นฐาน Eloquent ORM

Junior
22 คำถาม

Eloquent Relationships

Mid-Level
25 คำถาม

Migrations & Schema Builder

Mid-Level
20 คำถาม

การตรวจสอบและฟอร์ม

Mid-Level
22 คำถาม

การยืนยันตัวตน

Mid-Level
20 คำถาม

การให้สิทธิ์และ Policies

Mid-Level
18 คำถาม

API Resources & Authentication

Mid-Level
26 คำถาม

Middleware

Mid-Level
18 คำถาม

Service Container & DI

Mid-Level
20 คำถาม

Queues & Jobs

Mid-Level
22 คำถาม

Events & Listeners

Mid-Level
18 คำถาม

การแจ้งเตือนและเมล

Mid-Level
20 คำถาม

File Storage

Mid-Level
18 คำถาม

Testing & PHPUnit

Mid-Level
24 คำถาม

Caching

Mid-Level
18 คำถาม

Livewire & Inertia

Mid-Level
20 คำถาม

Eloquent Advanced

Senior
24 คำถาม

Repository Pattern

Senior
20 คำถาม

Laravel Packages

Senior
20 คำถาม

Performance Optimization

Senior
22 คำถาม

Security Best Practices

Senior
22 คำถาม

Laravel Octane

Senior
18 คำถาม

Observability & Monitoring

Senior
20 คำถาม

Deployment & DevOps

Senior
20 คำถาม

เชี่ยวชาญ Laravel สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี