Come prepararsi per un colloquio di lavoro in Google e non superarlo. Due volte

Come prepararsi per un colloquio di lavoro in Google e non superarlo. Due volte

Il titolo dell'articolo suona come un epic fail, ma in realtà le cose non sono così semplici. E in generale, questa storia si è conclusa in modo piuttosto positivo, anche se non in Google. Ma questo è già un argomento per un altro articolo. In questo articolo parlerò di tre cose: come è andato il mio processo di preparazione, come si sono svolti i colloqui in Google e perché, a mio avviso, non è tutto così chiaro come potrebbe sembrare.

Come è iniziato tutto

Una fredda sera invernale a Cipro, mi è venuta in mente l'idea che le mie conoscenze di Computer Science classica sono piuttosto distanti dalla media, e dovevo fare qualcosa al riguardo. Se per caso qualcuno non ha ancora letto perché la sera è cipriota e fredda, può scoprirlo. qui. Dopo alcune riflessioni, ho deciso di iniziare con un corso online su algoritmi e strutture dati. Ho sentito parlare di un corso di Robert Sedgewick su Coursera da un ex collega. Il corso è composto da due parti (parte 1 e parte 2). Se le link cambiano, puoi sempre cercare il nome dell'autore. Ciascuna parte dura 6 settimane. All'inizio della settimana vengono rilasciate le lezioni e durante la settimana è necessario completare esercizi. La prima parte del corso copre le strutture dati di base, i principali tipi di ordinamento e la complessità degli algoritmi. La seconda parte è già più avanzata, inizia con i grafi e si conclude con argomenti come la programmazione lineare e l'intractabilità. Dopo aver riflettuto su tutto ciò, sono giunto alla conclusione che era proprio ciò di cui avevo bisogno. Qui, un lettore curioso potrebbe chiedersi cosa c'entri Google. Ed effettivamente, fino a quel momento, non aveva nulla a che fare con questo. Ma avevo bisogno di un obiettivo, poiché studiare per 12 settimane la sera senza un obiettivo è piuttosto difficile. E quale potrebbe essere l'obiettivo nell'acquisire nuove conoscenze? Certamente, il loro utilizzo pratico. Nella vita di tutti i giorni è piuttosto problematico, ma durante un colloquio in una grande azienda è facile. Un rapido ricerca su Google ha rivelato che Google (scusate per la tautologia) è una delle più grandi aziende in Europa (e io stavo considerando proprio l'Europa), dove si tengono tali colloqui. Infatti, il loro ufficio si trova a Zurigo, in Svizzera. Quindi, deciso: studiamo e andiamo a fare un colloquio in Google.

Preparazione per il primo tentativo

Dodici settimane sono passate in un attimo e ho completato entrambi i corsi. Le mie impressioni sui corsi sono più che positive e posso raccomandarli a tutti gli interessati. Mi sono piaciuti i corsi per le seguenti ragioni:

  • Il docente parla un inglese piuttosto chiaro
  • Il materiale è ben strutturato
  • Presentazioni eccezionali che mostrano il funzionamento di ogni algoritmo
  • Scelta del materiale molto ben ponderata
  • Esercizi interessanti
  • Gli esercizi vengono automaticamente corretti sul sito, dopodiché viene generato un report

Di solito, il mio lavoro sui corsi procedeva in questo modo. In 1-2 giorni ascoltavo le lezioni. Poi superavo un test veloce per verificare le mie conoscenze. Il resto della settimana lavoravo sull'esercizio in più iterazioni. Dopo la prima ricevevo i miei 30-70%, mentre le successive portavano il risultato al 97-100%. L'esercizio di solito consisteva nell'implementazione di un algoritmo, ad esempio Seam carving o bzip.

Dopo aver terminato i corsi, mi sono reso conto che molte conoscenze portano a molte tristezze. Se prima sapevo solo di non sapere nulla, ora ho iniziato a rendermi conto di cosa non so.

