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

Làm thế nào để thực hiện Database Migration một cách an toàn trong môi trường Production khi bảng dữ liệu có hàng triệu bản ghi?

Junior

Các rủi ro

  • Locking: Các lệnh như ALTER TABLE có thể khóa bảng, khiến ứng dụng không thể đọc/ghi dữ liệu, gây downtime.
  • Thời gian thực thi: Migration quá lâu có thể gây lỗi timeout trên hệ thống triển khai.

Chiến lược an toàn

  • Sử dụng strong_migrations: Gem này giúp ngăn chặn các lệnh migration nguy hiểm (như thêm cột với giá trị mặc định trên bảng lớn).
  • Chia nhỏ migration: Thay vì thực hiện một thay đổi lớn, hãy chia thành nhiều bước (ví dụ: thêm cột, cập nhật dữ liệu theo từng batch, sau đó mới đặt ràng buộc NOT NULL).
  • Online Schema Change: Sử dụng các công cụ như gh-ost hoặc pt-online-schema-change để thay đổi cấu trúc bảng mà không làm khóa bảng.

Lưu ý thực chiến

Luôn kiểm tra thời gian thực thi migration trên môi trường staging có dữ liệu tương đương với production trước khi áp dụng thực tế.

842

Redis là gì và tại sao người ta thường gọi Redis là một cơ sở dữ liệu in-memory key-value?

Junior

Bản chất của Redis

Redis viết tắt của Remote Dictionary Server, là một hệ thống mã nguồn mở hoạt động theo mô hình lưu trữ cấu trúc dữ liệu trong bộ nhớ (in-memory data structure store). Nó có thể được sử dụng như một cơ sở dữ liệu, bộ đệm (cache), và trình quản lý hàng đợi thông điệp (message broker).

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

Trong Redis, cấu trúc dữ liệu String khác gì so với Hash và khi nào lập trình viên nên chọn Hash thay vì String?

Junior

Phân biệt String và Hash trong Redis

1. Redis String

  • Định nghĩa: Là cấu trúc dữ liệu cơ bản nhất trong Redis, lưu trữ một chuỗi dữ liệu nhị phân an toàn (binary-safe), có thể chứa văn bản, số nguyên, số thực hoặc hình ảnh (tối đa 512MB).
  • Trường hợp sử dụng: Thường dùng để lưu trữ các giá trị đơn lẻ như token xác thực, bộ đếm lượt truy cập, hoặc cấu hình dạng thô.

2. Redis Hash

  • Định nghĩa: Là tập hợp các cặp trường và giá trị (field-value pairs) nằm trong một key duy nhất. Ví dụ, một Hash đại diện cho một người dùng có thể chứa các trường như name, age, email.
  • Trường hợp sử dụng: Rất phù hợp để đại diện cho các đối tượng (objects) có nhiều thuộc tính.

Khi nào nên chọn Hash thay vì String?

  • Tiết kiệm bộ nhớ: Khi lưu trữ một đối tượng có nhiều thuộc tính (ví dụ thông tin người dùng: id, username, status), nếu dùng String, bạn có thể phải tạo nhiều key (user:1:name, user:1:email) hoặc serialize toàn bộ đối tượng thành một chuỗi JSON. Việc tạo nhiều key sẽ tốn kém chi phí bộ nhớ phụ cho cấu trúc quản lý key của Redis. Sử dụng Hash giúp gom nhóm các thuộc tính vào một key duy nhất, tối ưu hóa đáng kể dung lượng RAM.
  • Cập nhật một phần tử dễ dàng: Hash cho phép bạn đọc hoặc ghi một field cụ thể (ví dụ dùng lệnh HGET hoặc HSET) mà không cần phải đọc và giải mã (deserialize) toàn bộ đối tượng như khi lưu dưới dạng chuỗi JSON.

Ví dụ thực tế

Thay vì lưu JSON string: SET user:1000 '{"name":"Nguyen Van A","age":25}' Bạn nên dùng Hash: HSET user:1000 name "Nguyen Van A" age 25

844

Lệnh EXPIRE trong Redis hoạt động như thế nào và sự khác biệt giữa EXPIRE và TTL là gì?

Junior

Cơ chế hoạt động của lệnh EXPIRE

Lệnh EXPIRE được sử dụng để thiết lập thời gian sống (Time To Live - TTL) cho một key cụ thể tính bằng giây. Khi thời gian này kết thúc, key đó sẽ tự động bị xóa khỏi Redis.

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

Tại sao Redis lại được thiết kế theo kiến trúc Single-threaded (luồng đơn) nhưng vẫn đạt hiệu suất cực kỳ cao?

Junior

Bản chất mô hình Single-threaded của Redis

