40+ často kladených otázek a odpovědí na rozhovor s Ruby on Rails [2023]

Ruby on Rails, pravděpodobně nejpopulárnější framework pro jazyk Ruby, si získal oblibu díky své snadné použitelnosti, architektuře MVC, aktivní komunitě a škálovatelnosti.

Mezi významné společnosti, které využívají Ruby on Rails, patří například GitHub, Dribbble, Shopify, Airbnb, Etsy, Kickstarter, Twitch a Zendesk.

Pro softwarové inženýry s pokročilými nebo středními zkušenostmi s Ruby on Rails je klíčové porozumět typickým otázkám, na které mohou narazit během pracovního pohovoru.

Pohovory mohou být stresující, pokud nejste dobře připraveni. Naopak, důkladná příprava vám dodá jistotu a zvýší vaše šance získat vysněnou pozici.

Níže uvádíme některé časté otázky z pohovorů pro pozice Ruby on Rails a doporučené odpovědi.

Co je Ruby on Rails?

Ruby je objektově orientovaný programovací jazyk známý pro svou jednoduchou syntaxi.

Ruby on Rails je framework v jazyce Ruby, který vývojáři používají k tvorbě webových aplikací.

Jaké jsou výhody Ruby on Rails?

  • Menší objem kódu: V Rails dosáhnete mnoho s minimálním množstvím kódu.
  • Bohatá knihovna a gemy: Existuje velké množství knihoven a gemů, které rozšiřují funkčnost aplikací Ruby on Rails.
  • Snadná učitelnost: Kód v Ruby on Rails připomíná čitelnost běžného jazyka.
  • Rozsáhlá komunita: Framework má velkou a aktivní komunitu vývojářů.

Jaká jsou omezení Ruby on Rails?

  • Nižší rychlost a výkon: Ve srovnání s Django a Node.js má Rails nižší rychlost a výkon.
  • Omezená dokumentace: Některé gemy mají nedostatečnou dokumentaci.
  • Konvence: Rails je silně založený na konvencích, což může omezovat flexibilitu vývojáře.

Co je kontroler v Rails?

Kontroler je ústředním bodem logiky aplikace v Ruby on Rails. Spravuje, koordinuje a monitoruje veškerou interakci mezi uživateli, modely a view.

Co je Active Record v Rails?

Active Record je technika mapování objektů na databázi (ORM). Tato vrstva kódu v Ruby se nachází mezi logikou aplikace a vaší databází. Po napsání kódu v Ruby se provádí „migrace“, která aplikuje změny na databázi.

Co je MVC a jak funguje?

Architektonický vzor Model-View-Controller (MVC) odděluje obchodní logiku od logiky vstupu a prezentace.

  • Model: Zpracovává veškerou datovou logiku v aplikaci Rails.
  • View: Je část aplikace, kterou vidí uživatelé.
  • Controller: Funguje jako zprostředkovatel mezi modelem a view, umožňuje jejich komunikaci.

Co je Action Controller v Ruby on Rails?

Action Controller představuje „C“ ve vzoru MVC. Přijímá příchozí požadavky, interpretuje je a generuje odpovídající výstup.

Co je Rake v Rails?

Rake je nástroj pro spouštění úloh v aplikacích Ruby a Ruby on Rails. Rails nabízí předdefinované Rake úlohy pro provádění testů, migrací a vytváření databází.

Co je yield v Ruby on Rails?

Yield je klíčové slovo, které se používá uvnitř metod k volání bloku. Počet argumentů, které lze předat bloku přes yield, není omezen. Bloky jsou v tomto kontextu anonymní metody, které lze předávat jako argumenty jiným metodám.

Co je Garbage Collection v Ruby on Rails?

Garbage Collection je proces správy paměti, který se používá v počítačových programech. Ruby on Rails sleduje objekty, které program používá, namísto toho, aby to musel dělat programátor. Díky tomu se vývojáři mohou soustředit na logiku a konvence místo alokace paměti.

Jaká je role Garbage Collection v aplikaci Rails?

Garbage Collection uvolňuje paměť v počítači pro jiné procesy. Toho dosahuje odstraněním objektů, které nejsou dostupné a které program zanechal po svém běhu.

Co je Asset Pipeline?

Asset Pipeline v Ruby on Rails poskytuje rámec pro minimalizaci a spojování CSS a JavaScript aktiv. Tento rámec automaticky kombinuje všechna aktiva ve vaší aplikaci Rails s aktivy z jiných gemů.

Jaký je rozdíl mezi dynamickým a statickým scaffoldingem?

Scaffolding je proces generování základních částí aplikace Rails.

