Come posso progettare un sistema arbitrario in un'intervista? [chiuso]


36

Una domanda comune in Tech Interview è progettare un sistema particolare, di solito un prodotto esistente dell'azienda. Ad esempio, "Progetta Google Documenti".

Qual è la risposta prevista per una domanda del genere? Voglio dire, tali sistemi hanno sicuramente un design complesso che va oltre lo scopo di qualsiasi intervista. Cosa si aspettano gli intervistatori in così poco tempo?


4
+1 L'altro giorno è stato chiesto a un mio amico. Ho detto la stessa cosa. Mi sforzo di porre domande di intervista a tempo indeterminato. Chiedi all'intervistato i loro progetti e il come / perché del loro design. In questo modo possono parlarmi di qualcosa che già sanno e hanno fatto. Invece di inciampare nel design della lavagna chiedendosi se iniziare dai requisiti o fare un mucchio di ipotesi perché l'ovvio limite di tempo ...
P.Brian.Mackey

6
Se si tratta di un prodotto esistente, risponderei con "Cosa trovi carente nel tuo progetto esistente?"
Blrfl,

5
"bene .. il passaggio 1 contatterà un avvocato per vedere se stiamo violando qualsiasi marchio o copyright"
Steven Evers,

12
"Ti dispiace se vedo i documenti dei requisiti?"
Joel Etherton,

4
"Non l'ho mai usato. Quali sono le sue caratteristiche principali?"
Steven A. Lowe,

Risposte:


22

Comprensione di come il tuo cervello guarda a questo problema. Ecco alcuni punti di partenza che ho potuto vedere su come si potrebbe provare ad avere questa conversazione:

  • Dall'alto verso il basso - Guardando in basso da un livello molto alto, costruisci un disegno e perfeziona il progetto man mano che vengono eseguiti vari componenti e qui ci sono una manciata di componenti che ho potuto vedere ....

  • Bottom-up - Guardando da zero, ecco alcuni pezzi che si potrebbero costruire per cercare di mettere insieme ...

  • Chiarimento dei requisiti: fare domande sulla scala, le dimensioni, il budget e il team previsti per questo progetto. Potresti provare ad avere un codice persona un elaboratore di testi molto semplificato oppure potresti spendere centinaia di milioni di dollari per realizzare il sistema di gestione dei documenti definitivo che ritieni sia il modo in cui Google Doc ha portato all'estremo. Anche qui c'è la possibilità di chiedere qualcosa del tipo, "Cosa intendi con Google Doc? Quanta di quella funzionalità vuoi duplicare?" anche domande.

La chiave è quanto riesci a comunicare i tuoi pensieri e il tuo approccio nell'affrontare questo tipo di problema, poiché potresti far avvicinare un utente a te e chiederti "Psst, potresti fare qualcosa del genere in 2 settimane?" ciò potrebbe effettivamente accadere. Pertanto, il modo in cui dai la risposta è più importante di quello che è la risposta.


La mia opinione personale sarebbe che i progetti passati non sono una buona idea qui. Ciò che si sta cercando di trovare è che tipo di creatività e abilità comunicative in una nuova area piuttosto che ricordare semplicemente come è stato fatto qualcosa in passato. È probabile che mentre qualcosa che accade nella nuova posizione può essere simile a qualcosa del passato, ci potrebbero essere abbastanza differenze che la vecchia soluzione non è fattibile. Questo è il motivo per cui, sebbene ciò che può essere creato sia simile a un'applicazione esistente, potrebbero esserci varie personalizzazioni che rendono la soluzione abbastanza diversa dall'esempio iniziale.

Le interviste sono una strada a doppio senso. I manager e gli altri sviluppatori raramente sono maestri nel colloquio, quindi non sono sicuro di vedere il valore nel cercare di affermare che dovrebbero essere esperti in materia nelle interviste di lavoro. I recruiter che vedevo mi aspettavo di sapere come fare un colloquio, ma ci sono molti recruiter poveri che potrebbero essere usati come esempi del perché questa non è sempre una buona idea.


2
È meglio chiedere all'intervistato un progetto con cui hanno familiarità. In questo modo puoi vedere come funziona la loro mente durante il loro vero processo di lavoro. Puoi fermarli e chiedere chiarimenti sui dettagli per vedere quanto è profonda la loro conoscenza del loro dominio. "Perché non hai usato un'interfaccia come parametro per il metodo?" Quindi tocca a te come intervistatore porre le domande giuste. Questo è corretto in quanto l'intervistato è nel tuo dominio ... non proprio.
P.Brian.Mackey,

