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

Khi xử lý các cấu trúc dữ liệu JSON phân cấp có kích thước cực lớn từ phía Client gửi lên, việc sử dụng hàm đệ quy để chuyển đổi khóa (ví dụ từ camelCase sang snake_case) có thể gây treo giao diện hoặc đơ luồng chính (Main Thread Blocking). Giải pháp kiến trúc nào được khuyên dùng?

Middle

Nguyên nhân gây nghẽn luồng

JavaScript chạy trên mô hình đơn luồng (Single-threaded Event Loop). Khi thực hiện duyệt đệ quy sâu trên một cây JSON lớn (hàng chục nghìn node), CPU phải thực thi liên tục mà không nhường quyền điều khiển cho Event Loop để render giao diện, dẫn đến hiện tượng 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...
797

Trong các hệ thống Quản lý Nội dung (CMS) hoặc Thương mại Điện tử, việc quản lý danh mục sản phẩm hoặc danh mục bài viết đa cấp thường sử dụng đệ quy để xây dựng cây danh mục. Khi số lượng cấp độ tăng lên đột ngột, việc truy vấn cơ sở dữ liệu theo kiểu đệ quy (Recursive DB Queries) gây ra hiện tượng gì và giải pháp thay thế tối ưu là gì?

Middle

Vấn đề kiến trúc

  • Hiện tượng N+1 Query Problem: Nếu hàm đệ quy được thực thi kèm theo việc gọi cơ sở dữ liệu để lấy danh mục con ở mỗi cấp độ (ví dụ: lấy danh mục cha, sau đó gọi tiếp DB lấy danh mục con của từng danh mục), số lượng câu lệnh SQL tăng theo cấp số nhân, làm sập cơ sở dữ liệu.

Các giải pháp tối ưu tiêu chuẩn Enterprise

  1. Chiến lược Lazy Loading kết hợp Single Query (Eager Loading with Flattening):
    • Thay vì gọi DB nhiều lần, thực hiện một câu lệnh SQL duy nhất để lấy toàn bộ bảng danh mục về bộ nhớ ứng dụng (Memory).
    • Sử dụng hàm đệ quy trên chính bộ nhớ RAM của ứng dụng để dựng cây danh mục (In-memory Tree Construction). Do thao tác trên RAM cực kỳ nhanh, cách này loại bỏ hoàn toàn gánh nặng cho Database.
  2. Sử dụng Mô hình Lưu trữ Đồ thị trong CSDL (Adjacency List kết hợp Closure Table hoặc Nested Set Model):
    • Closure Table: Lưu trữ mọi mối quan hệ tổ tiên - con cháu trong một bảng phụ riêng, giúp việc truy vấn toàn bộ cây hoặc nhánh con chỉ bằng một câu lệnh JOIN duy nhất mà không cần đệ quy phía Database.
    • Nested Set Model: Lưu trữ dựa trên khoảng giá trị (left, right), cho phép truy vấn toàn bộ cây con cực kỳ nhanh chóng nhưng phức tạp khi thêm/sửa node.

Khuyến nghị thực chiến

Đối với đa số ứng dụng cấp độ Middle, giải pháp Lấy toàn bộ dữ liệu một lần (Single Query) rồi dùng đệ quy In-memory là tối ưu nhất khi số lượng bản ghi danh mục dưới vài chục nghìn, vừa đảm bảo hiệu năng vừa giữ cho mã nguồn dễ bảo trì.

798

Trong môi trường Enterprise, làm thế nào để thực hiện Git Rebase một cách an toàn trên các nhánh dùng chung (Shared Branches) mà không gây ra sự cố cho các thành viên khác trong nhóm?

Middle

Nguyên tắc vàng trong Git là không bao giờ thực hiện Rebase trên các nhánh công cộng (như main, develop, hoặc release) mà nhiều người đang cùng làm việc. Khi bạn Rebase, Git sẽ viết lại lịch sử commit bằng cách tạo ra các commit mới với mã băm (hash) khác biệt. Nếu bạn đẩy (push) các thay đổi này lên server, nó sẽ tạo ra xung đột lịch sử nghiêm trọng cho những người khá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...
799

Cơ chế hoạt động của Git Reflog là gì và tại sao nó được coi là cứu cánh cuối cùng khi thực hiện các thao tác nguy hiểm như Reset hoặc Rebase?

Middle

Git Reflog là một cơ chế ghi lại mọi thay đổi của con trỏ HEAD trong kho lưu trữ cục bộ. Khác với Git Log (thể hiện lịch sử commit của dự án), Reflog theo dõi mọi hành động di chuyển của HEAD, bao gồm cả các commit bị mất do reset hoặc rebase.

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

Làm thế nào để tối ưu hóa dung lượng lưu trữ của một kho lưu trữ Git khi dự án chứa nhiều tệp tin nhị phân (binary files) lớn bằng cách sử dụng Git LFS?

Middle

Git không được thiết kế để quản lý hiệu quả các tệp tin nhị phân lớn (như ảnh, video, tệp thực thi). Mỗi khi bạn thay đổi tệp nhị phân, Git sẽ lưu toàn bộ tệp đó vào lịch sử, làm kho lưu trữ phình to nhanh chó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...
801

