Phỏng vấn PHP và Laravel: những câu hỏi thường gặp kèm đáp án gợi ý

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

PHP và Laravel vẫn là lựa chọn quen thuộc của nhiều công ty phần mềm tại Việt Nam, từ website bán hàng đến hệ thống nội bộ. Phỏng vấn vị trí này thường xoay quanh nền tảng PHP, cơ chế của Laravel và cách bạn làm việc với cơ sở dữ liệu. Dưới đây là các câu thường gặp.

Câu hỏi nền tảng về PHP

Khác nhau giữa == và === trong PHP?

== so sánh giá trị sau khi ép kiểu, === so sánh cả kiểu và giá trị. Nên dùng === để tránh bất ngờ, ví dụ 'abc' == 0 có thể cho kết quả khác nhau tùy phiên bản PHP, trong khi === luôn rõ ràng.

Trait, interface và abstract class dùng khi nào?

  • Interface: định nghĩa hợp đồng, lớp nào triển khai phải có các phương thức đó.
  • Abstract class: chứa cả phần cài đặt chung lẫn phương thức bắt buộc lớp con phải viết.
  • Trait: tái sử dụng đoạn code giữa các lớp không cùng cây kế thừa vì PHP chỉ cho kế thừa đơn.

Cách PHP quản lý phiên (session) và cookie?

Cookie lưu ở trình duyệt, session lưu dữ liệu ở máy chủ và chỉ gửi mã định danh qua cookie. Dữ liệu nhạy cảm không nên để trong cookie.

Câu hỏi về Laravel

Vòng đời của một request trong Laravel?

Request đi vào public/index.php, qua HTTP kernel và các middleware toàn cục, được định tuyến đến controller hoặc closure, controller xử lý rồi trả về response, response đi ngược qua middleware trước khi gửi về trình duyệt.

Middleware dùng để làm gì?

Middleware là lớp lọc request, ví dụ kiểm tra đăng nhập, phân quyền, ghi log, giới hạn tốc độ gọi. Nó cho phép tách logic chung ra khỏi controller.

Eloquent ORM và quan hệ

class Post extends Model{    public function user()    {        return $this->belongsTo(User::class);    }    public function comments()    {        return $this->hasMany(Comment::class);    }}

Các quan hệ thường dùng gồm hasOne, hasMany, belongsTo, belongsToMany. Hãy chuẩn bị ví dụ thực tế từ dự án của bạn như bài viết và bình luận, đơn hàng và sản phẩm.

Vấn đề N+1 là gì và xử lý ra sao?

N+1 xảy ra khi bạn lấy danh sách N bản ghi rồi trong vòng lặp truy cập quan hệ của từng bản ghi, khiến phát sinh thêm N truy vấn. Cách khắc phục là tải trước quan hệ bằng eager loading:

// Gây N+1$posts = Post::all();foreach ($posts as $post) {    echo $post->user->name;}// Đã tối ưu$posts = Post::with('user')->get();

Migration, seeder và factory

Migration quản lý thay đổi cấu trúc cơ sở dữ liệu theo phiên bản như code. Seeder nạp dữ liệu ban đầu hoặc dữ liệu mẫu. Factory sinh dữ liệu giả cho kiểm thử và phát triển.

Xác thực dữ liệu đầu vào

$validated = $request->validate([    'title' => 'required|string|max:255',    'email' => 'required|email|unique:users,email',]);

Luôn xác thực ở phía máy chủ dù giao diện đã kiểm tra. Nếu dữ liệu không hợp lệ, Laravel tự chuyển hướng kèm thông báo lỗi hoặc trả JSON với mã 422 cho API.

Câu hỏi về bảo mật và hiệu năng

  • SQL injection: dùng query builder hoặc Eloquent với tham số ràng buộc, không nối chuỗi từ dữ liệu người dùng.
  • CSRF: Laravel yêu cầu token cho biểu mẫu POST, dùng @csrf trong Blade.
  • Mass assignment: khai báo $fillable hoặc $guarded để kiểm soát trường được gán hàng loạt.
  • Cache và queue: cache kết quả truy vấn nặng, đẩy việc chậm như gửi email vào hàng đợi.

Câu hỏi tình huống thường gặp

Trang danh sách chạy chậm, bạn xử lý thế nào?

Hãy trả lời theo quy trình thay vì đoán. Bước một, đo đạc: bật log truy vấn hoặc dùng công cụ gỡ lỗi để xem trang gọi bao nhiêu câu SQL và mất bao lâu. Bước hai, kiểm tra N+1 và dùng eager loading. Bước ba, xem lại chỉ mục (index) cho các cột dùng để lọc và sắp xếp. Bước bốn, chỉ lấy những cột cần thiết bằng select, thêm phân trang thay vì tải toàn bộ. Cuối cùng mới cân nhắc cache kết quả hoặc đẩy tác vụ nặng vào hàng đợi.

Làm sao tổ chức code khi controller quá dài?

Tách logic nghiệp vụ ra các lớp service hoặc action, dùng Form Request để xác thực, dùng Resource để định dạng phản hồi API và giữ controller mỏng. Cách này giúp code dễ kiểm thử và tái sử dụng.

Bạn kiểm thử ứng dụng Laravel thế nào?

Laravel tích hợp sẵn PHPUnit. Bạn viết feature test để gọi endpoint và kiểm tra phản hồi, cơ sở dữ liệu, kết hợp trait RefreshDatabase để mỗi bài test bắt đầu từ trạng thái sạch. Kể được một ví dụ test cho luồng đăng ký hoặc đặt hàng sẽ là điểm cộng lớn.

Kết luận

Người phỏng vấn thường đánh giá cao ứng viên giải thích được vì sao chứ không chỉ cái gì. Hãy chuẩn bị một dự án Laravel nhỏ có quan hệ, xác thực, kiểm thử và triển khai để có nhiều tình huống thực tế để kể.

Nếu bạn đang học Laravel và muốn có lộ trình rõ ràng, hãy xem các khóa backend tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment