La guida definitiva al colloquio di codifica

Aggiornamento: Seguendo i consigli scritti qui sotto, ho ricevuto offerte da Google, Microsoft, Amazon, Quantcast e Bloomberg.

Questa è una guida completa che contiene tutto quello che devi sapere sul colloquio di codifica. Spiega accuratamente cosa imparare, come imparare e soprattutto come presentare la soluzione durante il colloquio.

Se vuoi superare il colloquio di codifica, hai trovato l’articolo giusto. Dopo aver letto questo potresti essere tentato di cercare altri articoli sullo stesso argomento, perché “Forse troverò altri consigli e trucchi che mi aiuteranno”.

Smetti di cercare consigli e trucchi, questo è ciò che ti tiene lontano dal lavoro dei tuoi sogni.

Non ci sono consigli o trucchi per ottenere quel lavoro. È solo duro lavoro, punto. Quindi, se vuoi davvero schiacciare quel colloquio, vai a fare pratica dopo aver letto questo articolo.

L’articolo è composto da tre parti & tre video e ci vorranno circa 30 minuti per leggerlo.

  1. Cos’è il colloquio di codifica?
  2. Come prepararsi al colloquio di codifica?
  3. Come dare il meglio durante il colloquio di codifica?

Prima di tutto, lasciatemi presentare, in modo che sappiate che sono sicuro di ciò di cui sto parlando.

La più grande competizione di programmazione nell’Europa nord-occidentale

Mi chiamo Andrei e sono un programmatore competitivo da cinque anni. Ho partecipato alle finali mondiali di Google HashCode, la più grande competizione algoritmica organizzata da Google, e prima ancora ho vinto tre medaglie d’oro alle Olimpiadi di Informatica in Romania. Avendo questa esperienza, ho pubblicato il corso online “Introduction to Algorithms and Data Structures in C++” che ha aiutato più di 8000 studenti da 135 paesi con i loro primi passi nel campo.

Ora sto studiando Computer Science all’University College di Londra e nel frattempo, sto creando un corso per aiutare studenti e giovani professionisti a prepararsi per il colloquio di codifica nelle grandi aziende tecnologiche. Quindi, in questo articolo, voglio condividere la mia esperienza con il colloquio di codifica e dirvi il modo più diretto per superarlo. Potete raggiungermi qui.

Lasciate che vi faccia una domanda: avete mai sognato di lavorare in una grande azienda tecnologica, come Microsoft? Se sì, siate certi che anche la maggior parte di noi lo ha fatto. E siccome c’è una così alta richiesta per poche decine di posti di lavoro, hanno bisogno di un modo per vedere quali candidati sono più preparati.

Prima di essere invitati al colloquio di codifica, è necessario candidarsi per la posizione e avere un CV che brilli tra gli altri. In questo articolo, parlerò del colloquio di codifica vero e proprio e di come ci si può preparare, e non del processo di candidatura per il lavoro.

Per la maggior parte delle aziende tecnologiche, il colloquio di codifica consiste in problemi di Algoritmi &Strutture dati. Pensate a queste come domande di problem-solving, in cui l’intervistatore sta cercando di valutare la vostra capacità di risolvere un problema che non avete mai visto prima. Un colloquio dura circa 45 minuti e vi vengono dati uno o due problemi di codifica. L’intervistatore si aspetta che tu trovi la soluzione più ottimale, la codifichi e spieghi ciò che hai appena codificato.

Infine, avrai la possibilità di fargli alcune domande sulla società o su qualsiasi cosa che ti interessa. Discuteremo esaurientemente tutti questi passi nell’ultima parte di questo articolo.

Come prepararsi al colloquio di codifica?

Voglio essere chiaro con voi fin dall’inizio: non esiste una scorciatoia o un trucco per superare il colloquio. L’unico modo per trovare soluzioni ottimali ai problemi algoritmici è fare pratica, risolvendo quanti più problemi possibili.

In due parole, è un lavoro duro.

Potrebbe non piacerti e iniziare a cercare da qualche altra parte un trucco per capire come risolvere le domande del colloquio, ma non esiste. Pensaci un attimo: se ci fosse un trucco del genere, perché non tutti lo userebbero e passerebbero il colloquio?

Quindi, devi capire che l’unica variabile per passare il colloquio è quanto ti eserciti prima. La tua esperienza, intelligenza e tutto il resto è già fissato. Quindi, il tempo dedicato alla pratica farà la differenza tra i candidati che passano e quelli che non passano.

