Tổng hợp câu hỏi phỏng vấn Laravel level Junior

Tổng hợp câu hỏi phỏng vấn Laravel level Junior

Laravel là gì?

Laravel là một trong những framework PHP phổ biến nhất hiện nay. Dưới đây là danh sách các câu hỏi phỏng vấn thường gặp dành cho lập trình viên Laravel ở cấp độ Junior.


Câu hỏi thường gặp

1. PHP có kiểu dữ liệu nào? Kể tên và giải thích ngắn gọn.

  • Integer: Số nguyên, không có phần thập phân. Ví dụ: 1, 2, 3.
  • Float: Số thực, có phần thập phân. Ví dụ: 1.5, 2.7.
  • String: Chuỗi ký tự. Ví dụ: "Hello, World!".
  • Boolean: Giá trị đúng hoặc sai. Ví dụ: true, false.
  • Array: Tập hợp các giá trị, có thể là bất kỳ kiểu dữ liệu nào. Ví dụ: [1, "Hello", true].
  • Object: Thể hiện của một class, chứa các thuộc tính và phương thức.
  • NULL: Biểu thị một biến không có giá trị.
  • Resource: Tham chiếu đến tài nguyên bên ngoài, như kết nối database.

2. Sự khác biệt giữa ===== trong PHP?

  • == so sánh giá trị của hai biến, không quan tâm đến kiểu dữ liệu. Ví dụ: 5 == "5" sẽ trả về true.
  • === so sánh cả giá trị và kiểu dữ liệu của hai biến. Ví dụ: 5 === "5" sẽ trả về false vì một bên là số nguyên và một bên là chuỗi.

3. include, require, include_once, require_once khác nhau thế nào?

  • include: Nạp file và tiếp tục thực thi ngay cả khi file không tồn tại hoặc có lỗi.
  • require: Nạp file nhưng sẽ dừng chương trình nếu file không tồn tại hoặc có lỗi.
  • include_once: Tương tự include, nhưng đảm bảo file chỉ được nạp một lần.
  • require_once: Tương tự require, nhưng đảm bảo file chỉ được nạp một lần.

Các khái niệm quan trọng

Trait trong PHP là gì? Khi nào nên dùng?

Trait là một cơ chế trong PHP cho phép tái sử dụng code giữa các class mà không cần dùng đến kế thừa. Trait giúp bạn định nghĩa các phương thức mà có thể được sử dụng trong nhiều class khác nhau. Điều này rất hữu ích khi bạn muốn chia sẻ một số logic chung giữa các class mà không muốn tạo ra một mối quan hệ kế thừa.

Static method và instance method khác nhau như thế nào?

  • Static method: Phương thức tĩnh có thể được gọi mà không cần tạo một instance của class. Thường được sử dụng cho các hàm tiện ích hoặc khi không cần truy cập đến dữ liệu của instance.
  • Instance method: Phương thức của một instance, cần có một instance của class để gọi. Thường được sử dụng khi cần truy cập hoặc thao tác với dữ liệu của instance.

Xử lý lỗi trong PHP

  • Dùng try...catch
  • error_reporting()
  • set_error_handler()
  • log_errors

Các Service Providers quan trọng trong Laravel

  • AppServiceProvider
  • RouteServiceProvider
  • AuthServiceProvider
  • EventServiceProvider
  • BroadcastServiceProvider

Middleware là gì? Khi nào nên dùng?

Middleware là một lớp trung gian xử lý các request HTTP trước khi chúng đến controller. Middleware có thể được sử dụng để thực hiện các tác vụ như xác thực người dùng, logging, hoặc kiểm soát tần suất request (rate limiting). Middleware giúp tách biệt các logic xử lý request chung ra khỏi controller, giúp code dễ bảo trì và quản lý hơn.


Cách validate dữ liệu khi gửi request trong Laravel

  • Dùng Request object: Laravel cung cấp các phương thức validate trực tiếp trên request object.
  • Validator::make(): Tạo một instance của validator với các rules cụ thể.
  • Rules trong FormRequest: Tạo một class FormRequest để định nghĩa các rules và logic validate phức tạp hơn.

Dependency Injection trong Laravel

Dependency Injection là một kỹ thuật trong đó một class yêu cầu các dependencies của nó được cung cấp từ bên ngoài thay vì tự tạo ra. Laravel tự động inject các dependencies vào class thông qua constructor hoặc method injection, giúp code dễ bảo trì và test hơn.


Tại sao nên dùng Eloquent thay vì Query Builder hoặc Raw Query?

Eloquent là ORM (Object-Relational Mapping) của Laravel, giúp bạn làm việc với database bằng cách sử dụng các model. Eloquent giúp code dễ đọc hơn, bảo mật tốt hơn nhờ việc tự động chống SQL Injection, và hỗ trợ các mối quan hệ giữa các model một cách tự nhiên.


