Khi phỏng vấn vị trí Fresher, nhà tuyển dụng hiếm khi kỳ vọng bạn rành rọt các kiến trúc hệ thống phức tạp, nhưng họ cực kỳ coi trọng nền tảng cốt lõi. Bài viết này sẽ mổ xẻ những khái niệm kinh điển mà bạn chắc chắn sẽ gặp khi ngồi ghế phỏng vấn kỹ thuật.
1. Object-Oriented Programming (OOP) và 4 tính chất cốt lõi
Khi hỏi về OOP, nhà tuyển dụng không chỉ muốn nghe định nghĩa lý thuyết suông từ sách vở mà chờ đợi bạn lấy ví dụ thực tế cách áp dụng vào code. Đặc biệt, khái niệm Đa hình (Polymorphism) và Tính trừu tượng (Abstraction) thường được xoáy sâu để kiểm tra tư duy thiết kế hướng đối tượng.
- Tính đóng gói (Encapsulation): Che giấu trạng thái nội bộ bằng private modifier và truy cập an toàn qua getter/setter.
- Tính kế thừa (Inheritance): Tái sử dụng mã nguồn giữa các class cha và class con.
- Tính đa hình (Polymorphism): Cho phép gọi cùng một phương thức trên các đối tượng khác nhau nhưng xử lý theo cách riêng (Method Overriding/Overloading).
- Tính trừu tượng (Abstraction): Ấp ủ chi tiết phức tạp, chỉ trưng ra interface cần thiết qua abstract class hoặc interface.
2. Big O Notation và Độ phức tạp thuật toán
Fresher thường hay mắc bẫy viết code chạy được nhưng không tối ưu. Nhà tuyển dụng sẽ yêu cầu bạn phân tích Big O của một hàm số bất kỳ để xem bạn có ý thức về hiệu năng khi xử lý dữ liệu lớn hay không.
- O(1) - Constant Time: Truy xuất phần tử qua Index trong Array hoặc HashMap, không phụ thuộc vào kích thước dữ liệu.
- O(N) - Linear Time: Duyệt qua một vòng lặp đơn qua toàn bộ danh sách N phần tử.
- O(N^2) - Quadratic Time: Vòng lặp lồng nhau (Nested loops), cần hạn chế khi N lớn.
- O(log N) - Logarithmic Time: Thuật toán tìm kiếm nhị phân (Binary Search) trên mảng đã sắp xếp.
3. HTTP Protocol và Vòng đời một Request/Response
Lập trình viên hiện đại, dù làm Frontend hay Backend, đều phải hiểu cách client và server giao tiếp qua HTTP. Câu hỏi phổ biến là phân biệt các HTTP Methods và Status Codes cơ bản.
- GET vs POST: GET dùng để lấy dữ liệu (an toàn, có thể cache), POST dùng để tạo/thay đổi dữ liệu trên server.
- Status 2xx (Success): 200 OK, 201 Created.
- Status 4xx (Client Error): 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found.
- Status 5xx (Server Error): 500 Internal Server Error (lỗi từ phía server).
4. Quản lý bộ nhớ: Stack và Heap Memory
Đối với các ngôn ngữ lập trình, việc hiểu cách bộ nhớ được cấp phát và giải phóng giúp bạn tránh được các lỗi liên quan đến hiệu năng hoặc tràn bộ nhớ. Nhà tuyển dụng thường hỏi phân biệt vùng nhớ Stack và Heap để kiểm tra nền tảng khoa học máy tính của bạn.
- Stack Memory: Lưu trữ các biến cục bộ (local variables) và lời gọi hàm, hoạt động theo cơ chế LIFO (Last In, First Out) và được giải phóng tự động khi scope kết thúc.
- Heap Memory: Lưu trữ các đối tượng (objects) được cấp phát động, có vòng đời dài hơn và cần cơ chế dọn dẹp như Garbage Collection.
- Memory Leak: Hiện tượng bộ nhớ đã cấp phát không được giải phóng dù không còn sử dụng, dẫn đến sập ứng dụng.
Ghi nhớ nhanh
- Nắm vững bản chất 4 tính chất OOP và biết cách lấy ví dụ thực tế thay vì học thuộc lòng định nghĩa.
- Luôn chủ động phân tích độ phức tạp Big O khi viết thuật toán để chứng minh tư duy tối ưu hiệu năng.
- Hiểu rõ HTTP Status Codes và phương thức RESTful cơ bản để làm việc hiệu quả với API.
- Phân biệt rõ vùng nhớ Stack và Heap để hiểu cách ngôn ngữ lập trình xử lý biến và đối tượng.