Hrvatski

Svladajte svoj sljedeći full-stack intervju. Ovaj sveobuhvatni vodič pokriva ključna pitanja o frontendu, backendu, bazama podataka, DevOpsu i dizajnu sustava.

Uspješno svladavanje Full-Stack intervjua: Globalni vodič za uobičajena pitanja za developere

Uloga Full-Stack developera jedna je od najdinamičnijih i najzahtjevnijih u tehnološkoj industriji. Zahtijeva jedinstvenu mješavinu vještina, od korisnikovog preglednika pa sve do baze podataka i infrastrukture za implementaciju. Posljedično, proces intervjuiranja za full-stack poziciju poznat je po svojoj strogosti, osmišljen kako bi testirao širinu i dubinu vašeg znanja. Bilo da ste junior developer koji traži svoju prvu ulogu ili iskusni profesionalac u potrazi za novim izazovom, priprema je ključ uspjeha.

Ovaj sveobuhvatni vodič namijenjen je globalnoj publici developera. Analizirat ćemo uobičajena pitanja za intervju s kojima ćete se vjerojatno suočiti, idući dalje od jednostavnih popisa kako bismo istražili zašto se postavlja svako pitanje. Naš cilj je opremiti vas načinom razmišljanja i znanjem kako ne biste samo odgovarali na pitanja, već i pokazali svoju vrijednost kao pravi full-stack profesionalac.

Full-Stack način razmišljanja: Što anketari zaista traže

Prije nego što zaronimo u specifična pitanja, ključno je razumjeti perspektivu anketara. Oni ne samo da označavaju kućice na popisu. Oni procjenjuju vašu sposobnost da:

Vaš cilj tijekom cijelog intervjua je pokazati te kvalitete. Svako pitanje shvatite kao priliku da ispričate priču o svojim vještinama i iskustvu.

Odjeljak 1: Bihevioralna i temeljna pitanja

Ova pitanja, koja često započinju intervju, postavljaju ton i daju anketaru osjećaj vaše osobnosti, strasti i stila komunikacije. Nemojte ih podcjenjivati.

1. "Provedite me kroz izazovan projekt na kojem ste radili."

Što pitaju: "Pokažite mi da se možete nositi sa složenošću, preuzeti odgovornost i rješavati stvarne probleme."

Kako odgovoriti: Koristite STAR metodu (Situacija, Zadatak, Akcija, Rezultat).

2. "Kako ostajete u toku s najnovijim tehnologijama i trendovima?"

Što pitaju: "Jeste li strastveni i proaktivni u vezi sa svojim profesionalnim razvojem?"

Kako odgovoriti: Budite specifični. Navedite kombinaciju izvora koji pokazuju istinski interes.

3. "Opišite situaciju kada ste imali tehničko neslaganje s kolegom. Kako ste to riješili?"

Što pitaju: "Možete li surađivati profesionalno i dati prednost uspjehu projekta ispred vlastitog ega?"

Kako odgovoriti: Usredotočite se na pristup temeljen na podacima i poštovanju. Izbjegavajte okrivljavanje druge osobe. Idealna priča završava kompromisom ili odlukom temeljenom na dokazima, a ne samo na mišljenju.

Primjer: "Moj kolega i ja raspravljali smo hoćemo li koristiti GraphQL ili tradicionalni REST API za novi servis. Moja preferencija je bio REST zbog njegove jednostavnosti, dok je on zagovarao fleksibilnost GraphQL-a. Kako bismo to riješili, odlučili smo napraviti male dokaze koncepta (POC) za nekoliko ključnih značajki koristeći oba pristupa. Zatim smo timu predstavili prednosti i nedostatke, usredotočujući se na developersko iskustvo, performanse i dugoročnu održivost. Tim se na kraju odlučio za GraphQL jer je POC pokazao kako će smanjiti broj mrežnih zahtjeva s naše mobilne aplikacije. U tom sam procesu puno naučio o prednostima GraphQL-a."

Odjeljak 2: Pitanja o frontend razvoju

Ovaj odjeljak testira vašu sposobnost stvaranja intuitivnih, pristupačnih i učinkovitih korisničkih sučelja. Čak i ako je vaša jača strana backend, očekuje se da ste ovdje vješti.

HTML i CSS

1. "Što je semantički HTML i zašto je važan?"