Dato che era ancora solo maggio e avevo pianificato un colloquio per l'autunno, ho deciso di continuare la mia formazione. Dopo aver esaminato i requisiti per la posizione, ho deciso di proseguire parallelamente su due fronti: continuare lo studio degli algoritmi e seguire un corso base di apprendimento automatico. Per il primo obiettivo ho deciso di passare dai corsi a un libro e ho scelto l'imponente lavoro di Steven Skiena "Algoritmi. Manuale di progettazione". Non così monumentale come quello di Knuth, ma comunque significativo. Per il secondo obiettivo sono tornato su Coursera e mi sono iscritto al corso di Andrew Ng. Apprendimento automatico.

Sono passati altri 3 mesi e ho completato il corso e il libro.

Iniziamo con il libro. La lettura si è rivelata abbastanza interessante, anche se non semplice. In linea di massima, consiglierei il libro, ma non immediatamente. Insomma, il libro offre un'analisi più profonda di ciò che ho appreso nei corsi. Inoltre, ho scoperto per me stesso (da un punto di vista formale) cose come le euristiche e la programmazione dinamica. Naturalmente, in passato mi era capitato di utilizzarle, ma non sapevo come si chiamassero. Inoltre, nel libro ci sono alcuni aneddoti della vita dell'autore (War Story), che alleggeriscono un po' l'accademismo dell'esposizione. Si può anche saltare la seconda metà del libro, dove si parla più che altro delle problematiche esistenti e dei metodi per risolverle. È utile se applicato regolarmente nella pratica, altrimenti viene subito dimenticato.

Il corso mi ha soddisfatto più del previsto. L'autore conosce chiaramente il suo mestiere e racconta in modo interessante. Inoltre, gran parte, in particolare l'algebra lineare e le basi delle reti neurali, le ricordavo già dall'università, quindi non ho incontrato particolari difficoltà. La struttura del corso è abbastanza standard. Il corso è suddiviso in settimane. Ogni settimana ci sono prima le lezioni alternate a brevi test. Dopo le lezioni viene assegnato un compito da svolgere, inviare e verrà verificato automaticamente. In breve, l'elenco degli argomenti trattati nel corso è il seguente:
— funzione di costo
— regressione lineare
— discesa del gradiente
— scaling delle caratteristiche
— equazione normale
— regressione logistica
— classificazione multiclasse (uno contro tutti)
— reti neurali
— retropropagazione
— regolarizzazione
— bias/varianza
— curve di apprendimento
— metriche di errore (precisione, richiamo, F1)
— macchine a vettori di supporto (classificazione a margine ampio)
— K-means
— analisi delle componenti principali
— rilevamento delle anomalie
— filtraggio collaborativo (sistema di raccomandazione)
— discesa del gradiente stocastica, mini-batch, batch
— apprendimento online
— mappa riduci
— analisi del soffitto
Dopo aver completato il corso, la comprensione di tutti questi argomenti era presente. Dopo 2 anni, però, quasi tutto era naturalmente dimenticato. Consiglio a chi non conosce l'apprendimento automatico e desidera ottenere una buona comprensione delle basi per proseguire ulteriormente.

Primo tentativo

Era già settembre e era giunto il momento di pensare a un colloquio. Poiché candidarsi tramite il sito era un compito piuttosto difficile, ho iniziato a cercare amici che lavoravano in Google. La scelta è ricaduta su datacompboy, poiché era l'unico che conoscevo direttamente (anche se non personalmente). Ha accettato di inviare il mio curriculum e presto ho ricevuto una lettera dal selezionatore che proponeva di prenotare uno slot nel suo calendario per la prima conversazione. Dopo un paio di giorni abbiamo avuto una chiamata. Abbiamo provato a comunicare tramite Hangouts, ma la qualità era terribile, quindi siamo passati al telefono. Inizialmente abbiamo discusso rapidamente delle domande standard su come, perché e per quale motivo, e poi siamo passati al colloquio tecnico. Questo consisteva in una dozzina di domande del tipo