L’intervista di codifica è una lotta con se stessi, e l’unico modo per vincerla è fare molta pratica.

Il primo passo è sentirsi a proprio agio con un linguaggio di codifica tradizionale, come C/C++, Java o Python. Alcune aziende accettano anche altri linguaggi, e la netta maggioranza si attiene a questi tre. Scegli quello che ti piace di più e attieniti ad esso. Non decidere a metà della preparazione che vuoi cambiare lingua! Per il resto dell’articolo, darò per scontato che hai scelto una lingua e conosci bene la sua sintassi.

Ora, tipicamente il colloquio di codifica è tutto su algoritmi e strutture di dati. Comprendono alcuni argomenti fondamentali che devi comprendere a fondo, e non considerare nemmeno di andare al colloquio senza sentirti a tuo agio con essi.

Di seguito c’è una lista degli algoritmi e delle strutture dati che devi conoscere. Li ho scritti in ordine di importanza ed è il miglior percorso di apprendimento.

1) Complessità Big O: è un must e costituisce la base del vostro pensiero algoritmico. Capite cosa significa e arrivate al punto in cui potete dire la complessità di un algoritmo di base solo guardandolo.

2) Array: A questo punto dovresti avere familiarità con il concetto di array. Questo argomento si riferisce a problemi in cui l’array è usato solo per la memorizzazione e la soluzione include tecniche di base, come iterare con due puntatori. Un problema classico è verificare se un dato array è una permutazione.

3) Stringhe: Sapere come manipolare una stringa nella vostra lingua, e avere familiarità con i problemi che vi chiedono di concatenarle o ruotarle.

4) Liste collegate: È comune incontrare un problema di liste collegate nell’intervista. Qui dovete prestare particolare attenzione ai casi d’angolo. Pensa cosa succede se la lista collegata è vuota? O ha un solo elemento? O vuoi iterare fino all’ultimo elemento? Quando risolvi un problema con liste collegate, pensa due volte ai casi d’angolo.

5) Tabelle Hash: Struttura dati fondamentale che è presente nella maggior parte delle interviste. Se andate più a fondo in un argomento, scegliete le tabelle hash. Siate fluenti nella libreria di tabelle hash della vostra lingua e fate pratica con almeno cinque problemi. Alla fine, accettate questa sfida: Come trovereste la più lunga subarray con voci distinte?

6) Pile: Familiarizzate con l’idea che potete manipolare solo un’estremità della pila. Risolvete questa sfida: implementate uno stack con un’API MAX, il che significa che in ogni momento potete chiedere qual è l’elemento massimo nello stack.

7) Code: Non confondetele con le pile, perché hanno due estremità. Implementate il classico problema di simulare una coda usando due pile.

8) Greedy: Questa tecnica è abbastanza semplice e probabilmente la usate ogni giorno. Si riferisce fondamentalmente a prendere la migliore decisione possibile in un momento specifico, senza considerare le conseguenze future. Fate pratica con alcuni problemi, e non pensate che ogni problema possa essere risolto usando Greedy.

9) Tipi primitivi: Riguarda principalmente la manipolazione dei bit e le operazioni di base sui numeri. Tuttavia, alcuni problemi possono diventare piuttosto complicati. Come si può contare il numero di 1 in una rappresentazione binaria?

10) Alberi binari: Concentrarsi su traversate, antenati comuni e iterare ricorsivamente attraverso gli alberi.

11) Heaps: Sono ampiamente usati nelle applicazioni del mondo reale, quindi imparate a conoscere gli heap! Esercitatevi finché non sarete sicuri di quando usare un min-heap o un max-heap. Come faresti a stampare i cinque elementi più grandi di una sequenza di numeri? Usi un min-heap o un max-heap?

12) Ricerca: La ricerca è un argomento fondamentale che tutti dovrebbero conoscere. Quindi, esercitatevi in almeno tre problemi usando la ricerca binaria.

13) Ordinamento: Siate sicuri di poter implementare mergesort e quicksort. Conoscere molto bene le loro complessità nel caso migliore, medio e peggiore. Se avete tempo, imparate anche Heapsort.

14) Alberi di ricerca binari: Sono ampiamente richiesti nei colloqui di codifica, e devi essere in grado di implementare tutte le loro operazioni di base, inclusa la cancellazione di un elemento!

15) Backtracking: Significa fondamentalmente generare tutte le soluzioni possibili e prendere quelle che rispettano i vostri requisiti. Implementa un generatore dell’insieme di potenza dell’insieme e il problema n-Queen.

16) Grafici: Sono probabilmente la struttura dati più usata in informatica. Sapevi che ogni rete sociale è solo un enorme grafico? Esercitati a fare una copia del grafico in memoria e a rilevare i cicli nei grafi.

17) Programmazione dinamica: La programmazione dinamica è vista dai più come l’argomento più spaventoso. Ma è il più bello se si capisce il pensiero che c’è dietro. Quindi, esercitatevi con le cinque domande più comuni e seguitele finché non capite da dove vengono le ricorrenze.

Nel corso che sto creando ora, sto spiegando ogni argomento in questo ordine. Sto ancora lavorando al corso, ma puoi avere accesso anticipato ad alcune delle lezioni e anche aiutarmi con il tuo feedback, unendoti al gruppo Facebook del corso.

Se molti argomenti non ti sono familiari, significa che devi iniziare a fare pratica subito dopo questo articolo. Basta cercare online altre guide, andate a fare pratica. Ricorda che l’intervista è una lotta con te stesso, più ti eserciti, più alte sono le tue possibilità di vincere. Sta a te aumentare la tua zona di comfort dei problemi.

Come dare il meglio di te durante l’intervista di codifica?

L’intervista ha cinque parti che discuteremo in profondità. Guarda i video esplicativi per esempi reali.

1) Introduzione

Questa parte inizia il colloquio e dura dai tre ai cinque minuti. L’intervistatore vuole saperne di più su di voi e vi dà la possibilità di presentarvi. In genere, è interessato a quali progetti hai lavorato in precedenza e quale è stato il più impressionante. Ora, questa è la tua occasione per brillare, quindi non sprecarla!

Non cercare di essere lusinghiero. È facile individuare una personalità falsa che cerca di ingannarti. Io e tutti gli altri odiamo queste persone, quindi assicurati di mostrare la tua vera personalità.

Devi sapere in anticipo cosa dirai sul tuo progetto preferito, quindi preparalo prima del colloquio. Ora, la maggior parte delle persone dice solo due brevi frasi, il che non va bene. Quale risposta ti piace di più?

1) “Ho lavorato su un’applicazione web per gestire meglio i pazienti negli ospedali. Ho scritto il backend in Node.js.”

Il modo in cui ti presenti conta davvero

2) “Un progetto che mi è piaciuto molto riguardava la creazione di un’applicazione web per i servizi sanitari nazionali del Regno Unito per aiutarli a gestire meglio i pazienti in ospedale. Faceva parte del curriculum universitario, ci sono voluti due mesi e sono stato il leader di un team di tre persone.

Abbiamo preso il progetto da un’idea di base e lo abbiamo trasformato in una vera applicazione. Ero responsabile della codifica del backend in Node.js e del database in MongoDB. Era la prima applicazione che ho creato per un cliente e non avevo familiarità con le tecnologie web. Il processo di sviluppo è stato iterativo, e abbiamo fatto alcuni errori lungo la strada.

Alla fine, abbiamo superato la consegna con molte caratteristiche, e la mia preferita è che gli utenti possono aggiornare le stanze dell’ospedale, invece di essere hard coded.

Ho imparato molte cose da questo progetto, soprattutto come lavorare in una squadra. Ci sono stati alcuni momenti in cui sono sorti problemi tecnici o di squadra, ma alla fine, tutto è andato bene e abbiamo ottenuto il voto più alto dell’anno!”

Trasforma questa presentazione nel tuo vantaggio! L’intervistatore è veramente interessato a saperne di più su di te, quindi inizia con una concisa introduzione del progetto, spiegando di cosa si tratta. Poi dite qual è stato il vostro contributo (se avete aiutato il team con un’idea intelligente, ditelo!), e cosa avete imparato dal processo di sviluppo. Puoi anche menzionare quale differenza hai fatto per gli utenti.

Dovresti parlare uno-due minuti del tuo progetto.

2) Capire il problema

L’intervistatore ti dirà brevemente il problema che devi risolvere. Ho detto ‘brevemente’ perché non ti darà molti dettagli sui vincoli, sui casi d’angolo o su come ricevi i dati. Fa parte del tuo lavoro chiedere tutto ciò di cui hai bisogno per risolvere il problema. Ripeti l’affermazione ad alta voce per essere sicuro di averla capita correttamente.

Lascia un commento