Statický scaffolding explicitně specifikuje příkaz, který vytvoří data v příslušných polích. Pro dokončení statického scaffoldingu je nutné spustit migrace.

Dynamický scaffolding generuje obsah a uživatelská rozhraní za běhu. Tento proces lze použít k vytváření, úpravě a odstraňování akcí v aplikaci Rails.

Co je třídní knihovna?

Třídní knihovna v Ruby on Rails obsahuje domény, jako jsou například práce s vlákny a datové typy. Třídní knihovna umožňuje vývojářům vytvářet abstrakci kódu a používat stejnou logiku v různých prvcích aplikace.

Popište polymorfní asociaci v Rails

Polymorfní asociace je typ asociace Active Record. Polymorfismus znamená, že objekt může mít mnoho podob. V kontextu Rails umožňuje polymorfní asociace definovat jeden model, který může být spojen s jinými modely nebo k nim patřit bez potřeby psát opakující se kód.

Co je string interpolation v Ruby?

String interpolation přidává zástupné symboly, které odkazují na jiné hodnoty v řetězcovém objektu. Nejjednodušším způsobem interpolace je použití operátoru sčítání (+).

Například:

name = "Titus"

puts "Hello " + name

Výstup bude:

Ahoj Titusi

Co je Object Relationship Model (ORM)?

ORM je most mezi databázemi a objektově orientovanými programy. Vztah objektů v Rails označuje, jak jsou třídy mapovány na tabulky v databázi.

Vysvětlete migrace v Rails

Migrace pomáhají vývojářům snadno provádět změny schématu databáze. Vývojáři tak mohou kontrolovat změny schématu databáze a jejich vrácení zpět. Tento přístup eliminuje potřebu spravovat jednotlivé SQL skripty pro definování změn.

Vysvětlete konvence pojmenování v Rails

  • Třída a modul: Použijte MixedCase bez podtržítek. Názvy tříd a modulů začínají velkým písmenem.
  • Databázová tabulka: Název databázové tabulky by měl být v množném čísle a malými písmeny.
  • Proměnné: Proměnné by měly být psány malými písmeny, snake_case s podtržítky pro oddělení slov.
  • Model: K pojmenování modelu použijte MixedCase a název by měl být v jednotném čísle.
  • Kontrolery: Názvy kontrolerů jsou množné.

Jaký je rozdíl mezi typem string a text v Rails?

Typ `:string` je vhodný pro krátké texty do 255 znaků, například pro jména, uživatelská jména, e-maily, hesla a titulky.

Typ `:text` je vhodný pro dlouhé popisy, například pro komentáře k blogovým příspěvkům nebo popisky produktů.

class CreatePosts < ActiveRecord::Migration

  def self.up
    create_table :posts do |t|
      t.string :description
      t.text :content
    end
  end

Vysvětlete Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery (CSRF) je útok, kdy útočník donutí ověřené uživatele provádět akce jménem útočníka.

Rails vyžadují, aby vývojáři přidali do ApplicationController `protect_from_forgery`, aby se vyhnuli útokům CSRF. Aplikace vždy vyžaduje CSRF token k ověření uživatele.

Vysvětlete, co je mixin v Rails

Mixin nabízí kontrolovaný způsob, jak přidat funkce do třídy. Třída se skládá z více různých mixinů. Mixiny eliminují potřebu vícenásobného dědění.

Jaké je použití load a require v Ruby?

`require()` se používá k importu knihoven a gemů.

`load()` se používá k vykonání bloku kódu.

Jaký je rozdíl mezi callbacky a observátory v Ruby on Rails?

Rails observátory se používají, když metoda přímo nesouvisí s životním cyklem objektu. Jejich životní cykly jsou dlouhé a lze je kdykoli připojit nebo odpojit.

Callbacky lze volat pouze v konkrétních instancích životního cyklu objektu, například při aktualizaci, vytváření a ověřování. Callbacky jsou aktivní jen krátkou dobu.

Co jsou harnessy a fixture v Ruby?

Fixture označují způsob organizování dat, která chcete testovat. Mohou být vytvořeny v souborech, které končí příponou `.yml`.

Harnessy jsou testovací prostředí pro spouštění testů v Rails. Fixture jsou nastaveny v harnech.

Jaký je rozdíl mezi extend a include?

`include` přidává do třídy metody instance, které jsou pak dostupné prostřednictvím metod tříd.

`extend` přidává metody instance, které jsou definovány v modulu, do rozšířené třídy.

Jsou gemy a pluginy stejné v Ruby?

Gemy jsou zabalené aplikace v jazyce Ruby, které je nutné instalovat. Jsou univerzální a jejich funkčnost není závislá na Rails.