L'intervista si è svolta anch'essa tramite Hangouts. All'inizio abbiamo parlato di me per circa 5 minuti, poi ci siamo spostati su un problema. Il compito riguardava i grafi. Ho capito subito cosa dovevo fare, ma ho scelto l'algoritmo sbagliato. Quando ho iniziato a scrivere il codice, me ne sono reso conto e sono passato a un'altra opzione, che poi ho completato. L'intervistatore ha posto alcune domande sulla complessità dell'algoritmo e ha chiesto se ci fosse un modo per farlo più velocemente. In un certo senso sono andato in difficoltà e non sono riuscito. A quel punto è scaduto il tempo e ci siamo salutati. Poi, dopo circa 10 minuti, mi è venuto in mente che al posto dell'algoritmo di Dijkstra, che avevo usato, specificamente per questo problema si sarebbe potuto usare la ricerca in ampiezza, e sarebbe stata più veloce. Dopo un po' mi ha chiamato il selezionatore e ha detto che, in generale, l'intervista era andata bene e che sarebbe stato opportuno organizzare un'altra. Abbiamo concordato di incontrarci di nuovo tra una settimana.

Questa volta le cose sono andate peggio. Se alla prima il recruiter era amichevole e comunicativo, questa volta era piuttosto cupo. Non sono riuscito a capire subito il compito, anche se le idee che ho espresso avrebbero potuto portare alla soluzione. Alla fine, dopo alcuni suggerimenti del recruiter, sono arrivato alla soluzione. Questa volta si è trattato di una ricerca in ampiezza, solo da diversi punti. Ho scritto le soluzioni, sono riuscito a non sforare il tempo, ma ho dimenticato i casi al limite. Dopo un po' mi ha telefonato il recruiter e mi ha informato che questa volta il recruiter era rimasto insoddisfatto, poiché secondo lui avevo bisogno di troppi suggerimenti (3 o 4) e cambiavo continuamente il codice mentre scrivevo. Dopo due colloqui, è stata presa la decisione di non proseguire e rimandare il prossimo colloquio di un anno, se avessi avuto voglia. Così ci siamo salutati.

Da questa storia ho tratto alcune conclusioni:

  • La teoria va bene, ma bisogna orientarsi velocemente in essa.
  • La teoria senza pratica non aiuta. Bisogna risolvere problemi e portare la scrittura del codice all'automatismo.
  • Molto dipende dal recruiter. E su questo non si può fare nulla.

Preparazione per un secondo tentativo

Dopo aver riflettuto sulla situazione, ho deciso di riprovare tra un anno. Ho anche leggermente modificato l'obiettivo. Se prima l'obiettivo principale era l'apprendimento, e il colloquio in Google come una carota lontana, ora passare il colloquio è diventato l'obiettivo, mentre l'apprendimento è il mezzo.
Quindi, è stato sviluppato un nuovo piano, che comprendeva i seguenti punti:

  • Continuare a studiare la teoria leggendo libri e articoli.
  • Risolutore di problemi algoritmici per un totale di 500-1000 articoli.
  • Continuare a studiare la teoria guardando video.
  • Continuare a studiare la teoria attraverso corsi.
  • Studiare l'esperienza di altre persone nel passare colloqui in Google.

Il piano è stato realizzato in un anno. Ora descriverò cosa ho fatto per ciascuno dei punti.

Libri e articoli

Non riesco nemmeno a ricordare quante articoli ho letto, li ho letti sia in russo che in inglese. Il sito più utile è stato probabilmente questo. Qui è raccolta la descrizione di un gran numero di interessanti algoritmi con esempi di codice.

