👏 Preuzmi→Najobimnija PDF zbirka na internetu za učenje i pronalaženje posla programera
Kada su svi na sličnom nivou, stepen u kome poznajete ova pitanja sa intervjua pokazuje vašu sposobnost učenja. Da bih pomogao svima, delim materijale koje sam pažljivo pripremio!
Prikupljeni materijali obuhvataju ne samo uobičajene osnove Java-e (JVM, Java Collections Framework, višenitnost), već i baze podataka, računarske mreže, algoritme i strukture podataka, obrasce dizajna, okvire poput Spring i Netty, mikroservise (Dubbo, redovi poruka) i mrežne prolaze...
Može se reći da je ovo 2022. godine bila najobimnija PDF zbirka za učenje i pronalaženje posla na celom internetu.
Ako želite da znate najnoviju situaciju na razgovorima za posao, puko napametno učenje raznih pitanja sa intervjua nije dovoljno. U tom trenutku, forumi Niuke i LeetCode (LC) sadrže iskustva sa intervjua koja su drugi podelili. Kombinovanje tih iskustava i analiziranje u skladu sa sopstvenom situacijom jeste najbolji način učenja.
Koraci za brzo pronalaženje posla:
Pronađite jedan sveobuhvatan zapis sa intervjua i prvo sistematsno naučite osnove svakog dela. Kada osetite da ste stigli do otprilike polovine, možete početi da tražite različite zapise sa intervjua i da ciljano učite prema njima.
Zatim, za kompaniju u kojoj želite da radite, prvo potražite na Niukeu sadržaj intervjua koji su podelili drugi kandidati. Na osnovu tih zapisa popunjavajte rupe u znanju, tražite pitanja koja ne znate i ciljano ih učite. Kada stignete do sedam-osam desetina, možete probati da odete na razgovore u neke manje kompanije radi vežbe. Ne plašite se mišlju da još niste spremni.
Mogu vam odgovorno reći: i da vam damo još godinu dana za učenje i pripremu za intervjue, ne biste nužno savladali sav ovaj sadržaj.
Zato čim osetite da ste otprilike spremni, možete krenuti na konkretne razgovore za posao. Nikako ne čekajte i ne plašite se!!!
Sadržaj koji sam ovde prikupio potiče od iskustava sa intervjua koja su drugi podelili na raznim platformama, zaključno sa 2022. godinom — sigurno će preći vaša očekivanja.
Mogu vam odgovorno reći: ako temeljno naučite i međusobno povežete sav sadržaj koji će biti izložen u nastavku i znanja sadržana u PDF-ovima, osnovni delovi razgovora za BAT i ATM kompanije neće predstavljati problem, a za neke kampanje zapošljavanja studenata moći ćete bez pritiska da dobijete ponudu.
Krenimo dalje:
Java
Osnove
- Koje su primitivni tipovi podataka u Javi? Koji su im odgovarajući omotači (wrapper)? Koliko bajtova zauzima svaki od njih?
- Koja je razlika između String, StringBuffer i StringBuilder? Zašto je String nepromenljiv (immutable)?
==naspramequals?hashCodenaspramequals?
- Refleksija u Javi? Koje su mane refleksije? Kako razumete refleksiju (zašto okvirima treba refleksija)?
- Iznesite svoje razumevanje anotacija u Javi — koji problem rešavaju?
- Poznate su vam generičke klase (generics) u Javi? Šta je brisanje tipova (type erasure)? Opišite uobičajene džoker znakove (wildcards).
- Poznate su vam unutrašnje klase? Poznate su vam anonimne unutrašnje klase?
- Koja je razlika između BIO, NIO i AIO?
- Upotreba i razlika između ključnih reči
staticifinal
- Upotreba i razlika između ključnih reči
- Situacije u kojima se javlja OOM (OutOfMemoryError)
- Korišćenje generičkih tipova (što detaljnije)
JVM
- Model sakupljanja smeća (garbage collection) u JVM-u
- Algoritam brojanja referenci (Reference Counting)
- Mehanizam učitavanja klasa u virtuelnoj mašini
- Podaci za vreme izvršavanja u JVM-u (runtime data areas)
- Trenutak pokretanja GC-a
- Uzroci curenja memorije
- CMS sakupljač smeća (garbage collector)
- U kom memorijskom području se nalaze veliki objekti
- Kako se klasifikuje heap područje
- Koje algoritme ima sakupljanje smeća
- Kompletan tok GC-a
- Koja metoda sakupljanja se koristi za staru generaciju (old generation) u okviru GC-a?
- Kada se javlja full GC

Java kolekcije
- Opišite razliku između List, Map i Set
- Koja je razlika između Array i ArrayList, te između ArrayList i LinkedList
- Razlika između Iterator i ListIterator
- Karakteristike skladištenja kod ArrayList, Vector i LinkedList
- Razlika između HashMap i HashTable, te razlika između HashMap i HashSet
- Kako HashSet proverava da li postoje duplikati
- Razlika između Collection i Collections
- Koje karakteristike pri pohranjivanju i čitanju elemenata imaju interfejsi List, Map i Set?
- Da li je tačna tvrdnja: dva objekta mogu imati istu vrednost (
x.equals(y) == true), ali različite hash kodove?
- Da li je tačna tvrdnja: dva objekta mogu imati istu vrednost (
- Princip implementacije LinkedHashMap-a
- Šta rade interfejsi Comparable i Comparator, navedite razlike
Istovremenost i višenitnost
- Razlika između procesa i niti
- Šta su tri elementa istovremenog programiranja? Kako se u Javi obezbeđuje bezbedno izvršavanje više niti.
- Šta je paralelizam, šta je istovremenost, objasnite razliku između njih
- Za implementaciju višenitnosti u Javi, objasnite na koliko se načina mogu kreirati niti i koje su konkretne razlike
- Poređenje klase Thread i interfejsa Runnable
- Različita stanja niti
- Razlika između sleep i wait
- Razlika između sleep i yield
- Zašto metode wait, notify i notifyAll nisu u klasi Thread
- Šta je preuređivanje instrukcija (instruction reordering)
- Ključna reč volatile
- synchronized i brave (locks)
- Objasnite nadogradnju brava u Javi posle verzije Java 6

Računarske mreže
- OSI sedmoslojni referentni model
- Šta je HTTP
- Šta je hipertekst
- Razlika između HTTP i HTTPS
- Koraci kroz koje prolazi jedan kompletan HTTP zahtev
- 6. Poznat vam je HTTP protokol? Da li je HTTP zasnovan na TCP ili na UDP?
- Ukratko opišite sadržaj HTTP poruke! Koje podatke sadrže HTTP zahtev i HTTP odgovor?
- Poznate su vam razlike između HTTP i HTTPS?
- Koje uobičajene statusne kodove ima HTTP zahtev?
- Poznate su vam HTTP dugačke (keep-alive) i kratke veze?
- Odnos između Cookie i Session
- Detaljno o HTTP porukama
- Osam metoda HTTP zahteva
- Šta znače različiti HTTP statusni kodovi
- Razlike između HTTP 1.0, 1.1 i 2.0

Obrasci dizajna
- Konkretna implementacija obrasca fabrika (Factory)
- Kako se obrasci dizajna koriste u praksi
- Konkretna implementacija obrasca apstraktna fabrika (Abstract Factory)
- Poznat vam je obrazac fabrika? Opišite scenarije upotrebe tog obrasca.
- Poznat vam je obrazac lanac odgovornosti (Chain of Responsibility)?
- U kojim projektima otvorenog koda (Netty, MyBatis...) se koristi obrazac lanac odgovornosti? Kako se koristi?
- Poznatan vam je SOLID princip? Ukratko iznesite svoje razumevanje principa jedne odgovornosti (Single Responsibility) i principa otvorenosti/zatvorenosti (Open/Closed).
- Koji obrazac dizajna vam se najviše urezao u pamćenje prilikom čitanja izvornog koda Spring-a? Možete li ga ukratko da objasnite?
Baze podataka
MySQL
- Tri normalne forme baza podataka
- Mogući problemi koji se javljaju kod dva storage engine-a
- Četiri glavne osobine transakcija baze podataka i principi implementacije
- Mogući problemi u bazi podataka
- Koje tipove podataka ima MySQL
- Šta je indeks?
- Koje vrste indeksa postoje
- Koje prednosti i mane imaju indeksi
- Zašto se koristi B+ stablo umesto B stabla
- Za koje vrste SQL izraza nije preporučljivo praviti indeks
- Kada koristiti indeks
- Da li upotreba indeksa nužno poboljšava performanse?

Redis
- Šta je Redis
- Zašto koristiti Redis
- Tipovi podataka i njihovi scenariji upotrebe
- Kako izgledaju transakcije u Redis-u
- Dve metode persistencije u Redis-u
- Objašnjenje anomalija keša
- Koje strategije izbacivanja iz memorije (eviction) ima Redis
- Koje resurse Redis uglavnom troši
- Šta je Bloom filter
- Kako održavati konzistentnost master-slave

Uobičajeni okviri
Spring
- Najpre, iznesite svoje razumevanje Spring-a
- Koje module ima Spring
- Koju ulogu ima konfiguracioni fajl Spring-a
- Razlika između @Autowired i @Resource
- Često korišćene anotacije u Spring-u
- Nivoi izolacije transakcija i ponašanje propagacije transakcija u Spring-u
- Koje su glavne komponente Spring-a
- Koje su glavne anotacije Spring-a
- Možete li konkretno objasniti princip Spring AOP-a
- Princip Spring MVC-a
- Princip Spring Boot-a
- Princip JPA-e
- Predstavite anotaciju @SpringBootApplication
- Kako je implementovana automatska konfiguracija u Spring Boot-u?
- Koje ugrađene (embedded) web kontejnere podržava Spring Boot?
Netty
- Princip Netty-ja
- Kako Netty postiže visoke performanse
- Kako je konkretno implementirano multipleksiranje I/O (I/O multiplexing)
- Kako je konkretno implementirana asinhrona komunikacija NIO
- Kako izgleda efikasan Reactor model
RPC/Dubbo
- Poznat vam je Dubbo?
- Poznat vam je princip rada Dubbo-a? Koju ulogu igra registarski centar (registry)? Može li komunikacija nastaviti ako registarski centar padne?
- Poznate su vam strategije balansiranja opterećenja u Dubbo-u?
- Poznat vam je SPI mehanizam Dubbo-a? Koje prednosti donosi?
- Koji je glavni tok rada RPC-a
Zookeeper
- Objasnite kako razumete Zookeeper.
- Koje uloge postoje u Zookeeper-u
- Poznat vam je ZAB protokol
- Poznat vam je mehanizam glasanja
- Princip rada Zookeeper-a
Kafka
- Objasnite kako razumete Kafka-u
- Da li poznajete pojedinačne uloge u njoj
- Kako je dizajnirano skladištenje podataka u Kafki
- Kako se radi balansiranje opterećenja
- Kako tačno funkcioniše Consumer Group
Zadaci iz dizajna
- Ako imate milijardu brojeva od kojih je samo jedan duplikat, a memorija može da primi samo pola milijarde brojeva, kako pronaći taj dupli broj?
- Kako dizajnirati sistem za "flash sale" (server, baza podataka, distribuirani sistem)? Dizajn distribuiranog sistema?
- Postoji jedan server koji isključivo prima veliki broj zahteva — kako ga dizajnirati?
- Kada biste sami dizajnirali RPC okvir, kako biste ga dizajnirali?
- Kako brzo izazvati StackOverflow grešku?
Previše ih je, nećemo ih ovde pojedinačno izlistavati.
Konačna obrada
Hajde prvo da vidimo šta je sve obradjeno:

Ili ovo:

Naravno, ako mislite da je samo ovo u pitanju, grdno se varate.
Posebne teme o optimizaciji performansi:

Pitanja o okvirima otvorenog koda

Osnovni materijali za Java arhitektu

Posebna pitanja o distribuiranim sistemima

Napredna verzija — posebni odgovori za BAT

Osnove Java-e — dnevna/noćna verzija
Uči vas kako da idete korak po korak:

Osnove računarstva:

Ili opet, okviri otvorenog koda:

Postoji i odgovarajuća noćna verzija:

Najkompletniji sadržaj:

Može se reći da su jedino oni resursi koje trenutno ne možete da zamislite oni koje nisam prikupio.
Uostalom, vraćao sam se na vreme svake večeri i prikupljao resurse više od mesec dana — to nije bilo uzalud.
