Thư Viện Câu Hỏi Phỏng Vấn

Tổng hợp các câu hỏi tuyển dụng thực tế theo nhiều cấp độ từ Entry đến Expert để bạn tự tin chinh phục nhà tuyển dụng.

Tất cả công nghệ .Net (39) ADO.NET (33) Agile scrum (43) Android (44) Angular (121) API Design (53) Arrays (19) ASP.NET (52) ASP.NET MVC (35) ASP.NET Web API (32) Availability & Reliability (2) Azure (53) Backtracking (7) Big-O Notation (16) Binary Tree (19) Bit Manipulation (9) Blockchain (42) C# (105) Caching (2) CAP Theorem (2) CDN (2) Concurrency (2) Cosmos DB (50) Cryptography (4) CSS (63) Data Structures (69) Databases (50) DDD (2) Dependency Injection (4) Design pattern (23) Devops (32) Divide & Conquer (2) Docker (38) Dynamic Programming (10) Entity Framework (57) Fibonacci Series (4) Flutter (136) Git (63) Go lang (60) Graph Theory (19) GraphQL (71) Greedy Algorithms (7) Hash Tables (25) Heaps and Maps (10) HTML (73) Ionic (29) IOS (75) Java (141) Javascript (137) jQuery (95) Kotlin (60) Kubernetes (27) Laravel (90) Layering & Middleware (2) Linked Lists (17) LINQ (30) Load Balancing (2) Microservices (30) Mongodb (27) MySQL (58) Net core (66) Node.js (119) NoSQL (2) Objective-C (33) OOP (75) Package Managerment (60) PHP (78) PostgreSQL (50) PWA (22) Python (82) Queues (11) React Native (38) React.js (116) Reactive Programming (11) Recursion (5) Redis (25) Ruby (79) Ruby on Rails (121) Rust (88) Searching (18) SOA (2) Software Architecture (3) Software Testing (11) Sorting (13) Spring (78) SQL (43) SQL Server (66) Stacks (10) Strings (17) Swift (89) Systems Design (50) T-SQL (43) Trees (31) Trie (8) Typescript (100) Unit testing (22) UX Design (74) Vue.js (84) Web security (45) WebSockets (25) Xamarin (81)
1786

Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Sharding & Partitioning trong chủ đề Systems Design?

Junior

Khi thiết kế hệ thống ở quy mô lớn với Systems Design, việc giải quyết bài toán Sharding & Partitioning yêu cầu kiến thức vững chắc về kiến trúc phân tán:

  1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
  2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
  3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
1787

Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề SQL vs NoSQL trong chủ đề Databases?

Junior

Khi thiết kế hệ thống ở quy mô lớn với Databases, việc giải quyết bài toán SQL vs NoSQL yêu cầu kiến thức vững chắc về kiến trúc phân tán:

  1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
  2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
  3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
1788

Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề API Versioning trong chủ đề API Design?

Junior

Khi thiết kế hệ thống ở quy mô lớn với API Design, việc giải quyết bài toán API Versioning yêu cầu kiến thức vững chắc về kiến trúc phân tán:

  1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
  2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
  3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
1789

Closure trong Javascript là gì?

Middle

Closure là sự kết hợp của một hàm được bao quanh (bọc) bởi các tham chiếu đến trạng thái xung quanh của nó (môi trường lexical). Nói cách khác, một closure cho phép một hàm bên trong truy cập vào phạm vi (scope) của hàm bên ngoài nó ngay cả sau khi hàm bên ngoài đã thực thi xong.

1790

Sự khác biệt giữa Microtasks (như Promise callback, queueMicrotask) và Macrotasks (như setTimeout, setInterval) trong Event Loop của JavaScript?

Middle