Objasnite da semantički HTML koristi tagove koji opisuju značenje i strukturu sadržaja (npr. <header>, <nav>, <main>, <article>, <footer>) umjesto samo njegove prezentacije (poput <div> ili <span>). Njegova važnost leži u:
Pristupačnosti: Čitači zaslona koriste ove tagove kako bi pomogli slabovidnim korisnicima u navigaciji stranicom.
SEO: Tražilice ih koriste kako bi bolje razumjele sadržaj, što može poboljšati rangiranje.
Održivosti: Čini kod lakšim za čitanje i razumijevanje drugim developerima.

2. "Možete li objasniti CSS Box Model?"

Opišite pravokutne okvire koji se generiraju za elemente u stablu dokumenta. Svaki okvir ima četiri ruba: rub sadržaja, rub unutarnjeg razmaka (padding), rub okvira (border) i rub vanjskog razmaka (margin). Također biste trebali moći objasniti svojstvo box-sizing, posebno razliku između content-box (zadana vrijednost) i border-box (koji mnogi developeri preferiraju jer uključuje padding i border u ukupnu širinu i visinu elementa).

3. "Kada biste koristili CSS Grid umjesto Flexboxa?"

Ovo pitanje testira vaše razumijevanje modernih tehnika rasporeda. Dobar odgovor je:
Flexbox je idealan za jednodimenzionalne rasporede—bilo u retku ili stupcu. Zamislite poravnavanje stavki u navigacijskoj traci ili distribuciju stavki unutar spremnika.
Grid je dizajniran za dvodimenzionalne rasporede—retke i stupce istovremeno. Savršen je za stvaranje složenih rasporeda stranica, poput galerije ili cjelokupne strukture web stranice s zaglavljem, bočnom trakom, glavnim sadržajem i podnožjem.

JavaScript

1. "Objasnite 'closures' (zatvaranja) u JavaScriptu. Možete li dati praktičan primjer?"

Closure je funkcija koja pamti okruženje u kojem je stvorena. Ima pristup vlastitom opsegu, opsegu vanjske funkcije i globalnom opsegu.
Klasičan primjer je funkcija brojača koja ne zagađuje globalni opseg:

function createCounter() { let count = 0; return function() { count++; return count; }; } const counter1 = createCounter(); console.log(counter1()); // 1 console.log(counter1()); // 2 const counter2 = createCounter(); // Novi, odvojeni closure console.log(counter2()); // 1

Closures su temelj mnogih uzoraka u JavaScriptu, uključujući privatnost podataka i povratne pozive (callbacks).

2. "Koja je razlika između `Promise.all` i `Promise.race`?"

Promise.all(iterable): Prima iterabilni objekt s obećanjima (promises) i vraća jedno novo obećanje. Ovo novo obećanje se ispunjava kada su se sva ulazna obećanja ispunila, s nizom njihovih rezultata. Odbija se ako se bilo koje od ulaznih obećanja odbije.
Promise.race(iterable): Također prima iterabilni objekt s obećanjima. Vraća novo obećanje koje se ispunjava ili odbija čim se prvo obećanje u iterabilnom objektu ispuni ili odbije, s vrijednošću ili razlogom iz tog obećanja.

3. "Objasnite `async/await` i kako se odnosi na obećanja (Promises)."

async/await je sintaktički šećer izgrađen na obećanjima. Omogućuje vam pisanje asinkronog koda koji izgleda i ponaša se više kao sinkroni kod, što ga čini lakšim za čitanje i razumijevanje.

Pokažite kako biste refaktorirali lanac .then() u čišću async/await funkciju.

Frameworkovi (React, Vue, Angular, itd.)

Pitanja ovdje bit će specifična za framework naveden u opisu posla. Budite spremni raspravljati o onome kojeg najbolje poznajete.

1. (React) "Što je Virtualni DOM i zašto je koristan?"

Virtualni DOM (VDOM) je programski koncept gdje se virtualna reprezentacija korisničkog sučelja čuva u memoriji i sinkronizira sa "stvarnim" DOM-om. Kada se stanje komponente promijeni, stvara se nova VDOM reprezentacija. React zatim uspoređuje (proces koji se zove "diffing") ovaj novi VDOM s prethodnim. Izračunava najučinkovitiji način za provođenje tih promjena u stvarnom DOM-u, minimizirajući izravne manipulacije, koje su često usko grlo u performansama.

2. (Općenito) "Kako upravljate stanjem u velikoj aplikaciji?"

Ovo je ključno pitanje. Vaš odgovor bi trebao napredovati od jednostavnih do složenih rješenja.

Odjeljak 3: Pitanja o backend razvoju

Ovdje se fokus prebacuje na poslužitelj, API-je i trajnost podataka. Anketari žele znati možete li graditi robusne, skalabilne i sigurne servise.

API-ji i Arhitektura

1. "Koja su načela RESTful API-ja?"

REST (Representational State Transfer) je arhitektonski stil. Pravi RESTful API pridržava se nekoliko ograničenja:

2. "Kada biste koristili GraphQL umjesto REST-a?"

Ovo testira vašu svjesnost modernih API paradigmi.
Koristite REST kada: Imate jednostavne, dobro definirane resurse, a standardan, predmemorabilan i jednostavan API je dovoljan. Široko je razumljiv i ima ogroman ekosustav.
Koristite GraphQL kada:

Spomenite kompromise: GraphQL ima strmiju krivulju učenja i može biti složeniji za postavljanje i predmemoriranje na strani poslužitelja.

3. "Kako biste osigurali API?"

Pokrijte više slojeva sigurnosti:

Baze podataka

1. "Koja je razlika između SQL i NoSQL baze podataka? Kada biste odabrali jednu umjesto druge?"

Ovo je temeljno full-stack pitanje.
SQL (Relacijske baze podataka) poput PostgreSQL, MySQL:

NoSQL (Nerelacijske baze podataka) poput MongoDB, Redis, Cassandra: Vaš izbor ovisi o 3 V vaših podataka: Volume (količina), Velocity (brzina) i Variety (raznolikost).

2. "Što je indeks baze podataka i zašto je važan za performanse?"

Indeks je podatkovna struktura (najčešće B-stablo) koja poboljšava brzinu operacija dohvaćanja podataka u tablici baze podataka po cijenu dodatnih upisa i prostora za pohranu. Bez indeksa, baza podataka mora skenirati cijelu tablicu ("full table scan") kako bi pronašla relevantne redove. S indeksom na određenom stupcu (npr. `user_email`), baza podataka može potražiti vrijednost u indeksu i otići izravno na lokaciju odgovarajućih podataka, što je mnogo brže. Raspravite o kompromisu: indeksi ubrzavaju `SELECT` upite, ali mogu usporiti `INSERT`, `UPDATE` i `DELETE` operacije jer se i indeks mora ažurirati.

Odjeljak 4: "Full-Stack" ljepilo: DevOps, testiranje i dizajn sustava

Ovdje senior kandidati zaista blistaju. Ova pitanja testiraju vašu sposobnost razmišljanja o cjelokupnom životnom ciklusu razvoja softvera, od pisanja koda do njegove implementacije i održavanja u velikom opsegu.

DevOps i CI/CD

1. "Što je CI/CD i koje ste alate koristili za njegovu implementaciju?"

CI (Kontinuirana integracija) je praksa čestog spajanja radnih kopija koda svih developera u zajedničku glavnu liniju. Svaka integracija se provjerava automatiziranom izgradnjom (i automatiziranim testovima) kako bi se greške integracije otkrile što je brže moguće.
CD (Kontinuirana isporuka/implementacija) je praksa automatske implementacije svih promjena koda u testno i/ili produkcijsko okruženje nakon faze izgradnje.
Objasnite prednosti: brži ciklusi izdanja, poboljšana produktivnost developera i izdanja s manjim rizikom. Spomenite alate koje ste koristili, poput Jenkins, GitLab CI, GitHub Actions ili CircleCI.

2. "Što je Docker i kako ste ga koristili?"

Objasnite Docker kao platformu za razvoj, isporuku i pokretanje aplikacija u kontejnerima. Kontejner pakira kod i sve njegove ovisnosti, tako da se aplikacija brzo i pouzdano pokreće iz jednog računalnog okruženja u drugo. Spomenite kako ste ga koristili za:
Standardizaciju razvojnih okruženja: Osiguravanje da svaki developer u timu radi s istim ovisnostima.
Pojednostavljenje implementacije: Stvaranje prenosivog artefakta (slike) koji se može pokrenuti bilo gdje gdje je Docker instaliran, od lokalnog računala do VM-a u oblaku.
Omogućavanje mikroservisa: Svaki servis se može pokrenuti u vlastitom izoliranom kontejneru.

