Mở đăng ký khóa học Fullstack qua Zoom. Tham khảo tại đây

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.

Interactive Practice Tổng cộng 4,442 câu hỏi độc bản

Luyện Tập Phỏng Vấn Thử

Mô phỏng áp lực phỏng vấn thật với đồng hồ đếm ngược từng câu, tự đánh giá phản xạ và đo lường độ sẵn sàng của bạn.

Vui lòng đăng nhập để tham gia luyện tập và lưu tiến độ phỏng vấn.
Tất cả công nghệ .Net (39) ADO.NET (44) Agile scrum (33) Android (40) Angular (40) API Design (40) Arrays (40) ASP.NET (42) ASP.NET MVC (40) ASP.NET Web API (49) Availability & Reliability (40) Azure (49) Backtracking (40) Big-O Notation (35) Binary Tree (40) Bit Manipulation (40) Blockchain (45) C# (45) Caching (50) CAP Theorem (45) CDN (45) Concurrency (49) Cosmos DB (44) Cryptography (40) CSS (40) Data Structures (40) Databases (35) DDD (42) Dependency Injection (50) Design pattern (45) Devops (50) Divide & Conquer (40) Docker (43) Dynamic Programming (40) Entity Framework (40) Fibonacci Series (35) Flutter (40) Git (40) Go lang (40) Graph Theory (40) GraphQL (40) Greedy Algorithms (40) Hash Tables (40) Heaps and Maps (35) HTML (40) Ionic (45) IOS (45) Java (73) Javascript (81) jQuery (40) Kotlin (50) Kubernetes (11) Laravel (41) Layering & Middleware (44) Linked Lists (45) LINQ (40) Load Balancing (45) Microservices (44) Mongodb (45) MySQL (44) Net core (44) next.js (52) Node.js (40) NoSQL (48) Objective-C (40) OOP (44) Package Managerment (50) PHP (40) PostgreSQL (44) PWA (40) Python (41) Queues (44) React Native (48) React.js (45) Reactive Programming (50) Recursion (45) Redis (40) Ruby (44) Ruby on Rails (48) Rust (40) Searching (45) SOA (42) Software Architecture (44) Software Testing (40) Sorting (48) Spring (45) SQL (37) SQL Server (45) Stacks (44) Strings (50) Swift (45) System Design (56) Systems Design (7) T-SQL (39) Trees (49) Trie (35) Typescript (44) Unit testing (49) UX Design (50) Vue.js (50) Web security (40) WebSockets (49) Xamarin (40)
1321

Trong môi trường phát triển NodeJS, sự khác biệt cụ thể giữa chế độ cài đặt Global và Local packages là gì và khi nào một Junior Developer nên sử dụng từng chế độ này?

Junior

Bản chất cơ chế hoạt động

  • Cài đặt Local (Cục bộ): Các gói thư viện được tải xuống và lưu trữ trực tiếp trong thư mục node_modules của dự án hiện tại. Tệp package.json và package-lock.json sẽ ghi nhận các phụ thuộc này. Đây là cách tiếp cận tiêu chuẩn cho hầu hết các thư viện mã nguồn và công cụ phụ thuộc trực tiếp vào mã nguồn của ứng dụng.
  • Cài đặt Global (Toàn cục): Các gói thư viện được cài đặt vào một thư mục chung của hệ thống điều hành (ví dụ: /usr/local/lib/node_modules trên macOS/Linux hoặc thư mục AppData trên Windows). Các gói này thường là các dòng lệnh thực thi (CLI tools) dùng chung cho nhiều dự án khác nhau như create-react-app, nodemon, hoặc typescript.

Khi nào nên sử dụng từng chế độ

  • Sử dụng Local: Cho tất cả các dependency và devDependency liên quan trực tiếp đến dự án để đảm bảo tính nhất quán giữa các môi trường phát triển của các lập trình viên khác nhau và trên hệ thống CI/CD.
  • Sử dụng Global: Chỉ dành cho các công cụ dòng lệnh (CLI tools) hỗ trợ quá trình phát triển mà không gắn kết mã nguồn với logic nghiệp vụ của ứng dụng cụ thể.

Ví dụ minh họa

Cài đặt công cụ chạy lại server tự động dưới dạng Local devDependency thay vì Global:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1322

Tại sao việc thực thi lệnh npm prune lại quan trọng trong các môi trường triển khai Production và nó khác biệt như thế nào so với việc chạy npm install thông thường?

Junior

Bản chất cơ chế hoạt động

  • npm install thông thường: Khi chạy trên môi trường Production, nếu cấu hình thiếu cờ định hướng, npm có thể cài đặt cả các gói nằm trong mục devDependencies (các công cụ chỉ dùng cho việc phát triển và kiểm thử như Jest, ESLint, Webpack).
  • npm prune: Lệnh này có nhiệm vụ quét tệp package.json và thư mục node_modules hiện tại, sau đó tiến hành gỡ bỏ hoàn toàn bất kỳ gói thư viện nào không được liệt kê trong phần dependencies của tệp cấu hình.

Tác động đến hiệu năng và bảo mật

  • Giảm dung lượng hình ảnh Docker (Docker Image Size): Việc loại bỏ các devDependencies giúp thu gọn đáng kể kích thước gói triển khai, tối ưu hóa tốc độ đẩy và kéo image trên các registry.
  • Tăng cường bảo mật: Giảm thiểu bề mặt tấn công (attack surface) bằng cách loại bỏ các thư viện kiểm thử hoặc công cụ biên dịch không cần thiết có thể chứa các lỗ hổng bảo mật tiềm ẩn trên môi trường Production.

Ví dụ minh họa quy trình CI/CD chuẩn

npm ci --omit=dev
npm prune

Lưu ý kinh nghiệm thực chiến

Trong các pipeline CI/CD hiện đại, thay vì dùng npm install kèm theo npm prune, các lập trình viên nên sử dụng trực tiếp lệnh npm ci --omit=dev để tự động bỏ qua toàn bộ devDependencies ngay từ bước cài đặt ban đầu, giúp tiết kiệm thời gian và đảm bảo độ sạch sẽ cho thư mục node_modules.

1323

Làm thế nào để xử lý tình trạng lỗi EACCES (Permission Denied) khi thực hiện cài đặt các gói NPM toàn cục mà không cần phải sử dụng quyền root (sudo) trên hệ thống Linux hoặc macOS?

Junior

Bản chất nguyên nhân lỗi

Lỗi EACCES xảy ra khi tài khoản người dùng hiện tại không có quyền ghi (write permissions) vào thư mục cài đặt global mặc định của NodeJS (thường thuộc quyền sở hữu của người dùng root). Việc sử dụng lệnh sudo npm install -g để khắc phục là một thói quen nguy hiểm vì nó làm thay đổi quyền sở hữu của các tệp cấu hình hệ thống và có thể tạo ra các lỗ hổng bảo mật nghiêm trọng.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1324

Sự khác biệt cốt lõi giữa lệnh npm install và npm ci là gì, và tại sao các kỹ sư phần mềm luôn được khuyến nghị sử dụng npm ci trong môi trường CI/CD?

Junior

Bản chất cơ chế hoạt động

  • npm install: Được thiết kế dành cho môi trường phát triển cục bộ (local development). Lệnh này có khả năng tự động cập nhật tệp package-lock.json nếu phát hiện thấy sự không khớp nhẹ, đồng thời phân tích cú pháp cây phụ thuộc và có thể thực hiện các thuật toán giải quyết phiên bản động.
  • npm ci (Clean Install): Được thiết kế chuyên biệt cho các môi trường tự động hóa như CI/CD pipelines. Lệnh này yêu cầu sự tồn tại bắt buộc của tệp package-lock.json. Nó sẽ xóa sạch thư mục node_modules hiện có trước khi cài đặt và tiến hành cài đặt chính xác từng phiên bản gói được khóa trong tệp lock file mà không thực hiện bất kỳ sự thay đổi nào đối với tệp này.

Các tiêu chí so sánh chuyên sâu

  1. Tốc độ: npm ci thường nhanh hơn đáng kể trong môi trường CI vì nó bỏ qua các bước phân tích cây phụ thuộc phức tạp.
  2. Tính toàn vẹn (Determinism): npm ci đảm bảo 100% rằng mọi môi trường từ máy cá nhân đến máy chủ Production đều chạy đúng một phiên bản mã nguồn và dependencies giống hệt nhau, ngăn chặn triệt để lỗi 'trên máy tôi chạy bình thường'.

Ví dụ minh họa trong tệp cấu hình GitHub Actions

- name: Install dependencies
  run: npm ci

Lưu ý kinh nghiệm thực chiến

Nếu tệp package.json và tệp package-lock.json không đồng bộ với nhau, lệnh npm ci sẽ lập tức báo lỗi và dừng quá trình xây dựng. Đây là cơ chế bảo vệ cực kỳ quan trọng giúp đội ngũ phát hiện sớm các thay đổi chưa được đồng bộ hóa trong mã nguồn.

1325

Nghĩa vụ và cách thức hoạt động của lệnh npm init so với việc tạo thủ công tệp package.json trong một dự án phần mềm mới là gì?

Junior

Bản chất cơ chế hoạt động

  • npm init: Là một tiện ích dòng lệnh tương tác giúp lập trình viên khởi tạo một dự án NodeJS mới bằng cách sinh ra tệp package.json thông qua các câu hỏi cấu hình cơ bản (tên dự án, phiên bản, mô tả, tệp điểm vào entry point, tác giả, giấy phép).
  • Khởi tạo thủ công: Lập trình viên tự tạo một tệp package.json trống và tự viết các thuộc tính JSON bằng tay.

