Iskustvo čitaoca sa univerziteta druge kategorije, dve i po godine iskustva, 10 kompanija i 28 rundi intervjua ✌️
Danas ću sa vama podeliti iskustvo sa intervjua čitaoca CoderW-a pri promeni posla. On ima diplomu univerziteta druge kategorije, dve i po godine radnog iskustva, prošao je intervjue u 10 kompanija, ukupno 28 rundi. Možete pogoditi koju je kompaniju na kraju izabrao? Vidimo se u komentarima.

Ujedno, mislim da su njegova priprema za intervjue, priprema rezimea i pitanja sa intervjua zaista vredni referenciranja i učenja.
Priprema za intervju
Ponavljanje
Veruj mi, za pravo učenje ipak treba čitati knjige; čitanje knjiga čini tvoj sistem znanja potpunijim.
Naravno, možeš inače čitati i članke autora sa izgrađenim imenom, kako bi proširio bazu znanja.
Spisak knjiga vezanih za Javu koje sam pročitao:
- Java: „Umetnost konkurentnog programiranja u Javi", „Java Concurrency in Practice"
- JVM: „Duboko razumevanje Java virtuelne mašine" (treće izdanje), „Duboko u Java virtuelnoj mašini: Algoritmi i implementacija JVM G1GC", „Dizajn i implementacija nove generacije sakupljača smeća ZGC", članci o JVM-u iz tehničkog tima Meituan, R-ovi članci o JVM-u
- MySQL: „MySQL iznutra: InnoDB skladišni engine", „High Performance MySQL", „MySQL u praksi u 45 lekcija", „Razumi MySQL od korena", „Od nule do majstora za optimizaciju MySQL-a u praksi"
- Redis: „Dizajn i implementacija Redis-a", „Razvoj i operacije Redis-a", članci iz serije Vodena kap i srebrni metak o Redis-u
- Kafka: blog „Polu-zver", „Apache Kafka u praksi"
- Zookeeper: „Od Paxosa do Zookeeper-a: Principi i praksa distribuirane konzistencije"
- Arhitektura: „Arhitektura Feniks", „Domain-Driven Design: Suočavanje sa suštinskom složenošću u softveru"
Još jedna stvar: dok čitaš knjige, pokušaj da vodiš beleške; to povećava efikasnost, pa ne zaboraviš sve odmah po završetku čitanja.


Za knjige koje nisu otvorenog koda, predlažem da podržiš autorsko stvaralaštvo i kupiš fizičko izdanje ili odgovarajući kurs.
Algoritmi
Što se algoritama tiče, nema nekih naročito pompnih trikova; dovoljno je rešavati prvih 200 zadataka sa LeetCode-a iznova i iznova, i to je i više nego dovoljno za konkursni oglas.
Rešio sam samo 170 zadataka, prošao sam intervjue u više velikih kompanija, i većina algoritamskih zadataka bila je direktno preuzeta sa LeetCode-a.

Na samom početku će biti teško, istraj nekoliko dana; ako nemaš ideju, pogledaj rešenje, a nakon čitanja rešenja nastavi da pišeš kod; ako ne možeš da napišeš kod, ponovo pogledaj rešenje. Uz upornost, algoritmi će pasti.
Rezime
Što se rezimea tiče, od diplomiranja do danas uvek koristim Wondercv: https://www.wondercv.com/ ; meni se čini vrlo praktičnim.
Što se tiče toga kako napisati rezime, nisam stručnjak, neću pričati cvetne reči, samo ću ti dati svoj šablon rezimea, isključivo za referencu.

Da napomenem: rezime koji napišeš zacrtava opseg tvog znanja, a onda intervjuer bira pitanja iz baze. Ako ti nije jasno ni znanje koje si sam zacrtao, na intervjuu sigurno nećeš biti siguran. Zato moraš odgovarati za svaku reč u rezimeu i dobro poznavati svaku tehničku tačku koju si u njega uneo.
Proces intervjua
Samopredstavljanje
Samopredstavljanje je sažetak rezimea; nema potrebe da pričaš o beznačajnim stvarima, intervjuer nije zainteresovan da li voliš košarku ili pevanje; dovoljno je da izneseš najspektakularniju stvar koju si uradio i najsloženiji problem koji si rešio.
Na primer:
Zdravo, ja sam CoderW, diplomirao sam na Harvardu 2019. godine.
Od diplomiranja do danas bavim se razvojem pozadinskog softvera.
Od 2019. do 2022. radio sam u Googleovom timu za middleware, uglavnom odgovoran za dizajn i razvoj middleware-a xx; u tom periodu završio sam preradu i optimizaciju xxx, a ukupne performanse porasle su za 80%;
- prešao sam u Microsoftov tim za e-trgovinu, odgovoran za dizajn Microsoftovog sistema e-trgovine; za dve godine završio sam izgradnju Microsoftove e-trgovine od nule. Od lansiranja, dnevno aktivnih korisnika dostiglo je milijardu, a prosečan QPS sistema dostiže 10.000.
Ovaj put prijavljujem se za poziciju senior eksperta u vašem timu za middleware; smatram da je moje poklapanje u poslovnom pravcu i tehnološkom steku prilično visoko i iskreno se nadam da ću se pridružiti vašoj kompaniji kako bismo zajedno gradili sistem xx. Hvala!
Tehnička diskusija
Nakon samopredstavljanja, obično sledi tehnička diskusija; ova faza obično traje 30 do 50 minuta i najvažniji je deo celog intervjua.
1. Ni ponizno ni nadmeno
Zapamti, ovo je faza tehničke diskusije, ne faza pitanja i odgovora. Dobra tehnička diskusija uvek je dijalog, a ne jednostrano ispitivanje.
Uz poštovanje prema intervjueru, možeš sa stavom dovesti u pitanje i razmotriti neke njegove zaključke; po mom mišljenju, smelost da izneseš drugačije mišljenje donosi plus poene.
Ako naiđeš na intervjuera koji te ne poštuje ili te čak vređa, predlažem da zatražiš povrat rezimea; svi smo mi zaposleni, šta ima da se pretvara?
2. Iskrenost
Neki intervjueri vole da pitaju pomalo opskurna znanja kako bi proverili tehničku dubinu kandidata; to je sasvim normalno, ne treba da budeš previše nervozan. Budi iskren — znaš, znaš; ne znaš, ne znaš; nije problem.
Nikako ne pokušavaj da budeš prepametan i izmišljaš; iskrenost je uvek na prvom mestu!
3. Dubina i širina
Ako dođete do tačke koju dobro poznaješ, obavezno je iskoristi; pokušaj da produbiš i proširiš razgovor, pa da intervjuer polako uđe u tvoj ritam.
Na primer, kada se priča o Kafka zero-copy.
- Dublje: možeš nastaviti dublje i pričati o sendfile+DMA Scatter/Gather.
- Šire: nakon dubine, proširi razgovor — zašto RocketMQ koristi zero-copy pri pisanju logova, dok Kafka ne koristi zero-copy pri pisanju logova.
Dubina pokazuje nivo tvog tehničkog razumevanja, širina pokazuje širinu tvog vidokruga.
Nakon što odgovoriš na pitanje, možeš ukratko da sumiraš; tako nećeš ostati sam da pričaš u oblacima, a intervjuer neće ostati bez glavne poente koju želiš da izneseš.
Faza programiranja
Ako ti radni staž nije predug, nakon tehničke diskusije obično sledi faza programiranja (ova faza se može desiti i pre tehničke diskusije).
Zadaci iz programiranja dele se na dve vrste: algoritamski zadaci i zadaci iz jezičkih trikova.
Algoritamski zadaci su verovatno svima jasni; dok stvari poput „dve niti naizmenično štampaju A i B", „rukom napisati singleton obrazac", „rukom napisati simple factory obrazac" spadaju u jezičke trikove.
Algoritamski zadaci su već pomenuti — samo ih intenzivno rešavaj; jezičkih trikova ima samo nekoliko, nauči ih napamet.
Faza protivpitanja
Lično mislim da ova faza ne služi ničemu, ne može stvarno da promeni ishod celog intervjua.
Zato ja uvek postavljam ista dva pitanja:
- Koje tehnološke stekove koristi pozicija za koju se prijavljujem?
- Koji je najveći izazov na poziciji za koju se prijavljujem?
Iskustva sa intervjua
Evo iskustava sa intervjua, nisu baš potpuna, nadam se da pomažu.
SF Express
- HashMap — proces proširenja, kako se rešavaju hash kolizije?
- Razgovarali smo o jednom blogu o MySQL-u koji sam ranije napisao — objasni pristup optimizaciji sporih SQL upita u MySQL-u? Tok rešavanja, sa kojih aspekata treba poći?
- APM — kako se vrši monitoring, koji je princip? Da li poznaješ Java Agent?
- G1 — glavne osobine, mark bitmap, card table/card page, SATB.
- Predstavi TiDB — šta je distribuirana baza podataka? Prednosti i nedostaci u poređenju sa MySQL-om?
- Kako se radi separacija hladnih i toplih podataka? Kako se radi particionisanje baza i tabela? Zašto koristiti ES?
- Načini realizacije distribuiranih transakcija — objasni lokalnu tabelu poruka, obaveštenje po najboljem naporu, TCC. Šta ste vi izabrali? Koje probleme ima AT?
- Optimizacija izveštajnog DSL-a, proces optimizacije kroz Flyweight obrazac, koliko su dobri rezultati?
- Razlika između monolitne aplikacije i mikroservisa, koje probleme imaju mikroservisi? Kako se rešava problem konzistencije podataka? Kako se rešava problem idempotencije?
- Koliko modula ima sistem za koji si zadužen? Kako se dele? Kako se upravlja njime?
- Koje su primene MQ-a? Gde tačno u projektu se koristi?
- Ako se slanje MQ poruka ne nalazi unutar MySQL transakcije, kako se garantuje konzistencija?
- Četiri Kafka izbora — izbor Controller-a, izbor Partition leader-a, izbor GroupCoordinator-a, izbor koordinatora potrošačke grupe. Opšta pitanja dizajna, scenariji upotrebe, kako se planira saobraćaj?
- Konkretni scenariji upotrebe keša, pitanja konzistencije, koji su to česti problemi sa kešom?
- Razlika između prekida kola (circuit breaker) i degradacije, konkretni scenariji upotrebe?
- Koja je razlika između QPS-a i TPS-a? Koliki je maksimalan QPS vašeg sistema? Koji problemi nastaju pri visokom QPS-u i kako ih rešiti?
- Kako dizajnirati RPC okvir? Koje tačke treba razmotriti?
- Da li pratiš nove tehnologije? Da li poznaješ problem sa log4j2? Možeš li ukratko predstaviti?
Zaključak: Težina intervjua je prilično niska; runda sa direktorom uglavnom je razgovor o pitanjima dizajna scenarija; iskustvo sa intervjua bilo je odlično, direktor je pokazao veliko poštovanje prema kandidatu, jake pohvale. Uslovi su u redu.
Pinduoduo
- Predstavi projekat koji si radio a sa kojim si najzadovoljniji
- Predstavi TiDB, RocksDB, LevelDB, LSM stablo, SSTable.
- Kako je urađeno sekundarno particionisanje XXL-Job-a? Koje probleme ima? Kako si ga optimizovao?
- Bitske operacije u HashMap-i, koja je složenost contains metoda u HashSet-u, ukratko o red-black stablu?
- Proces alokacije memorije za
byte[] a = new byte[10 * 1024]? Koliko veliki objekti odmah idu u old generaciju? Koji parametar se koristi za konfiguraciju? - Predstavi TLAB, PLAB, CAS alokaciju.
- Zašto je potrebna kompresija pokazivača, zašto je moguća? Koji je princip?
- Proces učitavanja klasa? Da li poznaješ izolaciju klasa?
- Principi realizacije polimorfizma i preopterećenja na nižem nivou, da li poznaješ nivo bajt-koda?
- Automatsko konfigurisanje Spring Boot-a, objasni princip SPI-ja?
- Razlika između interceptor-a i filter-a? Scenariji upotrebe?
- Princip realizacije Spring transakcija, kako Spring ostvaruje ACID? Kako bi implementirao transakciju pomoću JDBC-a?
- Brave u MySQL-u — kom sloju pripada brava na nivou tabele? Kom sloju pripada brava na nivou reda?
- MySQL indeksi? B+ stablo? Veličina svakog čvora indeksa primarnog ključa? Kolika je jedna stranica (page)? Ako jedan red prelazi 16 KB, kako se skladišti? Koliko podataka može da stane u TEXT? Problem prelivanja reda? Koji formati skladištenja podataka postoje? Kako se upravljaju stranicama prelivanja?
- Redis SSD, tačke optimizacije memorijskog prostora Redis-a, embstr i row, intset, ziplist.
- Koja je fizička arhitektura skladištenja na Kafka serveru? Zero-copy, mmap, sendfile, DMA gather.
- Kako da drugi poveruju u tvoje rešenje? Koje tačke razmotriti? Kako si to uradio? Šta misliš da se može poboljšati?
- Ako saobraćaj sistema naglo poraste 10 puta, kako postupiti? Ako 100 puta?
- Programiranje na tabli: singleton obrazac, zašto se dodaje volatile
- Programiranje na tabli: pomoću steka implementiraj thread-safe, efikasan red
- Programiranje na tabli: rastojanje između dva čvora u binarnom stablu
Zaključak: Prva runda je prilično teška, ispitivač te pritiska dok ne naiđeš na nešto što ne znaš; naredne runde više su usmerene na biznis i dizajn, prilično opuštene. Uslovi su maksimalni.
Meituan
- Koliko servisa, koliko mašina? K8S — kako se postiže izolacija?
- Kako se osigurava konzistencija podataka između servisa? Kako se garantuje na nivou biznisa?
- TCC? Two-phase commit, three-phase commit?
- Synchronized — o biased lock-u smo dugo razgovarali, sve do izvornog koda, proces eskalacije, JVM izvorni kod za Synchronized? (Intervjuer je veoma zainteresovan za JVM)
- Safepoint, uloga safepoint-a? Deo JVM izvornog koda (ranije sam pisao članak o tome, intervjuer je bio zainteresovan)
- Algoritmi sakupljanja smeća; PS+PO, zašto CMS koristi mark-sweep algoritam? Prethodnik CMS-a, R-ovi članci.
- ZGC — razgovarali smo o knjizi Peng Hančenga, „Dizajn i implementacija nove generacije sakupljača smeća ZGC", i o člancima tehničkog tima Meituan.
- G1 — razgovarali smo o knjizi Nakamura Šigeoa, „Duboko u Java virtuelnoj mašini: Algoritmi i implementacija JVM G1GC".
- Koja je razlika između write barrier-a i read barrier-a?
- Proces optimizacije JVM-a, efekti. Zašto se radi nadgradnja sakupljača smeća?
- Predstavi Spring IOC, koja je razlika između pristupa pomoću anotacija i pomoću XML-a? Čemu služe post-processor-i i tačke proširenja? Da li si ih koristio u projektu?
- Proces upisa binlog, redo log i undo log u MySQL-u? Mehanizam ispiranja na disk i podešavanje parametara. Da li poznaješ MVCC mehanizam?
- Problem deadlock-a sa kojim si se susreo? Deadlock zbog konflikta jedinstvenog ključa — zašto MySQL ovako dizajnira? Da li poznaješ implicitne brave?
- Koje još MySQL brave poznaješ? Gap lock, next-key lock...
- Kako izgleda proces izbora u ZK-u? Šta ako dođe do mrežnog kvara tokom izbora? Koja je glavna razlika između ZAB-a i Raft-a?
- Koje konkretne poruke ima Gossip protokol koji Redis koristi? Širenje glasina, zašto decentralizacija? Koje su prednosti i nedostaci?
- Poređenje Redis distribuirane brave i ZK distribuirane brave. AP i CP, objasni CAP teoriju?
- Koje su prednosti Kafke? Kako radi delay queue u RocketMQ? Kako bi ga optimizovao? Može li Kafka implementirati delay queue?
- Da li Kafka može garantovati da nijedan podatak neće biti izgubljen? Zašto? Šta se radi u biznisu kada se podaci izgube?
- Programiranje na tabli: štampaj matricu u smeru kazaljke na satu
Zaključak: Intervjueri u Meituanu vole da pitaju o konkurentnom programiranju i JVM-u; prva runda je stalno razgovarala o tim temama, dok su naredne runde više bile posvećene biznisu i pitanjima scenarija, prilično opuštene.
Intervjuer je pokazivao poštovanje, čak smo razmenili WeChat; kasnije me je intervjuer i nazvao da dođem u Meituan, ali sam morao da odbijem jer sam imao drugu ponudu. Želim im sve najbolje!
ByteDance
Preskočeno
Zaključak: Algoritmi maksimalne težine, po jedna algoritamska zadataća po rundi; pošto sam se prijavljivao za GO poziciju, osnove su bile visoko na listi prioriteta, pa nisu pitali previše o Java znanju. Uslovi su dobri.
58 Group
- Šta je urađeno pri migraciji MySQL-a u TiDB, auto-increment primarni ključ, kolika je količina podataka?
- Pitanja performansi TiDB-a, koja si istraživanja uradio? Koliko iznose TP90, TP95?
- Kako izgledaju koraci puštanja TiDB-a u rad? Kako se osigurava da podaci ne nestanu? Kako se garantuje pouzdanost?
- Kako je XXL-Job inkapsuliran? Šta se radi ako zadatak ne uspe?
- Kako je DAG implementiran? Kako je urađeno sekundarno particionisanje?
- Scenariji upotrebe Redis-a, koji se podaci keširaju? Kako se garantuje konzistencija podataka?
- Šta još znaš o Redis-u, koje su prednosti Redis-a, CP ili AP? CAP teorija.
- Na šta treba obratiti pažnju pri skladištenju podataka u Redis-u? Kako se rešava problem vrućih ključeva i velikih ključeva?
- Redis distribuirana brava, Redlock. Koje probleme ima Redlock?
- Predstavi proces kreiranja SpringBean-a, princip realizacije AOP-a?
- Razlika između BeanFactory i FactoryBean-a?
- Kako Spring rešava kružne zavisnosti? Da li Spring rešava kružne zavisnosti pri injektovanju kroz konstruktor? Da li rešava kružne zavisnosti pod prototipom (multi-instance)?
- Dinamički proxy, razlika između JDK dinamičkog proxy-ja i CGLib dinamičkog proxy-ja? Kako Spring bira koji će koristiti? Kako se konfiguriše?
- Kako se radi degradacija? Kako se vrši rate limiting?
- Koji algoritmi balansiranja opterećenja postoje? Kako je urađeno adaptivno balansiranje opterećenja? Koje probleme ima? Kako je optimizovano?
- Koje Java kolekcije postoje i koje su im osobine?
- Razlika između HashMap i ConcurrentHashMap? Kako izgleda proces proširenja?
- Predstavi AQS, CountDownLatch, Semaphore, volatile, synchronized
- Thread pool, custom thread pool, custom rejection policy — da li poznaješ? U kojim scenarijima se koristi?
Zaključak: Prijavio sam se za odeljenje za kontrolu rizika, kompanija je klasična; težina intervjua je niža, a plata je takođe skromna.
DiDi
- Koja je razlika između procesa i niti? Kako komuniciraju procesi međusobno? A niti?
- Poređenje HTTPS-a i HTTP-a; CA digitalni sertifikat; proces simetričnog i asimetričnog šifrovanja?
- Koji su česti algoritmi šifrovanja?
- MySQL test, TiDB test — kako se postiže glatka migracija? Kako se osigurava da podaci ne nestanu?
- Kako je urađen centar za raspoređivanje zadataka? Balansiranje opterećenja? Kako se prikupljaju podaci o CPU i memoriji izvršioca? Kako se radi particionisanje zadataka?
- Refaktorisanje idempotencije zadataka? Kako je ZK instaliran (deploy), na koliko mašina? Šta ako jedna mašina padne?
- ZAB protokol, proces izbora u ZK-u, kako izgleda struktura ZXID-a? Čemu služi ZXID?
- Donja struktura Redis String-a, donja struktura hash-a, kako izgleda proces rehash-a?
- Razlika između Redis AOF i RDB, mogu li se koristiti zajedno? Kako rešiti problem vrućih i velikih ključeva?
- Kafka log, index, sparse index. Zero-copy, mmap, sendfile, DMA gather.
- Kafka rebalance strategija, konkretan proces. Izbor GroupCoordinator-a, proces izbora koordinatora potrošačke grupe? Čemu služi podrazumevani topic u Kafki?
- Kako Spring rešava kružne zavisnosti, zašto je potrebno dodati keš trećeg nivoa, nije li dovoljan drugi nivo?
- Koje osobine ima Spring Boot, da li poznaješ princip automatskog konfigurisanja Spring Boot-a?
- Data je jedna originalna LeetCode zadataća — zamena čvorova u linkovanoj listi.
Zaključak: Prijavio sam se za odeljenje za vožnje; glavni jezik je GO, iskustvo sa intervjua je bilo dobro, intervjuer je pokazivao poštovanje, plata je u redu.
OKLink
- Da li poznaješ QUIC/HTTP3?
- Olovkom nacrtaj proces upisa jednog sloga u MySQL, proces pisanja logova, two-phase commit logova?
- Proces optimizacije JVM-a? Kako otkrivaš probleme sa JVM-om? Kako se radi rano upozorenje?
- Koji je mehanizam okidanja Minor GC i Full GC?
- Da li se može podesiti odnos između Eden i Survivor-a, koji je parametar? Koje si još parametre koristio?
- Predstavi proces migracije između TiDB i MySQL-a? Na koje si probleme naišao? Kako si ih rešio?
- Da li poznaješ RocksDB? LevelDB, LSM stablo, SSTable?
- Da li poznaješ Paxos algoritam? Predstavi Raft i ZAB i razlike među njima? Da li postoji problem split-brain-a? Zašto?
- Ukratko predstavi proces upisa poruka u Kafku, zašto je Kafka toliko brza?
- Ukratko predstavi nekoliko procesa izbora u Kafki?
- Da li poznaješ Kafka high watermark? Zašto Kafka treba Leader Epoch?
- Da li si koristio Netty? Objasni Reactor. Da li poznaješ Nettyjev bug praznog anketiranja?
- Objasni razliku između BIO, NIO i AIO?
- Kako se radi service discovery u Dubbo-u?
- Koje Redis strukture podataka postoje i kako su implementirane na nižem nivou? Koje podatke keširaš u Redis? Kako se ažuriraju podaci? Kako se vrši evikcija?
- Kako rešiti problem konzistencije između keša i baze? Zašto se keš briše umesto ažurira? Šta ako brisanje keša ne uspe?
- Data je velika datoteka sa 10 milijardi URL-ova; pretpostavimo da svaki URL zauzima 64B; pronađi sve duplikate URL-ova.
- Dobio sam papir sa konkurentnim kodom — pitano je koji je rezultat izvršenja; testirano je znanje o volatile.
Zaključak: Prijavio sam se za sistem za trgovinu kriptovalutama, intervju je bio uživo, nacrtao sam mnoge dijagrame arhitekture. Iskustvo je bilo odlično, čak smo razmenili WeChat sa intervjuerom. Uslovi su dobri, a moguće je raditi od kuće.
JD.com
- Predstavi projekat koji si radio?
Zaključak: Ovaj intervjuer me je dva puta ostavio na čekanju; kasnije me je iznenada nazvao, ja sam žurno podigao slušalicu; nakon što sam predstavio projekat, on je postavio nekoliko nasumičnih pitanja i završio — ceo proces nije trajao ni 10 minuta. Možda zato što nisam brat gospodina Donga?
Rezultat
Čitajući do ovde, verovatno svi možete pogoditi rezultat: osim JD.com-a, ovaj čitalac je dobio usmenuu ponudu od svih.
Što se tiče toga zašto nije išao na intervju kod Alibaba i Tencent — u tom trenutku su te kompanije bile u fiskalnom zatvaranju godine i zamrznule su HC, pa nije ni išao.
Što se tiče toga zašto nisam napisao pitanja sa intervjua u ByteDance-u — onaj ko zna, zna.
Konačno, želim svim Ergeovim čitaocima da postanu mašine za branje offer-a!
Ništa me ne zadržava — osim cilja; iako na obali ima ruža, hladovine i mirne luke, ja sam čamac bez vezanog konopa.
Izvor: https://mp.weixin.qq.com/s/obuAuxa6gYiVdm-bjkoXRw, autor: CoderW, obrada: Chenmo Wang Er
