40+ поширених запитань і відповідей на співбесіді Ruby on Rails [2023]

Огляд фреймворку Ruby on Rails та поширені питання на співбесіді

Ruby on Rails, ймовірно, є найбільш відомим фреймворком, розробленим на Ruby. Його популярність пояснюється легкістю застосування, архітектурою MVC, активною спільнотою та можливістю масштабування.

Серед відомих компаній, які використовують Ruby on Rails, можна виділити GitHub, Dribble, Shopify, Airbnb, Etsy, Kickstarter, Twitch та Zendesk.

Якщо ви досвідчений або фахівець середнього рівня в Ruby on Rails, вам буде корисно ознайомитися з типовими питаннями, які можуть виникнути на співбесіді.

Співбесіди можуть викликати хвилювання, особливо якщо ви не підготувалися. Однак, якісна підготовка додасть вам впевненості та збільшить шанси на отримання бажаної посади у компанії вашої мрії.

Далі ми розглянемо деякі з поширених питань, які можуть задавати на співбесідах з Ruby on Rails, а також надамо відповіді на них.

Що таке Ruby on Rails?

Ruby – це об’єктно-орієнтована мова програмування, яка характеризується зрозумілим синтаксисом.

Ruby on Rails – це фреймворк, створений на базі Ruby, який використовується розробниками для побудови веб-застосунків.

Обговорення переваг Ruby on Rails

  • Скорочення обсягу коду: у Rails можна досягти значних результатів, використовуючи меншу кількість рядків коду, ніж в інших мовах.
  • Розгалужена бібліотека та геми: існує велика кількість бібліотек та гемів, які розширюють функціональність Ruby on Rails застосунків.
  • Простота вивчення: код Ruby on Rails написаний у стилі, близькому до звичайної англійської мови.
  • Велика і активна спільнота.

Обговорення обмежень Ruby on Rails

  • Швидкість та продуктивність: у порівнянні з Django та Node.js, швидкість виконання коду та загальна продуктивність Rails можуть бути нижчими.
  • Обмежена документація: деякі з гемів для Rails не мають достатньої документації.
  • Обмежена гнучкість: Rails є досить самодостатнім, що може обмежувати гнучкість розробника.

Що таке контролер Rails?

Контролер Rails – це центральний елемент логіки Ruby on Rails застосунку. Він керує взаємодією між користувачами, моделями та відображеннями, координуючи та контролюючи всі процеси.

Що таке Active Record в Rails?

Active Record – це ORM (Object-Relational Mapping), метод відображення об’єктно-реляційних зв’язків. Цей шар коду Ruby взаємодіє між бізнес-логікою та базою даних. Після написання коду Ruby, ви запускаєте “міграції”, щоб відобразити зміни у структурі бази даних.

Що таке MVC та як він працює?

MVC (Model-View-Controller) – це архітектурний шаблон, який відокремлює бізнес-логіку від логіки вводу та представлення.

  • Модель: обробляє всі дані та бізнес-логіку в застосунку Rails.
  • Відображення (View): це частина застосунку, яку бачать користувачі.
  • Контролер: виступає як посередник, забезпечуючи взаємодію між моделлю та відображенням.

Що таке контролер дій в Ruby on Rails?

Контролер дій – це елемент “C” в шаблоні MVC. Він отримує вхідні запити, аналізує їх та генерує відповідну вихідну інформацію.

Що таке Rake в Rails?

Rake – це інструмент для виконання завдань в Ruby та Ruby on Rails застосунках. Rails має набір стандартних Rake завдань для запуску тестів, міграцій та створення баз даних.

Що таке yield в Ruby on Rails?

Ключове слово ‘yield’ використовується всередині методів для виклику блоку коду. Кількість аргументів, які ‘yield’ може передавати блоку, не обмежена. Блоки в даному випадку є анонімними методами, які можна передавати як додаткові аргументи до інших методів.

Що таке збирання сміття в Ruby on Rails?

Збирання сміття – це процес управління пам’яттю, який використовується комп’ютерними програмами. Ruby on Rails автоматично відстежує об’єкти, які використовує програма, а не сам програміст. Це дозволяє розробникам зосередитися на логіці та архітектурі застосунку, не турбуючись про розподіл пам’яті.

Яка роль збирання сміття в Rails?

Звільняє пам’ять на комп’ютері для виконання інших процесів, видаляючи об’єкти, які програма більше не використовує.

Що таке конвеєр ресурсів?

Конвеєр ресурсів в Ruby on Rails забезпечує структуру для мінімізації та об’єднання CSS та JavaScript ресурсів. Він дозволяє автоматично інтегрувати ресурси вашого застосунку з ресурсами інших гемів.

Різниця між динамічним та статичним скаффолдінгом

Скаффолдінг – це процес створення базових частин Rails застосунку.

Статичні каркаси явно генерують код, який створює необхідні дані у відповідних полях. Щоб завершити створення статичних каркасів, потрібно запустити міграції.

Динамічні каркаси створюють контент та користувацький інтерфейс під час виконання. Цей процес можна використовувати для створення, оновлення та видалення дій у Rails застосунку.

Що таке бібліотека класів?

Бібліотека класів містить домени в Ruby on Rails, такі як програмування потоків та типи даних. Вона дозволяє розробникам абстрагувати код та використовувати одну і ту ж логіку в різних частинах програми.

Опис поліморфної асоціації в Rails

Поліморфна асоціація – це тип асоціації Active Record. Поліморфізм означає, що об’єкт може мати багато форм. У Rails, поліморфна асоціація дозволяє визначити одну модель, яка може належати до інших моделей або бути з ними пов’язана, без необхідності писати повторюваний код.

Що таке інтерполяція рядків в Ruby?

Інтерполяція рядків – це процес додавання плейсхолдерів, які посилаються на інші значення в рядковому об’єкті. Найпростіший спосіб – використовувати оператор додавання.

Приклад:

name = "Titus"
puts "Привіт " + name

Результат:

Привіт Titus

Що таке ORM (Object-Relational Model)?

ORM – це проміжний шар між базами даних та об’єктно-орієнтованими програмами. Об’єктні зв’язки в Rails визначають, як класи відображаються на таблиці у базі даних.

Пояснення міграцій Rails

Міграції дозволяють розробникам зручно вносити зміни у схему бази даних. Розробники можуть керувати розгортанням та відкотом змін в контрольованому середовищі, замість використання SQL скриптів.

Правила найменування в Rails

  • Клас та модуль: використовуйте MixedCase без підкреслення. Назви починаються з великої літери.
  • Таблиця бази даних: назва таблиці бази даних повинна бути в множині та в нижньому регістрі.
  • Змінні: змінні мають бути в нижньому регістрі та в snake_case (з підкресленням між словами).
  • Модель: назва моделі має бути в однині і в MixedCase.
  • Контролери: назви контролерів – у множині.

Різниця між string та text в Rails?

:string використовується для збереження короткого тексту до 255 символів, наприклад, імен, логінів, email, паролів та назв.

:text – підходить для довгих описів, наприклад, коментарів до блогу чи описів товарів.

class CreatePosts < ActiveRecord::Migration
    def self.up
        create_table :posts do |t|
          t.string :description
          t.text :content
        end
    end

Пояснення міжсайтової підробки запитів (CSRF)

Міжсайтова підробка запитів (CSRF) – це атака, коли зловмисник використовує автентифікованих користувачів для виконання дій від їх імені.

Rails вимагає додавання “protect_from_forgery” до ApplicationController для захисту від CSRF атак. Програма завжди потребуватиме CSRF-токен для аутентифікації користувача.

Що таке міксин в Rails?

Міксини – це механізм для додавання функціональності до класу. Клас може складатися з декількох різних міксинів. Міксини усувають необхідність множинного успадкування.

Використання load і require в Ruby?

require() використовується для імпорту бібліотек/гемів.

load() використовується для виконання блоку коду.

Різниця між callback та observers в Ruby on Rails

Спостерігачі Rails використовуються, коли метод не пов’язаний безпосередньо з життєвим циклом об’єкта. Їх можна приєднувати або від’єднувати в будь-який момент.

Callback можна викликати лише в певні моменти життєвого циклу об’єкта, наприклад, при оновленні, створенні чи валідації. Callback активні лише протягом короткого періоду часу.

Що таке harnesses та fixtures в Ruby?

Fixtures – це спосіб організації даних, які ви хочете перевірити. Вони створюються у файлах з розширенням .yml.

Harnesses – це середовище або інструмент для виконання тестів Rails. Fixtures встановлюються в harnesses.

Різниця між extend та include?

“Include” додає метод екземпляра до класу, роблячи код доступним через методи класу.

“Extend” додає методи екземпляра, визначені в модулі, до розширеного класу.

Чи однакові gems та плагіни в Ruby?

Gems – це запаковані програми Ruby, які потрібно встановити. Вони є універсальними та не залежать від Rails.

Плагіни Ruby on Rails розгортаються разом із вашим Rails застосунком. Вони змінюють або розширюють основні функції Rails.

Що таке Rails Observer?

Rails Observer – це механізм, за допомогою якого об’єкт повідомляє іншим об’єктам про зміни свого стану. Він застосовується у відносинах “один-до-багатьох”, де при зміні одного об’єкта, автоматично інформуються та змінюються усі залежні об’єкти.

Команда для створення міграції?

bin/rails db:migrate

Визначення класу, екземпляра та глобальних змінних в Ruby

  • Змінні класу: доступні в межах класу та його нащадків, починаються з @@.
  • Змінні екземпляра: використовуються в локальній області, характерній для екземплярів об’єкта, починаються з @.
  • Глобальні змінні: доступні в будь-якій частині програми, починаються з $.

Яка роль rakefile в демо-каталозі Ruby?

Rakefile допомагає в тестуванні та пакуванні коду Rails. Файл визначає завдання для виконання тестів або демонстрації функцій програми.

Що таке Sweeper в Rails?

Sweeper – це термінатори в кешуванні. Вони діють як напівфільтри та напівспостерігачі, реалізовуючи callback для обох ролей. ‘expire_cache’ знаходить фрагменти кешу, час дії яких закінчився, та очищає їх.

Що таке фільтри?

Це методи, які виконуються “до” або “після” дій контролера. Такі методи успадковуються і запускаються з кожним запитом, що отримує програма, якщо вони встановлені в ApplicationController.

Різниця між redirect та render в Rails?

Render: використовується для відображення шаблону та відправки його клієнту у відповідь на запит. Цей шаблон створює сторінку, яку відображатиме браузер.

Redirect: відправляє новий HTTP-запит на іншу URL-адресу, перенаправляючи клієнта до іншого контролера або дії. Це корисно, якщо ви хочете змінити URL-адресу, яку бачить користувач.

Різниця між super() та super call?

  • Super: надсилає повідомлення батьківському об’єкту для виклику методу з усіма аргументами.
  • super(): не надсилає жодних аргументів батьківському методу.

Різниця між Procs та Blocks?

  • Блоки: фрагмент коду, оточений do/end або фігурними дужками. Вони створюються та виконуються при кожному виклику методу.
  • Procs: блоки коду, пов’язані з набором локальних змінних. Цей код може викликатися в різних контекстах, маючи доступ до своїх змінних.

Різниця між puts та print?

puts використовується для виведення чогось на екран з додаванням нового рядка, наприклад,

puts "Привіт Світ!!!"

Виведе “Привіт Світ!!!” на екран.

print використовується, коли не потрібно додавати новий рядок, наприклад:

print "Привіт Світ!!!"

Виведе “Привіт Світ!!!” без додавання нового рядка на консоль.

Що таке динамічні шукачі?

Динамічні шукачі дозволяють шукати записи у базі даних без використання SQL-запитів. Вони використовують ключове слово ‘find_by_’, за яким слідує атрибут для пошуку.

Як Rails реалізує AJAX?

  • Ініціюється тригер, наприклад, надсилання форми або натискання кнопки.
  • Метод JavaScript відправляє дані обробнику на сервері.
  • Обробник на сервері обробляє дані та відправляє HTML назад веб-клієнту.
  • Обробник JavaScript на клієнті отримує HTML та оновлює поточну сторінку.

Пояснення Dig, Float та Max

  • Dig – метод для отримання значень з вкладених хешів або масивів.
  • Float – тип даних Ruby для представлення чисел з плаваючою точкою.
  • Max – метод для пошуку максимального значення в масивах або хешах.
array = [2, 9, 4, 7, 3]
maximum = array.max

Консоль виведе 9, оскільки це найбільше число.

Висновок

Вище наведено деякі з питань, які можуть виникнути на співбесіді з Ruby on Rails. Якщо ви розробник ПЗ, радимо ознайомитися з питаннями для співбесіди з Node.js. Перед співбесідою впевнено розберіться з вимогами до інженера Rails.