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

Giải thích khái niệm Graceful Shutdown trong Node.js và tại sao nó cần thiết khi triển khai ứng dụng lên môi trường Production?

Junior

Định nghĩa

Graceful Shutdown là quá trình ứng dụng dừng hoạt động một cách có kiểm soát khi nhận được tín hiệu kết thúc (như SIGTERM hoặc SIGINT). Thay vì dừng ngay lập tức, ứng dụng sẽ hoàn thành các yêu cầu đang xử lý, đóng kết nối database và giải phóng tài nguyên.

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

Trong Solidity, tại sao việc sử dụng biến số kiểu enum lại giúp tối ưu hóa chi phí Gas và quản lý trạng thái tốt hơn so với việc sử dụng chuỗi ký tự (string) để đại diện cho các trạng thái?

Junior

Phân tích kỹ thuật

Trong Solidity, kiểu dữ liệu enum thực chất được lưu trữ dưới dạng số nguyên (uint8) bắt đầu từ 0. Việc sử dụng enum mang lại các lợi ích 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...
1428

Sự khác biệt giữa việc sử dụng modifier và hàm kiểm tra nội bộ (internal function) trong Smart Contract là gì và khi nào nên ưu tiên sử dụng cái nào?

Junior

Phân tích kỹ thuật

  1. Modifier: Được thiết kế để thay đổi hành vi của các hàm một cách khai báo (declarative). Nó thường dùng cho các kiểm tra điều kiện (require) trước khi thực thi hàm chính.
  2. Internal Function: Là các hàm logic có thể tái sử dụng bên trong contract hoặc các contract kế thừa.

So sánh

  • Modifier: Dễ đọc, giúp code sạch hơn khi thực hiện các kiểm tra bảo mật (ví dụ: onlyOwner). Tuy nhiên, nếu logic quá phức tạp, nó có thể làm tăng kích thước bytecode của hàm.
  • Internal Function: Phù hợp cho các logic tính toán cần tái sử dụng nhiều lần trong các hàm khác nhau.

Lưu ý thực chiến

Nên ưu tiên dùng modifier cho các kiểm tra quyền truy cập (Access Control) để tăng tính rõ ràng của mã nguồn. Nếu logic kiểm tra yêu cầu tính toán phức tạp hoặc cần trả về giá trị, hãy sử dụng internal function.

1429

Tại sao việc sử dụng `tx.gasprice` hoặc các tham số liên quan đến thời gian như `block.timestamp` để tạo ra các giá trị ngẫu nhiên (Randomness) trong Smart Contract là không an toàn?

Junior

Phân tích kỹ thuật

Các giá trị như block.timestamp, block.difficulty (trước The Merge), hoặc tx.gasprice đều là các giá trị mà thợ đào (miners) hoặc người xác thực (validators) có thể thao túng ở một mức độ nhất định.

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

Trong Solidity, việc sử dụng `delete` lên một mảng động (dynamic array) có thực sự giải phóng toàn bộ bộ nhớ và giảm chi phí Gas không?

Junior

Phân tích kỹ thuật

Khi bạn gọi delete trên một mảng động trong Solidity:

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

Giải thích khái niệm Reentrancy Attack và cách thức hoạt động của công cụ bảo mật `ReentrancyGuard` trong OpenZeppelin.

Junior

Phân tích kỹ thuật

Reentrancy Attack xảy ra khi một hợp đồng gọi đến một địa chỉ bên ngoài (thường là một contract độc hại) trước khi cập nhật trạng thái nội bộ của chính nó. Contract độc hại có thể gọi ngược lại hàm ban đầu trước khi hàm đó kết thú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...
1432

Làm thế nào để phân biệt rõ ràng giữa phương pháp tiếp cận Top-Down kèm Memoization và Bottom-Up Tabulation trong Dynamic Programming, và khi nào một lập trình viên cấp độ Junior nên ưu tiên sử dụng phương pháp nào trong môi trường phát triển sản phẩm thực tế?

Junior

Bản chất vấn đề

Trong Dynamic Programming (Quy hoạch động), việc giải quyết một bài toán phức tạp bằng cách chia nhỏ thành các bài toán con gối đầu nhau có hai hướng tiếp cận chính:

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

Tại sao việc xác định sai Base Cases (Trường hợp cơ sở) lại dẫn đến lỗi tràn bộ nhớ hoặc kết quả sai lệch trong thuật toán Dynamic Programming, và các bước chuẩn hóa để thiết lập Base Cases an toàn là gì?

Junior

Bản chất vấn đề

Base Cases (Trường hợp cơ sở) chính là mỏ neo dừng lại của đệ quy trong Top-Down hoặc là điểm khởi đầu của vòng lặp trong Bottom-Up. Nếu Base Cases bị thiết lập thiếu, sai giá trị khởi tạo hoặc thiếu điều kiện biên, chương trình sẽ rơi vào vòng lặp vô hạn (Infinite Recursion) dẫn đến lỗi Stack Overflow, hoặc trả về kết quả sai lệch nghiêm trọng do lan truyền giá trị rá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...
1434

Làm thế nào để áp dụng kỹ thuật Space Optimization (Tối ưu hóa không gian) cho bài toán Quy hoạch động một chiều hoặc hai chiều cơ bản như bài toán Cái túi (0/1 Knapsack Problem) trong các hệ thống có tài nguyên hạn chế?

Junior

Bản chất vấn đề