Event Loop quản lý việc thực thi mã nguồn qua hai hàng đợi khác nhau:

  • Microtask Queue: Chứa các tác vụ cần thực thi ngay lập tức sau khi Call Stack hiện tại trống, trước khi Event Loop chuyển sang render giao diện hoặc chạy Macrotask tiếp theo. Ví dụ: Promise.then/catch/finally, MutationObserver, queueMicrotask.
  • Macrotask Queue (Task Queue): Chứa các tác vụ I/O, timers. Ví dụ: setTimeout, setInterval, setImmediate (Node.js), các sự kiện người dùng (click, scroll).
  • Quy trình: Cứ mỗi vòng lặp, sau khi chạy xong Call Stack, trình duyệt sẽ dọn sạch toàn bộ các tác vụ trong Microtask Queue (bao gồm cả các microtask mới phát sinh trong lúc chạy) rồi mới lấy ra duy nhất một Macrotask để thực thi.
1791

StatefulWidget và StatelessWidget khác nhau như thế nào trong Flutter?

Middle

Trong Flutter, sự khác biệt cốt lõi giữa hai loại widget này là khả năng thay đổi trạng thái:

  • StatelessWidget: Là widget bất biến (immutable). Khi đã được tạo, các thuộc tính của nó không thể thay đổi. Thích hợp cho các UI tĩnh như Icon, Text, Label.
  • StatefulWidget: Là widget động, có thể thay đổi trạng thái (state) trong suốt vòng đời của nó nhờ class State đi kèm. Khi trạng thái thay đổi, hàm setState() được gọi để kích hoạt việc render lại giao diện.
1792

Vòng đời (Lifecycle) của Component trong Vue 3?

Middle

Vue 3 sử dụng Composition API và cung cấp các lifecycle hooks như onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted để cho phép lập trình viên chạy code tại các thời điểm cụ thể của component.

1793

Generics trong TypeScript là gì?

Middle

Generics cung cấp khả năng tạo ra các thành phần (như Class, Function, Interface) có thể tái sử dụng hoạt động trên nhiều kiểu dữ liệu khác nhau mà vẫn đảm bảo tính an toàn kiểu dữ liệu (type safety) tại thời điểm compile, thay vì phải dùng kiểu any.

1794

Sự khác biệt về mục đích sử dụng và cơ chế hoạt động của useMemo và useCallback trong React?

Middle

Cả hai đều dùng để tối ưu hóa hiệu năng bằng cách ghi nhớ (memoize) để tránh tính toán lại không cần thiết giữa các lần re-render:

  • useMemo: Ghi nhớ kết quả trả về của một phép tính toán phức tạp. Nó chỉ tính toán lại khi một trong các dependency thay đổi.
  • useCallback: Ghi nhớ chính bản thân function (reference). Thích hợp khi truyền callback function xuống các component con đã được bọc bởi React.memo, tránh việc component con bị re-render do tham chiếu hàm bị thay đổi ở mỗi lần render cha.
1795

Custom Hooks trong React là gì? Tại sao chúng ta cần sử dụng chúng?

Middle

Custom Hooks là các hàm Javascript thông thường có tên bắt đầu bằng từ khóa use và có thể gọi các React Hooks khác bên trong.

  • Vai trò: Giúp tách biệt phần logic xử lý trạng thái (stateful logic) ra khỏi component UI. Điều này cho phép tái sử dụng logic đó giữa nhiều component khác nhau một cách dễ dàng và viết unit test cho phần logic độc lập với UI.
1796

Middleware Pattern trong Express.js hoạt động như thế nào? Giải thích hàm next()?

Middle

Express.js hoạt động dựa trên một chuỗi các hàm Middleware. Mỗi middleware nhận vào 3 tham số: req (request), res (response), và next (hàm tiếp theo).

Khi một request gửi đến, nó sẽ đi qua các middleware theo thứ tự khai báo. Mỗi middleware có thể sửa đổi request/response hoặc dừng luồng xử lý và trả về phản hồi ngay lập tức. Nếu muốn chuyển tiếp quyền kiểm soát cho middleware tiếp theo trong pipeline, bắt buộc phải gọi hàm next(). Nếu quên gọi next() và không trả về response, request sẽ bị treo vô hạn (hang).

