Šest godina u Šendženu — pregled iskustava sa razgovora za posao po povratku u Sj'an ✌️
Čitaoci koji poznaju Ergea sigurno već znaju da sam napustio Suđou 2014. godine, s velikim žalom. Žao mi je bilo ostaviti kolege sa kojima sam se sjajno slagao, žao mi je bilo napustiti onaj kraj gde je istovremeno sijalo sunce i padala kiša, žao mi je bilo raskinuti novi ugovor na tri godine koji sam tek potpisao.
Žao mi je bilo kolega, jer smo provodili zajedno tri i po godine, privezali smo se jedni za druge, svako se iskreno odnosio prema drugima, bez trzavica i podvala, a naročito ona naša grupa koja je ušla istovremeno, nas desetak, jeli smo, spavali, zabavljali se i radili gotovo uvek zajedno.
Žao mi je bilo tog kraja, jer mi je izlečio dugogodišnje akne 😂, verovatno zato što je klima tamo vlažnija i blaža nego u Henanu, ima više kiše. Zaista, svaka zemlja oblikuje svoje ljude.
Žao mi je bilo novog ugovora, jer su plata i benefiti prilično porasli. Kada sam diplomirao potpisao sam ugovor preko spoljnog izvođača, a ovaj je bio prvi novi ugovor nakon prevremenog preuzimanja u stalni radni odnos. S obzirom na godinu dana prakse i dve godine redovnog rada, rukovodstvo je prepoznalo moje rezultate, pa je plata u tom novom ugovoru bila najviša među svim kolegama iz moje generacije koji su ušli u firmu.
Ali postojao je važniji razlog zbog kojeg sam morao da odem, nisam imao izbora.
Zato i sada, kada čujem da je neki prijatelj napustio Peking, Šangaj ili Hangdžou, uvek se setim prizora iz mog odlaska iz Suđoua.
Sećam se da je dan pre nego što sam otišao, rukovodilac pozvao nekoliko kolega sa kojima sam se najbolje slagao na oproštaj. Bili smo u jednom vrlo prijatnom restoranu; to mi je bio prvi put da pijem „ćerke crveno", žuto rižino vino koje se pre greje. Kada se zagreje i popije, prijatno je i mirišljavo. Te noći, previše priča.
Dobro, dovoljno je sentimenata. Danas sam pročitao priču o prijatelju koji je napustio Šendžen i vratio se u Sj'an, koja me podsetila na prošlost, veoma sličnu mojoj. Za nas radnike u internet industriji, povratak iz grada prvog reda u grad drugog ili trećeg reda je veoma čest izbor, a kakav je to osećaj verovatno samo mi najbolje znamo.
Ispod👇🏻 su prijateljeva priča i iskustvo sa intervjua, nadam se da će čitaocima javnog naloga (naročito onima koji planiraju povratak u gradove drugog i trećeg reda) pružiti malo inspiracije i reference 😄.
Ako računam od prvog puta kada sam stupio na zemlju Šendžena, živeo sam i radio u Šendženu punih šest godina. Ove godine, za vreme novogodišnjih praznika koje sam proveo u Šendženu, nakon porodičnog savetovanja odlučili smo se za povratak u rodni Sj'an.
Ta misao o povratku mi je i ranije padala na pamet, ali posle tolikog vremena provedenog u radu u Šendženu, doneti takvu odluku zahteva prilično hrabrosti.
Tokom svih ovih godina, iako sam se trudio, ipak ne mogu sebi da priuštim stan u Šendženu, niti imam hrabrosti da uzmem kredit od nekoliko miliona i otplaćujem ga 30 godina. Takav pritisak bi bio preveliki!
Više volim mirniji život. U životu zarada novca nije ni najvažnija — otplata oko 20 hiljada juana mesečno tokom 30 godina, zaista ne bih izdržao 😖. Osim toga, IT i internet okruženje u Sj'anu proteklih godina je takođe prilično dobro, nema problema sa nalaženjem posla.
Poslednje dve nedelje sam postepeno išao na razgovore za posao, evo nekih pitanja sa intervjua različitih firmi, neka sam zapisao, a neka sam zaboravio.
Fendžijan inteliđent
Istraživački centar u Sj'anu, razgovore vode intervjueri iz Šendžena ili Pekinga.
Prvi krug
Glavno su bila pitanja o projektu i osnovnim tehnologijama, detalji projekta su proveravani veoma podrobno.
Online test
Online test, uglavnom provera sposobnosti dizajniranja i pisanja koda.
Drugi krug
Iskustvo sa intervjua je bilo loše, stalno je pokušavao da me potiskuje (PUA), tražio je da ocenim sebe i svoj pisani test, sve u svemu, ponašao se napadno i arogantno, ton mu je bio veoma nestrpljiv — prosto se nismo uklopili~
- Kako inače procenjujete obim posla?
- Koje kolekcije postoje u Javi? Mehanizam proširenja kapaciteta ArrayLista? Konstruktor bez argumenata inicijalizuje prazan niz; kada se doda prvi element, kreira se niz dužine 10; kada pri umetanju elementa više nema mesta, kapacitet se povećava 1,5 puta, a ako to i dalje nije dovoljno, proširuje se na potrebnu veličinu.
- U kojim scenarijima HashMap nije bezbedan za niti? Koje posledice to može izazvati?
- Koje parametre ima pul niti? Objasniti u kojim se scenarijima koji parametar koristi?
- Kada broj jezgarnih niti još nije popunjen, a posao se i dalje prosleđuje, da li se ponovo koristi slobodna nit ili se kreira nova?
- Koje su ključne komponente u Netty-ju? Koje metode ima ByteBuf? Kako Netty implementira rastavljanje paketa? Kako se implementira prilagođeni procesor za rastavljanje paketa?
- U Springu, kako ubaciti dva Beana istog tipa? Kako implementirati globalno jedinstveno ubacivanje?
- Da li poznajete AQS? Koja sve svojstva on sadrži? Koliko modova ima AQS? Šta još razumete o AQS-u?
- Koji je princip fer i nefer brava u AQS-u? Koja su pravila međusobnog isključivanja brave za čitanje i pisanje?
- Kako MyBatis vezuje rezultate za Java objekte?
- Zašto Spring ima keš na tri nivoa?
- Kako RocketMQ osigurava da poruke ne budu izgubljene, koji je API za sinhrono slanje? Kako potrošač osigurava da poruke ne budu izgubljene, pored ACK mehanizma, koje druge metode postoje?
- Model memorije JVM-a? Koja oblast ne može doživeti OOM?
- Koje parametre JVM-a je moguće podešavati, a koji je podrazumevani sakupljač smeća u JDK-u 8? Koji su to uobičajeni algoritmi za sakupljanje smeća? Šta raditi kada CMS sakupljač smeća prouzrokuje zastoj i pauzu?
Imao je još nekih pitanja koja nisam razumeo šta želi da pita, pa sam ga zamolio da konkretno objasni. On je rekao da zna i prešao na sledeće pitanje.. Hteo je odmah da prekine poziv~~
Istraživački institut Kina Mobil Sj'an
Dva sata, tri osobe naizmenično pitaju
Prvi krug
- Predstavljanje projekta i detalji; koje sam poslove na kodiranju ja obavio;
- Da li je omotač duboka ili plitka kopija?
- Strategija brisanja ključeva u Redisu?
- Uobičajena curenja memorije pri pisanju koda?
- Struktura MySQL indeksa i proces pretrage podataka?
- Nivoi izolacije baze podataka? Koje probleme respektivno rešavaju?
- Koje se uobičajene Spring Boot Startere koriste?
- Zašto je Netty toliko brz? Princip implementacije Epolla?
- U niti A kreira se nit B; kako nit B može uhvatiti izuzetak iz niti A?
- U K8s, kada se promene env varijable u config-u, da li ih Docker može preuzeti? Kada se izmeni konfiguracioni fajl, da li ga Docker može preuzeti?
- Kako implementirati ograničavanje protoka na interfejsu, i kako se Guava i Redis zajedno koriste u projektu?
- Da li HashMap može direktno da se obilazi i briše? Da li ConcurrentHashMap može da se obilazi i briše?
- Koje metode čine da nit blokira? Koje klase koriste LockSupport?
- Koja je razlika između ključnih reči Extends i Super u generikama? Koju koristiti kada je više put operacija, i zašto? Koju kada je više get operacija, i zašto?
- Za često čitanje sadržaja pogodna je gornja granica Extends, jer se svaki pročitani element može primiti tipom definisanim gornjom granicom — natklasa može ukazivati na podklasu; ako koristite Super, možete primiti samo tip Object, jer nije sigurno o kojoj je natklasi reč;
- Za često umetanje pogodna je donja granica Super. To ekvivalentno opušta tip umetnutog elementa — pošto je element natklasa klase Fruit, onda se u njega može ubacivati sve čija je zrnatost manja od Fruit; ako je u pitanju extends, pri umetanju će doći do greške, jer u kolekciji nije sigurno koja se podklasa zaista čuva, pa se javlja greška;
- Princip automatskog konfigurisanja u Spring Bootu?
- Kako u projektu radite jedinstveno rukovanje izuzecima?
- Redosled učitavanja konfiguracionih fajlova u Springu?
- Kako u projektu radite monitoring? Kako se prati JVM proces? Kako se nadgledaju resursi mašine?
Online procena
Završio sam online procenu i dostavio izveštaj o toku plata.
Prošlo je više od nedelju dana, nema daljih vesti.
Sj'an Džuopaj
Prvi krug
Trajao 1 sat
- Koja je razlika između Super i Extend u Java refleksiji?
- Princip rada pula niti? Kako se podešava veličina pula niti? Kako se pul niti koristi u projektu? Kako sprečiti zloupotrebu pula niti? Šta znači blokirajući red u pulu niti?
- Da li ste koristili ApplicationEvent u Springu?
- Struktura podataka ThreadLocala? Kako ga inače koristite?
- Kako @Transactional u Springu koristi ThreadLocal?
- Zašto je ključ u ThreadLocalu postavljen kao slaba referenca umesto obične reference? Iz kojeg se razloga to čini?
- Da li se ThreadLocal može koristiti u programima sa više niti? Ako može, kako to uraditi?
- Da li poznajete nivoe izolacije Spring transakcija? Kako ih vi koristite? Kako razumete nivoe izolacije?
- U AOP aspektu u Springu, ako je definisano više pojačanja, koji je redosled izvršavanja?
- Da li poznajete DDD? Da li znate terminologiju u njemu?
- Koje obrasce dizajna poznajete? Kako se koriste? Kako se konkretno dizajniraju parametri zahteva i parametri odgovora?
- Šta znači princip jedinstvene odgovornosti među principima dizajna? Daću vam scenario i pitati da li bi trebalo dizajnirati po principu jedinstvene odgovornosti?
- Kako konfigurisati veličinu pula niti u Tomcatu?
- Kako razumete bezstanje HTTP protokola? Koje su prednosti i mane bezstanja?
- Predstavljanje projekta, veoma detaljan razgovor o detaljima projekta;
- Kako implementirati distribuirani sistem za rezervaciju konferencijskih sala? Osigurati da ista sala u istom terminu može biti rezervisana samo jednom?
- Da li ste voljni da učite engleski?
Drugi krug
20-ak minuta.
Razgovor sa HR-om, razgovarali smo o tome koje sam projekte radio, koji je bio najkompleksniji problem i kako sam ga rešio. Predstavio je firmu i projekte, kao i prateće benefite.
Treći krug
Dva i po sata
Pisanje koda na računaru, dve algoritamske vežbe i jedna vežba iz sistemskog dizajna.
Tokom intervjua, intervjuer je bio veoma strpljiv; za vežbe koje nisam dobro napisao davao je smernice za optimizaciju, ceo proces je bio veoma prijatan.
Iskustvo: Pri proveri sposobnosti pisanja koda na računaru, ako ne razumete zadatak obavezno proaktivno pitajte; a zatim, ako ne znate rešenje, možete razgovarati sa intervjuerom o svojoj ideji, izbegavajte ćutanje i pisanje pola dana bez rešenja;
Četvrti krug
Nakon trećeg kruga odmah je usledio razgovor sa šefom, rukovodiocem istraživanja i razvoja u Sj'anu.
Glavno je razgovor o projektu i razumevanju dizajna projekta — šta je dobar kod? Šta je dobar dizajn?
Dao je nekoliko konkretnih scenarija za dizajn i tražio da napravim izbor; ionako nema jedinstvenog odgovora, važno je da jasno izložite svoja razmatranja i razloge. Ovde se obrasci dizajna koriste kao teorijska osnova, a zatim se kombinuju sa ličnim iskustvom u kodiranju.
Takođe smo razgovarali o budućem pravcu razvoja; baš nedavno sam bio veoma zbunjen oko toga da li da idem tehničkim ili tehničko-menadžerskim putem, i razgovor mi je dao mnogo inspiracije u tom pogledu.
Lični utisak
Džuopaj je strana firma, unutrašnja tehnička atmosfera je odlična; tokom celog intervjua osetio sam da su intervjueri veoma inkluzivni. Iako nisam poznavao mnoge stručne termine iz agilnog pristupa, pažljivo su mi objašnjavali odgovarajuće prevode na kineski, tako da sam i na samom intervjuu mnogo naučio.
Poslovanje firme trenutno je prosečno; s obzirom na to da sj'anski tim ima samo 30 ljudi, ove godine planiraju proširenje na 50; prijemu porudžbina kamiondžija pripada uskom segmentu tržišta, tako da postoji izvestan rizik u razvoju poslovanja firme.
Benefiti su takođe veoma dobri: najviši mogući stambeni fond u punom iznosu, novi MacBook Pro, ergonomska stolica, mesečni team building. Mislim da ovakve firme, s obzirom na to da novogodišnja premija nije visoka, sigurno ne forsiraju prekovremeni rad; za razliku od velikih firmi gde godišnja ocena performansi određuje da li je cela godina bila uzaludna, ovde nema potrebe za prekomernim forsiranjem.
Tencent Cloud Sj'an
Prvi krug
Trajanje: 50 minuta
- Samopredstavljanje i predstavljanje projekta;
- Uporno su detaljno ispitivani proces implementacije projekta i šta sam ja lično uradio, šta sam optimizovao, pitanja su bila veoma, veoma podrobna;
- Scenarijsko pitanje vezano za pul niti;
- Princip kojim Future implementira blokirajuće čekanje za dobijanje rezultata?
- Šta je zero-copy?
- Koliko modela ulaza/izlaza (IO) postoji? Koja je razlika između NIO i multipleksiranja?
- Koji model koristi NIO u JDK-u?
- Koja je razlika između reentrantne brave i Synchronized? Princip Synchronized? Princip implementacije reentrantne brave?
- Optimistička i pesimistička brava — kako biste ih implementirali kada biste vi pisali?
- Princip implementacije ReentrantLock? Da li je Synchronized optimistička ili pesimistička brava?
- Da li poznajete Paxos algoritam? Kako se postupa sa istovremenim predlozima?
- Recite nešto o B+ stablu? Da li je B+ stablo uređeno, i u kom redosledu?
- Kako TCP implementira kontrolu zagušenja? Kako implementira retransmisiju (rekao sam ideju, ali konkretan odgovor na implementaciju nije bio tačan)?
- Vidim da imate iskustva sa podešavanjem JVM-a — opišite kako ste vršili optimizaciju;
- Algoritamska vežba: dat je neuređen niz, izaberite nasumičan broj i implementirajte da elementi levo od njega budu veći, a desno manji, pri čemu se mora očuvati prvobitni relativni redosled; koja je vremenska složenost predloženog rešenja?
Drugi krug
25 minuta
- Presek dva uređena niza;
- Predstavljanje projekta;
- Da li poznajete Paxos protokol? Kako izgleda tok rada?
- Prošlo je previše vremena, zaboravio sam..
Treći krug
25 minuta
- Presek dva uređena niza;
- Kako trajno čuvati binarno stablo;
- Samopredstavljanje;
- Razlozi za prethodne promene posla?
- Predstavljanje projekta sa tehničkim izazovom? Podrobna pitanja o detaljima projekta, do tačke kada više nisam mogao da odgovorim;
- Koje su mane particionisanja baze podataka na više tabela?
- Kako se rešavaju distribuirane transakcije? Da li poznajete TCC?
- Predstavite celokupnu arhitekturu vašeg mikroservisnog projekta? Princip komunikacije između servisa? Sinhrono ili asinhrono?
- Kako RocketMQ osigurava tačnost i bezbednost poruka?
Bestpay
Prvi krug
- Samopredstavljanje i predstavljanje projekta;
- Predstavljanje kako se u projektu koristi mikroservisna arhitektura, za koje module sam lično odgovoran i koje tehnologije sam koristio;
- Kako HashMap smanjuje hash kolizije;
- U kojim scenarijima je potrebno prepisati hashCode metod;
- Da li projekat koristi pul niti? Kako? Koje su uobičajene parametre?
- Kada je pul jezgarnih niti pun, a red pun, da li će pri ponovnom prosleđivanju posla biti kreirana nit ili će se čekati u redu?
- Vaše razumevanje indeksa i ograničenja baze podataka;
- Vremenski tipovi baze podataka (DateTime i TimeStamp)? Koja je razlika? Koliko prostora zauzimaju respektivno?
- Kako Kafka implementira visoku dostupnost i proširivost;
- Koje okvire za zakazane poslove poznajete (Elastic-Job, Xxl-Job, Quartz), koji je princip implementacije, poređenje prednosti i mana;
- Princip kojim Apollo implementira vruće deplojovanje;
- Kako rešiti problem vrućeg ključa u Redisu? Odgovorio sam samo sa jednim rešenjem — rasipanje;
- Koja je strategija brisanja po isteku roka u Redisu?
- Kako Spring istovremeno ubacuje polimorfne Beane? Predložio sam rešenje preko fabrike za dobijanje polimorfnih instanci, intervjuer je rekao da je moguće i ubacivanje kolekcije;
Drugi krug
Grupni intervju, ukupno 5 kandidata učestvovalo zajedno, svako po jedno ili dva pitanja.
- Pitanja o projektu i kako optimizovati dizajn?
- Da li ste ikada vodili tim? Kako ste im pomogli?
To je to sa iskustvima sa intervjua; neka iskustva sa firmama nisam na vreme zapisao (Jingdong, Kulijan mrežne tehnologije, ZTE, Minšeng tehnologija, BYD itd.), i ne sećam se više dobro. Sveukupno su prilično slična. Za pripremu uigranih teorijskih pitanja možete pogledati Ergeovu knjigu „Ergeov put ka naprednom Javi" — odeljak o pripremi za intervjue pokriva gotovo sva moguća pitanja.
Što se tiče projekata, obavezno dobro razradite projekte iz svog CV-ja, jer svaki malo ozbiljniji intervjuer u velikoj firmi tokom intervjua ima visoku koncentraciju i prati vaš tok misli; na svaku rečenicu koju izgovorite o projektu on će razmisliti i postaviti pitanje, pa produžiti diskusiju sa vama.
I preporučujem da vaši projekti budu što složeniji, sa težinom i izazovima, kako biste imali teme za dublju diskusiju. Nemojte biti previše skromni i pisati samo o uobičajenim CRUD poslovnim funkcijama. Čak i ako niste sami radili projekat, ali razumete kako su ga kolege radile, s kojim problemima su se suočili i kako su razmišljali o rešenjima, to je i za vas lično iskustvo i napredak.
Što se tiče toga kakva je situacija nakon povratka u rodni kraj i da li ću zažaliti, podeliću sa vama kasnije. Za sada sam pun nade — po povratku ću imati porodicu, imaću prijatelje, trebalo bi da bude u redu. Takođe planiram da u slobodnom vremenu provedem porodicu u obilazak okolice i probanje hrane. Kao dete sam voleo pecanje, pa mislim da se i to može uklopiti, haha 😄~
Ništa me ne zadržava — osim cilja; makar na obali bilo ruža, hladovine i mirne luke, ja sam čamac bez vezanog užeta.

Izvor preuzimanja: https://mp.weixin.qq.com/s/vIqfeVmWtDnvsHllC4M5Tg, priredio: Chenmo Wang Er
