Peste 40 de întrebări și răspunsuri la interviu Ruby on Rails frecvente [2023]

Ruby on Rails se distinge ca fiind, probabil, cel mai renumit cadru de dezvoltare Ruby. Popularitatea sa remarcabilă se datorează ușurinței de utilizare, arhitecturii MVC, unei comunități active și scalabilității oferite.

O serie de companii prestigioase, printre care GitHub, Dribbble, Shopify, Airbnb, Etsy, Kickstarter, Twitch și Zendesk, utilizează cu încredere Ruby on Rails pentru a-și dezvolta platformele online.

Pentru inginerii Ruby on Rails de nivel intermediar sau avansat, este esențial să se familiarizeze cu tipurile de întrebări care pot apărea într-un interviu. Pregătirea adecvată este o mișcare strategică.

Un interviu poate fi o experiență stresantă dacă nu ești pregătit, dar o pregătire temeinică îți va crește încrederea în sine, oferindu-ți șansa de a obține un post valoros în cadrul companiei dorite.

Mai jos, am compilat o serie de întrebări frecvente de interviu, împreună cu răspunsurile aferente, pentru a te ajuta în pregătirea ta.

Ce este Ruby on Rails?

Ruby se prezintă ca un limbaj de programare orientat pe obiecte, remarcabil prin sintaxa sa accesibilă și clară.

Ruby on Rails este un cadru de lucru Ruby, folosit frecvent de dezvoltatori pentru a construi aplicații web dinamice și performante.

Care sunt avantajele Ruby on Rails?

  • Cod compact: Cu Rails, poți implementa funcționalități complexe cu un număr redus de linii de cod, comparativ cu alte limbaje.
  • Bibliotecă extinsă: Beneficiezi de o varietate mare de biblioteci și gem-uri (pachete), care îmbogățesc funcționalitatea aplicațiilor Ruby on Rails.
  • Ușor de învățat: Sintaxa Ruby on Rails se aseamănă cu limbajul natural englez, făcându-l accesibil chiar și pentru începători.
  • Comunitate mare: Exista o comunitate extinsă de dezvoltatori activi, care oferă suport și resurse valoroase.

Care sunt limitele Ruby on Rails?

  • Performanță: În comparație cu alternative precum Django și Node.js, viteza de execuție și performanța Rails pot fi considerate inferioare în anumite scenarii.
  • Documentație: Unele dintre gem-urile sale pot avea documentație mai puțin detaliată, ceea ce poate îngreuna utilizarea lor.
  • Opinii rigide: Ruby on Rails este un cadru „cu opinii”, care poate limita flexibilitatea unui dezvoltator în anumite situații.

Ce este un controler Rails?

Controlerul Rails este centrul de operațiuni logice al unei aplicații Ruby on Rails. Acesta gestionează, coordonează și supervizează toate interacțiunile dintre utilizatori, modele și vederi.

Ce reprezintă Active Record în Rails?

Active Record este o metodă de mapare a relațiilor dintre obiecte (ORM). Acest strat de cod Ruby operează între logica aplicației și baza de date. După scrierea codului Ruby, se utilizează „migrații” pentru a reflecta modificările în baza de date.

Ce este MVC și cum funcționează?

Arhitectura model-view-controller (MVC) este un model care separă logica de business de logica de intrare și prezentare, facilitând o structură clară și ușor de întreținut.

  • Model: gestionează integral logica datelor dintr-o aplicație Rails.
  • Vizualizare: este componenta aplicației vizualizată de utilizatori, responsabilă de prezentarea informațiilor.
  • Controler: acționează ca un intermediar, permițând modelului și vizualizării să comunice eficient.

Ce este un Action Controller în Ruby on Rails?

Action Controller reprezintă litera „C” din arhitectura MVC. Acesta primește solicitările, le interpretează și generează răspunsul adecvat.

Ce rol are Rake în Rails?

Rake este un instrument de gestionare a sarcinilor, utilizat în aplicațiile Ruby on Rails și Ruby. Rails include sarcini Rake predefinite pentru testare, migrare și crearea bazelor de date.

Care este funcția lui yield în Ruby on Rails?

Cuvântul cheie „yield” este folosit în cadrul metodelor pentru a apela un bloc de cod. Nu există o limită în privința numărului de argumente pe care „yield” le poate transmite blocului. Blocurile sunt metode anonime, care pot fi oferite ca argumente suplimentare altor metode.

Ce este colectarea gunoiului (Garbage Collection) în Ruby on Rails?

Colectarea gunoiului este un proces automat de gestionare a memoriei utilizate de programele de calculator. Ruby on Rails monitorizează care obiecte sunt utilizate de program, eliberând programatorii de această grijă. Astfel, dezvoltatorii se pot concentra pe logica aplicației și nu pe alocarea memoriei.

Care este rolul colectării gunoiului într-o aplicație Rails?

