Diplomirani čitalac sa godinom iskustva u maloj firmi preko otvorenog konkursa dobija offre od Alibaba, Meituan, ByteDance, JD, Didi i drugih ✌️
Jedan čitalac je nedavno radio intervjue u nekoliko internet firmi i redom prošao intervjue kod Alibaba, ByteDance, Meituan, Didi i JD-a — mislim da je to prilično impresivno, pa sam ga pozvao da podeli svoje iskustvo.
Osnovni podaci o čitaocu: diplomirao 2019. godine (osnovne studije), trenutno radi u maloj firmi, backend razvoj.
Priprema za intervjue
1) Biografija (CV), fokus je na tehničkim veštinama i iskustvu sa projektima.
Prvo, tvoj CV je zapravo spisak tema koje nudiš intervjueru da te ispita — sve što u njega napišeš moraš moći da odbraniš. Ako te uhvate u stvari koju si sam napisao, biće ti neprijatno, a ostavljaš i loš utisak na intervjuera, zato piši samo ono što zaista znaš.
Drugo, u tech stack-u bolje da ne pišeš da si „ekspert" — ako napišeš, intervjuer će te na tome i ispitati, a ako ne znaš da odgovoriš, biće neprijatno. Piši „upoznat" ili „poznato mi je" i to je dovoljno.
Treće, preporučujem da nađeš nekoga da te interno preporuči — šansa da ti CV prođe je veća. Ako ne uspeš da nađeš nikoga, probaj na Maimai-u (molim, uplatite mi proviziju za reklamu). Ja sam CV poslao preko Maimai-ja, samo promeniš status u „tražim prilike" i ljudi će te sami kontaktirati.
Preporučujem jedan šablon za CV — Polebrief (minimalistički CV), njega već dugo koristim:
2) Algoritmi, ovo moraš da vežbaš, nemoj biti lenj. Lično mislim da je dovoljno odraditi sledeće, svako neka bira prema svojoj situaciji:
- Coding Interview Guide (Jianzhi Offer): https://www.nowcoder.com/ta/coding-interviews
- Reši prvih 200 zadataka na LeetCode-u (u Ergeovom krugu za učenje postoji Java verzija beleški za LeetCode koja može poslužiti kao referenca)
3) Osvežavanje gradiva, uglavnom čitam knjige, evo preporuka knjiga i resursa koje sam koristio:
- Konkurentno programiranje: „Java Concurrency in Practice", „Umetnost konkurentnog programiranja u Javi"
- JVM: „Duboko razumevanje Java virtuelne mašine"
- Redis: „Redis dizajn i implementacija", „Redis razvoj i operacije"
- MySQL: „High Performance MySQL", „MySQL unutrašnja tehnička tajna"
- SpringBoot i SpringCloud:
https://blog.didispace.com/ - Kafka: „Apache Kafka u praksi"
- Dizajn obrasci: „Razgovori o dizajn obrascima", „Zen dizajn obrazaca"
- Distribuirani sistemi: „Od Paxosa do Zookeepera — principi i praksa distribuirane konzistencije"
Iskustvo sa projektima
Pri zapošljavanju sa iskustvom, iskustvo sa projektima je veoma bitno — ne samo tehnička kompleksnost samog projekta, već i poslovna kompleksnost, koju si ulogu imao u projektu, koje probleme si susreo, gde su uska grla, kako si ih rešio. Ova pitanja su ključna; mnoge firme na kraju zapravo i pitaju isključivo oko tvog projekta, pa je sposobnost da intervjueru jasno objasniš svoj projekat obavezna.
Evo glavnih pitanja o iskustvu sa projekata na intervjuima sa iskustvom:
- Zašto si projekat ovako dizajnirao, koje prednosti donosi takav dizajn, koje probleme rešava, koje probleme stvara, šta se još može optimizovati
- Da li takav dizajn ima uska grla, koje probleme si susreo, koji su planovi za poboljšanje
- Teškoće u projektu, tehnički izazovi, kako si ih rešio, zašto baš na taj način, da li postoji bolji pristup
- Prema konkretnim funkcijama navedenim u CV-ju, idu u detalje
Tehnike za intervju
- Na intervjuu budi samopouzdan ali skroman — glas samopouzdan, nastup ponizan. Daj intervjueru osećaj da sve znaš, da si stabilan (a u stvari si unutra u panici). Zatim, govor treba da ti je tečan, izgovor jasan, a odgovori logični — ne moš da mucaš i sat vremena ne možeš da objasniš; ako intervjuer ne razume, to je neprijatno. Ovo možeš sam da vežbaš.
- Intervju je u suštini proces izlaganja sopstvenih prednosti. Nemoj da čekaš da intervjuer pita pa ti da odgovaraš — aktivno ponudi neke tačke da ga nateraš da te pita. A takođe, ako nešto ne znaš, reci da ne znaš, nije problem — samo nikako ne izmišljaj.
- Ne budi nadmen. Mnogi misle kad čitaju tuđa iskustva da sve znaju, ali „znati" i „moći to jasno i slojevito da objasniš na intervjuu" su dve različite stvari. Fejnmanova metoda učenja vredi pogledati. Na primer:
Princip rada synchronized — da li možeš da kažeš nešto što će intervjuera oduševiti? To nije lako. Suština intervjua je zapravo da dokažeš da si od drugih tehnički dublji i širi; u protivnom je sve naučeno napamet i intervjuer ne može da vidi u čemu se razlikuješ, pa šansa da prođeš drastično pada.
Lični savet: ako nisi dobro pripremljen, nemoj samo tako ići na intervju — velike firme vode evidenciju ocena, previše loših utisaka će ti smetati u budućim intervjuima. A posle svakog intervjua mnogo sumiraj, analiziraj, sredi gradivo i popuni rupice.
Zaključak intervjua
Alibabin intervju više je orijentisan na praktičnost — polazi od različitih scenarija, da ti scenarij, pa da rešavaš stvaran problem. U tom procesu rešavanja, primena različitih znanja je ono što se ističe.
ByteDance više ceni osnove računarstva, algoritme i razumevanje različitih middleware-a.
Na intervjuu ima i mnogo faktora sreće, jer svaki intervjuer ima drugi fokus, pa je najbolje da zadržiš miran stav.
Ispod su sveže beleške sa intervjua; neka od pitanja imaju manje stavki jer se ponavljaju između firmi, pa nisam ponavljao.
Meituan
Prvi krug
- Koje su klase bezbedne za niti, da li ih koristiš inače i koje probleme rešavaš njima
- Koje sve log fajlove ima MySQL, objasni ulogu svakog
- Zašto vaš projekat koristi Redis, u čemu je brzina, kako se osiguravaju visoke performanse i visoka istovremenost
- Redis struktura rečnika, šta kad dođe do hash konflikta, rehash, faktor opterećenja
- Koje JVM parametre poznaješ, koje komande si koristio
- Osnovni principi Zookeeper-a, model podataka, tipovi znode-a, koje su primene
- Kako dizajnirati funkciju top-liste (hot ranking), kako keširati, kako osigurati konzistenciju keša i baze
- Da li poznaješ kontejnerske tehnologije, koje probleme uglavnom rešavaju, koji je princip
- Za dati string izračunaj dužinu najdužeg palindromskog podstringa
- Predstavljanje projekta
Prvi krug sam prošao, ali u odseku kom sam se prijavio nije bilo mesta, pa su me preporučili drugom odeljenju — mesta u velikim firmama su prilično gusta. Ispod su beleške iz intervjua za drugo Meituan odeljenje.
Prvi krug
- Redis klaster, zašto baš 16384, sentinel mod, proces izbora, da li može doći do split-brain-a, Raft algoritam, prednosti i mane
- JVM classloader, custom classloader, mehanizam delegiranja roditelju, prednosti i mane, Tomcat mehanizam učitavanja klasa
- Da li poznaješ Tomcat hot deploy i hot reload, kako se postiže
- Proces CMS kolektora, princip G1 kolektora, kako se ostvaruje predvidivo zaustavljanje, veličina i struktura regiona
- Da li si susreo OutOfMemoryError ili curenje memorije, u kom scenariju nastaje, kako rešeno
- Proces eskalacije brava, da li laka brava može preći u biasovanu, da li biasovana može preći u bez brave, spin brava, struktura zaglavlja objekta, promene stanja brave
- Kafka rebalans, kako pri restartu servisa osigurati da Kafka ne uradi rebalans, koji su to rešenja
- Kako razumeš distribuirane sisteme i mikroservise, zašto se servisi razdvajaju, koje probleme to stvara, kako se rešavaju
- Koji middleware za poruke koristite, Kafka — zašto baš Kafka, visoka propusnost, kako se osigurava visoka propusnost, dizajn model, zero-copy
- Za dat niz dužine N sa N međusobno različitih prirodnih brojeva 1-N, sortiraj niz, ali bez direktog dodeljivanja vrednosti 1-N na pozicije indeksa 0∼N−1
- Proveri da li je drvo balansirano binarno
Drugi krug
- Da li poznaješ strukturu InnoDB, kako sarađuju disk stranice i bafer, te pretraga, šta kad bafer i podaci na disku nisu konzistentni, da li MySQL pri naglom padu gubi podatke
- Redis implementacija stringova, razlika između SDS i C, prethodna alokacija prostora
- Kako Redis implementira sortirani skup, šta je skip lista, proces dodavanja elementa u skip listu, dodavanje i dohvatanje elemenata, vremenska složenost dohvatanja skora, zašto ne crveno-crno drvo, koje su osobine crveno-crnog drveta, levo i desno rotacija
- Da li poznaješ IO modele, multipleksing, select, poll, epoll, struktura epoll-a, kako se registruju događaji, ET i LT mod
- Kako shvataš visoku dostupnost, kako se osigurava, koje su mane, mehanizam prekida struje (circuit breaker), kako implementirati
- Šta misliš o visokoj istovremenosti, kako se definiše, da li vaš projekat ima, ako da koje probleme stvara, kako rešiti
- Predstavljanje projekta
- Za dato binarno drvo izračunaj maksimalnu sumu putanje čvorova; početni i krajnji čvor te putanje mogu biti bilo koji čvor u drvetu
Treći krug
- Predstavljanje projekta
- Algoritam: treći koren od float broja, Njutnova metoda iteracije
- Kad bi mogao da počneš sa radom, koja su tvoja očekivanja od pozicije
- Da li radiš intervjue i u drugim firmama, u kom ste trenutno stadijumu
Alibaba
Prvi krug
- Princip synchronized, kako se osigurava reentrantnost, vidljivost, šta kad baci izuzetak, razlika u odnosu na Lock, dve niti istovremeno pristupaju synchronized statičkoj metodi, dve niti istovremeno pristupaju jednoj synchronized statičkoj i jednoj nestatičkoj metodi — kako teče
- Uloga volatile, princip, kako osigurava vidljivost, memorijske barijere
- Koje brave poznaješ, optimistična i pesimistična, zašto se za čitanje stavlja brava, zašto optimistična odgovara scenama čitanja, zašto ne odgovara scenama pisanja, koji problemi nastaju, princip CAS
- U kojim situacijama nastaje deadlock, kako otkriti, kako rešiti
- Princip konzistentnog heširanja, koje probleme rešava, naginjanje podataka, zašto 2 na 32, da li može 2 na 20
- Redis probijanje keša, Bloom filter, kako se koristi, koje ima probleme, kako rešiti
- Redis distribuirana brava, kako se određuje vreme isteka, ako posao traje duže i brava istekne, šta onda, kako osigurati atomičnost otpuštanja brave, da li je vaš Redis klaster, objasni Redlock algoritam
- MySQL transakcije, ACID, princip implementacije, prljavo čitanje, prljavo pisanje, nivoi izolacije, princip, MVCC, phantom read, princip gap brave, kad se koristi gap brava, šta kad brava otkaže, koje još brave poznaješ — redna brava, tabela brava
- MySQL princip levog prefiksa indeksa, kako optimizovati, koja polja odgovaraju za indeks, koje su prednosti i mane indeksa
- Da li si u produkciji susao slow query, kako locirao i optimizovao, EXPLAIN, šta znači „using filesort", uzrok, kako rešiti
- Kako shvataš idempotenciju, da li si imao stvaran scenario, kako rešio, zašto Redis, šta ako Redis podaci isteknu ili nestanu
Drugi krug
- Princip HashMap, put i get, zašto na 8 prelazi u crveno-crno drvo, proces dodavanja čvora u crveno-crno drvo, kad se radi resize, zašto 0.75, koraci resize, zašto se dele na visoki i niski bit, koje su optimizacije od 1.7 do 1.8, koje su optimizacije hash algoritma, koji problem ima head insertion, zašto nije bezbedan za niti
- Princip ArrayList, zašto niz i transient, vremenska složenost add i get, princip proširenja, razlika u odnosu na LinkedList, princip, u kojim scenarijima se koristi koji, zašto
- Koje klase za konkurentnost poznaješ
- Princip ReentrantLock, proces zaključavanja i otpuštanja, AQS, fer i nefer, reentrant, kako se implementira prekidljučivost
- Princip ConcurrentHashMap, put, get, size, resize, kako se osigurava bezbednost niti, razlika između 1.7 i 1.8, zašto synchronized, koji problem ima segmentno zaključavanje, koje su optimizacije hash algoritma
- Da li si koristio ThreadLocal, u kom scenariju, princip, šta kad dođe do hash konflikta, implementacija proširenja, da li može doći do problema bezbednosti niti, uzrok curenja memorije, kako rešiti
- Algoritmi prikupljanja smeća, koje su prednosti i mane svakog, šta spada u GC roots, kad nastaje full GC
- Koje dizajn obrasce poznaješ — fabrika, strategija, dekorater, bridge, objasni, koje probleme ima singleton
- Razumevanje Spring AOP, koje probleme rešava, princip implementacije, razlika između JDK dinamičkog proxy-ja i CGLIB-a, prednosti i mane, kako se ostvaruje poziv metode
- U MySQL-u postoji indeks (a,b,c), i SQL
where a = 1 and b > 1 and c = 1— da li može iskoristiti indeks, zašto ne može, struktura B+ drveta, zašto ne crveno-crno ili B drvo, koliko IO operacija za deset miliona podataka - MySQL klasterizovani indeks, covering index, donja struktura, primarni ključ, šta kad nema primarnog ključa, sam ga generiše — zašto onda uopšte koristiti korisnički definisan, koji problem ima auto-generisani ključ
- Redis model niti, koje su prednosti i mane jednonitnog modela, zašto jednonitni može imati visoke performanse, kad nastaje blokada, kako rešiti
- Kako Kafka osigurava visoku dostupnost, objasni dizajn arhitekturu, zašto su i čitanje i pisanje na glavnoj particiji, koje su prednosti i mane toga
- Da li poznaješ DDD — ne baš
- Kako inače učiš
- Predstavljanje projekta
Treći krug
- Koja sve stanja ima nit, kako nastaje stanje čekanja, proces promene stanja do deadlock-a, stanje terminiranosti, metod interrupt()
- Kako shvataš bezbednost niti, u kojim scenarijima nastaju problemi, kakva rešenja postoje
- Koji problemi nastaju pri istovremenom izvršavanju više MySQL transakcija, kako se rešavaju
- Da li si radio particionisanje baze i tabele, kako proširiti kapacitet bez zaustavljanja, šta sa gubitkom pri dvostrukom pisanju, kako rešiti cross-shard transakcije
- Da li vaš Redis koristi klaster, proces proširenja, kako komuniciraju čvorovi međusobno
- Da li se objekti obavezno alociraju na heap-u, JIT, tiered compilation, escape analysis
- Elasticsearch proces pisanja i upita, donja implementacija, zašto takav dizajn
- ES klaster, problem split-brain-a, kako nastaje, kako rešiti
- Šta se dešava kad u
while(true)stalno radišnew Thread().start() - Da li poznaješ socket, razlika u implementaciji TCP i UDP-a — ne poznajem, ne koristim puno
- Dizajniraj sistem za flash prodaju (seckill) koji izdrži deset miliona istovremenih zahteva, šta ako ni Redis ne izdrži
- Predstavljanje projekta
Četvrti krug
- Pričaj o tehnologiji koju najbolje poznaješ — JVM, MySQL, Redis — konkretno koja oblast
- Veličina
new Object[100], veličina reference na objekat, struktura zaglavlja objekta - MySQL master-slave replikacija, kako rešiti kašnjenje replikacije
- Kako osigurati konzistenciju između Redis-a i MySQL-a, da li će Redis zbog mrežnog razloga pri prekoračenju vremena ipak uspešno izvršiti, a ako ne uspe kako onda osigurati konzistenciju
- Redis proces persistencije, da li AOF može izazvati blokadu, kad se uglavnom koristi RDB, a kad AOF
- Da li si u produkciji imao veliki saobraćaj, koje probleme izazvao, zašto baza ne izdrži ni 2000 QPS-a, da li si razmišljao o uzroku, kako ste tada rešili
- Kako se radi rate limiting, ako bi ti zadao da dizajniraš sistem za rate limiting, kako bi ga implementirao
- Razlika između Dubbo i Spring Cloud, konkretne razlike, u kojim scenarijima se koji koristi
- Dao je nekoliko scenarija za rešavanje distribuiranih transakcija
- Predstavljanje projekta
- Koju stvarnu vrednost vaš biznis donosi firmi, u čemu se ogleda, da li ima pokazatelja
Peti krug, nakon HR-a došao je još jedan krug, tzv. ukršteni intervju
- Kako shvataš user-mode i kernel-mode, zašto se dele na nivoe, na koliko načina se prelazi, kako, šta ako prelaz ne uspe
- Kako shvataš izuzetke, koja im je uloga, kako ih koristite u svakodnevnom radu
- Da li koristite Redis, za šta, u kojim scenarijima, koje probleme si susreo, kako rešio
- JVM meta-space memorijska struktura, koji problem ima permanent generation
- Kako u svakodnevnom razvoju rešavaš probleme — ako bi sad na produkciji iskočio alarm, koji je tvoj pristup, koji proces
- Zašto koristite MQ, koje probleme si susreo, kako si ih rešio
- Šta misliš, gde je vaša prednost u odnosu na konkurenciju
- Razgovor: da li trguješ akcijama, zašto Bilibili, koristim ga svaki dan, vidim ga pozitivno
Douyin
Nije pitao mnogo o projektu — možda je moj projekat bio previše običan. Više voli da pita o osnovama računarstva i middleware znanju.
Prvi krug
- HTTP zaglavlja zahteva, expire, cache-control polja, statusni kodovi, 301, 302, 401, 403
- Princip HTTPS, digitalni potpis, digitalni sertifikat, proces asimetričnog šifrovanja, koji problemi postoje
- Koja stanja imaju TCP konekcija na strani klijenta i servera, time_wait stanje
- Virtuelna memorija, kako se virtuelna adresa prevodi u fizičku, segmentacija memorije, straničenje memorije, prednosti i mane
- Koliko maksimalno TCP konekcija Linux može da uspostavi — klijentski i serverski kraj, šta kad se prekorači
- Princip Eureka-e, da li je jako konzistentna, zašto, kako se osigurava jaka konzistencija, kako višestepeni keš osigurava konzistenciju, Eureka klaster — nakon pada servisa da li se servisi i dalje mogu zvati
- Princip Hystrixa, da li ti je poznato half-open stanje, konkretan proces prelaza, kako je implementirana izolacija
- Zookeeper garancija konzistencije, princip ZAB protokola, šta ako polovina upita ode na drugu polovinu, kojoj vrsti konzistencije pripada Zookeeper — jakoj ili konačnoj
- Mehanizam izbora u Zookeeper-u, koji problemi postoje u procesu izbora
- Najduži podstring bez ponavljajućih znakova
- Zašto ByteDance koristi Go, šta misliš o Javi i Go-u, da li bi prešao na Go
Drugi krug
- Proces poziva funkcije A funkcije B, kako se prosleđuju parametri
- Koje vrste poziva funkcija postoje u Javi, da li u IO tokovima ima poziva funkcija
- Fork funkcija, razlika između procesa roditelja i deteta, problemi siročića i zombi procesa, koja stanja ima proces, kako se procesi sinhronizuju, komuniciraju, kako implementirane poruke i cevi, algoritmi raspoređivanja procesa, prednosti i mane svakog
- DoS napad, DDoS napad, DRDoS napad, kako ih rešiti, SYN flood
- Spin brava, šta tačno čini trošak promene konteksta niti, prekid, koje vrste prekida postoje, proces prelaska iz user-mode u kernel-mode
- Kako promeniti strukturu tabele velike tabele — polja — koje probleme donosi
ALTER, kako rešiti, koje dobre opcije postoje, koji problemi nastaju kod dvostrukog pisanja, da li postoji još rešenja - Da li si koristio Redis pipeline, za šta, koji mu je princip, da li osigurava atomičnost, razlika u odnosu na transakciju, da li Redis transakcija osigurava atomičnost
- Da li je Redis jako konzistentan, kako osigurati jaku konzistenciju, koji su planovi
- Kako Kafka osigurava da se poruke ne izgube
- Pronađi sve kombinacije od k brojeva čiji je zbir n, kombinacija sme sadržavati samo pozitivne cele brojeve 1-9, i u svakoj kombinaciji nema ponavljanja. Ulaz: k = 3, x = 9, izlaz: [[1,2,6], [1,3,5], [2,3,4]]
Treći krug, činilo se da je intervjuer veoma zauzet, pitao je samo nekoliko tehničkih rešenja za e-commerce scenarije.
Algoritam: na prstenu se nalazi 10 tačaka, numerisanih 0-9, kreće se iz tačke 0, svakim korakom može se ići u smeru kazaljke na sledeću tačku ili suprotno na prethodnu. Pitanje: na koliko različitih načina se nakon n koraka može vratiti u tačku 0?
Primer:
Ako je n=1, iz 0 se može ići samo u 1 ili 9, nemoguće je vratiti se u 0, ukupno 0 načina. Ako je n=2, iz 0 postoje 4 putanje: 0->1->2, 0->1->0, 0->9->8, 0->9->0, od kojih se dve vraćaju u 0, dakle ukupno 2 načina.
Didi
Prvi krug
- Koje algoritme sortiranja poznaješ, quicksort, složenost quicksorta, optimizacije, heapsort, proces izgradnje hipa
- Da li poznaješ refleksiju, koji joj je princip
- Razlika između TreeMap i LinkedHashMap, princip implementacije
- Objasni proces učitavanja klasa u JVM-u, šta je simbolička referenca, u kojim slučajevima se dešava inicijalizacija
- Spring circular dependency, kako se rešava, zašto je potreban trošani (level-3) keš, zašto ne bi dva nivoa
- Koje osobine ima SpringBoot u poređenju sa Spring-om, da li poznaješ princip auto-konfiguracije SpringBoot-a
- Da li Kafka podržava transakcije, da li ih vaš projekat koristi, koji je princip
- Kako izračunati dnevno aktivne korisnike od sto miliona, koje su mane HyperLogLog-a, zašto ne bitmap
- Izračunaj dužinu ciklusa u kružno povezanoj listi
Drugi krug
- Koje sve tipove podataka ima Redis, koje vi koristite, za šta koristite ZSet
- Garbage collector, proces CMS prikupljanja, zašto je pauza kratka, koje su mu mane, šta kad nastane „concurrent mode failure", kako rešiti fragmentaciju memorije, zašto se ne koristi mark-compact
- Princip thread pool-a, ključni parametri, podele broja niti, proces promena pri dinamičkom podešavanju parametara, princip Tomcat thread pool-a, najčešće korišćeni thread pool-ovi, koji vi uglavnom koristite, zašto, koje probleme može izazvati, šta kad nit baci izuzetak, princip blokirajućeg reda
- Da li si radio particionisanje baze i tabele, zašto se radi, koji problemi nastaju, sa koliko podataka je pogodno raditi particionisanje, kako se radi cross-shard i agregaciona operacija
- Predstavljanje projekta
- Za dato binarno drvo, pronađi najnižeg zajedničkog pretka dva zadata čvora
- Koje planove imaš za sebe, koju tehnologiju želiš da učiš, koju knjigu trenutno čitaš
Treći krug
- Objasni NIO, princip implementacije, prednosti i mane. 2. Da li poznaješ Netty, objasni Netty dizajn model, arhitekturu, scenarije upotrebe
- Proces čitanja i pisanja podataka u Zookeeper-u
- Predstavljanje projekta
JD
Prvi krug
- Razlika između TCP i UDP-a, kako TCP osigurava pouzdanu konekciju, šta kad nastane mrežna kongestija
- Da li poznaješ strukturu TCP i UDP paketa
- Zadat je biznis scenario, napiši SQL upit
- Da li pri kreiranju tabele definišete auto-increment id, zašto, šta kad se auto-increment id iscrpi
- Kako inače pravite MySQL indekse, na osnovu kojih principa, da li si susreo situaciju da indeks ne važi, kako optimizovano
- JVM memorijska struktura, struktura heap-a, struktura stack-a, proces operand stack-a za a+b, kad se recycle-uje adresa povratka metode, kad je program counter prazan
- Redis implementacija distribuirane brave, da li postoji i drugi način, kako Zookeeper to implementira, koje su prednosti i mane svakog, zašto vi koristite Redis
- Vrati levi prikaz (left view) drveta
Drugi krug
- Koji deo Spring-a ti je najpoznatiji, ispričaj, životni ciklus, proces kreiranja bean-a
- Da li si koristio transakcije, da li si susreo situaciju da transakcija otkaže, koji je uzrok
- Kako SpringBoot učitava klase, na koji način
- Koji objekti ulaze u old generaciju, da li se može podesiti odnos između Eden i Survivor-a, koji je parametar, koje probleme donosi promena
- Dizajn WeChat Moments (krug prijatelja), implementacija lajkova i komentara, a blokiranje, šta kad Redis podaci nestanu
- Predstavljanje projekta
- Date su ti dve neprazne povezane liste koje predstavljaju dva nenegativna cela broja. Cifre su im uskladištene u obrnutom redosledu, i svaki čvor može čuvati samo jednu cifru.
- Saberi ta dva broja i vrati zbir u istom obliku, kao povezanu listu.
Treći krug, činilo se da intervjuer jako dobro poznaje ES, neprestano je pitao o ES-u
- ES inverted index, princip, Lucene, tokenizacija, shard, replika
- Princip pisanja podataka u ES, da li su podaci u realnom vremenu, zašto nisu, da li se gube podaci, odnos segmenta, cache-a, bafera i translog-a
- ES deep pagination, optimizacije
- Predstavljanje projekta
- Validacija binarnog stabla pretrage
Na kraju deljenja, Erge kaže samo par reči.
Ako želiš preko otvorenog konkursa u veliku firmu, moraš ostvariti sledeće četiri stvari:
Ojačaj osnove — bez čvrstih osnova sve se trese. Tokom ove godine pripreme, osnovno znanje mi se mnogo popravilo popunjavanjem rupica. Ali otkrio sam i dosta nedostataka, treba nastaviti da akumuliram.
Uporno uči — u ovom poslu je konkurencija prejaka, dok si mlad obavezno stvori naviku učenja. Ako u maloj firmi radiš izazovne stvari i pritom nemš vremena za učenje, predlažem ti da što pre nađeš posao koji donosi rast.
Postavi sebi cilj — obavezno odredi cilj, ako ti je dovoljno jak uverenje, onda će te neprestano voditi napred. Jer nakon napornog radnog dana, posle posla nastaviti da učiš, to se ne može izdržati bez cilja.
Napravi plan — za dva meseca progutaj jedan glavni tech stack, za godinu dana progutaš oko 6 teških zalogaja, to će ti biti arsenal za buduće intervjue; od osamnaest vrsta oružja ne moraš sve da savladaš do savršenstva, ali izaberi nekoliko i slobodno pričaj s intervjuerom sat vremena — to ne bi trebalo da bude problem!
nadam se da ćete svi dobiti offer koji vam se sviđa!
Izvor: https://mp.weixin.qq.com/s/h2tV6v5Rh6jHdO9x0p63-g, autor: Yueban Feiyu, obradio: Chenmo Wang Er