Pluginy v Ruby on Rails se nasazují spolu s aplikací Rails. Modifikují nebo rozšiřují základní funkce Rails.

Co jsou Rails observátory?

Rails observátor nabízí mechanismus, kdy jeden objekt informuje ostatní, když se jeho stav změní. Používá se ve vztahu jeden-k-mnoha, takže když se jeden objekt změní, všechny závislé objekty jsou informovány a automaticky aktualizovány.

Jaký příkaz se používá k vytvoření migrace?

bin/rails db:migrate

Ukažte, jak definovat proměnné třídy, instance a globální v Ruby

  • Proměnné třídy: Lze je použít kdekoli v rámci třídy. Jsou přístupné i potomkům třídy. Začínají na `@@`.
  • Proměnné instance: Používají se v lokálním rozsahu, který je specifický pro instanci vytvořeného objektu. Mohou se lišit od jednoho objektu k druhému. Začínají na `@`.
  • Globální proměnné: Jsou přístupné kdekoli v programu. Začínají na `$`.

Jakou roli hraje `Rakefile` v demo adresáři v Ruby?

`Rakefile` pomáhá s testováním a balením kódu Rails. Soubor definuje úlohy, které provádějí testy nebo demonstrují funkce aplikace.

Co je sweeper v Rails?

Sweeper fungují jako terminátory pro cachování. Implementují callbacky pro dvě role, fungují jako poloviční filtry a poloviční observátory. `expire_cache` vyhledá a vymaže všechny fragmenty mezipaměti, kterým vypršela platnost.

Co jsou filtry?

Jedná se o metody, které se spouštějí „před“ nebo „po“ provedení akce kontroleru. Tyto metody se dědí a spouští se s každým požadavkem, který vaše aplikace obdrží, pokud jsou nastaveny v `ApplicationController`.

Rozdíl mezi redirect a render v Rails

Render: Slouží k vykreslení šablony a odeslání klientovi jako odpověď na požadavek. Šablona vygeneruje stránku, kterou prohlížeč zobrazí.

Redirect: Odešle nový HTTP požadavek na jinou URL. Tato akce přesměruje klienta na jiný kontroler nebo akci. Tato metoda je vhodná, když chcete změnit URL adresy, které klienti vidí v prohlížeči.

Rozlišujte mezi `super()` a `super`

  • `super`: Pošle zprávu rodiči aktuálního objektu, aby vyvolal všechny argumenty vyvolané metody.
  • `super()`: Neposílá žádné argumenty rodiči.

Jaký je rozdíl mezi procs a bloky?

  • Bloky: Část kódu uzavřená do příkazů `do/end` nebo složených závorek. Vytváří se a provádí při každém volání metody.
  • Procs: Bloky kódu spojené se sadou lokálních proměnných. Tento kód lze volat v různých kontextech a stále má přístup k proměnným.

Jaký je rozdíl mezi `puts` a `print`?

`puts` používáme, když chceme něco vytisknout na obrazovku. Například:

puts “Hello World!!!”

Vytiskne „Hello World!!!“ na obrazovku.

`print` používáme, když nechceme přidat nový řádek do konzole.

print “Hello World!!!”

Vytiskne „Hello World!!!“ bez přidání nového řádku do konzole.

Co jsou dynamické findery?

Dynamické findery umožňují vývojářům vyhledávat záznamy v databázi bez použití surových SQL dotazů. Používají klíčové slovo `find_by_`, za kterým následuje atribut pro vyhledávání.

Vysvětlete, jak Rails implementuje AJAX

  • Spustí se událost, například odeslání formuláře nebo kliknutí na tlačítko.
  • JavaScriptová metoda odešle událostní data na server.
  • Obslužný program na serveru zpracuje data a odešle HTML webovému klientovi.
  • JavaScriptový obslužný program na klientovi přijme HTML obsah a aktualizuje aktuální stránku.

Vysvětlete `dig`, `float` a `max`

  • Pomocí metody `dig` lze extrahovat hodnoty z vnořených hashů nebo polí.
  • `Float` je datový typ v Ruby, který představuje reálná čísla s plovoucí desetinnou čárkou.
  • `max` je metoda, která se používá s poli a hashi. Vrací maximální hodnotu v kolekci položek/hodnot.
array = [2, 9, 4, 7, 3]

maximum = array.max

Konzole vypíše 9, protože je to největší číslo.

Závěr

Výše jsou uvedeny některé z typických otázek, na které můžete narazit během pohovoru na pozici Ruby on Rails. Pokud máte širší zájem o vývoj software, doporučujeme prozkoumat také otázky pro pohovor na Node.js. Před dalším pohovorem se ujistěte, že rozumíte popisu práce softwarového inženýra pro pozice Rails.