Các bài toán Dynamic Programming thường yêu cầu lưu trữ bảng trạng thái kích thước lớn (ví dụ bảng 2 chiều DP[i][w] với i là số lượng đồ vật và w là trọng lượng tối đa). Trong các hệ thống Enterprise có dung lượng RAM hạn chế hoặc khi xử lý dữ liệu lớn, việc duy trì toàn bộ bảng này gây lãng phí bộ nhớ nghiêm trọng (Memory Footprint cao).

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

Khi nào một lập trình viên nên chọn Dynamic Programming thay vì thuật toán Greedy (Tham lam) khi giải quyết các bài toán tối ưu hóa trong phát triển phần mềm, và rủi ro gì sẽ xảy ra nếu chọn nhầm?

Junior

Bản chất vấn đề

Cả Dynamic Programming và Greedy đều là các kỹ thuật dùng để giải quyết các bài toán tối ưu hóa. Tuy nhiên, chúng có nền tảng toán học và điều kiện áp dụng hoàn toàn khác nhau. Lập trình viên cấp độ Junior thường hay nhầm lẫn và chọn Greedy vì sự đơn giản của nó.

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

Làm thế nào để thiết kế và triển khai State Transitions (Chuyển đổi trạng thái) một cách chính xác trong các bài toán Quy hoạch động chuỗi (String DP) như bài toán Longest Common Subsequence (LCS)?

Junior

Bản chất vấn đề

State Transitions (Chuyển đổi trạng thái) là trái tim của mọi thuật toán Dynamic Programming. Đối với các bài toán liên quan đến chuỗi ký tự (như LCS - Longest Common Subsequence hoặc Edit Distance), việc xác định sai định nghĩa trạng thái hoặc sai mối quan hệ chuyển đổi sẽ làm sụp đổ toàn bộ giải phá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...
1437

Khi xây dựng một trang thương mại điện tử cấp độ Junior, bạn cần sắp xếp danh sách sản phẩm theo giá hoặc tên. Tại sao trong môi trường JavaScript thực tế, phương thức Array.prototype.sort() mặc định lại có thể gây ra kết quả không chính xác với số nguyên lớn, và cách khắc phục tối ưu nhất là gì?

Junior

Bản chất vấn đề

Trong JavaScript, theo đặc tả ECMAScript, phương thức Array.prototype.sort() mặc định chuyển đổi tất cả các phần tử thành chuỗi (string) trước khi tiến hành so sánh theo mã Unicode (lexicographical sorting). Do đó, khi bạn có một mảng các con số như [10, 5, 20], kết quả trả về sau khi sắp xếp sẽ là [10, 20, 5] vì chuỗi '10' và '20' đứng trước chuỗi '5' theo bảng mã Unicode.

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

Trong quá trình phát triển ứng dụng web, lập trình viên thường phải đối mặt với bài toán sắp xếp mảng chứa tiếng Việt có dấu. Tại sao việc dùng sort thông thường không chính xác và làm thế nào để giải quyết vấn đề này theo chuẩn quốc tế hóa (i18n)?

Junior

Bản chất vấn đề

Mặc định, khi bạn sắp xếp các chuỗi tiếng Việt bằng toán tử so sánh lớn hơn/nhỏ hơn (> hoặc <) hoặc hàm sort thông thường, JavaScript sẽ so sánh dựa trên mã Unicode thô của các ký tự. Do các ký tự có dấu trong Unicode không nằm liền kề nhau theo bảng chữ cái tiếng Việt (ví dụ các nguyên âm có dấu được đặt ở các dải mã khác nhau hoặc được tạo thành từ tổ hợp ký tự combining characters), kết quả sắp xếp sẽ bị sai lệch hoàn toàn so với thứ tự bảng chữ cái tiếng Việt chuẩn (a, ă, â, b, 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...
1439

Tính ổn định (Stability) trong thuật toán sắp xếp là gì? Tại sao tính chất này lại đóng vai trò quan trọng khi xử lý các bảng dữ liệu (Data Tables) có nhiều cột sắp xếp trong các ứng dụng Enterprise?

Junior

Định nghĩa tính ổn định (Stability)

Một thuật toán sắp xếp được gọi là ổn định (Stable) nếu nó bảo toàn thứ tự ban đầu của các phần tử có khóa (key) bằng nhau. Nói cách khác, nếu phần tử A xuất hiện trước phần tử B trong mảng gốc và cả hai có cùng giá trị khóa, thì sau khi sắp xếp, A vẫn sẽ đứng trước B.

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

Khi xử lý mảng chứa hàng triệu đối tượng dữ liệu trong JavaScript, việc gọi hàm sort trực tiếp có thể làm đóng băng (freeze) luồng chính (Main Thread). Giải pháp kiến trúc nào được sử dụng để tối ưu hóa trải nghiệm người dùng trong trường hợp này?

Junior

Bản chất vấn đề

JavaScript chạy trên một mô hình đơn luồng (Single-threaded Event Loop). Khi bạn thực hiện các thuật toán sắp xếp nặng (ví dụ sắp xếp mảng 1.000.000 phần tử phức tạp), CPU phải thực hiện hàng triệu phép so sánh liên tục. Điều này chiếm trọn Main Thread, khiến trình duyệt không thể xử lý các sự kiện render giao diện (UI Rendering), phản hồi thao tác click của người dùng, dẫn đến lỗi giao diện bị đơ (UI Freezing).

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