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 Ruby on Rails

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.

16

Trong Ruby on Rails, sự khác biệt giữa Eager Loading và Lazy Loading là gì và khi nào bạn nên ưu tiên sử dụng từng phương pháp để tối ưu hóa truy vấn cơ sở dữ liệu?

Junior

Bản chất cơ chế

  • Lazy Loading: Là cơ chế mặc định của Active Record. Dữ liệu chỉ được truy vấn từ cơ sở dữ liệu khi bạn thực sự gọi đến thuộc tính của đối tượng đó. Điều này giúp tiết kiệm bộ nhớ nhưng dễ dẫn đến vấn đề N+1 queries.
  • Eager Loading: Là kỹ thuật tải trước các dữ liệu liên quan (associations) ngay từ đầu bằng cách sử dụng các phương thức như includes, preload, hoặc eager_load.

Khi nào nên sử dụng

  • Sử dụng Lazy Loading: Khi bạn chỉ cần truy xuất dữ liệu của một đối tượng đơn lẻ hoặc các điều kiện logic phức tạp khiến việc tải trước dữ liệu trở nên lãng phí.
  • Sử dụng Eager Loading: Khi bạn hiển thị danh sách (collection) và cần truy cập vào các bảng liên quan (ví dụ: User có nhiều Posts).

Ví dụ code

# Lazy Loading (Dễ gây N+1)
users = User.limit(10)
users.each { |user| puts user.posts.count }

# Eager Loading (Tối ưu)
users = User.includes(:posts).limit(10)
users.each { |user| puts user.posts.count }

Lưu ý thực chiến

Luôn sử dụng gem bullet trong môi trường phát triển để tự động phát hiện các truy vấn N+1 mà bạn vô tình tạo ra.

17

Tại sao việc sử dụng Callback trong Active Record quá mức lại được coi là một anti-pattern trong các dự án Enterprise và cách khắc phục?

Junior

Tại sao là anti-pattern

  • Khó kiểm soát luồng: Các callback như after_save hoặc before_create chạy ngầm, khiến việc debug trở nên khó khăn khi logic nghiệp vụ thay đổi.
  • Vi phạm nguyên tắc Single Responsibility: Model trở nên quá cồng kềnh (Fat Model) khi chứa quá nhiều logic nghiệp vụ không liên quan trực tiếp đến dữ liệu.
  • Khó khăn khi Testing: Các callback chạy tự động mỗi khi lưu dữ liệu, gây khó khăn cho việc cô lập unit test.

Cách khắc phục

  • Service Objects: Chuyển logic nghiệp vụ vào các Service Objects để xử lý các tác vụ phức tạp.
  • Form Objects: Sử dụng Form Objects để xử lý dữ liệu đầu vào và các logic validation trước khi lưu vào cơ sở dữ liệu.
  • Pub/Sub hoặc Observers: Sử dụng các cơ chế sự kiện (Event-driven) để tách biệt các tác vụ phụ (như gửi email, thông báo) ra khỏi luồng lưu dữ liệu chính.

Lưu ý thực chiến

Chỉ nên sử dụng callback cho các logic liên quan trực tiếp đến tính toàn vẹn của dữ liệu trong chính model đó (ví dụ: format lại email trước khi lưu).

18

Giải thích vai trò của Gemfile và Gemfile.lock trong quản lý phụ thuộc (dependency management) và tại sao phải luôn commit cả hai file này vào hệ thống quản lý phiên bản?

Junior

Vai trò của các file

  • Gemfile: Định nghĩa danh sách các thư viện (gems) mà ứng dụng cần. Nó cho phép chỉ định phiên bản linh hoạt (ví dụ: gem 'rails', '~> 7.0').
  • Gemfile.lock: Là bản ghi chính xác về phiên bản của tất cả các gem và các gem phụ thuộc (dependencies) đang được sử dụng trong môi trường hiện tại.