Các trường dữ liệu bắt buộc chuẩn Enterprise trong package.json

Khi khởi tạo, một tệp package.json chuẩn mực cần đảm bảo các trường tối thiểu sau để phục vụ cho việc quản lý và kiểm tra:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1326

Trong Objective-C, tại sao việc sử dụng Category để ghi đè (override) các phương thức của lớp gốc lại được coi là một hành động nguy hiểm và cần tránh?

Junior

Việc ghi đè phương thức trong Category được coi là hành động nguy hiểm vì các lý do sau:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1327

Hãy giải thích sự khác biệt giữa việc sử dụng 'atomic' và 'nonatomic' trong khai báo thuộc tính (property) và tác động của chúng đến hiệu năng ứng dụng?

Junior

Trong Objective-C, thuộc tính 'atomic' và 'nonatomic' quyết định cách thức truy cập dữ liệu trong môi trường đa luồng:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1328

Cơ chế 'Method Swizzling' là gì và những rủi ro tiềm ẩn khi áp dụng kỹ thuật này trong dự án Enterprise?

Junior

Method Swizzling là kỹ thuật thay đổi triển khai (implementation) của một phương thức tại runtime bằng cách hoán đổi các Selector.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1329

Tại sao việc sử dụng 'self' bên trong một Block lại dễ dẫn đến Retain Cycle và cách khắc phục bằng 'weak-strong dance'?

Junior

Khi một đối tượng sở hữu một Block, và Block đó lại giữ một tham chiếu mạnh (strong reference) tới đối tượng đó (thông qua 'self'), một vòng lặp tham chiếu (Retain Cycle) sẽ xảy ra, khiến đối tượng không bao giờ được giải phóng.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1330

Trong Objective-C, sự khác biệt giữa 'id' và 'instancetype' khi khai báo kiểu trả về cho các phương thức khởi tạo (init) là gì?

Junior

Sự khác biệt nằm ở khả năng kiểm tra kiểu dữ liệu của trình biên dịch (Compiler Type Checking):

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1331

Trong quá trình thực hiện Unit Testing cho các ứng dụng phần mềm doanh nghiệp, làm thế nào để áp dụng kỹ thuật Mocking và Stubbing nhằm cô lập thành phần cần kiểm thử?

Junior

Khi phát triển phần mềm theo tiêu chuẩn Enterprise, việc kiểm thử từng thành phần riêng lẻ (Unit Testing) đòi hỏi lập trình viên phải cô lập đối tượng cần kiểm thử khỏi các phụ thuộc bên ngoài như Database, Third-party API hoặc File System.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1332

Trong kiểm thử tự động, tại sao kỹ thuật Parameterized Testing lại quan trọng và cách áp dụng nó để tối ưu hóa việc kiểm thử các hàm tính toán logic phức tạp?

Junior

Khi xây dựng các kịch bản kiểm thử, lập trình viên thường gặp tình huống phải kiểm tra một hàm logic với nhiều tập dữ liệu đầu vào và kết quả kỳ vọng khác nhau. Thay vì viết lặp lại nhiều hàm test có cấu trúc giống nhau, Parameterized Testing là giải pháp tối ưu.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1333

Làm thế nào để thiết kế các kịch bản kiểm thử tích hợp (Integration Testing) cho một RESTful API tương tác với cơ sở dữ liệu quan hệ trong môi trường phát triển?

Junior

Kiểm thử tích hợp (Integration Testing) ở tầng API đóng vai trò xác thực rằng các tầng Controller, Service và Database tương tác chính xác với nhau, không chỉ dựa vào các đối tượng giả lập (Mock).

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1334

Trong quy trình kiểm thử tự động, làm thế nào để xử lý các vấn đề liên quan đến bất đồng bộ (Asynchronous Operations) như Promise, Callback hoặc Timer mà không gây ra lỗi timeout hoặc test chạy sai?

Junior

Các ứng dụng hiện đại sử dụng rất nhiều lập trình bất đồng bộ (Asynchronous Programming). Nếu lập trình viên không xử lý đúng cách trong mã nguồn kiểm thử, test runner sẽ kết thúc trước khi kết quả trả về, dẫn đến hiện tượng Test Pass giả (False Positive).

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
1335

Làm thế nào để thiết lập và đo lường độ bao phủ mã nguồn (Code Coverage) nhằm đánh giá chất lượng bộ kiểm thử tự động trong các dự án phần mềm?

Junior

Code Coverage là một chỉ số định lượng giúp đội ngũ phát triển biết được phần nào của mã nguồn đã được thực thi thông qua bộ kiểm thử tự động (Unit và Integration Tests).

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
High-Ticket Mentoring
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?

Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.

AI Resume Scanner
Kiểm Tra CV Chuẩn ATS Miễn Phí

Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.

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