Sự khác biệt giữa Git Cherry-pick và Git Merge trong việc quản lý các bản vá lỗi (hotfixes) giữa các nhánh môi trường khác nhau là gì?

Middle

Trong quy trình phát triển Enterprise, đôi khi bạn cần áp dụng một bản sửa lỗi từ nhánh hotfix vào nhánh production mà không muốn trộn toàn bộ các thay đổi khác của nhá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...
802

Tại sao việc sử dụng Git Bisect lại là kỹ thuật tối ưu nhất để tìm ra commit gây lỗi (bug introduction) trong các dự án có lịch sử commit đồ sộ?

Middle

Khi một lỗi xuất hiện nhưng không rõ nó được đưa vào từ lúc nào, việc kiểm tra từng commit thủ công là không khả thi. Git Bisect sử dụng thuật toán tìm kiếm nhị phân (binary search) để xác định commit gây 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...
803

Trong SQL Server, cơ chế hoạt động của Columnstore Index khác biệt như thế nào so với Rowstore Index, và khi nào lập trình viên nên áp dụng Columnstore Index để tối ưu hóa hiệu năng cho các ứng dụng Enterprise?

Middle

1. Bản chất cơ chế hoạt độ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...
804

Sự khác biệt giữa chỉ mục Non-Clustered Index với thuộc tính INCLUDE trong SQL Server là gì, và việc sử dụng mệnh đề INCLUDE giúp giải quyết vấn đề gì trong Execution Plan?

Middle

1. Vấn đề của Non-Clustered Index thông thường

Khi bạn tạo một Non-Clustered Index trên một cột, ví dụ: CREATE INDEX IX_Users_Email ON Users(Email); Nếu câu lệnh truy vấn của bạn là: SELECT Name FROM Users WHERE Email = '[email protected]'; SQL Server sẽ thực hiện một thao tác gọi là Key Lookup (hoặc Row ID Lookup). Sau khi tìm thấy vị trí của dòng thông qua Non-Clustered Index Seek, nó phải nhảy ngược lại Clustered Index (hoặc Heap) để lấy giá trị của cột Name. Thao tác này gây tốn kém chi phí I/O khi số lượng dòng trả về lớ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...
805

Trong SQL Server, cơ chế chia phân vùng bảng (Table Partitioning) hoạt động như thế nào, và lợi ích của nó đối với các bảng dữ liệu lịch sử lớn trong môi trường Enterprise?

Middle

1. Bản chất cơ chế Table Partitioning

Table Partitioning cho phép chia một bảng lớn thành nhiều phần nhỏ hơn (partitions) dựa trên giá trị của một cột xác định (Partition Key). Tuy nhiên, về mặt logic ứng dụng, SQL Server vẫn nhìn nhận và thao tác với nó như một bảng duy nhất. Quá trình này dựa trên 3 thành phầ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...
806

Deadlock (Tắc nghẽn) là gì trong SQL Server? Lập trình viên cần sử dụng những phương pháp và công cụ nào để phát hiện, phân tích và phòng chống Deadlock hiệu quả?

Middle

1. Bản chất của Deadlock

Deadlock xảy ra khi hai hoặc nhiều tiến trình (transactions) không thể tiếp tục thực thi vì mỗi tiến trình đang giữ tài nguyên (khóa - lock) mà tiến trình kia đang yêu cầu. SQL Server sẽ tự động phát hiện tình trạng này bằng cách chọn một tiến trình làm Deadlock Victim và hủy (rollback) tiến trình đó để giải phóng tài nguyên cho tiến trình còn 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...
807

Trong SQL Server, sự khác biệt giữa cấu hình cơ chế Read Committed Snapshot Isolation (RCSI) và mức cô lập Snapshot Isolation là gì? Khi nào nên bật RCSI cho cơ sở dữ liệu doanh nghiệp?

Middle

1. Bản chất khác biệt

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

Làm thế nào để áp dụng Dependency Injection cho các đối tượng có trạng thái (Stateful Objects) trong môi trường đa luồng (Multi-threading) mà vẫn đảm bảo tính an toàn (Thread-safety)?

Middle

Trong môi trường đa luồng, việc inject các đối tượng có trạng thái (Stateful) đòi hỏi sự cẩn trọng cao độ để tránh Race Condition.

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

Tại sao việc sử dụng Dependency Injection Container trong các ứng dụng có kiến trúc Plugin hoặc Module hóa lại gây ra thách thức về quản lý phạm vi (Scope) và cách giải quyết?

Middle

Trong kiến trúc Plugin, mỗi module thường có vòng đời (Lifecycle) riêng biệt và có thể được nạp/gỡ (Load/Unload) động. Việc dùng một Container toàn cục dễ dẫn đến rò rỉ bộ nhớ (Memory Leak) hoặc xung đột dependency.

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

Khi thực hiện Dependency Injection trong các ứng dụng Enterprise, tại sao việc inject trực tiếp 'IConfiguration' hoặc 'IOptions' vào mọi lớp lại được coi là một dấu hiệu của thiết kế chưa tối ưu?

Middle

Việc inject IConfiguration hoặc IOptions vào mọi lớp khiến các lớp bị phụ thuộc vào cấu trúc của file cấu hình (appsettings.json, env variables). Điều này vi phạm nguyên lý Interface Segregation.

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