Colectarea gunoiului eliberează memorie pe sistemul dumneavoastră pentru a permite rularea altor procese. Aceasta se realizează prin eliminarea obiectelor inaccesibile, rămase în urma execuției unui program.

Ce este un pipeline de active?

Un pipeline de active în Ruby on Rails oferă o structură pentru a minimiza și concatena activele CSS și JavaScript. Acest mecanism permite ca toate activele din aplicația Rails să fie automat combinate cu active din alte gem-uri.

Care este diferența dintre schelele dinamice și statice?

Schela este procesul prin care se generează părțile majore ale unei aplicații Rails, accelerând dezvoltarea.

Schela statică folosește o comandă explicită pentru a produce datele necesare în câmpurile corespunzătoare. Pentru a finaliza schela statică, migrația trebuie executată.

Schela dinamică generează conținut și interfața cu utilizatorul în timpul execuției aplicației. Acest proces permite crearea, modificarea și ștergerea dinamică a acțiunilor în aplicație.

Ce este o bibliotecă de clase?

O bibliotecă de clase include diverse domenii în Ruby on Rails, precum programarea firelor și tipurile de date. O bibliotecă de clase oferă posibilitatea de a abstractiza codul, folosind aceeași logică în diverse elemente ale aplicației.

Descrieți asociația polimorfică în Rails

Asociația polimorfică este un tip de asociere Active Record. Polimorfismul, în acest context, înseamnă că un obiect poate avea multiple forme. În Rails, asociația polimorfică vă permite să definiți un singur model care poate fi asociat cu sau poate aparține altor modele, fără a scrie cod repetitiv.

Ce este interpolarea șirurilor în Ruby?

Interpolarea șirurilor constă în adăugarea unor substituenți, care fac referire la alte valori din interiorul unui șir. Utilizarea operatorului de adunare este o modalitate simplă de interpolare.

Un exemplu:

name = "Titus"
puts "Salut " + name

Rezultatul va fi:

Salut Titus

Ce este modelul relațional obiect (ORM)?

Un ORM servește drept punte între bazele de date și programele orientate pe obiecte. O relație de obiect în Rails indică modul în care clasele sunt mapate la un tabel în baza de date.

Explicați migrarea în Rails

Migrațiile ajută dezvoltatorii să modifice schema bazei de date în mod convenabil, gestionând lansarea și rollback-ul modificărilor într-un mediu controlat, evitând administrarea individuală a scripturilor SQL.

Explicați convenția de denumire în Rails

  • Clase și module: Utilizați MixedCase, fără caractere de subliniere. Numele claselor și modulelor încep cu majusculă.
  • Tabelul bazei de date: Numele unui tabel din baza de date ar trebui să fie la plural și tip snake_case.
  • Variabile: Literele declaratoarelor de variabile ar trebui să fie minuscule și snake_case, separate prin subliniere.
  • Model: Utilizați MixedCase pentru a specifica un model, asigurându-vă că numele este la singular.
  • Controlere: Numele controlerului sunt pluralizate.

Care este diferența dintre șir și text în Rails?

:string este adecvat pentru stocarea textului scurt, de până la 255 de caractere. Se poate utiliza pentru nume, nume de utilizator, emailuri, parole și titluri.

:text este potrivit pentru descrieri lungi, cum ar fi comentariile la postările de pe blog sau descrierea unui produs.

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

Explicați falsificarea cererilor între site-uri (CSRF)

Falsificarea cererilor între site-uri (CSRF) reprezintă un atac cibernetic, în care un atacator exploatează autentificarea unui utilizator pentru a realiza acțiuni în numele acestuia.

Rails recomandă adăugarea „protect_from_forgery” la ApplicationController pentru a preveni atacurile CSRF, solicitând un token CSRF pentru autentificarea unui utilizator.

Explicați ce este un mixin în Rails

Un mixin oferă o modalitate controlată de a adăuga funcționalități unei clase, permițând compunerea clasei din mai multe mixin-uri, evitând necesitatea moștenirii multiple.

La ce folosesc load și require în Ruby?

require() este folosit pentru a importa biblioteci/gem-uri.

load() este utilizat pentru a executa un bloc de cod.

Care este diferența între apelurile inverse și observatori în Ruby on Rails?

Observatorii Rails sunt utilizați atunci când o metodă nu este conectată direct la ciclul de viață al unui obiect. Ciclurile lor de viață sunt ample și pot fi atașate sau detașate în orice moment.

Apelurile inverse, în schimb, pot fi invocate doar în anumite momente ale ciclului de viață al unui obiect, cum ar fi la actualizare, creare sau validare. Acestea sunt active doar pentru intervale scurte de timp.

Ce sunt harnesse și fixtures în Ruby?

Fixtures reprezintă o modalitate de a organiza datele pe care doriți să le testați, creând fișiere cu extensia .yml.

Harnesses reprezintă mediul de testare pentru execuția testelor Rails, unde fixtures sunt instalate.