1797

Spring Beans và ApplicationContext là gì? Giải thích các loại Scope của Bean trong Spring?

Middle
  • Spring Beans: Là các đối tượng được quản lý bởi Spring IoC Container.
  • ApplicationContext: Là container chính của Spring chịu trách nhiệm khởi tạo, cấu hình và quản lý vòng đời của các beans.
  • Bean Scopes:
    • singleton (Mặc định): Chỉ tạo duy nhất một thực thể bean cho toàn bộ ApplicationContext.
    • prototype: Tạo một thực thể bean mới mỗi khi có yêu cầu truy xuất.
    • request (Web): Tạo một thực thể bean mới cho mỗi HTTP request.
    • session (Web): Tạo một thực thể bean mới cho mỗi HTTP session.
  • 1798

    Sự khác biệt về cơ chế lưu trữ và hiệu năng giữa ArrayList và LinkedList?

    Middle
  • ArrayList: Sử dụng một mảng động (dynamic array) nằm liên tục trong bộ nhớ dưới nền. Truy cập ngẫu nhiên phần tử cực nhanh O(1) qua chỉ số. Tuy nhiên, thao tác thêm/xóa phần tử ở giữa hoặc đầu mảng rất chậm O(n) vì phải sao chép và dịch chuyển các phần tử khác.
  • LinkedList: Sử dụng cấu trúc danh sách liên kết đôi, các node nằm rải rác trong bộ nhớ và liên kết với nhau qua con trỏ. Truy cập ngẫu nhiên chậm O(n) vì phải duyệt từ đầu/cuối danh sách. Tuy nhiên, việc thêm/xóa phần tử tại vị trí bất kỳ cực nhanh O(1) sau khi đã tìm thấy node đó.
  • 1799

    Kỹ thuật Hai con trỏ (Two Pointers) được ứng dụng trong những dạng bài toán nào trên mảng? Cho ví dụ?

    Middle

    Kỹ thuật Hai con trỏ sử dụng hai biến trỏ chạy với tốc độ hoặc hướng khác nhau trên mảng để giải quyết bài toán mà không cần lặp lồng nhau, giảm độ phức tạp từ O(n^2) xuống O(n):

    • Ứng dụng phổ biến:
      1. Tìm cặp số có tổng bằng X trên mảng đã sắp xếp: Một con trỏ ở đầu (left = 0) và một ở cuối (right = n-1). Nếu tổng lớn hơn X thì dịch right sang trái, ngược lại dịch left sang phải.
      2. Đảo ngược mảng: Hoán vị hai phần tử ở leftright, sau đó thu hẹp khoảng cách cho đến khi chúng gặp nhau.
      3. Phát hiện chu trình (Fast/Slow pointers).
    1800

    So sánh cơ chế đồng thuận Proof of Work (PoW) và Proof of Stake (PoS) trong mạng lưới Blockchain?

    Middle
  • Proof of Work (PoW): Các thợ đào (miners) phải cạnh tranh để giải quyết một câu đố toán học phức tạp bằng sức mạnh phần cứng (hash power). Hệ thống cực kỳ an toàn, phi tập trung tốt nhưng tiêu tốn lượng điện năng khổng lồ và tốc độ giao dịch chậm.
  • Proof of Stake (PoS): Thay thế thợ đào bằng các trình xác thực (validators) - những người khóa một lượng tiền điện tử (hot stake) của họ làm tài sản thế chấp. Hệ thống chọn ngẫu nhiên validator để đóng block dựa trên tỷ lệ stake. Thân thiện với môi trường, tốc độ giao dịch nhanh hơn nhưng có nguy cơ tích lũy quyền lực và lỗ hổng "Nothing at Stake".
  • vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học