2
+1 se potessi: "La chiave è quanto riesci a comunicare i tuoi pensieri" ... sfortunatamente, credo che la maggior parte degli intervistatori e dei candidati sia carente in questo settore.
Anon,

2
"È meglio chiedere all'intervistato un progetto con cui hanno familiarità. In questo modo puoi vedere come funziona la loro mente durante il loro vero processo di lavoro." In realtà tutto ciò che farà è testare il loro richiamo al lavoro di progettazione che hanno già svolto. Gli intervistatori cercano principalmente di vedere come attaccheranno nuovi problemi.
DJClayworth,

16

Soprattutto per gli sviluppatori senior, penso che queste domande possano essere molto valide. Mostrano che uno sviluppatore è in grado di passare da una descrizione ampia e complicata a un'implementazione realistica. Anche con un sistema totalmente sconosciuto, dovresti essere in grado di fare una serie di attività interessanti per l'intervistatore:

  • Raccogliere i requisiti per rispondere alla domanda (ad es. Ambito di applicazione)
  • Suddividere il problema in pezzi più gestibili; eventualmente identificare interfacce o oggetti che potrebbero essere necessari o suddividere la logica in front-end, back-end, DB, ecc.
  • Dimostrare familiarità con la struttura e i concetti alla base di quel tipo di sistema, ad esempio le app Web nel caso di Google Documenti
  • Mostra su cosa tendi a concentrarti quando viene presentato un problema di progettazione (Progettazione di oggetti? Tabelle SQL? Modelli di progettazione?)
  • Mostra al capo un'anteprima di come sarà sviluppare un nuovo sistema con te, in cui il capo entra con una specifica e dice: "Cosa ci vorrebbe per costruire questo?"

Questa domanda è solo una versione di livello superiore di "Descrivi la gerarchia degli oggetti che useresti per questo ..." "Descrivi l'interfaccia che vorresti progettare per questo ..." "Progetta una serie di tabelle DB relazionali per questi dati ...", ecc. Che verrebbero fornite a sviluppatori di livello medio-basso. Negli sviluppatori di livello inferiore, l'intervistatore potrebbe valutare il potenziale a lungo termine della persona per la crescita dell'azienda, o semplicemente vedere cosa fanno di fronte a un grosso problema che potrebbe essere travolgente.


2
Quindi una risposta prevista alla domanda è alcuni diagrammi UML, almeno semplificati?
Shamim Hafiz,

3
Penso che UML semplificato sarebbe una parte comune della risposta. Potrebbero anche essere visualizzati gli schemi del server. La cosa fondamentale è mostrare che non sei ostacolato dalle dimensioni del problema e che puoi passare agevolmente da un concetto vago a una vera architettura (con problemi concreti - non vaghi - da risolvere). E quindi comunicare quell'architettura. L'intervistatore potrebbe anche ascoltare se stai cercando le migliori pratiche attuali o vai a soluzioni non aggiornate.
Ethel Evans,

11

Si tratta di vedere i tuoi processi di pensiero in azione; non sono interessati a una soluzione, ma come approcceresti risolvendo il problema, quali domande faresti, quali problemi identificheresti, ecc.

Dato l'esempio di Google Documenti, gli ovvi problemi che vengono in mente sono cose come archiviazione, sicurezza, scalabilità, disponibilità, progettazione dell'interfaccia client, compatibilità del browser, ecc. Come divideresti la responsabilità tra server e client? Come gestiresti i backup? Cosa succede quando un server si arresta? Cosa faresti con i documenti "abbandonati" (cose a cui non si è avuto accesso o modificato da un lungo periodo di tempo)?

Ancora una volta, il punto non è risolvere nessuno di questi problemi, ma identificarli , parlarne, confrontarsi un po 'su come affrontarli, ecc.


9

Sono una di quelle parti colpevoli che spesso intervistano questo tipo di domande. (Per la cronaca, faccio anche domande simili sul loro "progetto preferito".) Il motivo per cui lo chiedo è che è qualcosa che facciamo spesso qui intorno. Riceviamo ingegneri di progettazione da tutti i lati di un'interfaccia, qualcuno dell'ingegneria dei sistemi, qualcuno del test e qualcuno con una certa conoscenza dei casi d'uso dei clienti per la funzione. Siamo attorno a una lavagna e diciamo "Okay, come costruiremo questa cosa?" Spesso a quel punto sai molto poco della nuova funzionalità e sei lì solo per la tua esperienza nella tua parte del sistema, ma ci si aspetta che tu contribuisca in modo produttivo. Non è solo un ipotetico esercizio accademico.

Per quanto riguarda il tipo di risposte che mi aspetto, prendiamo ad esempio la progettazione di un sistema per scaricare il nuovo firmware da un server, attraverso 20 schede di linea incorporate in un ufficio centrale per aggiornare 5000 set top box sul campo contemporaneamente. Supponiamo che sul collegamento tra il server e le schede di linea sia presente una capacità di riserva molto ridotta.

Risposta errata:

Uhm, probabilmente userei Ethernet o qualcosa del genere.

Buona risposta:

Di quale immagine stiamo parlando? [Circa 7 MB.] Bene, ti consigliamo di assicurarti che il servizio non sia stato interessato durante il download. Avresti bisogno di flash o RAM extra per memorizzare due immagini contemporaneamente. Probabilmente vorrai memorizzare nella cache l'immagine sulle tue line card per evitare di scaricare ripetutamente la stessa immagine dal server. Essendo incorporate, le schede di linea probabilmente hanno CPU limitate, quindi potrebbe essere necessario serializzare i download per lasciare una capacità sufficiente per il servizio. Vorresti un modo per verificare che l'immagine fosse buona e tornare alla versione precedente se non funzionava. Avresti bisogno di un modo per riprovare alcune volte e segnalare errori a un essere umano se l'aggiornamento non riesce. Se hai diverse marche di set top box, avresti bisogno di un modo per identificare l'immagine che ti serve per inviarla.

Queste sono quasi trascrizioni parola per parola di due diversi candidati. La maggior parte dei candidati si trova da qualche parte nel mezzo, ma di solito ci arriva alla fine con un piccolo suggerimento, il che è perfettamente ok. Non stiamo cercando il prossimo Einstein qui, solo un'indicazione che puoi effettivamente ragionare in modo intelligente sui tipi di problemi su cui lavoriamo ogni giorno.


1
dove lavori e hai bisogno di nuovi dipendenti? : D
Maggie,

1
Mentre tutti gli esempi di quella che chiami una "buona risposta" potrebbero essere rilevanti. La domanda era "Progettare un sistema che ....". Considerando che questa è una situazione di intervista, quindi ci si aspetterebbe di avere solo 5-10 minuti al massimo per rispondere, la maggior parte di ciò che hai identificato sembra fuori dalle erbacce per una soluzione di intervista. Dov'è la soluzione effettiva nella tua "buona risposta"? Una volta che la persona ha la soluzione "happy day", potrebbe iniziare a considerare i "what-ifs" a cui ti riferisci nella tua "buona risposta". Ma a quel punto, penserei che il tempo è scaduto.
Dunk,

5

Faccio anche questo tipo di domanda e sono d'accordo con la maggior parte delle altre risposte. Forse aiuterebbe gli intervistati a capire PERCHÉ questo tipo di domanda è importante? Supponiamo di avere un'importante decisione aziendale da prendere e, per farlo, dobbiamo costruire un nuovo sistema. Se qualcuno ti corre incontro e ti chiede cosa ci vorrebbe per costruire un sistema che fa X, puoi dare loro una risposta perspicace che prevede le principali sfide e risorse richieste?

Un programmatore junior non ha idea da dove iniziare. Non sono pronti per iniziare a parlare senza una specifica dettagliata. Un programmatore senior vedrà immediatamente che ci sono molte sfaccettature del problema e tenterà di affinare una sfida. Non devi progettare ogni aspetto, basta identificare una sfida architettonica e poi capire come affrontarla.

Considera il problema di Google Documenti:

Una cosa interessante è la scala di taglio delle richieste che arriveranno. Non puoi semplicemente ottenere un singolo server e distribuire il tuo codice su di esso - questa è un'impresa più grande. Un intervistato di successo potrebbe concentrarsi su questo e descriverà i tipi di risorse che saranno necessarie e alcune delle sfide tecniche nell'implementazione su quella scala, con un'applicazione che non solo ha uno stato, ma condivide lo stato tra più utenti.

Un'altra cosa interessante di Google Documenti è che più persone possono modificare contemporaneamente. Un intervistato di successo sarà in grado di discutere i meccanismi per assicurarsi che il documento risultante non sia spazzatura, e un candidato davvero eccezionale si renderà conto che i diversi metodi di sincronizzazione o fusione delle modifiche avranno un grande impatto sulle prestazioni e sull'UX. Forse anche discutere delle variazioni: un editor di documenti condivisi per la scrittura di codice dovrebbe probabilmente utilizzare un metodo diverso per risolvere i conflitti rispetto al tipico Google Doc, perché ci sono conseguenze diverse sulle cose che accadono in un ordine diverso o che hanno una struttura leggermente diversa.

Non esiste un solo modo giusto per creare un'app come Google Documenti, non è necessario identificare cosa faresti per ogni compromesso, ma è davvero bello trovare un'area che presenta un problema interessante e spiegare chiaramente quale sia il trade -offs potrebbe essere.

-t.


Ho votato perché sei l'unica risposta che ha orientato la propria risposta a una soluzione di design "architettonico". Dato che è il massimo che potresti fare nel contesto di un'intervista per un problema di portata specifica. Un intervistato che capisce che una soluzione architettonica è tutto ciò che può essere realizzato, dimostra di sapere cosa sta facendo.
Dunk,

2

Sospetto che ciò che gli intervistatori vogliono sentire sia:

Google Doc è un'interfaccia web per un elaboratore di testi. I documenti dell'utente vengono digitati e archiviati e sono recuperabili dall'utente sullo stesso computer o su un altro computer.

Cosa vorresti discutere ulteriormente?

Quindi, la palla è nel campo dell'intervistatore. Se vuole maggiori dettagli, può chiedere. Ciò che l'intervistatore sta cercando è: puoi guardare un problema o un prodotto ed estrarre il design?


1
La risposta è buona, ma non pensare che l'intervistatore ne sia soddisfatto. Leggendo i post finora, sembra che tali domande non siano popolari tra gli intervistati.
Shamim Hafiz,

-1 @Gilbert Le Blanc - Il tempo di "accelerazione" definito dalla legge di Brook in The Mythical Man Month rende questa domanda sciocca al massimo. Se sappiamo che ci vogliono circa 6 mesi per imparare ad aggiungere valore a un progetto software, cosa ci si può aspettare dall'estrazione del progetto in sole 6 ore? en.wikipedia.org/wiki/Brooks%27s_law
P.Brian.Mackey

1
@Shamim Hafiz: in base alla tua domanda e commento, direi che questa domanda non è popolare perché tu e altri avete difficoltà a restringere l'ambito della domanda. La risposta di JB King è più completa della mia. I suoi punti elenco sono tutti modi validi per restringere l'ambito delle domande, anche se prima sono parzialmente discendente, poi chiarimento dei requisiti. In inglese più semplice, prima disegna l'analogia, quindi evidenzia le differenze.
Gilbert Le Blanc,

4
Se intervistassi non sarei contento di quella risposta. La risposta qui mi dice solo cos'è Google Documenti, qualcosa che già conosco già.
whatsisname

1
@whatisname - Penso che l'intervistatore vorrebbe conoscere la risposta alla domanda (o un campo da baseball) nel contesto di un'intervista.
Morgan Herlocker,

2

Per me, se la persona non inizia con l'identificazione dei casi d'uso / storie chiave, sarebbe sufficiente sapere che non sono preparati per una posizione che richiede questa particolare abilità.

Successivamente, dovrebbero essere in grado di trovare una soluzione architettonica basata sui casi d'uso / storie chiave. Speriamo che abbiano usato un processo sistematico per identificare i moduli oltre a estrarli dal loro ... Non mi aspetterei molto di più da una situazione di intervista per la soluzione.

Tuttavia, potrei scegliere uno dei moduli architettonici e chiedere un progetto più dettagliato, solo per vedere se hanno alcune capacità progettuali. Sarebbe anche bello vedere che considerano i casi di fallimento / problemi di prestazioni. Ma sospetto a questo punto, ci imbatteremo in un muro temporale. Quindi, non potrei davvero penalizzarli per non aver considerato questi problemi perché c'è solo così tanto tempo e penso che sia ragionevole per loro supporre che considerare ogni possibile scenario non è previsto in una situazione di intervista limitata nel tempo.


1

Recentemente ho avuto un'intervista in cui mi è stato chiesto di progettare un sistema di controllo dell'ascensore. Fondamentalmente vogliono vedere il tuo approccio all'attività. Se ti viene posta questa domanda, probabilmente hanno in mente un lavoro di alto livello. Congratulazioni.


1

La cosa fondamentale è come risolvere i problemi rispetto ai meriti della soluzione che dai e se sei in grado di affrontare i problemi del quadro generale.

Penso che una cosa importante da fare sia porre domande sui requisiti. Non limitarti a fare ipotesi che consentano al tuo animale domestico di funzionare. Ad esempio, potresti capitare di conoscere qualche metodo davvero ingegnoso per stampare documenti che potresti essere tentato di passare subito alla descrizione. Ma Google Documenti non viene stampato direttamente; produce un PDF che il client stampa quindi. Quindi, se inizi con quello, avrai dedicato metà del tuo tempo a risolvere un problema che non fa parte del problema e hai dimostrato che sei più interessato a usare la tua tecnologia calda che a risolvere il problema del cliente.


0

Per gestire questo tipo di domande di intervista, dovrai avere un interesse generale a capire "come funzionano le cose", non solo nei progetti che ti interessano ma anche in quelli che ritieni siano troppo lontani dalle tue esperienze.

Ciò significa leggere blog, articoli, http://www.infoq.com , Hacker News, ecc. Anche i bluff hardware di Coding Horror.

Nonostante il fatto che dimenticherai la maggior parte di ciò che hai letto (perché quelle informazioni non sono comunque collegate al tuo lavoro personalmente), ci potrebbero essere alcuni bocconcini che sono i "semi dell'immaginazione" e una piccola frazione di quei semi germoglierà quando incontrerai un problema simile in un lontano, lontano futuro.

Quindi, l'intervistatore è forse interessato alla tua abitudine di lettura (come parte del tuo hobby) e vedi se hai l'abitudine regolare di raccogliere semi di idee da luoghi casuali.


Uh, non ti conosco, ma guardo molto più favorevolmente agli sviluppatori che formulano progetti basati su fatti ed esperienze piuttosto che su cose che leggono su un blog una volta.
Aaronaught,

@Aaronaught: ovviamente la vera esperienza di progetti simili è infinitamente più preziosa delle idee ascoltate. Ma quando ti viene assegnato un progetto in un'area in cui non hai esperienza, cedi l'opportunità? (Supponendo che tu dica al datore di lavoro che non hai esperienza pertinente e che il datore di lavoro è d'accordo) Se decidi di prenderlo, come inizi? Inizi con le lezioni apprese da altre persone, altre aziende e così via. Non puoi iniziare dal nulla. Forse mi hai giustamente votato perché l'OP sembra intervistare una posizione senior, ma
ancora

(continua), per favore, non sottovalutare l'importanza delle lezioni apprese da altre fonti.
rwong

Abbastanza giusto, forse il downvote era immeritato (anche se non riesco a rimuoverlo in questa fase). Tuttavia, non credo davvero che un intervistatore farebbe una domanda del genere per conoscere ciò che leggi; se lo fossero, ti chiederanno semplicemente cosa leggi. Ciò che è importante è porre le domande giuste in modo da imparare come dovrebbe funzionare, non andare a metà in base a frammenti di informazioni sparse che potrebbero essere o meno correlate.
Aaronaught

0

Il punto dietro a questo tipo di domanda è quello di ottenere una visione della tua mente. Una domanda comune che uso è di chiedere ai programmatori di progettare un sistema in grado di simulare PacMan.

E sì, cerco prima i casi d'uso, mi mostra che la persona sta pensando. Quindi, per il multithreading, considerare prima le strutture di dati (quelle che potrebbero essere utilizzate per il problema, quindi quelle più appropriate o specifiche con i motivi della decisione).

Questo è un must per le posizioni di sviluppo senior. È sciocco e inutile per le persone sedersi e rispondere alle domande sulle implementazioni di ordinamento a questo livello di esperienza degli sviluppatori. La progettazione del sistema è ciò che mi aspetterei a questo livello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.