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

Trong ASP.NET Core, tại sao việc sử dụng Data Transfer Object (DTO) thay vì trả về trực tiếp Entity Framework Core Model lại là một quy tắc quan trọng trong kiến trúc Enterprise?

Junior

Việc sử dụng DTO mang lại ba lợi ích cốt lõi trong phát triển phần mề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...
317

Cơ chế Data Seeding trong Entity Framework Core là gì và làm thế nào để thực hiện nó một cách an toàn trong môi trường Production?

Junior

Data Seeding là quá trình khởi tạo dữ liệu ban đầu cho Database khi ứng dụng khởi chạy hoặc khi thực hiện Migration.

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

Trong ASP.NET Core, khái niệm Options Pattern là gì và tại sao nó lại ưu việt hơn việc đọc trực tiếp giá trị từ IConfiguration?

Junior

Options Pattern là cách tiếp cận sử dụng các class POCO (Plain Old CLR Object) để đại diện cho các nhóm cấu hình trong tệp appsettings.json.

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

Sự khác biệt giữa việc sử dụng AddTransient, AddScoped và AddSingleton khi đăng ký Service trong ASP.NET Core là gì? Hãy nêu một ví dụ thực tế cho mỗi loại.

Junior

Sự khác biệt nằm ở thời điểm khởi tạo và vòng đời của đối 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...
320

Trong ASP.NET Core, làm thế nào để thực hiện việc phân trang (Pagination) dữ liệu một cách hiệu quả từ Database và tại sao không nên dùng .ToList() trước khi thực hiện .Skip() và .Take()?

Junior

Việc sử dụng .ToList() trước khi phân trang sẽ ép buộc Entity Framework Core tải toàn bộ dữ liệu từ Database vào bộ nhớ (RAM) của Server trước khi thực hiện cắt lọc. Điều này gây ra lỗi tràn bộ nhớ (OutOfMemoryException) và làm chậm hệ thống 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...
321

Trong kiến trúc WebSocket, tại sao việc sử dụng cơ chế Backpressure lại quan trọng khi server gửi dữ liệu với tần suất cao tới client có đường truyền yếu?

Junior

Bản chất vấn đề

Khi server gửi dữ liệu nhanh hơn tốc độ tiêu thụ của client, bộ đệm (buffer) phía server sẽ bị đầy. Nếu không xử lý Backpressure, bộ nhớ server sẽ tăng đột biến dẫn đến rò rỉ bộ nhớ hoặc làm treo tiến trì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...
322

Tại sao việc sử dụng giao thức WSS thay vì WS là yêu cầu bắt buộc đối với các ứng dụng Enterprise?

Junior

Phân tích bản chất

  • WS (WebSocket): Dữ liệu được truyền dưới dạng văn bản thuần (plain text), dễ bị tấn công Man-in-the-Middle (MitM) để đánh cắp hoặc thay đổi nội dung tin nhắn.
  • WSS (WebSocket Secure): Sử dụng TLS/SSL để mã hóa toàn bộ luồng dữ liệu, đảm bảo tính toàn vẹn và bảo mật thông tin.

Lý do bắt buộc

  1. Bảo mật: Ngăn chặn việc nghe lén dữ liệu nhạy cảm.
  2. Tuân thủ: Hầu hết các trình duyệt hiện đại chặn các kết nối WS không bảo mật nếu trang web đang chạy trên HTTPS (Mixed Content policy).
  3. Proxy/Firewall: WSS giúp tránh việc các thiết bị trung gian (Proxy) can thiệp hoặc chặn đứng kết nối do nghi ngờ nội dung không an toàn.

Kinh nghiệm

Luôn cấu hình chứng chỉ SSL/TLS hợp lệ trên Load Balancer hoặc Reverse Proxy (như Nginx) để xử lý việc giải mã WSS trước khi chuyển tiếp về WebSocket server nội bộ.

323

Làm thế nào để xử lý việc Serialization và Deserialization dữ liệu lớn qua WebSocket mà không làm chặn Event Loop của Node.js?

Junior

Vấn đề kỹ thuật

Việc phân tích các chuỗi JSON khổng lồ bằng JSON.parse() là một tác vụ đồng bộ (synchronous). Nếu chuỗi quá lớn, nó sẽ chặn Event Loop, khiến server không thể phản hồi các kết nố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...
324

Sự khác biệt giữa cơ chế 'Broadcast' và 'Unicast' trong WebSocket và khi nào nên ưu tiên sử dụng từng loại?

Junior

Định nghĩa

  • Unicast: Gửi tin nhắn đến một client cụ thể thông qua định danh kết nối (socket ID).
  • Broadcast: Gửi tin nhắn đến tất cả các client đang kết nối với server.

Khi nào sử dụng

  • Unicast: Dùng cho các tác vụ cá nhân hóa như thông báo riêng tư, xác nhận giao dịch, hoặc chat 1-1.
  • Broadcast: Dùng cho các thông báo hệ thống, cập nhật bảng xếp hạng thời gian thực, hoặc thông báo trạng thái server.

