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