Bộ câu hỏi phỏng vấn mà mọi lập trình viên cần biết


Chào bạn, đây là bản tài liệu đầy đủ và chi tiết nhất cho toàn bộ bộ câu hỏi trong ảnh (bao gồm cả phần Thuật toán và Backend). Tôi đã tối ưu cấu trúc để bạn dễ dàng copy và học tập.


TÀI LIỆU ÔN TẬP PHỎNG VẤN BACKEND DEVELOPER

Trả lời: OOP (Object-Oriented Programming) là phương pháp lập trình dựa trên khái niệm đối tượng (Object). Thay vì tập trung vào các hàm xử lý, OOP tập trung vào các thực thể có thuộc tính (data) và hành động (methods).

  • 4 Tính chất: Đóng gói (Encapsulation), Kế thừa (Inheritance), Đa hình (Polymorphism), Trừu tượng (Abstraction).

  • Ví dụ: Lớp Car có thuộc tính color, brand và hành động drive().

Trả lời: Là khả năng một lớp (Con) sử dụng lại các thuộc tính và phương thức của lớp khác (Cha).

  • Lý do: Giảm trùng lặp mã nguồn (DRY - Don't Repeat Yourself), dễ dàng mở rộng và quản lý code tập trung.

  • Ví dụ: Lớp cha Animal có hàm eat(). Các lớp con Cat, Dog kế thừa Animal để dùng chung hàm eat() mà không cần viết lại.

  • Overloading (Nạp chồng): Trong cùng một class, các hàm cùng tên nhưng khác tham số (số lượng hoặc kiểu dữ liệu). Xảy ra lúc Compile-time.

  • Overriding (Ghi đè): Lớp con viết lại hàm đã có ở lớp cha với cùng tên và tham số để thay đổi logic. Xảy ra lúc Run-time.

Trả lời: Không.

  • Abstract Class: Dùng cho các lớp có cùng bản chất (is-a). Có thể chứa cả hàm có logic và hàm trừu tượng.

  • Interface: Dùng như một bản "hợp đồng" về khả năng (can-do). Một lớp có thể implement nhiều Interface nhưng chỉ kế thừa một Abstract class.

  1. User gửi username/password qua HTTPS.

  2. Server kiểm tra Database. Nếu đúng, tạo ra Token (như JWT).

  3. Server trả Token về cho Client (Browser/Mobile).

  4. Client lưu Token vào LocalStorage hoặc HttpOnly Cookie.

  5. Các request sau, Client gửi Token ở Header để Server xác thực.

Trả lời: Dựa vào Routing. Server lắng nghe các request và so khớp đường dẫn (URL) và Method.

  • Ví dụ: Nếu URL là /api/v1/auth/login và Method là POST, Server sẽ kích hoạt controller xử lý đăng nhập.

Trả lời: Cách chuẩn nhất là gửi qua HTTP Header:

  • Authorization: Bearer <token_của_bạn>

Trả lời: JWT là một chuỗi mã hóa an toàn để truyền thông tin giữa các bên.

  • 3 Phần: Header (Thuật toán), Payload (Thông tin user), Signature (Chữ ký).

  • Verify: Server dùng Secret Key để băm lại Header + Payload. Nếu kết quả giống Signature đính kèm thì token là thật. Nếu hacker sửa Payload, Signature sẽ bị sai ngay lập tức.

Trả lời:

  • Sử dụng Blacklist trên Redis: Lưu các token bị hủy vào Redis cho đến khi chúng hết hạn.

  • Refresh Token Rotation: Khi đổi pass, xóa toàn bộ bản ghi Refresh Token cũ trong DB, buộc mọi thiết bị phải login lại.

  • Access Token: Thời gian sống ngắn (vài phút), dùng để gọi API trực tiếp. Lưu ở bộ nhớ tạm.

  • Refresh Token: Thời gian sống dài (vài ngày/tháng), dùng để đổi lấy Access Token mới khi cái cũ hết hạn. Lưu ở Database hoặc HttpOnly Cookie.


  • Selection Sort (Sắp xếp chọn): Tìm phần tử nhỏ nhất trong mảng chưa sắp xếp và đổi chỗ nó với phần tử đầu tiên.

  • Insertion Sort (Sắp xếp chèn): Lấy từng phần tử và "chèn" nó vào đúng vị trí trong mảng đã được sắp xếp trước đó (giống cách xếp bài tây).

  • Demo: Cả hai có độ phức tạp trung bình là $O(n^2)$. Chỉ nên dùng cho mảng nhỏ.

Vấn đề: Các kiểu dữ liệu như int hay long không chứa nổi số có hàng trăm chữ số.

Giải pháp: Chuyển số thành String. Duyệt từ cuối chuỗi lên đầu, cộng từng chữ số và xử lý biến "nhớ" (carry).

Giải pháp: Dùng 2 con trỏ ij đặt ở đầu 2 mảng. So sánh phần tử tại ij, cái nào nhỏ hơn thì cho vào mảng kết quả rồi tăng con trỏ đó lên. Tiếp tục cho đến khi hết cả 2 mảng.


  • Image: Một cái "khuôn" đóng gói sẵn code, thư viện, môi trường (như một file nén).

  • Container: Một "thực thể" chạy từ Image. Có thể bật/tắt dễ dàng.

  • Volume: Nơi lưu dữ liệu bền vững. Nếu Container bị xóa, dữ liệu trong Volume vẫn còn (dùng cho Database).

  • Network: Giúp các container (như App và DB) nói chuyện được với nhau.

  • Vai trò: Quản lý hàng nghìn Container cùng lúc. Tự động khởi động lại nếu Container chết (Self-healing), tự động mở rộng (Scaling).

  • Node: Một máy vật lý hoặc máy ảo trong cụm K8s.

  • Nginx/Caddy: Đóng vai trò là Reverse ProxyWeb Server. Nó đứng đầu để nhận request từ user, sau đó điều hướng về các container phía sau. Caddy nổi tiếng vì tự động cấu hình SSL (HTTPS) miễn phí.

Phản hồi từ học viên

5

Tổng 0 đánh giá
Developer Toolbox

TEXT CASE

FORMAT & CLEAN

ENCODE & DECODE

JSON & CRYPTO

Đã sao chép!!!
Gozic - Hệ thống học lập trình, luyện thi, kiểm tra trắc nghiệm trực tuyến uy tín tại Việt Nam.
Hotline: 0967025996
Gozic - Hệ thống học lập trình, luyện thi, kiểm tra trắc nghiệm trực tuyến uy tín tại Việt Nam.