Tối ưu hiệu năng

Việc lạm dụng Broadcast sẽ gây tốn băng thông và tài nguyên CPU. Nếu số lượng client lớn, hãy sử dụng cơ chế Room/Namespace để giới hạn phạm vi gửi tin, chỉ gửi cho những client thực sự cần nhận dữ liệu thay vì broadcast toàn hệ thống.

325

Tại sao việc xử lý lỗi (Error Handling) trong WebSocket cần phải được thực hiện ở cả hai phía Client và Server?

Junior

Tầm quan trọng

WebSocket là một kết nối trạng thái (stateful). Nếu một bên gặp lỗi mà không được xử lý, kết nối có thể rơi vào trạng thái 'treo' (zombie) hoặc gây crash ứng dụ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...
326

Trong kiến trúc Ionic, tại sao việc sử dụng Lazy Loading cho các Modules lại đóng vai trò quan trọng đối với hiệu năng khởi chạy ứng dụng (App Startup Time) trên thiết bị di động?

Junior

Lazy Loading giúp giảm kích thước của file bundle chính (main.js) bằng cách chia nhỏ ứng dụng thành các module riêng biệt. Khi người dùng truy cập vào một route cụ thể, ứng dụng mới tải module tương ứng. Điều này giúp giảm thời gian tải ban đầu (Initial Load Time), tiết kiệm bộ nhớ RAM và băng thông mạng. Trong Angular, chúng ta sử dụng thuộc tính loadChildren trong cấu hình Router để thực hiện việc này: { path: 'profile', loadChildren: () => import('./profile/profile.module').then(m => m.ProfilePageModule) }.

327

Làm thế nào để tối ưu hóa việc hiển thị danh sách dữ liệu lớn (Large Lists) trong Ionic để tránh tình trạng giật lag (Jank) hoặc treo ứng dụng?

Junior

Khi làm việc với danh sách lớn, việc render hàng nghìn phần tử DOM cùng lúc sẽ gây quá tải cho bộ nhớ. Giải pháp tối ưu là sử dụng Virtual Scroll (thông qua cdk-virtual-scroll-viewport của Angular CDK). Cơ chế này chỉ render các phần tử đang hiển thị trong vùng nhìn thấy (Viewport) của người dùng. Ngoài ra, cần sử dụng trackBy trong vòng lặp *ngFor để Angular chỉ cập nhật các phần tử bị thay đổi thay vì render lại toàn bộ danh sách.

328

Sự khác biệt giữa Capacitor và Cordova là gì và tại sao Capacitor lại được coi là tiêu chuẩn hiện đại cho các dự án Ionic Enterprise?

Junior

Cordova dựa trên cơ chế WebView truyền thống và phụ thuộc nhiều vào các plugin được cài đặt thông qua CLI, thường gây ra xung đột phiên bản. Capacitor là thế hệ kế thừa hiện đại, cung cấp khả năng tương tác Native tốt hơn, cấu trúc dự án rõ ràng (Native project là một phần của source code), và hỗ trợ tốt hơn cho các quy trình CI/CD. Capacitor không yêu cầu quản lý các file cấu hình phức tạp như config.xml của Cordova và cung cấp API đồng nhất cho cả Web, Android và iOS.

329

Khi thực hiện các yêu cầu API trong Ionic, tại sao nên sử dụng HttpClient Interceptor thay vì gọi trực tiếp trong từng Service?

Junior

HttpClient Interceptor cho phép chúng ta can thiệp vào mọi yêu cầu HTTP đi ra và phản hồi đi vào tại một điểm tập trung duy nhất. Điều này cực kỳ quan trọng trong các ứng dụng Enterprise để: 1. Tự động đính kèm Authorization Header (JWT) vào mọi request. 2. Xử lý tập trung các mã lỗi như 401 (Unauthorized) để thực hiện Logout hoặc Refresh Token. 3. Hiển thị Loading Spinner toàn cục. Việc này giúp code sạch hơn, dễ bảo trì và tránh lặp lại logic ở nhiều nơi.

330

Làm thế nào để quản lý cấu hình môi trường (Environment Variables) trong Ionic để đảm bảo tính bảo mật và linh hoạt khi chuyển đổi giữa môi trường Development, Staging và Production?

Junior

Ionic sử dụng file environment.ts và environment.prod.ts trong thư mục src/environments. Khi build ứng dụng với cờ --configuration=production, Angular CLI sẽ tự động thay thế file environment.ts bằng file tương ứng. Để bảo mật, không bao giờ lưu trữ các API Key nhạy cảm hoặc Secret Key trực tiếp trong code frontend, vì chúng có thể bị lộ qua quá trình reverse engineering. Các thông tin nhạy cảm nên được lấy từ Backend thông qua một endpoint cấu hình sau khi ứng dụng đã xác thực thành công.

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