Ruby on Rails

การเพิ่มประสิทธิภาพการทำงาน

Database indexing, การเพิ่มประสิทธิภาพ query, gem Bullet, rack-mini-profiler, การทำงานพร้อมกัน/Puma, thread-safety, connection pool

26 คำถามสัมภาษณ์·
Senior
1

จุดประสงค์หลักของการเพิ่ม index บนคอลัมน์ของฐานข้อมูลคืออะไร?

คำตอบ

index ช่วยเร่งความเร็วของ query การค้นหาโดยสร้างโครงสร้างข้อมูลที่ปรับให้เหมาะสม (โดยทั่วไปคือ B-tree) ซึ่งหลีกเลี่ยงการสแกนทุกแถวในตาราง หากไม่มี index ฐานข้อมูลจะทำ sequential scan ซึ่งอาจช้ามากในตารางขนาดใหญ่ คอลัมน์ที่ใช้บ่อยในเงื่อนไข WHERE, ORDER BY หรือ join เป็นตัวเลือกที่เหมาะสมที่สุดสำหรับการทำดัชนี

2

จะสร้าง index แบบรวม (composite) บนคอลัมน์ user_id และ created_at ใน migration ของ Rails ได้อย่างไร?

คำตอบ

เมธอด add_index รับ array ของคอลัมน์เพื่อสร้าง index แบบรวม ลำดับของคอลัมน์มีความสำคัญ: index จะมีประสิทธิภาพสำหรับ query ที่กรองด้วย user_id ก่อน แล้วตามด้วย created_at แต่ไม่มีประสิทธิภาพสำหรับ query ที่กรองด้วย created_at เพียงอย่างเดียว index แบบรวมจะเหมาะที่สุดสำหรับ query ที่ใช้คอลัมน์จากซ้ายไปขวา

3

ปัญหา N+1 ในบริบทของ ActiveRecord คืออะไร?

คำตอบ

ปัญหา N+1 เกิดขึ้นเมื่อ query เริ่มต้นดึงข้อมูล N เรคคอร์ด แล้วมี query เพิ่มเติมอีก N ครั้งที่ถูกรันเพื่อโหลด association ของแต่ละเรคคอร์ด ตัวอย่างเช่น โหลด posts 100 รายการ แล้วทำ query แยกอีก 100 ครั้งสำหรับผู้เขียน รูปแบบนี้ทำให้จำนวน query เพิ่มทวีคูณและลดทอนประสิทธิภาพอย่างรุนแรง วิธีแก้คือใช้ includes, preload หรือ eager_load เพื่อโหลด association ในหนึ่งหรือสอง query

4

ควรใช้เมธอด ActiveRecord ใดเพื่อแก้ปัญหา N+1 ด้วยการโหลด association ล่วงหน้า?

5

gem Bullet มีบทบาทอะไรในการเพิ่มประสิทธิภาพการทำงานของ Rails?

+23 คำถามสัมภาษณ์

หัวข้อสัมภาษณ์ Ruby on Rails อื่นๆ

พื้นฐาน Ruby

Junior
25 คำถาม

การเขียนโปรแกรมเชิงวัตถุใน Ruby

Junior
20 คำถาม

พื้นฐาน Rails

Junior
18 คำถาม

Routing & Controllers

Junior
22 คำถาม

พื้นฐาน ActiveRecord

Junior
25 คำถาม

Views และ ERB Templates

Junior
20 คำถาม

การเชื่อมโยงของ ActiveRecord

Mid-Level
24 คำถาม

การสอบถาม ActiveRecord ขั้นสูง

Mid-Level
28 คำถาม

ฟอร์ม Rails

Mid-Level
20 คำถาม

การยืนยันตัวตนและการอนุญาต

Mid-Level
22 คำถาม

Asset Pipeline สมัยใหม่และ frontend

Mid-Level
18 คำถาม

โหมด API ของ Rails

Mid-Level
20 คำถาม

การทดสอบด้วย RSpec

Mid-Level
24 คำถาม

ActiveJob & Background Jobs

Mid-Level
20 คำถาม

ActionCable & WebSockets

Mid-Level
18 คำถาม

ActionMailer

Mid-Level
18 คำถาม

ActiveStorage

Mid-Level
20 คำถาม

กลยุทธ์การ Caching

Mid-Level
20 คำถาม

การ Migration ขั้นสูง

Mid-Level
20 คำถาม

Rails Engines และแอปแบบโมดูลาร์

Senior
18 คำถาม

Design Patterns ใน Rails

Senior
22 คำถาม

เมตาโปรแกรมมิงใน Ruby

Senior
20 คำถาม

ความปลอดภัยของ Rails

Senior
22 คำถาม

GraphQL กับ Rails

Senior
20 คำถาม

การดีพลอยและโปรดักชัน

Senior
20 คำถาม

Monitoring & Logging

Senior
20 คำถาม

กลยุทธ์การอัปเกรด Rails

Senior
18 คำถาม

เชี่ยวชาญ Ruby on Rails สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี