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.
766

Làm thế nào để phân biệt khi nào nên sử dụng Interface và khi nào nên sử dụng Abstract Class trong thiết kế hệ thống hướng đối tượng?

Junior

Bản chất vấn đề

Đây là câu hỏi kinh điển trong phỏng vấn Junior. Cả Interface và Abstract Class đều dùng để đạt được tính trừu tượng (Abstraction), nhưng chúng phục vụ các mục đích thiết kế kiến trúc hoàn toàn khác nhau.

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...
767

Trong lập trình hướng đối tượng, tại sao nguyên lý Single Responsibility Principle (SRP) lại giúp giảm thiểu xung đột mã nguồn (Merge Conflicts) khi làm việc nhóm?

Junior

Bản chất vấn đề

Single Responsibility Principle (SRP) phát biểu rằng: "Một class chỉ nên có duy nhất một lý do để thay đổi". Nghĩa là mỗi class chỉ nên đảm nhận một nhiệm vụ hoặc chức năng duy nhất trong hệ thố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...
768

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...
769

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.

770

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...
771

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.

772

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...
773

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...
774

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...
775

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...
776

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...
777

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...
778

Làm thế nào để áp dụng Hick's Law trong việc thiết kế giao diện đăng ký tài khoản nhiều bước để giảm tỷ lệ bỏ dở cho người dùng?

Junior

Bản chất của Hick's Law

Hick's Law phát biểu rằng thời gian ra quyết định của một cá nhân tăng lên theo lô-ga-rít với số lượng và độ phức tạp của các lựa chọn có sẵn. Trong các biểu mẫu đăng ký doanh nghiệp Enterprise, việc hiển thị toàn bộ các trường thông tin trên một màn hình duy nhất sẽ làm tăng Cognitive Load và khiến người dùng cảm thấy ngợp.

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...
779

Những nguyên tắc cốt lõi nào cần tuân thủ khi thiết kế hệ thống thông báo lỗi (Error States và Validation) trong ứng dụng Web doanh nghiệp?

Junior

Tầm quan trọng của Error States trong UX Design

Thông báo lỗi tồi là một trong những nguyên nhân hàng đầu gây ức chế cho người dùng trong các hệ thống phần mềm doanh nghiệp. Hệ thống thông báo lỗi hiệu quả không chỉ báo hiệu sự cố mà phải hướng dẫn người dùng cách khắc phục.

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...
780

Làm thế nào để tối ưu hóa trải nghiệm người dùng đối với các tính năng tìm kiếm nâng cao (Advanced Search & Filters) trong hệ thống quản trị dữ liệu lớn?

Junior

Thách thức trong việc thiết kế tìm kiếm dữ liệu lớn

Khi số lượng bản ghi trong cơ sở dữ liệu lên tới hàng triệu, việc cung cấp một thanh tìm kiếm đơn giản là không đủ. Người dùng doanh nghiệp cần các bộ lọc kết hợp nhiều điều kiện (Multi-criteria filtering).

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