Tại sao phải commit cả hai

  • Tính nhất quán: Đảm bảo rằng mọi thành viên trong đội ngũ phát triển và môi trường Production đều sử dụng chính xác cùng một phiên bản gem, tránh lỗi 'trên máy tôi chạy được nhưng trên server thì không'.
  • Tính tái lập: Giúp việc triển khai (deployment) trở nên tin cậy, vì hệ thống sẽ cài đặt đúng các phiên bản đã được kiểm thử kỹ lưỡng.

Lưu ý thực chiến

Không bao giờ chỉnh sửa trực tiếp Gemfile.lock. Hãy luôn sử dụng lệnh bundle install hoặc bundle update để hệ thống tự động cập nhật file này.

19

Trong Ruby on Rails, sự khác biệt giữa `find`, `find_by` và `where` là gì? Khi nào nên sử dụng từng phương thức để đảm bảo an toàn và hiệu năng?

Junior

Phân tích chi tiế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...
20

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

21

Vấn đề N plus 1 queries xảy ra như thế nào trong Active Record và làm thế nào để lập trình viên cấp độ Junior phát hiện cũng như khắc phục triệt để vấn đề này?

Junior

Vấn đề N plus 1 queries xảy ra khi ứng dụng thực hiện một câu lệnh SQL để lấy ra danh sách các bản ghi chính (1 query), sau đó lại thực hiện thêm N câu lệnh SQL riêng biệt để lấy dữ liệu liên quan (associations) cho từng bản ghi đó. Điều này làm giảm hiệu năng nghiêm trọng do số lượng câu lệnh truy vấn cơ sở dữ liệu tăng vọ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...
22

Sự khác biệt cốt lõi giữa phương thức save, save!, create và create! trong Active Record là gì và khi nào nên sử dụng chúng trong dự án Enterprise?

Junior

Trong Ruby on Rails, việc lưu dữ liệu vào cơ sở dữ liệu thông qua Active Record cung cấp nhiều phương thức khác nhau. Sự khác biệt lớn nhất nằm ở cách chúng xử lý việc kiểm tra tính hợp lệ (validations) và cách bắn ra ngoại lệ (exceptions).

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

Database Transactions đóng vai trò như thế nào trong Ruby on Rails và làm thế nào để sử dụng ActiveRecord::Base.transaction một cách an toàn?

Junior

Database Transactions đảm bảo tính nguyên tử (Atomicity) theo chuẩn ACID. Điều này có nghĩa là một chuỗi các thao tác ghi dữ liệu vào cơ sở dữ liệu phải cùng thành công, hoặc nếu có bất kỳ một thao tác nào thất bại, toàn bộ quá trình sẽ được hoàn tác (rollback) về trạng thái ban đầu.

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

Strong Parameters hoạt động theo cơ chế nào trong Action Controller và tại sao nó lại là lớp phòng thủ bảo mật bắt buộc trong các ứng dụng Ruby on Rails?

Junior

Strong Parameters là một tính năng bảo mật được tích hợp sẵn trong Rails từ phiên bản 4 để ngăn chặn lỗ hổng Mass Assignment. Lỗ hổng này xảy ra khi kẻ tấn công chèn thêm các tham số trái phép vào HTTP Request (ví dụ: tự nâng quyền admin = true hoặc role = 'super_admin') khi gửi dữ liệu lên server để cập nhật Model.

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

Active Job giải quyết bài toán xử lý nền (background processing) như thế nào trong Ruby on Rails và sự khác biệt giữa các adapter phổ biến là gì?

Junior

Active Job là một framework chuẩn hóa trong Ruby on Rails dùng để khai báo các tác vụ nền (jobs) và chạy chúng trên nhiều hệ thống hàng đợi (queue backends) khác nhau như Sidekiq, Delayed Job, Resque hoặc Async.

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

Hãy giải thích chi tiết cơ chế hoạt động của Routing DSL trong lập trình Ruby on Rails.

Junior

Trong phát triển dự án với Ruby on Rails, việc tối ưu hóa và quản lý tốt Routing DSL 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...
27

Hãy giải thích chi tiết cơ chế hoạt động của Action Cable WebSockets trong lập trình Ruby on Rails.

Junior

Trong phát triển dự án với Ruby on Rails, việc tối ưu hóa và quản lý tốt Action Cable WebSockets 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...
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