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)
01

Sự khác biệt giữa Worker Threads và Cluster Module trong Node.js? Khi nào dùng cái nào?

Senior
  • Cluster Module: Nhân bản tiến trình Node.js hiện tại thành nhiều tiến trình con (Child Processes) chia sẻ chung cổng mạng (port) thông qua Load Balancer (Round-Robin). Mỗi tiến trình con có bộ nhớ và instance V8 riêng biệt. Thích hợp cho các tác vụ I/O-bound để tận dụng hết số nhân CPU của server.
  • Worker Threads: Cho phép chạy nhiều luồng (threads) thực thi mã Javascript song song bên trong cùng một tiến trình Node.js. Các luồng này chia sẻ chung vùng nhớ (SharedArrayBuffer). Thích hợp cho các tác vụ nặng về CPU (CPU-bound) như xử lý ảnh, mã hóa dữ liệu.
  • 02

    Cơ chế hoạt động của Stream API trong Node.js? Tại sao nó giúp tối ưu hóa bộ nhớ RAM?

    Senior

    Stream là cơ chế đọc/ghi dữ liệu theo từng phần nhỏ (chunks) liên tục, thay vì tải toàn bộ file vào RAM một lần duy nhất.

    • Ví dụ: Khi đọc một file dung lượng 4GB trên server có RAM 2GB, nếu đọc bình thường bằng fs.readFile, server sẽ bị crash do tràn RAM (Out of Memory). Nhưng nếu dùng fs.createReadStream, dữ liệu được chia nhỏ thành các buffer chunk khoảng vài chục KB và truyền đi liên tục (pipe) sang writable stream, giúp lượng RAM tiêu thụ luôn ở mức rất thấp và ổn định.
    03

    Làm thế nào để phát hiện và xử lý hiện tượng rò rỉ bộ nhớ (Memory Leak) trong ứng dụng Node.js chạy production?

    Senior
  • Phát hiện: Sử dụng các công cụ giám sát APM (như Prometheus, New Relic) để theo dõi biểu đồ tiêu thụ RAM. Nếu RAM tăng liên tục theo dạng bậc thang mà không giảm sau khi chạy GC, hệ thống đang bị rò rỉ bộ nhớ.
  • Phân tích: Chụp Heap Snapshot tại các thời điểm khác nhau bằng cách sử dụng module v8 hoặc cắm --inspect để dùng Chrome DevTools so sánh sự khác biệt (đặc biệt tìm các đối tượng tăng đột biến không bị giải phóng).
  • Nguyên nhân phổ biến: Biến toàn cục (global variables) không được dọn dẹp, closure giữ tham chiếu cũ, hoặc các sự kiện (Event Emitters) quên chưa gọi removeListener.
  • 04

    Tại sao Event Emitters lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Event Emitters là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Event Emitters dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    05

    Tại sao Package Management lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Package Management là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Package Management dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    06

    Tại sao Event Emitters lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Event Emitters là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Event Emitters dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    07

    Tại sao Package Management lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Package Management là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Package Management dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    08

    Tại sao Event Emitters lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Event Emitters là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Event Emitters dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    09

    Tại sao Package Management lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Package Management là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Package Management dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    10

    Tại sao Event Emitters lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Event Emitters là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Event Emitters dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    11

    Tại sao Package Management lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Package Management là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Package Management dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    12

    Tại sao Event Emitters lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Event Emitters là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Event Emitters dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    13

    Tại sao Package Management lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Package Management là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Package Management dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    14

    Tại sao Event Emitters lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Event Emitters là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Event Emitters dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.
    15

    Tại sao Package Management lại đóng vai trò quan trọng khi phát triển ứng dụng Node.js chịu tải cao?

    Senior

    Trong phát triển dự án với Node.js, việc tối ưu hóa và quản lý tốt Package Management là vô cùng quan trọng để đảm bảo tính ổn định và hiệu năng của hệ thống. Dưới đây là các khía cạnh kỹ thuật cốt lõi:

    1. Cơ chế hoạt động: Nắm vững vòng đời và cách thức hoạt động của Package Management dưới runtime để tránh các lỗi logic phổ biến.
    2. Best Practices: Áp dụng các mẫu thiết kế chuẩn, hạn chế tối đa tài nguyên dư thừa và sử dụng các thư viện hỗ trợ tối ưu.
    3. Khắc phục lỗi: Sử dụng công cụ giám sát (APM, Profiling, Logs) để theo dõi hành vi, phát hiện kịp thời các hiện tượng như rò rỉ bộ nhớ hoặc nghẽn luồng.
    4. Tối ưu hóa: Cấu hình các tham số hệ thống phù hợp với quy mô tải thực tế của ứng dụng.

    vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học