P
prepair.app
Пройти інтерв'ю →
EnglishУкраїнськаРусский
💎

Middle Ruby on RailsПитання на співбесіді Ruby on Rails

Middle · 2–4 роки досвіду

Співбесіда з Ruby йде на двох рівнях: сама мова — блоки, модулі, ланцюг пошуку методу — і Rails, де більшість питань насправді про ActiveRecord і базу під ним. Нижче питання, які ставлять найчастіше, кожне з еталонною відповіддю. Middle: глибше розуміння, оптимізацію та реальні робочі ситуації.

Теми для підготовки

Ядро Ruby і блоки
ООП, модулі та міксини
ActiveRecord і звʼязки
Rails MVC, роутинг, контролери
N+1 і продуктивність
RSpec, FactoryBot, Rubocop

6 питань рівня Middle з відповідями

1

Поясніть ланцюг пошуку методу в Ruby.

Відповідь

Ruby дивиться в синглтон-клас обʼєкта, далі в prepend-модулі, далі в сам клас, далі в include-модулі у зворотному порядку підключення, потім піднімається до суперкласу і повторює. SomeClass.ancestors друкує фактичний порядок і розвʼязує більшість суперечок швидше за міркування. super продовжує рух цим самим ланцюгом з поточного місця.

2

`includes`, `preload`, `eager_load` — коли що?

Відповідь

preload вантажить звʼязок другим запитом. eager_load робить один LEFT OUTER JOIN. includes обирає сам і перемикається на join, коли ви згадуєте звʼязок у where. За замовчуванням беруть includes, а решту двох називають, коли стратегію треба навʼязати — зазвичай тому, що join дублює рядки або окремий запит дешевший.

3

Як шукати і лагодити повільний ендпоінт?

Відповідь

Починати з логів і кількості запитів, а не з читання коду: більшість повільних місць у Rails — це запити. Шукають N+1, відсутній індекс під where по великій таблиці і роботу, якій узагалі не місце в запиті. EXPLAIN показує, чи використовується індекс насправді. Кеш ставлять після цього, а не замість.

4

Як індексувати запит і коли індекс не допомагає?

Відповідь

Індексують колонки, за якими фільтрують і сортують, а для складеного індексу важить порядок — він обслуговує префікс своїх колонок, а не будь-яку підмножину. Індекс не допомагає, коли запит і так зачіпає більшу частину таблиці, і коштує на кожному записі, тому індексувати все — окрема проблема. LIKE '%x' з провідним відсотком звичайний B-tree використати не може взагалі.

5

Чому фонова джоба зобовʼязана бути ідемпотентною?

Відповідь

Бо вона може виконатися двічі — ретрай після таймауту, падіння після роботи, але до підтвердження. Якщо два запуски списують гроші двічі, це баг джоби, а не черги. Безпеку дає ключ на ефект: перевірити, чи є вже списання, повісити унікальний індекс або зробити операцію природно повторюваною.

6

Як не отримати товсту модель, але й не наплодити сорок крихітних класів?

Відповідь

Виносити поведінку, яка не про власний стан запису: сервісний обʼєкт під багатокрокову операцію, query-обʼєкт під складну вибірку, form-обʼєкт, коли форма охоплює дві моделі. Обидва перегини реальні: модель на 900 рядків, яку ніхто не чіпає, або сорок класів з одним методом і без очевидного місця. Перевірка проста — чи знайде нова людина потрібний код за іменем.

🦎

Прочитати відповіді недостатньо

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Middle Ruby on Rails →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — Ruby on Rails

Junior Ruby on RailsSenior Ruby on RailsУсі питання Ruby on Rails

Інші спеціалізації

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend🔷Middle C++🟨Middle JavaScript⚛️Middle React Frontend