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)
Khóa học Chuyên sâu Package Managerment

Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp

Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.

01

Làm thế nào để tối ưu hóa hiệu năng và quản lý SemVer specifications trong dự án Package Managerment?

Entry

Trong phát triển dự án với Package Managerment, việc tối ưu hóa và quản lý tốt SemVer specifications 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:

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

Làm thế nào để tối ưu hóa hiệu năng và quản lý NuGet package manager trong dự án Package Managerment?

Entry

Trong phát triển dự án với Package Managerment, việc tối ưu hóa và quản lý tốt NuGet package manager 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:

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

Tại sao việc sử dụng lệnh npm install mà không có tệp package-lock.json trong môi trường CI/CD lại gây ra rủi ro về tính nhất quán của mã nguồn?

Junior

Khi không có tệp package-lock.json, lệnh npm install sẽ dựa vào các quy tắc phiên bản được định nghĩa trong package.json (ví dụ như dấu ^ hoặc ~). Điều này dẫn đến việc npm tự động cài đặt phiên bản mới nhất thỏa mãn điều kiện đó tại thời điểm chạy lệnh. Rủi ro bao gồm: 1. Sự không nhất quán giữa môi trường phát triển và môi trường Production do các phiên bản phụ (minor) hoặc bản vá (patch) khác nhau. 2. Các thay đổi không mong muốn từ thư viện bên thứ ba có thể gây lỗi hệ thống (breaking changes). 3. Khó khăn trong việc tái lập lỗi (reproducibility) khi debug. Giải pháp tối ưu là luôn commit tệp package-lock.json vào hệ thống quản trị mã nguồn và sử dụng lệnh npm ci trong môi trường CI/CD để đảm bảo cài đặt chính xác các phiên bản đã được kiểm thử.

04

Làm thế nào để xử lý tình trạng xung đột phiên bản (version conflict) khi hai thư viện con cùng yêu cầu một thư viện mẹ nhưng với các phiên bản khác nhau?

Junior

Trong các trình quản lý gói như npm, cơ chế hoisting cố gắng đưa các dependencies về thư mục node_modules gốc để tiết kiệm không gian. Nếu có xung đột, npm sẽ thực hiện 'nested dependency' (lồng ghép) bằng cách đặt phiên bản khác vào thư mục node_modules của chính gói đó. Cách xử lý: 1. Kiểm tra cây phụ thuộc bằng lệnh npm ls [tên-gói]. 2. Sử dụng tính năng overrides (trong npm 8+) hoặc resolutions (trong yarn) trong tệp package.json để ép buộc sử dụng một phiên bản duy nhất cho toàn bộ dự án. 3. Cập nhật các thư viện con lên phiên bản mới nhất để tương thích với cùng một phiên bản của thư viện mẹ. Việc ép buộc phiên bản cần được kiểm tra kỹ lưỡng thông qua Unit Test để tránh lỗi runtime.

05

Sự khác biệt giữa 'bundledDependencies' và 'dependencies' là gì và khi nào bạn nên sử dụng bundledDependencies trong quá trình đóng gói thư viện?

Junior

Dependencies là danh sách các gói cần thiết để ứng dụng chạy, thường được tải về từ registry (như npmjs.com) khi cài đặt. Ngược lại, bundledDependencies là một mảng các tên gói sẽ được đóng gói trực tiếp vào tệp .tgz khi bạn thực hiện lệnh npm pack. Bạn nên sử dụng bundledDependencies khi: 1. Thư viện của bạn phụ thuộc vào một gói không có sẵn trên registry công cộng. 2. Bạn muốn đảm bảo tính toàn vẹn của các gói phụ thuộc mà không cần kết nối internet khi cài đặt thư viện ở môi trường nội bộ. Lưu ý rằng việc sử dụng bundledDependencies sẽ làm tăng kích thước tệp cài đặt đáng kể, do đó chỉ nên dùng khi thực sự cần thiết.

06

Làm thế nào để kiểm tra và ngăn chặn các gói độc hại (malicious packages) trước khi cài đặt vào dự án?

Junior

Để bảo mật chuỗi cung ứng, lập trình viên cần thực hiện các bước sau: 1. Sử dụng lệnh npm audit để quét các lỗ hổng bảo mật đã biết trong cây phụ thuộc. 2. Kiểm tra kỹ tên gói (typosquatting) để tránh cài nhầm các gói có tên gần giống với thư viện nổi tiếng. 3. Sử dụng các công cụ như Snyk hoặc Socket.dev để phân tích hành vi của gói (ví dụ: gói có cố gắng truy cập network hoặc filesystem trái phép không). 4. Hạn chế sử dụng các gói có ít lượt tải hoặc không được cập nhật trong thời gian dài. 5. Luôn ưu tiên sử dụng tệp lockfile để đảm bảo mã nguồn đã được kiểm duyệt không bị thay đổi bởi các bản cập nhật tự động từ registry.

