Qual è il modo migliore per prepararsi a un colloquio telefonico con Google (posizione di ingegneria del software)?

In questi giorni faccio per lo più colloqui telefonici a Google, perché il mio laboratorio è abbastanza lontano dal campus principale che è troppo fastidioso guidarci per i colloqui in loco. Ecco le cose che la maggior parte dei candidati potrebbe fare meglio:

  1. Praticare problemi algoritmici. La maggior parte delle persone che intervisto sanno fondamentalmente solo come scrivere cicli for e chiamare API. Google non ha bisogno di persone che scrivano solo cicli for e chiamino le API. Google vuole persone che possano risolvere problemi reali, non sfornare codice standard. Quando ho fatto il colloquio a Google, ho passato un mese a lavorare sui problemi del libro di Gayle Laakmann, Cracking the Coding Interview. E poi il mio colloquio a Google è stato divertente e facile.
  2. Impara gli idiomi del linguaggio che hai scelto. Quando vedo qualcuno che scrive C++ o Python come se fosse semplice C o pseudo codice, penso che sia qualcuno che non ha passato abbastanza tempo a programmare per conoscere davvero il linguaggio e come funziona.
  3. Pensate davvero a come il vostro algoritmo sta tenendo traccia di dove si trova nel problema. Spesso avete solo bisogno di un int o di una lista per ricordare ciò che avete realizzato finora. Ma molte persone non capiscono cosa stanno facendo e usano la ricorsione o i thread multipli. Oppure si confondono cercando di iterare su due strutture di dati allo stesso tempo, perché vogliono memorizzare il loro contesto in una variabile di loop invece che in un iteratore.
  4. Fate domande per assicurarvi che voi e l'intervistatore siate sulla stessa pagina. Va benissimo fare domande chiarificatrici.
  5. Mi piace molto quando il candidato si interessa al problema su cui stiamo lavorando, come un puzzle, e parla delle difficoltà o menziona qualcosa di simile su cui ha lavorato. Dimostra che ha una passione per il lavoro. Odio davvero l'atteggiamento secondo cui questo è solo uno stupido test casuale che devono eseguire per ottenere un lavoro.
  6. Praticare più problemi algoritmici! Questo non è per vedere se avete memorizzato qualche stupida banalità, come l'implementazione dell'albero rosso-nero. Si tratta di sviluppare la tua abilità nel riconoscere la struttura sottostante del problema e di usare gli strumenti che già conosci per risolverlo.
  7. Comprendere la complessità temporale e spaziale. Roba da notazione Big-O. Google lavora su una scala enorme. La differenza tra una soluzione O(NlogN) e una soluzione O(N^2) può essere di milioni di dollari, quando si parla di petabyte di dati. Il colloquio non è davvero così difficile. Trattatelo come se lavoraste già a Google e steste cercando di risolvere un puzzle con il vostro amico.

Ecco la domanda che ho ricevuto sullo schermo del mio telefono: Hai una scala con N gradini, e puoi prendere qualsiasi combinazione di gradini singoli e doppi per raggiungere la cima. In quanti modi diversi si può salire la scala? [Questa è una domanda vietata ora.]

Se ci sono quattro gradini nella scala, puoi fare 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2.

È un rompicapo molto divertente. Ci sono molti modi diversi per risolverlo. Ci sono soluzioni ricorsive. Ci sono soluzioni combinatorie. Ci sono soluzioni algebriche. Ci sono soluzioni O(2^N). Ci sono soluzioni O(N^2). Ci sono soluzioni O(N). So persino di una soluzione O(logN) e di una soluzione O(1).

Ho avuto un'esperienza molto divertente e veloce con il mio schermo del telefono. Abbiamo scherzato e parlato del perché il problema fosse complicato. Dopo essere stato assunto, ho anche parlato con il mio intervistatore alcune altre volte delle nuove soluzioni che avevo trovato.