
Tối ưu hóa hiệu năng
Database indexing, tối ưu hóa truy vấn, gem Bullet, rack-mini-profiler, đồng thời/Puma, thread-safety, connection pool
1Mục đích chính của việc thêm index trên một cột cơ sở dữ liệu là gì?
Mục đích chính của việc thêm index trên một cột cơ sở dữ liệu là gì?
Câu trả lời
Một index tăng tốc các truy vấn tìm kiếm bằng cách tạo ra một cấu trúc dữ liệu được tối ưu hóa (thường là B-tree) giúp tránh quét tất cả các hàng trong bảng. Nếu không có index, cơ sở dữ liệu thực hiện sequential scan có thể rất chậm trên các bảng lớn. Các cột thường được dùng trong mệnh đề WHERE, ORDER BY hoặc join là ứng viên lý tưởng để lập chỉ mục.
2Làm thế nào để tạo một index tổng hợp trên các cột user_id và created_at trong một migration của Rails?
Làm thế nào để tạo một index tổng hợp trên các cột user_id và created_at trong một migration của Rails?
Câu trả lời
Phương thức add_index nhận một mảng các cột để tạo một index tổng hợp. Thứ tự cột rất quan trọng: index sẽ hiệu quả cho các truy vấn lọc trước theo user_id, sau đó created_at, nhưng không hiệu quả cho các truy vấn chỉ lọc theo created_at. Một index tổng hợp là tối ưu cho các truy vấn sử dụng các cột từ trái sang phải.
3Vấn đề N+1 trong ngữ cảnh của ActiveRecord là gì?
Vấn đề N+1 trong ngữ cảnh của ActiveRecord là gì?
Câu trả lời
Vấn đề N+1 xảy ra khi một truy vấn ban đầu lấy về N bản ghi, sau đó N truy vấn bổ sung được thực thi để tải các liên kết của mỗi bản ghi. Ví dụ, tải 100 posts rồi thực hiện 100 truy vấn riêng lẻ cho các tác giả. Mẫu này nhân số lượng truy vấn lên và làm giảm hiệu năng nghiêm trọng. Giải pháp là sử dụng includes, preload hoặc eager_load để tải các liên kết trong một hoặc hai truy vấn.
Nên dùng phương thức ActiveRecord nào để giải quyết vấn đề N+1 bằng cách tải các liên kết trước?
Vai trò của gem Bullet trong việc tối ưu hóa hiệu năng Rails là gì?
+23 câu hỏi phỏng vấn
Các chủ đề phỏng vấn Ruby on Rails khác
Kiến thức cơ bản về Ruby
Lập trình hướng đối tượng trong Ruby
Kiến thức cơ bản về Rails
Routing & Controllers
Kiến thức cơ bản về ActiveRecord
Views & Template ERB
Liên kết ActiveRecord
Truy vấn ActiveRecord nâng cao
Form Rails
Xác thực & Phân quyền
Asset Pipeline hiện đại & frontend
Chế độ API của Rails
Kiểm thử với RSpec
ActiveJob & Background Jobs
ActionCable & WebSockets
ActionMailer
ActiveStorage
Chiến lược Caching
Migration nâng cao
Rails Engines & ứng dụng mô-đun
Design Patterns trong Rails
Lập trình meta trong Ruby
Bảo mật Rails
GraphQL với Rails
Triển khai & Sản xuất
Monitoring & Logging
Chiến lược nâng cấp Rails
Nắm vững Ruby on Rails cho lần phỏng vấn tiếp theo
Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.
Bắt đầu miễn phí