Khi nào nên sử dụng Repository Pattern trong Laravel?

Repository Pattern giúp tách biệt logic truy xuất dữ liệu khỏi controller, giúp code dễ bảo trì và test hơn. Sử dụng pattern này khi bạn muốn quản lý các truy vấn database phức tạp hoặc khi bạn cần thay đổi cách truy xuất dữ liệu mà không ảnh hưởng đến các phần khác của ứng dụng.


Giải thích cách hoạt động của Laravel Queue

Queue trong Laravel giúp xử lý các tác vụ nền không đồng bộ, như gửi email hoặc thông báo, mà không làm chậm quá trình xử lý request chính. Laravel cung cấp một API đơn giản để tạo và quản lý các queue, và hỗ trợ nhiều driver khác nhau như database, Redis, và Amazon SQS.


Laravel Events và Listeners là gì? Khi nào sử dụng?

Events trong Laravel cho phép bạn kích hoạt các hành động khi một sự kiện cụ thể xảy ra, và Listeners là các class xử lý các sự kiện đó. Sử dụng Events và Listeners khi bạn muốn tách biệt logic xử lý sự kiện khỏi phần còn lại của ứng dụng, giúp code dễ bảo trì và mở rộng hơn.


Laravel có hỗ trợ caching như thế nào?

Laravel hỗ trợ caching thông qua Cache facade, cho phép bạn lưu trữ dữ liệu tạm thời để tăng tốc độ truy xuất. Laravel hỗ trợ nhiều driver cache như Redis, Memcached, và file cache, giúp bạn dễ dàng cấu hình và sử dụng caching trong ứng dụng của mình.


Nếu cần xử lý hàng triệu bản ghi trong database, bạn sẽ làm thế nào?

Khi xử lý một lượng lớn dữ liệu, bạn có thể sử dụng các phương pháp như chunk() để xử lý từng phần nhỏ của dữ liệu, cursor() để duyệt qua dữ liệu mà không tải toàn bộ vào bộ nhớ, và sử dụng indexing để tối ưu hóa truy vấn. Ngoài ra, bạn có thể sử dụng queue để xử lý dữ liệu nền một cách không đồng bộ.


Giải thích cách sử dụng Job và Dispatch trong Laravel

Jobs trong Laravel là các class đại diện cho các tác vụ nền mà bạn muốn thực hiện. Bạn có thể sử dụng Dispatch để đưa các job này vào queue, nơi chúng sẽ được xử lý bởi các worker. Điều này giúp bạn thực hiện các tác vụ nền mà không làm chậm quá trình xử lý request chính.


Khi nào nên dùng hasManyThrough?

hasManyThrough được sử dụng khi bạn cần truy xuất dữ liệu từ một bảng xa hơn trong một quan hệ nhiều cấp. Ví dụ, nếu bạn có một bảng Country, User, và Post, và bạn muốn lấy tất cả các bài viết từ một quốc gia cụ thể, bạn có thể sử dụng hasManyThrough để truy xuất dữ liệu này thông qua bảng User.


Cách dùng soft delete trong Laravel

Soft delete cho phép bạn đánh dấu một bản ghi là đã xóa mà không thực sự xóa nó khỏi database. Để sử dụng soft delete, bạn thêm use SoftDeletes; vào model của mình và Laravel sẽ tự động xử lý việc đánh dấu bản ghi là đã xóa bằng cách thêm một cột deleted_at vào bảng.


Sự khác biệt giữa lazy loadingeager loading?

  • Lazy loading: Chỉ tải dữ liệu khi cần, có thể dẫn đến nhiều truy vấn nếu không cẩn thận.
  • Eager loading: Tải tất cả dữ liệu cần thiết một lần, giúp giảm số lượng truy vấn và tránh tình trạng N+1 query.

Cách xử lý tình trạng N+1 Query trong Laravel

Để tránh tình trạng N+1 query, bạn có thể sử dụng with() hoặc load() để eager load các mối quan hệ cần thiết, giúp giảm số lượng truy vấn và cải thiện hiệu suất.


Khi nào dùng belongsToMany thay vì hasMany?

belongsToMany được sử dụng khi có một bảng trung gian để quản lý mối quan hệ nhiều-nhiều giữa hai bảng. hasMany được sử dụng cho mối quan hệ một-nhiều, nơi một bản ghi trong bảng này có thể liên kết với nhiều bản ghi trong bảng khác.


Laravel hỗ trợ API authentication như thế nào?

Laravel hỗ trợ API authentication thông qua các package như Laravel Sanctum, Passport, và JWT. Sanctum cung cấp một giải pháp đơn giản cho SPA và API token, trong khi Passport cung cấp một giải pháp toàn diện hơn với OAuth2.


