Come prepararsi a rispondere a domande di progettazione in un colloquio tecnico
Ho superato interviste nella maggior parte delle migliori aziende e conduco interviste di progettazione di sistemi per assumere ingegneri junior/senior nella mia attuale azienda. Ecco alcune delle cose chiave da ricordare quando si risponde a una domanda di progettazione di sistema in un'intervista:
Chiede domande chiarificatrici: Come candidato è molto importante chiarire i requisiti con l'intervistatore. Fate abbastanza domande per sapere quale caratteristica specifica vi viene chiesto di costruire, quanti dati deve gestire il sistema? Ci sono dei vincoli intorno a TPS, latenza, memoria, ecc. ? Probabilmente vuoi toglierti queste domande all'inizio. La maggior parte dei candidati finisce per buttarsi direttamente nella soluzione solo per rendersi conto che il problema era diverso da quello che pensavano inizialmente.
Nota le caratteristiche su cui concentrarsi: Scrivete sulla lavagna bianca le caratteristiche chiave su cui vi concentrerete.
API: Scrivete le principali API che il vostro sistema utilizzerà. Questo vi darà una chiara idea di quali sono gli input e gli output del vostro sistema.
Progettate il vostro sistema: Disegnate un'architettura di alto livello di come sarà il vostro sistema sulla lavagna bianca. Questo non deve necessariamente essere il disegno finale del vostro sistema. Quando lo esponi, ricordati di spiegare quali tecnologie stai usando in questa architettura e perché? Esempio: se avete intenzione di usare NoSQL invece di SQL, spiegate all'intervistatore perché state usando NoSQL. La maggior parte dei candidati finisce per impantanarsi qui, quando vengono interrogati, finiscono per dare risposte come NoSQL è senza schema mentre SQL è basato sullo schema, che potrebbe anche non essere rilevante per il sistema che stanno cercando di costruire.
Conoscere i pro e i contro della tecnologia che si sta utilizzando: Come candidato è importante conoscere i pro e i contro della tecnologia che stai usando nel tuo progetto. Per esempio, se state usando Amazon S3 per memorizzare immagini e file, preparatevi a sapere quali sono gli svantaggi dell'uso di S3 o se state usando Dynamo/Mongo per memorizzare i dati ricordatevi di sapere quali sono i loro svantaggi e come giustificherete la vostra scelta rispetto a un semplice database SQL ecc (Suggerimento: uno degli svantaggi di Amazon S3 è che non potete eseguire operazioni di lettura/scrittura al millisecondo. Uno dei lati negativi di Dynamo/Mongo è che può soffrire di un problema di partizione a caldo)
Siate pronti a rispondere a domande basate su scenari: Come intervistatore di solito interrogo i candidati sulla base di diversi scenari che il loro sistema potrebbe affrontare. Per esempio, cosa succederebbe se il vostro host di database andasse giù? Cosa succederebbe se il vostro web-server andasse giù? Cosa accadrebbe se il TPS sul vostro sistema aumentasse drasticamente? Come fa il tuo LB a distribuire il carico in modo uniforme?
Progetta un sistema che possa scalare: Come candidato verrai interrogato sulla scalabilità, disponibilità e latenza del tuo sistema. Siate pronti a cambiare il vostro progetto iniziale che avevate presentato in base al nuovo requisito, ma ricordatevi di aggiungere il supporto per il nuovo requisito con grazia. Per esempio, quando chiedo a un candidato se il suo sistema affronta un problema di partizione calda, come lo gestirebbe? Il candidato finisce per dire che possiamo aggiungere altri host, ma questo non ridurrà il carico sulla singola partizione. Una risposta corretta sarebbe quella di cambiare la chiave (usata nell'hashing coerente), in modo che il carico sia distribuito uniformemente su tutti gli host.
Condurre le conclusioni basate sui dati: Come candidato è importante trarre conclusioni basate su dati che puoi assumere o ottenere dal tuo intervistatore. Per esempio, se stai scegliendo un database per memorizzare gli URL, è fondamentale che tu fornisca una stima approssimativa della quantità di dati che il tuo sistema si aspetta. (Suggerimento: va bene fare supposizioni qui!)
Ricordati di comunicare efficacemente: Come candidato è importante che tu comunichi in modo intelligente con il tuo intervistatore, il round di progettazione del sistema è una sessione interattiva e può andare in qualsiasi direzione. Ricordati di essere intelligente e di guidare la conversione verso gli argomenti che conosci!
Mantieni la calma durante l'intervista: Se non conoscete la risposta a una domanda, va bene dire che non lo sapete e che vi piacerebbe saperne di più se ne avete l'opportunità. Non tirate indovinelli a caso all'intervistatore e non mettetevi sulla difensiva riguardo al vostro design. Ricordate che non c'è nessun design a questo mondo che sia perfetto!
Articoli simili
- Quali sono i concetti più importanti da imparare/comprendere in Objective C e sviluppo iOS per prepararsi ad un colloquio di lavoro su iOS?
- Come rispondere a 'come aggiungerai valore a questa azienda?' quando ti viene chiesto in un colloquio
- Quali sono le migliori domande di colloquio per valutare un ricercatore di machine learning?
- Quali sono le 25 domande più difficili che Apple farà in un colloquio di lavoro?