Care este diferența dintre extend și include?

Include adaugă o metodă de instanță la o clasă, făcând codul accesibil prin metode de clasă.

Extend adaugă metode de instanță definite în modul la clasa extinsă.

Sunt gem-urile și pluginurile același lucru în Ruby?

Gem-urile sunt aplicații Ruby împachetate, care trebuie instalate. Acestea sunt de uz general și nu depind de Rails pentru funcționalitate.

Pluginurile în Ruby on Rails sunt implementate împreună cu aplicația Rails, modificând sau extinzând funcționalitatea de bază a acestuia.

Ce sunt observatorii Rails?

Observatorul Rails oferă un mecanism prin care un obiect poate notifica alte obiecte în momentul în care starea sa se modifică, fiind aplicabil într-o relație unu-la-mulți.

Ce comandă este folosită pentru a crea o migrare?

bin/rails db:migrate

Cum se definesc variabile de clasă, instanță și globale în Ruby?

  • Variabile de clasă: utilizabile în cadrul clasei, precum și accesibile de descendenții clasei, încep cu @@.
  • Variabile de instanță: sunt specifice instanței obiectului, fiind valabile doar în domeniul local, încep cu @.
  • Variabile globale: accesibile în orice parte a programului, încep cu $.

Ce rol joacă rakefile în directorul demo din Ruby?

Rakefile ajută la testarea și împachetarea codului Rails, definind sarcinile care efectuează teste sau demonstrează funcționalitățile aplicației.

Ce este un sweeper în Rails?

Sweeper acționează ca un terminator în cache, ca un semifiltru și semiobservator, implementând apeluri pentru ambele roluri. „expire_cache” identifică și șterge fragmentele de cache expirate.

Ce sunt filtrele?

Filtrele reprezintă metode care sunt executate „înainte” sau „după” execuția unei acțiuni de controler. Acestea sunt moștenite și vor rula cu fiecare solicitare a aplicației, dacă sunt definite în ApplicationController.

Care este diferența dintre redirect și render în Rails?

Render: este utilizat pentru a reda un șablon și a-l trimite clientului ca răspuns. Șablonul generează pagina care va fi afișată de browser.

Redirect: trimite o nouă solicitare HTTP către o adresă URL diferită, redirecționând clientul către un alt controler sau acțiune. Aceasta este utilă pentru a modifica URL-ul vizibil în browser.

Care este diferența dintre super() și super call?

  • Super: transmite un mesaj părintelui obiectului curent pentru a invoca toate argumentele metodei invocate.
  • super(): nu transmite niciun argument părintelui.

Care este diferența dintre Procs și Blocks?

  • Blocuri: sunt secțiuni de cod înconjurate de instrucțiuni do/end sau acolade. Acestea sunt create și executate la fiecare apel al metodei.
  • Procs: sunt blocuri de cod legate de un set de variabile locale. Acesta poate fi apelat în diverse contexte, având acces la variabile.

Care este diferența dintre declarațiile puts și print?

puts este utilizat pentru a afișa informații pe ecran, adăugând automat o linie nouă la final:

puts “Hello World!!!”

Va afișa „Hello World!!!” pe o nouă linie.

print este folosit când nu se dorește adăugarea unei linii noi după afișare:

print “Hello World!!!”

Va afișa „Hello World!!!” fără a adăuga o linie nouă la consolă.

Ce sunt găsitorii dinamici?

Găsitorii dinamici permit dezvoltatorilor să caute înregistrări în baza de date fără a utiliza interogări SQL brute, prin folosirea cuvântului cheie „find_by_” urmat de atributul căutat.

Explicați modul în care Rails implementează Ajax

  • Un eveniment declanșator, cum ar fi trimiterea unui formular sau clic pe un buton, este inițiat.
  • O metodă JavaScript transmite datele declanșatoare către un handler pe server.
  • Managerul de pe partea serverului procesează datele și transmite HTML clientului web.
  • Managerul JavaScript din partea clientului primește conținutul HTML și actualizează pagina curentă.

Explicați Dig, Float și Max

  • Dig: Permite extragerea de valori din hash-uri sau matrice imbricate.
  • Float: Este un tip de date Ruby care reprezintă numere reale cu precizie în virgulă mobilă.
  • Max: Este o metodă care poate fi utilizată cu matrice și hash-uri, returnând valoarea maximă dintr-o colecție.
array = [2, 9, 4, 7, 3]
maximum = array.max

Consola va afișa 9, deoarece este cel mai mare număr din matrice.

Concluzie

Întrebările de mai sus sunt doar o mică parte din ceea ce te poți aștepta să întâlnești într-un interviu Ruby on Rails. Asigură-te că înțelegi în profunzime descrierea postului de inginer Rails înainte de a participa la interviu. Dacă ai o experiență vastă, poți consulta și întrebări specifice pentru interviul de Node.js. Succes!