07

Trong môi trường làm việc nhóm, làm thế nào để đảm bảo tất cả thành viên sử dụng cùng một phiên bản của trình quản lý gói (npm, yarn, pnpm)?

Junior

Việc sử dụng các trình quản lý gói khác nhau có thể tạo ra các tệp lockfile không tương thích và gây lỗi build. Để đồng bộ: 1. Sử dụng thuộc tính 'engines' trong tệp package.json để chỉ định phiên bản node và trình quản lý gói tối thiểu. 2. Sử dụng tệp .npmrc hoặc cấu hình 'packageManager' trong package.json (được hỗ trợ bởi Corepack). 3. Thiết lập quy trình kiểm tra tự động trong CI/CD pipeline để từ chối build nếu trình quản lý gói không đúng với cấu hình dự án. Ví dụ cấu hình trong package.json: "engines": { "node": ">=18.0.0", "npm": ">=9.0.0" }. Việc này giúp tránh các lỗi phát sinh do sự khác biệt về thuật toán phân giải dependency giữa các phiên bản.

08

Sự khác biệt cơ bản giữa tệp khóa phiên bản package-lock.json và yarn.lock là gì, và tại sao việc commit các tệp này lên hệ thống quản lý mã nguồn Git lại đóng vai trò quyết định trong việc duy trì tính nhất quán của môi trường phát triển Enterprise?

Junior

Bản chất vấn đề

Trong môi trường phát triển phần mềm doanh nghiệp, tính nhất quán giữa các môi trường (Development, Staging, Production) là yếu tố sống còn để tránh hiện tượng 'chạy được trên máy tôi nhưng lỗi trên server'. Các tệp khóa phiên bản ra đời để giải quyết bài toán này.

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

Vai trò của thuộc tính engines trong tệp package.json là gì và làm thế nào để cấu hình nó nhằm ngăn chặn các lỗi không tương thích phiên bản Node.js hoặc package manager trong các dự án làm việc nhóm?

Junior

Bản chất vấn đề

Khi phát triển phần mềm theo nhóm, các thành viên thường sử dụng các phiên bản Node.js và NPM khác nhau trên máy cá nhân của họ. Điều này dẫn đến việc sử dụng các tính năng mới của Node.js mà môi trường Production hoặc máy của đồng nghiệp không hỗ trợ, gây ra lỗi runtime khó debug.

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

Sự khác biệt giữadependencies và devDependencies trong tệp package.json là gì, và việc phân loại sai các gói này gây ra hậu quả gì cho các ứng dụng Web trong môi trường Production?

Junior

Bản chất vấn đề

Quản lý dung lượng và tối ưu hóa tài nguyên là tiêu chuẩn quan trọng trong phát triển Web hiện đại. Việc phân biệt rõ ràng giữa thư viện phục vụ cho quá trình chạy ứng dụng và thư viện phục vụ cho quá trình phát triển là nền tảng của tối ưu hóa.

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

Ý nghĩa của các ký hiệu caret (^), tilde (~) và dấu sao (*) trong phiên bản package.json là gì, và rủi ro nào xảy ra nếu sử dụng chúng không đúng cách trong các dự án thương mại điện tử lớn?

Junior

Bản chất vấn đề

Semantic Versioning (SemVer) là chuẩn phân phiên bản gồm ba phần: MAJOR.MINOR.PATCH (ví dụ: 1.4.2). Các ký hiệu định danh trong package.json quyết định cách NPM tự động cập nhật các bản vá lỗi và tính nă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...
12

Mục đích sử dụng của trường scripts trong tệp package.json là gì và làm thế nào để viết các lệnh tự động hóa đa nền tảng (Cross-platform) cho cả hệ điều hành Windows và Linux/macOS?

Junior

Bản chất vấn đề

Trường scripts trong package.json hoạt động như một trình quản lý tác vụ (task runner) thu nhỏ, giúp tự động hóa các công việc từ biên dịch mã nguồn, chạy kiểm thử cho đến triển khai ứng dụng. Tuy nhiên, sự khác biệt về cú pháp dòng lệnh giữa hệ điều hành Windows (CMD/PowerShell) và Linux/macOS (Bash/Zsh) thường gây lỗi khi làm việc nhóm.

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

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

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.

15

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