Ho letto 5 libri: Algorithms, 4th edition (Sedgewick, Wayne), Introduction to Algorithms 3rd Edition (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview 4th edition (Gayle Laakmann), Programming Interviews Exposed 2nd edition (Mongan, Suojanen, Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Possono essere divisi in 2 categorie. Nella prima rientrano i libri di Sedgewick e Cormen. Sono teoria. Gli altri sono preparazione per i colloqui. Sedgewick nel libro racconta più o meno le stesse cose che nei suoi corsi. Solo in forma scritta. Non ha molto senso leggerlo attentamente se si è seguita la lezione, ma vale la pena dare un'occhiata in ogni caso. Se non si è seguita la lezione, allora ha senso leggerlo. Cormen mi è sembrato eccessivamente noioso. Ho fatto fatica a finirlo, onestamente. Ho portato via solo master theorem, sì, alcune strutture dati raramente usate (Fibonacci heap, van Emde Boas tree, radix heap).

È consigliabile leggere almeno un libro per la preparazione ai colloqui. Sono tutti costruiti grosso modo secondo lo stesso principio. Descrivono il processo di colloqui nelle grandi aziende tecnologiche, forniscono nozioni di base di Computer Science, esercizi su queste nozioni di base, soluzioni degli esercizi e analisi delle soluzioni. Tra i tre citati, consiglierei probabilmente Cracking the Coding Interview come principale, mentre gli altri a discrezione.

Problemi algoritmici

Questo è stato probabilmente il punto più interessante della preparazione. Si può, ovviamente, semplicemente sedere e risolvere problemi. Ci sono molti siti diversi per questo. Io ho usato principalmente tre: Hackerrank, CodeChef e LeetCode. Su CodeChef i problemi sono suddivisi per difficoltà, ma non per argomenti. Su Hackerrank invece, sia per difficoltà che per argomenti.

Ma come ho subito scoperto, c'è un modo più interessante. E sono le competizioni (programming challenges o programming contests). Tutti e tre i siti le offrono. Tuttavia, con LeetCode c'è un problema: il fuso orario scomodo. Perciò non ho partecipato su quel sito. Hackerrank e CodeChef offrono un numero piuttosto elevato di competizioni diverse, della durata da 1 ora a 10 giorni. I vari formati hanno regole diverse, beh, su questo si potrebbe parlare a lungo. La principale ragione per cui le competizioni sono vantaggiose è l'inserimento di un elemento competitivo (e ripetiamo, è una tautologia) nel processo di apprendimento.

Ho partecipato a un totale di 37 competizioni su Hackerrank. Di queste, 32 erano a punteggio e 5 sponsorizzate (ho persino ricevuto 25$ in una di esse) o per divertimento. Nelle competizioni a punteggio, sono entrato 10 volte nel top 4%, 11 volte nel top 12% e 5 volte nel top 25%. I migliori risultati sono stati 27/1459 in quella di 3 ore e 22/9721 in quella settimanale.

Sono passato a CodeChef quando su Hackerrank le competizioni sono diventate meno frequenti. In totale, ho partecipato a 5 competizioni. Il miglior risultato è stato 426/5019 in una competizione di dieci giorni.

In totale, ho risolto un po' più di 1000 problemi, sia nelle competizioni che per divertimento, il che rientrava nel piano. Adesso purtroppo non ho tempo libero per continuare l'attività competitiva, né ho obiettivi che possano giustificare il tempo non libero. Ma è stato divertente. Consiglio a chi è interessato di trovare qualcuno con cui condividere questa esperienza. In coppia o in gruppo è molto più interessante. Mi sono divertito a farlo con un amico, quindi forse per questo è andata così bene.

Visione video

Dopo aver letto il libro di Skiena, sono essenzialmente interessato a ciò che fa. Come Sedgwick, è professore all'università. Di conseguenza, in rete si possono trovare delle videoregistrazioni delle sue lezioni. Ho deciso di guardare il corso COMP300E – Programming Challenges – 2009 HKUST. Non posso dire che mi sia piaciuto molto. Innanzitutto, la qualità del video non è granché. In secondo luogo, non ho provato a risolvere i problemi trattati durante il corso. Quindi l'interesse non era molto alto.
Inoltre, mentre risolvevo i problemi, cercando di trovare l'algoritmo giusto, mi sono imbattuto nei video di Tushar Roy. Ha lavorato per Amazon e ora lavora per Apple. Come ho scoperto più tardi, ha un un canale YouTube, dove posta analisi di vari algoritmi. Al momento della scrittura di questo articolo, il canale contiene 103 video. E devo dire che l'analisi che propone è molto ben fatta. Ho provato a guardare altri autori, ma non mi hanno convinto. Quindi posso sicuramente raccomandare di guardare questo canale.

Frequentare corsi

Qui non ho fatto nulla di particolare. Ho guardato i video dell'Android Developer Nanodegree di Google e ho seguito un corso dell'ITMO How to Win Coding Competitions: Secrets of Champions. Il Nanodegree è abbastanza valido, anche se non ho ovviamente appreso nulla di nuovo. Il corso dell'ITMO, dal punto di vista teorico, è un po' affrettato, ma i problemi erano interessanti. Non lo raccomanderei come punto di partenza, ma in linea di massima il tempo speso non è stato del tutto buttato.

Studiare l'esperienza di altre persone

Naturalmente, molte persone hanno cercato di entrare in Google. Alcuni ce l'hanno fatta, altri no. Alcuni hanno scritto articoli al riguardo. Tra le cose interessanti, probabilmente menzionerei questa e questa. Nel primo caso, una persona ha preparato per sé una lista di ciò che doveva imparare per diventare Software Engineer e entrare in Google. Alla fine è entrato in Amazon, ma questo non è così importante. Il secondo manuale è stato scritto da un ingegnere di Google, Larisa Agarovka (Larrr). Oltre a questo documento, puoi anche leggere il suo blog.

È utile leggere le recensioni sui colloqui su Glassdoor. Sono tutte più o meno simili, ma si possono ottenere alcune informazioni utili.

Non fornirò link ad altri articoli minori, li puoi trovare benissimo da solo su Google.

Secondo tentativo

E così è passato un anno. È stato un anno piuttosto denso dal punto di vista dello studio. Ma arrivavo a questa nuova autunno con conoscenze teoriche molto più profonde e abilità pratiche consolidate. Manca ancora qualche settimana alla scadenza che mi era stata assegnata per la preparazione, quando ho ricevuto un'email da un reclutatore di Google che mi chiedeva se avessi ancora voglia di lavorare in Google e se fossi disposto a parlare con lui. Naturalmente, non ero contrario. Ci siamo messi d'accordo per una chiamata dopo una settimana. Mi hanno anche chiesto un curriculum aggiornato, al quale ho aggiunto una breve descrizione di ciò che avevo fatto nell'anno di lavoro.

Dopo aver parlato della vita, abbiamo deciso che dopo una settimana ci sarebbe stato un colloquio su Hangouts, proprio come l'anno precedente. È passata una settimana, è arrivato il momento dell'intervista, ma l'intervistatore non si è presentato. Sono trascorsi 10 minuti, e già cominciavo a innervosirmi, quando improvvisamente qualcuno è entrato nella chat. Come si è scoperto poco dopo, il mio intervistatore per qualche motivo non è stato in grado di presentarsi e hanno trovato urgentemente un sostituto. La persona non era del tutto pronta né per configurare il computer né per condurre l'intervista. Ma poi tutto è andato bene. Ho risolto il compito rapidamente, spiegando dove potrebbero esserci tranelli e come evitarli. Abbiamo discusso alcune varianti diverse del compito, la complessità dell'algoritmo. Poi abbiamo parlato per altri 5 minuti, l'ingegnere ha raccontato le sue impressioni sul lavoro a Monaco (a Zurigo evidentemente non hanno trovato un sostituto urgente), e con questo ci siamo salutati.

Nello stesso giorno, un reclutatore mi ha contattato dicendo che il colloquio era andato molto bene e che erano pronti a invitarmi per un colloquio presso l'ufficio. Il giorno dopo abbiamo avuto una videochiamata su Hangouts e abbiamo discusso i dettagli. Poiché dovevo fare il visto, abbiamo deciso di fissare il colloquio tra un mese.

Mentre preparavo i documenti, ho anche discusso con il reclutatore del colloquio imminente. Il colloquio standard in Google consiste in 4 domande di algoritmi e uno di System Design. Tuttavia, poiché mi stavo candidando come sviluppatore Android, mi è stato detto che una parte del colloquio sarebbe stata specifica per Android. Non sono riuscito a estrarre informazioni dettagliate dal reclutatore su quali sarebbero state specifiche e in cosa consistessero. Da quanto ho capito, è una pratica relativamente nuova e lui stesso non era molto informato. Inoltre, mi sono iscritto a due sessioni di allenamento: come affrontare un colloquio sugli algoritmi e come affrontare un colloquio di System Design. Le sessioni sono state di utilità media. Anche qui, nessuno mi ha potuto dire cosa viene chiesto agli sviluppatori Android. Pertanto, la mia preparazione in questo mese è stata la seguente:

  • Acquistare una whiteboard e scrivere 2-3 dozzine dei più popolari algoritmi da memoria. Circa 3-5 ogni giorno. In totale, ognuno è stato scritto più volte.
  • Ripassare varie informazioni su Android che non utilizzo ogni giorno.
  • Guardare alcuni video su Big Scale e simili.

Come già detto, parallelamente stavo preparando i documenti per il viaggio. Inizialmente mi hanno chiesto i dati per redigere la lettera d'invito. Poi ho impiegato molto tempo a capire chi a Cipro rilascia i visti per la Svizzera, dato che l'ambasciata svizzera non si occupa di questo. Alla fine, ho scoperto che è il consolato austriaco a occuparsene. Ho telefonato e prenotato un appuntamento. Lì hanno richiesto un sacco di documenti, ma nulla di particolarmente interessante. Foto, passaporto, permesso di soggiorno, una serie di vari certificati e naturalmente la lettera d'invito. Nel frattempo, la lettera non arrivava. Così, alla fine sono partito con una semplice stampata e ha funzionato. La lettera è arrivata tre giorni dopo, mentre il FedEx cipriota non è riuscito a trovare il mio indirizzo e ho dovuto andare a prenderla di persona. Ho anche ricevuto, sempre dallo stesso FedEx, un pacco che non erano riusciti a consegnare poiché non avevano trovato l'indirizzo, e che giaceva lì da giugno (5 mesi, Karl). Poiché non ne sapevo nulla, non avrei mai immaginato che ce l'avessero. Ho ricevuto il visto in tempo, dopo di che mi hanno prenotato un hotel e proposto delle opzioni per il volo. Ho aggiustato un po' le opzioni per renderle più comode. Non c'erano più voli diretti, alla fine ho volato passando per Atene, e il ritorno attraverso Vienna.

Dopo che tutte le formalità per il viaggio erano state risolte, sono passati alcuni giorni e sono finalmente partito per Zurigo. Sono arrivato senza avventure. Dall'aeroporto alla città ho preso il treno: veloce e comodo. Dopo aver vagato un po' per la città, ho trovato l'hotel e mi sono sistemato. Poiché l'hotel era prenotato senza pasti, ho cenato nei dintorni e sono andato a letto, dato che il volo era al mattino e avevo già sonno. Il giorno dopo ho fatto colazione in hotel (a pagamento separato) e sono andato all'ufficio Google. A Zurigo Google ha diversi uffici. Il mio colloquio non si svolgeva in quello centrale. E in generale l'ufficio sembrava abbastanza normale, quindi non ho avuto modo di vedere tutte le comodità di un

Colloquio numero uno

Il primo colloquio è stato proprio su Android. E non aveva nulla a che fare con gli algoritmi. Una sorpresa, comunque. Va bene, è persino più familiare. Mi hanno chiesto di realizzare un certo componente UI. All'inizio abbiamo discusso cosa e come fare. Ho suggerito di utilizzare RxJava, spiegando cosa e perché avrei fatto. Hanno detto che andava bene, ma facciamo usando gli strumenti del framework Android. E per di più, scriviamo il codice sulla lavagna. Non solo un componente, ma l'intera Activity che utilizza quel componente. Per un simile approccio non ero preparato. È una cosa scrivere un algoritmo di 30-50 righe sulla lavagna, un'altra è il codice Android, anche se abbreviato e con commenti del tipo 'beh, questo non lo scriverò, è ovvio'. È venuto fuori un bel pasticcio su 3 lavagne. Cioè, ho risolto il compito, ma sembrava un disastro.

Colloquio numero due

Questa volta il colloquio era sugli algoritmi. E c'erano due intervistatori. Uno era l'intervistatore principale, e l'altro un giovane padawan (shadow interviewer). Dovevo pensare a una struttura dati con alcune proprietà specifiche. Prima, come al solito, abbiamo discusso del problema. Ho fatto varie domande, l'intervistatore rispondeva. Dopo un po', mi hanno chiesto di scrivere alcuni metodi della struttura inventata sulla lavagna. Questa volta è andata più o meno bene, anche se con alcuni piccoli errori che ho corretto seguendo i suggerimenti dell'intervistatore.

Colloquio numero tre

Questa volta era System Design, che si è rivelato anche Android. Dovevo sviluppare un'app con specifiche funzionalità. Abbiamo discusso i requisiti per l'app, per il server e per il protocollo di comunicazione. Poi ho iniziato a descrivere quali componenti o librerie avrei utilizzato per costruire l'app. E quando ho menzionato Job Scheduler, c'è stato un certo intoppo. La questione è che non l'ho mai usato in pratica, poiché al momento della sua introduzione mi ero appena spostato a supportare app in cui non c'erano affatto attività per il suo utilizzo. Nello sviluppo delle app successive è stato lo stesso. Cioè, teoricamente so cosa sia, quando e come venga usato, ma non ho esperienza pratica. E sembra che questo non sia piaciuto molto all'intervistatore. Poi mi hanno chiesto di scrivere codice. Sì, nello sviluppo dell'app bisogna scrivere codice fin da subito. Ancora una volta codice Android sulla lavagna. È venuto fuori di nuovo qualcosa di brutto.

Pranzo

Doveva arrivare un'altra persona, ma non è venuta. Anche Google può avere delle defaillance. Alla fine, sono andato a pranzo con l'intervistatore precedente, il suo collega, e poco dopo si è unito il prossimo intervistatore. Il pranzo è stato piuttosto decente. Del resto, poiché non si tratta della sede principale di Zurigo, la mensa sembrava abbastanza normale, anche se molto piacevole.

Intervista numero quattro

Finalmente algoritmi puri. Ho risolto il primo problema abbastanza rapidamente e in modo efficace, anche se ho sbagliato un caso limite, ma con l'aiuto dell'intervistatore (lui ha fornito quel caso limite) ho trovato il problema e l'ho risolto. Ovviamente era necessario scrivere il codice sulla lavagna. Poi mi è stata proposta una questione simile, ma più complessa. Per questa ho trovato un paio di soluzioni non ottimali e quasi trovato quella ottimale, mancavano 5-10 minuti per concludere il pensiero. E per scrivere il codice non ho avuto tempo.

Intervista numero cinque

E di nuovo intervista Android. Chissà perché ho studiato algoritmi per un anno intero?
All'inizio ci sono state alcune domande semplici. Poi l'intervistatore ha scritto del codice sulla lavagna e ha chiesto di trovare i problemi. Li ho trovati, spiegato, corretto. Abbiamo discusso. E poi sono cominciate alcune domande inaspettate del tipo 'cosa fa il metodo Y nella classe X', 'cosa c'è dentro al metodo Y', 'cosa fa la classe Z'. Ho risposto a qualcosa, ma poi ho detto che ultimamente non mi ero imbattuto in questo nella mia attività e naturalmente non ricordo chi, cosa e come nei dettagli. Dopo questo, l'intervistatore ha chiesto cosa sto facendo ora. E le domande sono girate su questo argomento. Qui ho risposto molto meglio.

Dopo la fine dell'ultima intervista mi hanno preso il badge, augurato buona fortuna e rispedito a casa. Ho fatto una passeggiata per la città, cenato e sono tornato in hotel, dove sono crollato dal sonno, poiché il volo era di nuovo presto al mattino. Il giorno seguente sono arrivato in modo sicuro a Cipro. Su richiesta del reclutatore ho scritto un feedback sull'intervista e ho compilato un modulo in un servizio speciale per il rimborso delle spese. Di tutte le spese, Google rimborsa solo i biglietti. Hotel, cibo e trasporti sono a carico del candidato. Dopodiché compilamo il modulo, alleghiamo le ricevute e lo inviamo a un'agenzia speciale. Loro lo elaborano e trasferiscono abbastanza rapidamente i soldi sul conto.

Ci sono volute quasi due settimane per elaborare i risultati dei colloqui. Dopo di che mi hanno comunicato che ero "un po' al di sotto della soglia". In altre parole, non ce l'avevo fatta. Per essere più specifici, 2 colloqui sono andati bene, 2 non molto e il colloquio di System Design è andato molto male. Se almeno 3 fossero andati bene, avrei potuto lottare, ma così non c'era possibilità. Mi hanno proposto di riprovare dopo un anno.

All'inizio, naturalmente, sono rimasto deluso, dato che avevo dedicato molte energie alla preparazione e, al momento del colloquio, avevo già maturato l'idea di lasciare Cipro. Lavorare per Google e trasferirmi in Svizzera sembrava un'ottima opzione.

Conclusione

E qui arriviamo alla parte conclusiva dell'articolo. Sì, ho fallito due volte ai colloqui di Google. È deludente. Probabilmente sarebbe stato interessante lavorare lì. Ma possiamo guardare la situazione anche da un'altra prospettiva.

  • In un anno e mezzo ho appreso un'enorme quantità di cose relative allo sviluppo software.
  • Ho provato grande soddisfazione partecipando a competizioni di programmazione.
  • Sono stato a Zurigo per un paio di giorni. Quando ci tornerò mai più?
  • Ho avuto un'esperienza interessante di colloquio in una delle più grandi aziende IT del mondo.

In questo modo, tutto ciò che è successo in quest'anno e mezzo può essere considerato semplicemente un periodo di apprendimento o di formazione. E i risultati di questa formazione hanno dato i loro frutti. La mia idea di lasciare Cipro è maturata (per alcuni motivi legati alla famiglia), ho superato con successo alcuni colloqui in un'altra azienda nota e dopo 8 mesi mi sono trasferito. Ma questa è tutta un'altra storia. Tuttavia, penso che dovrei comunque ringraziare Google sia per questo anno e mezzo di lavoro su me stesso che per i 2 giorni interessanti a Zurigo.

Cosa posso dire per concludere. Se lavori nell'IT, preparati per i colloqui in Google (Amazon, Microsoft, Apple, ecc.). Potrebbe capitarti di voler entrare lì. Anche se non lo desideri, credimi, una preparazione del genere non ti farà male. Nel momento in cui ti renderai conto di poter (anche solo in circostanze fortunate) superare un colloquio in una di queste aziende, avrai molte più opportunità rispetto a prima della tua preparazione. E tutto ciò di cui avrai bisogno lungo il cammino è un obiettivo, perseveranza e tempo. Ti auguro successo 🙂

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster