Ruby on Rails je verovatno najpopularniji okvir za razvoj veb aplikacija napisan u Ruby programskom jeziku. Njegova jednostavnost upotrebe, arhitektura zasnovana na MVC modelu, aktivna zajednica programera i sposobnost skaliranja su ključni faktori njegove rasprostranjenosti.
Među istaknutim kompanijama koje koriste Ruby on Rails su GitHub, Dribbble, Shopify, Airbnb, Etsy, Kickstarter, Twitch i Zendesk, da spomenemo samo neke od njih.
Za iskusne inženjere koji se bave Ruby on Rails-om, razumevanje potencijalnih pitanja na intervjuu za posao je ključno za uspeh.
Intervjui za posao mogu biti izvor stresa ako niste adekvatno pripremljeni. Međutim, dobra priprema povećava samopouzdanje i može vam doneti željenu poziciju u kompaniji koju ste priželjkivali.
U nastavku su navedena neka od najčešćih pitanja na intervjuima za Ruby on Rails programere, zajedno sa odgovorima na njih.
Šta je Ruby on Rails?
Ruby je objektno-orijentisani programski jezik poznat po svojoj čitljivoj sintaksi.
Ruby on Rails je okvir (framework) napisan u Ruby-ju koji programeri koriste za kreiranje složenih veb aplikacija.
Prednosti korišćenja Ruby on Rails
- Manje koda: Sa Rails-om, postižete mnogo sa malo linija koda, što ubrzava razvoj.
- Bogata biblioteka i gemovi: Veliki broj biblioteka i gemova dodatno proširuje funkcionalnost Ruby on Rails aplikacija.
- Jednostavan za učenje: Ruby on Rails kod je intuitivan i liči na običan engleski jezik, što ga čini lakšim za savladavanje.
- Snažna zajednica: Velika i aktivna zajednica programera pruža podršku i resurse.
Ograničenja Ruby on Rails
- Brzina i performanse: U poređenju sa Django-m ili Node.js, brzina i performanse Rails aplikacija mogu biti niže.
- Ograničena dokumentacija: Neki gemovi mogu imati nedostatak detaljne dokumentacije.
- Kruta struktura: Ruby on Rails je donekle „mišljenjski“ okvir, što može ograničiti fleksibilnost za neke programere.
Šta je Rails kontroler?
Kontroler je logički centar Ruby on Rails aplikacije. On upravlja, koordinira i nadgleda interakciju između korisnika, modela i prikaza.
Šta je Rails Active Record?
Active Record je tehnika mapiranja objekata i relacija (ORM). On služi kao sloj Ruby koda koji povezuje logiku aplikacije sa bazom podataka. Nakon pisanja Ruby koda, koriste se ‘migracije’ za ažuriranje baze podataka.
Šta je MVC i kako radi?
Arhitektonski obrazac model-prikaz-kontroler (MVC) razdvaja poslovnu logiku od logike unosa i prezentacije.
- Model: Upravlja svim podacima u Rails aplikaciji.
- Prikaz: Ovo je deo aplikacije koji korisnici vide (korisnički interfejs).
- Kontroler: Deluje kao posrednik koji omogućava komunikaciju između modela i prikaza.
Šta je Action Controller u Ruby on Rails?
Action Controller predstavlja „C“ u MVC obrascu. On prima dolazeće zahteve, interpretira ih i generiše odgovarajući izlaz.
Šta je Rake u Rails-u?
Rake je alat za izvršavanje zadataka u Ruby i Ruby on Rails aplikacijama. Rails poseduje predefinisane Rake zadatke za testiranje, pokretanje migracija i kreiranje baza podataka.
Šta je yield u Ruby on Rails?
Yield je ključna reč koja se koristi unutar metoda za pozivanje bloka koda. Broj argumenata koji se mogu proslediti bloku pomoću yield nije ograničen. Blokovi su, u ovom kontekstu, anonimne metode koje se mogu prosleđivati kao dodatni argumenti drugim metodama.
Šta je Garbage Collection u Ruby on Rails?
Garbage Collection (sakupljanje smeća) je proces upravljanja memorijom koju koriste računarski programi. Ruby on Rails automatski prati koje objekte program koristi, umesto da to bude zadatak programera. To omogućava programerima da se fokusiraju na logiku aplikacije i konvencije, umesto na ručno upravljanje memorijom.
Koja je uloga Garbage Collection u Rails aplikaciji?
Garbage Collection oslobađa memoriju na računaru za druge procese. To se postiže uklanjanjem nedostupnih objekata koje program ostavi nakon izvršenja.
Šta je asset pipeline?
Asset Pipeline u Ruby on Rails-u pruža okvir za minimiziranje i kombinovanje CSS i JavaScript resursa. Ovaj okvir automatski kombinuje sve resurse u Rails aplikaciji sa resursima iz drugih gemova.
Razlika između dinamičkog i statičkog skafoldinga?
Skafolding je proces generisanja osnovnih delova Rails aplikacije.
Statički skafolding podrazumeva eksplicitno unošenje komande koja kreira potrebne podatke u odgovarajućim poljima. Za završetak statičkog skafoldinga, potrebno je pokrenuti migracije.
Dinamički skafolding generiše sadržaj i korisničke interfejse u toku rada aplikacije. Ovaj proces se može koristiti za kreiranje, modifikaciju i brisanje podataka u Rails aplikaciji.
Šta je biblioteka klasa?
Biblioteka klasa sadrži različite domene u Ruby on Rails, kao što su programske niti i tipovi podataka. Ona omogućava programerima da kreiraju apstrakciju koda i ponovo koriste istu logiku unutar različitih delova aplikacije.
Opišite polimorfnu asocijaciju u Rails-u
Polimorfna asocijacija je vrsta asocijacije aktivnih zapisa. Polimorfizam znači da objekat može imati više oblika. U kontekstu Rails-a, polimorfna asocijacija omogućava definisanje jednog modela koji može biti povezan sa drugim modelima, bez potrebe za ponavljanjem koda.
Šta je interpolacija stringova u Ruby-ju?
Interpolacija stringova podrazumeva umetanje mesta za čuvanje vrednosti koje se odnose na druge promenljive u string objektu. Najjednostavniji način za interpolaciju vrednosti je korišćenje operatora sabiranja.
Razmotrimo sledeći primer:
name = "Titus" puts "Hello " + name
Izlaz će biti:
Hello Titus
Šta je Object Relationship Model (ORM)?
ORM je veza između baza podataka i objektno-orijentisanih programa. U Rails-u, relacija objekta označava mapiranje klasa sa tabelama u bazi podataka.
Objasnite migracije u Rails-u
Migracije omogućavaju programerima da na jednostavan način unose promene u šemu baze podataka. Programeri mogu upravljati uvođenjem i vraćanjem promena u kontrolisanom okruženju. Ovaj pristup izbegava potrebu za ručnim upravljanjem pojedinačnim SQL skriptama za definisanje promena.
Objasnite konvencije imenovanja u Rails-u
- Klase i moduli: Koristite MixedCase, bez donjih crta. Nazivi klasa i modula počinju velikim slovom.
- Tabele baze podataka: Ime tabele treba da bude u množini i malim slovima sa donjim crtama.
- Promenljive: Imena promenljivih treba da budu pisana malim slovima, koristeći snake_case (donje crte kao razdvajače).
- Modeli: Koristite MixedCase za model i uverite se da je ime u jednini.
- Kontroleri: Imena kontrolera su u množini.
Koja je razlika između string i text u Rails-u?
:string je pogodan za čuvanje kratkih tekstova do 255 karaktera, kao što su imena, korisnička imena, e-mail adrese, lozinke i naslovi.
:text je pogodan za duže opise, kao što su komentari na blogu ili opisi proizvoda.
class CreatePosts < ActiveRecord::Migration def self.up create_table:posts do |t| t.string:description t.text :content end end
Objasnite Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery (CSRF) je napad u kojem napadač tera autentifikovane korisnike da izvršavaju radnje u njihovo ime.
Rails zahteva od programera da dodaju „protect_from_forgery“ u ApplicationController kako bi izbegli CSRF napade. Aplikacija će uvek zahtevati CSRF token za autentifikaciju korisnika.
Objasnite šta je mixin u Rails-u
Mixin pruža kontrolisan način za dodavanje funkcionalnosti klasama. Klase se mogu sastojati od mnogo različitih mixin-a. Mixin-i otklanjaju potrebu za višestrukim nasleđivanjem.
Kakva je upotreba load i require u Ruby-ju?
require() se koristi za uvoz biblioteka/gemova.
load() se koristi za izvršavanje blokova koda.
Koja je razlika između callback-a i observer-a u Ruby on Rails?
Rails observer-i se koriste kada metoda nije direktno povezana sa životnim ciklusom objekta. Oni imaju dug životni vek i mogu se „priključiti“ i „isključiti“ u bilo kom trenutku.
Callback-ovi se mogu pozvati samo u određenim instancama životnog ciklusa objekta. Primere takvih instanci su ažuriranja, kreiranja i validacija. Callback-ovi su aktivni samo tokom kratkog vremenskog perioda.
Šta su harnesses i fixtures u Ruby-ju?
Fixtures se odnose na način organizovanja podataka koje želite testirati. Mogu se kreirati u fajlovima koji se završavaju ekstenzijom .yml.
Harnesses je okruženje ili test runner za pokretanje Rails testova. Fixtures su postavljeni u harness-ima.
Koja je razlika između extend i include?
„Include“ dodaje metodu instance klasi. Kod će biti dostupan putem metoda klase.
„Extend“ dodaje metode instance definisane u modulu klasi koja se proširuje.
Da li su gemovi i plugini isti u Ruby-ju?
Gemovi su spakovane Ruby aplikacije koje je potrebno instalirati. Oni su opšte namene i njihova funkcionalnost ne zavisi od Rails-a.
Plugin-i u Ruby on Rails-u se primenjuju zajedno sa vašom Rails aplikacijom. Oni modifikuju ili dodaju osnovnu funkcionalnost Rails-a.
Šta su Rails observeri?
Rails observer pruža mehanizam gde jedan objekat obaveštava druge kada se njegovo stanje promeni. On se koristi u relaciji jedan-prema-više, tako da kada se stanje jednog objekta promeni, svi zavisni objekti se automatski obaveštavaju i ažuriraju.
Koja komanda se koristi za kreiranje migracije?
bin/rails db:migrate
Pokažite kako da definišete klase, instance i globalne promenljive u Ruby-ju
- Promenljive klase: Mogu se koristiti bilo gde unutar svoje klase. Potomci klase im takođe mogu pristupiti. Počinju sa @@.
- Promenljive instance: Koriste se u lokalnom opsegu koji je specifičan za instance kreiranog objekta. Mogu se razlikovati od jednog do drugog objekta. Počinju sa @.
- Globalne promenljive: Dostupne su bilo gde unutar programa. Počinju sa $.
Koju ulogu ima Rakefile dostupan u demo direktorijumu u Ruby-ju?
Rakefile pomaže u testiranju i pakovanju Rails koda. Fajl definiše zadatke koji izvršavaju testove ili demonstriraju karakteristike aplikacije.
Šta je sweeper u Rails-u?
Sweeper-i se ponašaju kao „terminatori“ u keširanju. Oni deluju kao polufilteri i poluposmatrači i primenjuju callback-ove za obe uloge. ‘expire_cache’ pronalazi sve fragmente keša koji su zastareli i briše ih.
Šta su filteri?
Ovo su metode koje se izvršavaju pre ili posle izvršenja akcije kontrolera. Takve metode se nasleđuju i pokreću sa svakim zahtevom koji aplikacija primi, ako su postavljene u ApplicationController.
Razlika između redirect i render u Rails-u
Render: koristi se za prikaz šablona i slanje klijentu kao odgovor na zahtev. Ovaj šablon generiše stranicu koju pregledač prikazuje.
Redirect: šalje novi HTTP zahtev na drugu URL adresu. Ova akcija preusmerava klijenta na drugi kontroler ili akciju. Ovaj metod je koristan kada želite da promenite URL adresu koju klijenti vide u pregledaču.
Razlika između pozivanja super i super()
- Super: šalje poruku roditelju trenutnog objekta da pozove sve argumente pozvane metode.
- super(): ne šalje nikakve argumente roditelju.
Koja je razlika između Procs i Blocks?
- Blokovi: Deo koda omeđen naredbama do/end ili vitičastim zagradama. Oni se kreiraju i izvršavaju svaki put kada se metoda pozove.
- Procesi: Blokovi koda povezani sa skupom lokalnih promenljivih. Ovaj kod se može pozvati u različitim kontekstima i dalje će imati pristup promenljivima.
Koja je razlika između naredbi puts i print?
Puts se koristi kada želimo nešto da odštampamo na ekranu. Na primer:
puts “Hello World!!!”
Štampa „Hello World!!!“ na ekranu.
Print koristimo kada ne želimo da dodamo novi red na konzoli.
print “Hello World!!!”
Izlazi „Hello World!!!“, ali novi red neće biti dodat na konzolu.
Šta su dinamički pretraživači?
Dinamički pretraživači omogućavaju programerima da traže zapise u svojoj bazi podataka bez korišćenja sirovih SQL upita. Oni koriste ključnu reč find_by_, za kojom sledi atribut po kome se pretražuje.
Objasnite kako Rails implementira AJAX
- Pokreće se okidač, kao što je slanje forme ili klik na dugme.
- JavaScript metoda šalje podatke o okidaču handler-u na serveru.
- Handler na strani servera radi sa podacima i šalje HTML web klijentu.
- JavaScript handler na strani klijenta prima HTML sadržaj i ažurira trenutnu stranicu.
Objasnite Dig, Float i Max
- Sa metodom dig, možete izdvojiti vrednosti iz ugnježdenih hash-eva ili nizova.
- Float je Ruby tip podataka koji predstavlja realne brojeve sa pokretnim zarezom.
- Max je metoda koja se može koristiti sa nizovima i hash-evima. Vraća maksimalnu vrednost u kolekciji stavki/vrednosti.
array = [2, 9, 4, 7, 3] maximum = array.max
Konzola će ispisati 9, jer je to najveći broj.
Zaključak
Navedena pitanja predstavljaju pregled onoga što možete očekivati na intervjuu za Ruby on Rails programera. Ako ste iskusni inženjer, preporučujemo da pogledate i pitanja za Node.js intervjue. Pre svakog intervjua, obavezno detaljno proučite opis posla.