Giải thích cách dùng Laravel Passport hoặc Laravel Sanctum

  • Passport: Sử dụng OAuth2 để cung cấp authentication cho API, phù hợp cho các ứng dụng lớn cần quản lý quyền truy cập phức tạp.
  • Sanctum: Cung cấp một giải pháp đơn giản cho SPA và API token, dễ dàng cấu hình và sử dụng cho các ứng dụng nhỏ hoặc trung bình.

Nếu cần bảo vệ API khỏi spam requests, bạn sẽ làm thế nào?

Để bảo vệ API khỏi spam requests, bạn có thể sử dụng rate limiting thông qua middleware throttle, kết hợp với captcha hoặc API key để kiểm soát và giới hạn số lượng request từ một nguồn cụ thể.


SQL Injection là gì? Laravel giúp ngăn chặn bằng cách nào?

SQL Injection là một kiểu tấn công trong đó kẻ tấn công chèn mã SQL độc hại vào các truy vấn để thao tác với database. Laravel giúp ngăn chặn SQL Injection bằng cách sử dụng Query Builder và Eloquent ORM, tự động escape các input từ người dùng.


CSRF là gì? Laravel bảo vệ như thế nào?

CSRF (Cross-Site Request Forgery) là một kiểu tấn công trong đó kẻ tấn công giả mạo các request từ người dùng hợp lệ. Laravel bảo vệ chống lại CSRF bằng cách sử dụng CSRF token, đảm bảo rằng các request POST, PUT, DELETE đều có một token hợp lệ.


Khi làm việc với JSON Web Token (JWT), bạn cần lưu ý điều gì?

Khi làm việc với JWT, bạn cần lưu ý bảo mật token bằng cách lưu trữ an toàn, đặt thời gian hết hạn hợp lý, và sử dụng refresh token để gia hạn session mà không cần phát hành lại token mới.


Khi gặp lỗi 'Call to a member function on null', bạn sẽ debug như thế nào?

Khi gặp lỗi này, bạn có thể sử dụng dd(), var_dump(), hoặc kiểm tra xem object có tồn tại trước khi gọi phương thức trên nó. Điều này giúp bạn xác định nguyên nhân và vị trí của lỗi trong code.


Cách log dữ liệu trong Laravel

Laravel cung cấp một hệ thống logging mạnh mẽ thông qua Log facade. Bạn có thể sử dụng Log::info(), Log::error(), hoặc ghi trực tiếp vào file log tại storage/logs/laravel.log để theo dõi và debug ứng dụng.


Cách viết Unit Test và Feature Test trong Laravel

Laravel sử dụng PHPUnit để viết và chạy các test. Bạn có thể sử dụng php artisan test để chạy các test, và viết test cho models, controllers, và các phần khác của ứng dụng để đảm bảo chúng hoạt động đúng như mong đợi.


Bạn có sử dụng Mocking khi test không? Giải thích cách hoạt động

Mocking là một kỹ thuật trong testing giúp bạn giả lập các objects hoặc phương thức mà không cần gọi đến database hoặc các dịch vụ bên ngoài. Điều này giúp bạn viết test nhanh hơn và không phụ thuộc vào môi trường bên ngoài.


Bạn triển khai Laravel lên server như thế nào?

Có nhiều cách để triển khai Laravel lên server, bao gồm sử dụng Forge, Envoy, hoặc deploy thủ công bằng Git và SSH. Mỗi phương pháp có ưu và nhược điểm riêng, và bạn nên chọn phương pháp phù hợp với nhu cầu và tài nguyên của mình.


Cách tối ưu hiệu suất Laravel trên production

Để tối ưu hiệu suất của Laravel trên production, bạn có thể sử dụng caching, queue, database indexing, và optimize autoload. Ngoài ra, bạn cũng nên cấu hình server và môi trường một cách hợp lý để đảm bảo ứng dụng chạy mượt mà.


Bạn có kinh nghiệm làm việc với Docker không? Nếu có, hãy mô tả cách dùng nó với Laravel

Docker giúp bạn chạy Laravel trong các container, cho phép bạn dễ dàng quản lý và triển khai ứng dụng. Bạn có thể sử dụng Docker để thiết lập môi trường phát triển với MySQL, Redis, và các dịch vụ khác, giúp đảm bảo tính nhất quán giữa các môi trường.


Hãy giải thích cách sử dụng Horizon để quản lý Queue trong Laravel

Horizon là một dashboard mạnh mẽ giúp bạn giám sát và quản lý các queue jobs trong Laravel. Horizon cho phép bạn theo dõi trạng thái của các jobs, điều chỉnh số lượng workers, và xem các thống kê về hiệu suất của queue, giúp bạn tối ưu hóa việc xử lý tác vụ nền.


Similar Posts