Mặc dù các phiên bản Redis gần đây có sử dụng các luồng phụ (background threads) cho một số tác vụ nặng như giải phóng bộ nhớ (lazy freeing) hay I/O phụ trợ, nhưng cốt lõi xử lý các câu lệnh (command execution engine) của Redis vẫn chạy hoàn toàn trên một luồng chính duy nhất (single-threaded event loop).

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

Làm thế nào để sử dụng Redis cấu trúc dạng List làm một Message Queue đơn giản trong ứng dụng Backend?

Junior

Sử dụng Redis List làm Message Queue

Redis cung cấp cấu trúc dữ liệu List với các lệnh hỗ trợ thao tác đẩy và lấy dữ liệu ở hai đầu danh sách (Left và Right), rất phù hợp để xây dựng mô hình hàng đợi Producer-Consumer đơn giả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...
847

Trong React Native, tại sao việc sử dụng các hàm ẩn danh (anonymous functions) trực tiếp trong thuộc tính render của FlatList lại gây ảnh hưởng tiêu cực đến hiệu năng và cách khắc phục?

Junior

Việc sử dụng hàm ẩn danh (ví dụ: renderItem={() => }) trong FlatList khiến hàm này được tạo mới sau mỗi lần render của component cha. Điều này dẫn đến việc FlatList luôn coi item đó là thay đổi, kích hoạt quá trình re-render không cần thiết cho toàn bộ danh sách, gây giật lag (jank).

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

Làm thế nào để tối ưu hóa kích thước bundle của ứng dụng React Native khi sử dụng quá nhiều thư viện bên thứ ba?

Junior

Để tối ưu hóa kích thước bundle, bạn cần thực hiện các bước 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...
849

Sự khác biệt giữa useMemo và useCallback trong React Native là gì và khi nào nên ưu tiên sử dụng chúng để tránh lãng phí tài nguyên CPU?

Junior

Cả hai đều là Hook dùng để tối ưu hóa hiệu năng bằng cách ghi nhớ (memoization):

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

Khi làm việc với React Native, làm thế nào để xử lý các tác vụ nặng (Heavy Computation) mà không làm chặn luồng giao diện (UI Thread/Main Thread)?

Junior

Trong React Native, JavaScript chạy trên một luồng riêng biệt với UI Thread. Tuy nhiên, nếu thực hiện các tác vụ tính toán quá nặng, nó sẽ làm chậm quá trình giao tiếp qua Bridge hoặc JSI, gây treo ứ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...
851

Tại sao việc sử dụng StyleSheet.create trong React Native lại mang lại hiệu năng tốt hơn so với việc định nghĩa object style trực tiếp trong component?

Junior

Khi sử dụng StyleSheet.create, các style được gửi qua Bridge một lần duy nhất dưới dạng ID tham chiếu thay vì gửi toàn bộ object style sau mỗi lần render.

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

Làm thế nào để xử lý sự kiện kích hoạt bản cập nhật Service Worker ngay lập tức mà không cần đợi người dùng đóng tất cả các tab trình duyệt?

Junior

Bản chất vấn đề

Khi một Service Worker mới được cài đặt, nó sẽ chuyển sang trạng thái waiting và chỉ kiểm soát các trang mới sau khi tất cả các client (tab) hiện tại đóng lại. Trong các ứng dụng PWA Enterprise, việc này có thể gây chậm trễ trong việc phân phối các bản vá lỗi quan trọng đến người 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...
853

Tại sao việc cấu hình theme_color và background_color trong Web App Manifest lại ảnh hưởng trực tiếp đến trải nghiệm khởi động của PWA trên thiết bị di động?

Junior

Bản chất vấn đề

Khi người dùng mở một PWA từ màn hình chính (Home Screen) trên thiết bị di động, trình duyệt sẽ hiển thị một màn hình khởi động (Splash Screen) tạm thời trước khi ứng dụng thực sự tải xong và render giao diện. Các thuộc tính theme_color và background_color trong tệp manifest.json quyết định màu sắc của màn hình 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...
854

Làm thế nào để triển khai tính năng Web Push Notifications cơ bản trong PWA và xử lý việc người dùng từ chối quyền nhận thông báo?

Junior

Bản chất vấn đề

Web Push Notifications cho phép PWA gửi thông báo đẩy đến người dùng ngay cả khi ứng dụng đang đóng hoàn toàn. Quy trình này đòi hỏi sự tương tác giữa Client (trình duyệt), Push Service của nhà cung cấp trình duyệt (FCM, APNS) và Application Server.

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

Sự khác biệt cốt lõi giữa các chiến lược caching Network-First và Cache-First là gì và khi nào nên áp dụng từng chiến lược trong PWA?

Junior

Bản chất vấn đề

Chiến lược caching quyết định cách Service Worker phục vụ tài nguyên cho ứng dụng, ảnh hưởng trực tiếp đến tốc độ phản hồi và tính chính xác của dữ liệu khi ngoại tuyế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...
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