Dizajn sustava

Za uloge od srednje do seniorske razine, vjerojatno ćete dobiti široko, otvoreno pitanje o dizajnu sustava. Cilj nije proizvesti savršenu, detaljnu arhitekturu u 30 minuta, već pokazati vaš proces razmišljanja.

Primjer pitanja: "Dizajnirajte servis za skraćivanje URL-ova poput TinyURL-a."

Slijedite strukturirani pristup:

  1. Pojašnjenje zahtjeva (Funkcionalni i nefunkcionalni):
    • Funkcionalni: Korisnici mogu unijeti dugi URL i dobiti kratki. Kada korisnici pristupe kratkom URL-u, preusmjeravaju se na originalni dugi URL. Korisnici mogu imati prilagođene kratke URL-ove.
    • Nefunkcionalni: Servis mora biti visoko dostupan (bez prekida rada). Preusmjeravanja moraju biti vrlo brza (niska latencija). Kratki URL-ovi ne bi trebali biti predvidljivi. Sustav bi trebao biti skalabilan kako bi mogao obraditi milijune URL-ova i preusmjeravanja.
  2. Dizajn na visokoj razini (Dijagram):

    Skicirajte glavne komponente. To bi vjerojatno uključivalo klijenta (web preglednik), web poslužitelj/API gateway, aplikacijski servis i bazu podataka.

  3. API krajnje točke:
    • POST /api/v1/url s tijelom poput {"longUrl": "http://..."} za stvaranje kratkog URL-a.
    • GET /{shortUrlCode} za obradu preusmjeravanja.
  4. Shema baze podataka:

    Raspravite o izboru baze podataka. NoSQL key-value pohrana poput Redis-a ili DynamoDB-a bila bi izvrsna za mapiranje shortUrlCode -> longUrl zbog brzih performansi čitanja. Mogli biste koristiti i SQL bazu podataka s tablicom poput Urls(short_code, long_url, created_at) gdje je `short_code` primarni ključ i indeksiran.

  5. Osnovna logika (Generiranje kratkog URL-a):

    Kako generirate shortUrlCode? Raspravite o opcijama:
    a) Hashiranje dugog URL-a (npr. MD5) i uzimanje prvih 6-7 znakova. Što je s kolizijama?
    b) Korištenje brojača koji se povećava za svaki novi URL i zatim ga kodirati u base-62 da biste dobili kratki alfanumerički niz. To jamči jedinstvenost.

  6. Skaliranje sustava:

    Ovdje zarađujete glavne bodove. Raspravite o:

    • Balanseri opterećenja: Za raspodjelu prometa na više web poslužitelja.
    • Predmemoriranje (Caching): Budući da se mnogi URL-ovi često traže, predmemoriranje mapiranja shortUrlCode -> longUrl u distribuiranoj predmemoriji poput Redis-a ili Memcached-a dramatično bi smanjilo opterećenje baze podataka i poboljšalo brzinu preusmjeravanja.
    • Skaliranje baze podataka: Raspravite o read replikama za obradu visokog prometa čitanja za preusmjeravanja i sharding (particioniranje) za opterećenja s puno pisanja ako sustav postane ogroman.
    • Mreža za isporuku sadržaja (CDN): Za još brži globalni odgovor, logika preusmjeravanja bi se potencijalno mogla gurnuti na rubne lokacije.

Zaključak: Vaš put do uspjeha

Prolazak kroz intervju za full-stack developera je maraton, a ne sprint. Testira cijeli spektar vaših sposobnosti, od vašeg duha suradnje do vašeg dubokog tehničkog znanja. Ključ nije u pamćenju odgovora, već u razumijevanju načela koja stoje iza njih.

Vježbajte artikuliranje svog procesa razmišljanja. Za svaki tehnički izbor, budite spremni objasniti "zašto" i raspraviti o kompromisima. Koristite svoje prošle projekte kao dokaz svojih vještina. I što je najvažnije, neka vaša strast za izgradnjom sjajnog softvera dođe do izražaja.

Pripremajući se u ovim različitim područjima—bihevioralnom, frontendu, backendu i sistemskom razmišljanju—pozicionirate se kao sposoban, svestran inženjer spreman uhvatiti se u koštac s izazovima moderne full-stack uloge, bez obzira gdje se u svijetu prilika nalazi. Sretno!