È una cattiva pratica del colloquio avere candidati che scrivono un'implementazione di un elenco collegato? [chiuso]


43

Leggendo questo sito e SO ho visto molte storie di domande e risposte di interviste dicendo che un candidato doveva implementare da zero un elenco collegato. Di solito si tratta di un esercizio "gimme" per la programmazione di candidati come la scrittura di FizzBuzz. L'idea è che se il candidato non può farlo, non può programmare e dovrebbe essere respinto quasi immediatamente.

Tuttavia, non posso fare a meno di pensare che questa potrebbe essere una cattiva pratica per i seguenti motivi:

  • I moderni linguaggi di livello superiore come C # e Python utilizzano in modo nativo elenchi estensivi; scrivere l'oggetto della tua lista collegata sarebbe richiesto solo in circostanze insolite e anche allora probabilmente sconsiderato.
  • I linguaggi di livello inferiore come C ++ hanno librerie standard con iteratori / contenitori di elenchi e oggetti.
  • Alla luce dei primi due punti, i programmatori possono passare anni senza nemmeno pensare all'implementazione di un elenco (collegato, doppiamente collegato, ecc.). Alcuni potrebbero addirittura non vedere queste cose dai tempi del college.
  • Anche la potenza di calcolo non è il fattore che era anni fa, quindi l'efficienza tramite puntatori non è il problema che era (in generale).
  • Una semplice ricerca sul Web di qualcosa come "esempio di elenco collegato" porterebbe molti esempi di codice che potrebbero essere semplicemente memorizzati e respinti, senza indicare la vera competenza del richiedente.

Dovrei dire che l'uso di un elenco collegato per portare a domande / discussioni aperte sulle capacità di problem solving / pensiero critico dei candidati è probabilmente una buona pratica di intervista. In qualsiasi modo un intervistatore può davvero vedere com'è un candidato e come ritiene che sia di grande beneficio.

Penso che questo approccio binario di "nessun codice elenco collegato, nessun lavoro" per i programmatori che lavorano su un desktop o un'applicazione web sia un po 'obsoleto. Potrebbe anche essere abbastanza dannoso; un candidato che non ricorda come lavorare correttamente con il capo di un elenco potrebbe essere un programmatore e un collega altrimenti eccellente e perdersi nel mix. Pensieri?

EDIT : Ci sono molti (buoni) commenti che suggeriscono che se questa è una domanda buona o cattiva da fare dipende dal contesto del lavoro. Sono pienamente d'accordo, quindi vorrei riformulare questa domanda: l'implementazione di un elenco collegato è una domanda di intervista comune per una vasta gamma di lavori di codifica, simile a domande come FizzBuzz o la scrittura di una funzione ricorsiva per il calcolo dei fattoriali. Questa domanda ha abbastanza utilità per essere usata comunemente per valutare i candidati alla programmazione su tutta la linea? O dovrebbe essere considerata una cattiva domanda da porre ad eccezione delle posizioni "Senior Developer, Embedded Linked Lists Team"?


11
Per quale posizione è? Che tipo di lavoro è questo? In quale dominio si trova?
Thomas Owens

1
Vedo le tue modifiche, ma comunque - che tipo di lavoro è questo? È uno stage? Un lavoro entry level? Un lavoro intermedio? Stai cercando di assumere un programmatore o un ingegnere o uno scienziato? In quale dominio si trova? Sarebbero mai in una posizione tale da dover ruotare i propri algoritmi o strutture dati per qualsiasi motivo?
Thomas Owens

3
"C # (...) usa in modo nativo elenchi estensivamente" e "l'efficienza tramite puntatori non è il problema che era un tempo": sai che questi elenchi nativi non sono elenchi collegati ma piuttosto elenchi basati su array? Le matrici tendono a funzionare meglio a causa della memorizzazione nella cache. In effetti, IIRC il framework .NET non aveva nemmeno elenchi collegati fino alla 2.0. Sono abbastanza sicuro che la maggior parte dei programmi C # là fuori non usa elenchi collegati.
Alex ten Brink,

1
@AlextenBrink È interessante notare che penso che ciò significhi che la conoscenza dell'elenco collegato è ancora meno importante per C #. Perché implementare tu stesso una struttura di dati (con possibili bug) quando posso usare una struttura migliore integrata direttamente nella lingua?
joshin4colours,

La domanda che ho in mente è "perché anche solo considerare l'utilizzo di una struttura di dati che è quasi sempre inferiore a un'altra struttura di dati"? Gli elenchi collegati sono più lenti per la maggior parte delle operazioni rispetto agli elenchi basati su array; l'unica cosa a cui gli elenchi collegati sono utili è l'eliminazione in tempo costante, ma ci sono pochissime situazioni in cui è necessario. Nota che non sto parlando se sarebbe una buona struttura di dati per una domanda di intervista: i concetti coinvolti potrebbero essere un buon test, non lo so.
Alex ten Brink,

Risposte:


52

Se rispondere alla domanda ti dice cosa vuoi sapere su un candidato, allora è una buona domanda per il colloquio. Se non ti dice questo, è una brutta domanda.

Domande semplici come FizzBuzz hanno uno scopo specifico. Se un candidato non può codificare FizzBuzz, semplicemente non può codificare e puoi terminare l'intervista in anticipo. Valuterei l'implementazione di un elenco collegato solo leggermente più difficile, ma può iniziare una conversazione sulle strutture di dati in generale che rivelerà molto.

Ricorda solo che nessuna singola intervista ti dirà tutto ciò che vuoi sapere. Devi davvero avere un gruppo di domande pronto. Dovresti porre domande in una sequenza dalla più semplice alla più difficile in modo da poter trovare il limite di ciò che il candidato conosce. Se fai una domanda e loro la inchiodano, non sai ancora cos'altro fanno o non sanno.


Per quanto riguarda la tua modifica:

Questa domanda ha abbastanza utilità per essere usata comunemente per valutare i candidati alla programmazione su tutta la linea? O dovrebbe essere considerata una cattiva domanda da porre ad eccezione delle posizioni "Senior Developer, Embedded Linked Lists Team"?

Penso che sia una buona domanda per scopi generali che potrebbe essere utilizzata per valutare praticamente qualsiasi candidato alla programmazione. Deve solo far parte di un gruppo più ampio di domande. Sarebbe un ottimo rompighiaccio per molti tipi di posizioni (anche se il candidato non può implementare una lista collegata da zero, forse può spiegare come ne ha usata una prima e quali sono le funzioni chiave) o l'inizio di una lunga sequenza di domande più avanzate per la posizione "Senior Developer, Embedded Linked Lists Team".


19
Il tuo primo paragrafo è metà della storia. L'altra metà è: se ti viene posta la domanda, il candidato desidera lavorare per te, quindi è una buona domanda per il colloquio. Se il candidato non vuole lavorare per te, è una brutta domanda.
Ruakh,

5
Non puoi trovare il limite di ciò che il candidato conosce in quel modo, perché non hai modo di affermare che ciò che ritieni "complicato" e "di base" si applichi nello stesso ordine al tuo candidato. LinkedList è probabilmente una base per un programmatore universitario, ma molto probabilmente un programmatore autodidatta non ha mai dovuto scriverne uno. Dopo tutto, probabilmente ha scritto "LinkedList <string> ..." ogni volta che ne aveva bisogno. Significa che la sua conoscenza è ancorata al livello di "linkList"? Potrebbe essere un esperto in materie più complesse ed essere in grado di apprendere LL in 5 minuti su Google.
Sylverdrag,

1
@Sylverdrag Ecco perché ho detto che hai bisogno di più di una domanda. Una volta trovato il limite delle loro conoscenze sugli elenchi collegati, passa a un altro argomento.
Bill the Lizard,

@ruakh Questo ha sicuramente un ruolo. Se ogni singola domanda che mi viene posta in un'intervista riguarda aspetti banali delle app CRUD (ovvero, non penso che potrei imparare qualcosa di nuovo in quella società), allora non mi entusiasmerebbe lavorare lì.
Bill the Lizard,

34

Mi sono perso lavori puramente perché la mia mente si è oscurata su semplici puzzle come questo. Ho fatto brillantemente anche su questi enigmi in altre interviste: so come implementare un elenco collegato in un ambiente senza pressione. Non ho mai avuto lamentele riguardo alle mie capacità da qualcuno con cui ho lavorato, quindi forse non dovrei pensare di essermi perso un lavoro, dovrei pensare che mi sono perso.

Quindi sì, penso che sia una pratica discutibile al massimo, ma lo capisco. Ho anche considerato la possibilità che non sia colpa della domanda, ma dell'interrogatore, per averla resa una situazione ad alta pressione.

Personalmente, preferisco porre domande aperte su un problema che il candidato ha già risolto - recentemente, se possibile, e che copre sia i problemi di codifica che quelli di processo. Se riescono a portare esempi di codice, fantastico.


Devono chiedere qualcosa, che si tratti di puzzle o altro. Qualsiasi domanda può causare l'interruzione della persona.
Firma l'

2
@pdr - "Se riescono a portare esempi di codice, fantastico." Se hanno scritto i campioni di codice che hanno portato, senza prezzo.
robrambusch,

4
Se la mente di qualcuno si oscura sull'implementazione di un elenco collegato e non riescono a risolverlo con un piccolo suggerimento o si frustrino facilmente, penso che sarebbe qualcuno a cui non dispiacerebbe perdere.
Bill K,

1
@pdr - "E se non ci riesci, per quanto tempo pensi di avere il lavoro?" - Per tutto il tempo necessario per licenziarli in qualsiasi regime HR subisca. Quindi c'è il costo aggiuntivo di riavviare la ricerca del candidato. Inoltre, il costo opportunità insito nel fatto che la persona successiva che avresti intervistato potrebbe essere diventato il perno tecnico dell'intero dipartimento. Ma ovviamente ora non sono disponibili perché hai assunto la persona sbagliata e hanno trovato un altro lavoro.
Robrambusch,

1
@robrambusch: ha mostrato eccellenti capacità di problem solving e ha parlato bene della struttura delle classi. Ma non ha scritto codice. Per quanto riguarda la scrittura di codice in un'intervista, sì, questo può essere utile, ma sostengo che posso imparare di più su di te in un'ora di parlare con te dei problemi che hai risolto piuttosto che darti un singolo problema inventato che richiede un ora per risolvere.
pdr

25

Bisogna definire il tipo di lavoro di programmazione. Se sei interessato allo sviluppo di compilatori e algoritmi, dovresti aspettarti domande su tali aspetti. Se sei in applicazioni di tipo line-of-business e ti aspetti che il candidato faccia domande CRUD, allora potrebbe essere sufficiente la conoscenza del concetto (senza scrivere un programma). Oggi, la conoscenza delle diverse tecnologie necessarie per svolgere il lavoro appositamente nel tipo di applicazioni LOB sostituisce la necessità di algoritmi accurati.


Esattamente. L'anno scorso ho scritto un componente di ordinamento genetico per scopi generici che ha anche usato un po 'di ricottura simulata (per creare programmi di classe) e ho usato diverse strutture di dati "avanzate" per farlo funzionare. Non avevo bisogno di codificarne uno singolo. Se il framework .Net non aveva quello di cui avevo bisogno, avrei usato C5 o Power Collections.
ElGringoGrande,

4
D'accordo, scrivo app LOB tutto il giorno, in passato ho scritto implementazioni di elenchi collegati ... al college ... a COBOL. Potrei farlo di nuovo, ma perché? Molti sviluppatori LOB competenti probabilmente non ne hanno mai scritto uno e non ne avranno mai bisogno.
CaffGeek,

1
Concordato in generale, ma un elenco collegato non è nulla di esotico, davvero. Sono le basi, solo un livello dopo FizzBuzz.
Francesco De Vittori,

1
@FrancescoDeVittori: Ma a volte non è questo il problema? Qualcuno ti dà un problema da risolvere. Sembra abbastanza semplice, ma non l'hai mai fatto prima, quindi il tuo cervello inizia a correre, cercando di trovare i gotcha, la cosa che ti costerà l'intervista se non ci pensi. E non è lì, ma questo ti distrae dal risolvere il problema reale.
pdr

@FrancescoDeVittori: puoi darci un paio di esempi di domande di intervista non di base? Ne ho bisogno per l'auto-miglioramento. Grazie.
Den

9

La mia risposta è "Dipende". Farei questa domanda se un candidato ha elencato C o C ++ nel suo curriculum. Chiedere di implementare un elenco collegato è un buon test per la comprensione dei puntatori che è assolutamente essenziale per un programmatore C o C ++.

D'altra parte, se un candidato non afferma di conoscere C o C ++, non gli chiederei di implementare un elenco collegato, ma prenderei in considerazione la possibilità di porre domande al riguardo. Spiegare ad alto livello come funziona un elenco collegato. Qual è la complessità dell'aggiunta di un elemento in testa alla lista? La coda della lista? Inserire un elemento in mezzo all'elenco? Quando useresti un elenco anziché un array? Questi sono concetti fondamentali della struttura dei dati che, IMHO, ogni programmatore dovrebbe conoscere.


7

Non la considero una cattiva domanda per l'intervista. Molta comprensione e programmazione della struttura dei dati inizia con una comprensione davvero buona degli elenchi collegati. Detto questo, ci sono alcuni avvertimenti:

1) È una domanda di tipo frizzante. Stai solo convalidando qualcosa di molto semplice: la persona capisce un elenco collegato. Chiedi e vai avanti.

2) Esiste la sfida con le liste collegate che le lingue che sono molto adatte a mostrare la tua comprensione dei concetti delle liste collegate (ad esempio, C) potrebbero non essere le stesse della lingua con cui lavoreranno sul lavoro. Puoi dimostrare la comprensione di base in qualsiasi lingua con strutture, ovviamente, ma chiedere a un candidato di implementare nuovamente un elenco collegato in Erlang senza usare [] non è la stessa sfida e non ti dirà la stessa cosa sulla comprensione di un candidato come chiedere loro di farlo in C. Chiedere loro di farlo in C se il lavoro è attorno a Java manca un po 'anche il punto.

3) Tenendo presente ciò e le sfide generali della "programmazione della lavagna", quando faccio questo tipo di domande accetterei pseudocodici o diagrammi fintanto che dimostrano la comprensione dei principi fondamentali. Non chiedo alle persone di scrivere codice su una lavagna sintatticamente e logicamente perfetta, soprattutto se possono quindi voltarsi e identificare eventuali problemi logici quando viene chiesto di guardarli di nuovo. YMMV.


6

Durante le interviste, mi veniva spesso chiesto l'implementazione di elenchi collegati e alcuni algoritmi incentrati su elenchi collegati. Ho risolto la maggior parte di loro e alcuni di loro mi hanno richiesto di esercitare un po 'i miei neuroni.

Se dovessi mai fare un colloquio, sceglierei una sorta di implementazione di una lista collegata, non per testare quanto una persona è brava nella codifica, ma per verificare quanta attenzione una persona presta ai dettagli. Chiunque può scrivere un elenco collegato, ma sono i casi limite che anche alcuni buoni programmatori falliscono. Non chiedetegli: Write a code for linked list in C/C++. Chiedigli di scrivere un elenco di link generici in C (non C ++), ecc.

Risolvi il problema e metti alcune altre condizioni nell'elenco collegato e avrai una buona domanda da porre. Alcune persone sono destinate a fare errori allora.


2
Non
esiste

1
Sul serio? Pensavo che i voidpuntatori fossero lì solo per questo ... :) Il primo link che ho trovato su Google per "elenco di link generici in c" era: daniweb.com/software-development/c/threads/109260 e un altro è stato il colloquio tecnico .com / ... Pensavo che tutti lo sapessero!
c0da

Non ho testato questi codici, ma ho questo tipo di elenco collegato in precedenza, e sicuramente ha funzionato bene ...
c0da,

Anche scrivere un elenco generico di link in C # ha uno o due "gotchas" (ad esempio confrontare elementi di tipo T non è ovvio; cioè. (T v1, T v2) => {return v1 == v2;} non verrà compilato a meno che tu non abbia vincoli di classe o usi l'operatore di uguaglianza predefinito)
Steven Evers,

@ c0da A mio avviso, un elenco che utilizza i voidpuntatori non è generico, ma solo generale per qualsiasi momento. Possono contenere qualsiasi tipo di cose e persino mescolarle tutto ciò che vogliono - e esattamente questo lo rende non generico per me. È come usare il tipo base objectin linguaggi orientati agli oggetti ...
colpire il

5

Nei miei circa 10 anni finora programmando professionalmente (e circa altri dieci anni come hobby), non credo di aver mai avuto bisogno di implementare un elenco collegato. Se qualcuno mi chiedesse di farlo durante un'intervista, potrei rispondere chiedendo se è qualcosa che farò regolarmente sul posto di lavoro.

Di sicuro, non ci sono posti di lavoro quasi certamente là fuori dove sarà necessario scrivere le implementazioni più o meno-camera bianca di algoritmi comunemente noto - come implementare una lista collegata da zero. Ma per la maggior parte dei lavori di programmazione, quale valore specifico ha per l'azienda che un candidato può farlo durante un colloquio? È davvero così importante in un tale contesto che il candidato fornisce un'implementazione perfetta che gestisce correttamente i casi limite, segnala i guasti secondo la pratica comune nella lingua o nella struttura e così via? O puoi trascurarlo e invece concentrarti su come affrontano effettivamente un problema che forse non hanno affrontato in 10-20 anni?

Quando ho intervistato per il mio attuale lavoro, ho avuto pochissima esperienza con lo stack tecnologico in uso presso l'azienda. Ora, qualche anno dopo, ho regolarmente dei colleghi che vengono da me e mi pongono domande non solo sui prodotti, sulla loro implementazione e sugli standard da essi implementati, ma anche su problemi di programmazione molto più generali (proprio ieri mi è stato chiesto cosa le implicazioni erano di una dipendenza circolare in un vincolo predefinito in SQL Server nel contesto di una particolare tabella e del suo utilizzo nel nostro caso - ragionando attraverso di essa, si è scoperto che non c'erano implicazioni in quel caso particolare). Non avevo nemmeno bisogno di una nuovissima implementazione dell'elenco di collegamenti.

Poni domande pertinenti al lavoro che è probabile che venga assegnato al candidatoe prova ad avere un'idea di come si sentono nel raccogliere nuove conoscenze. Come farebbero a capire il significato di una sintassi oscura che non hanno mai visto? (Ad esempio, se sei un negozio C, potresti provare una domanda riguardante le trigrafi.) Per una posizione di programmazione, leggono regolarmente o contribuiscono a forum come Stack Overflow? Se gli fosse stato chiesto di eseguire alcune attività in un linguaggio di programmazione o in un framework con cui hanno poca o nessuna esperienza (diciamo, se sei principalmente un negozio Java, che dire di Clojure o .NET?), Come si avvicinerebbero al problema? Forse prendi un vero bug dal tuo bug tracker (potrebbe anche essere uno che è stato risolto da tempo) e chiedi loro come si avvicinerebbero in termini generali a risolverlo, ed essere pronto a spiegare le parti rilevanti del prodotto in questione.

Se il candidato è in grado di gestire tipi di problemi rilevanti per il business case e ha un buon atteggiamento verso l'apprendimento di cose nuove, è probabilmente un indicatore molto più adatto di quella particolare posizione piuttosto che essere in grado di fornire risposte predefinite a domande ben note, se quelle le domande riguardano FizzBuzz, le liste collegate o qualcos'altro. Inserisci quanto bene il candidato si adatta alla squadra e penso che tu sia su un terreno abbastanza sicuro.


4

Ovviamente la maggior parte delle persone non avrebbe mai bisogno di implementare un elenco collegato, ma per implementarli da zero sarà probabilmente necessario gestire correttamente i puntatori. La loro idea è quindi che la formazione di un modello mentale coerente per i puntatori sia correlato alla competenza linguistica, alla comprensione di ciò che accade a un livello (astratto) della macchina e alla capacità di astrarre in generale.

Non sto dicendo che questa sarebbe necessariamente la misura migliore, ma solo che esiste una correlazione.


4

Inizi dicendo che sono domande "dammi", ma poi fai notare che le persone comprensibilmente non saranno in grado di farle. Non ho capito bene.

Ecco come ci penso:

  • Raramente c'è bisogno di scriverne uno, come dici tu, quindi le persone se ne saranno facilmente dimenticate.
  • Non sono incredibilmente difficili da scrivere.
  • I concetti usati per scriverli possono essere considerati fondamentali.
  • Sono usati incredibilmente spesso (anche se non lo si è a conoscenza).

Penso che li renda buone domande da porre. Se sei preoccupato per il loro pre-studio per l'intervista, allora lancia un elenco. Invitali a scrivere in modo circolare e chiedi qual è il tempo di esecuzione asintotico della loro implementazione. O far loro scrivere un'altra struttura di dati comune e / o rapida ... Un albero di ricerca binario? Una coda (FIFO)? Una pila (FILO)? Una O(n)coda prioritaria ingenua ? Molte persone che conosco pensano che un BST sia O(log n) solo perché è un albero .

Se siete alla ricerca di qualcuno che lavorerà al metallo, e ha bisogno di una molto solida base in strutture di dati ... questi possono anche essere di gran lunga troppo banale per i candidati che stai cercando di assumere.

Ciò presuppone, naturalmente, che si desidera un sviluppatore che abbia le basi / i fondamenti delle strutture di dati e che la loro posizione trarrebbe beneficio da questi fondamentali. Se vuoi qualcuno che possa mettere insieme una pagina asp in pochi secondi, intervista per quello. Il punto non è quello di scegliere una domanda di intervista perché tutti gli altri lo fanno, ma di sceglierne una che misura le abilità che stai cercando. Personalmente, penso che le domande relative alle strutture dei dati siano valide, con link o no.


Non è confuso in pratica. FizzBuzz è una domanda ancora più semplice e tuttavia i candidati non possono nemmeno iniziare a rispondere. Lo stesso vale per gli elenchi collegati. È un mistero del mondo della programmazione.
joshin4colours,

@ joshin4colours: No, sono confuso riguardo alla domanda. Inizialmente l'OP afferma che le domande di LL sono quelle di dammi, ma poi continua a elencare i punti sul perché uno sviluppatore qualificato fallirebbe la domanda.
Steven Evers,

3

Questa domanda ha abbastanza utilità per essere usata comunemente per valutare i candidati alla programmazione su tutta la linea?

No, assolutamente no. A seconda di come è formulato, ciò che ti dirà varierà da "questo candidato sa come progettare un elenco collegato" a "questo candidato può programmare un elenco collegato in lingua X". Se chiedi lo pseudocodice, tenderà di più verso il primo. Se chiedi un'implementazione in un particolare linguaggio, otterrai di più nella loro comprensione del linguaggio (specialmente con C e C ++, dove puoi trattare puntatori, riferimenti e strutture).

Andrei persino al punto di dire che non è possibile valutare tutti i candidati usando le stesse domande. È necessario personalizzare le domande del colloquio per valutare le competenze che si stanno cercando nella posizione.

Se la persona sarà in grado di scrivere codice, penserei di includere un algoritmo e / o una domanda sulla struttura dei dati, purché sia ​​rilevante per la posizione. Proverei a scegliere qualcosa che potrebbe essere stato discusso o usato prima. Mi concentrerei anche su cose diverse dalla semplice implementazione di detti algoritmi e strutture di dati, come il tempo di esecuzione e il consumo di memoria (cose come la notazione big-O). Questi concetti sono rilevanti non solo per la creazione della struttura dei dati, ma anche per la scelta dell'implementazione più adatta (come una ArrayListcontro una LinkedListad esempio).


3

Non credo che per un normale lavoro di programmazione dovrebbe essere una domanda che elimina un candidato. Ma è bello vedere se hai a che fare con un programmatore veramente anziano o qualcuno che ha appena fatto la codifica delle scimmie per molti anni. E anche così, non dovrebbe essere un criterio fondamentale per la scelta di un programmatore. Forse è un grande programmatore con cattiva memoria e non ha letto le parole "elenco collegato" per anni (o non ricorda il nome) ma può ancora fare buone app.

Quindi, come alcuni hanno detto, se sta per essere un lavoro che deve lavorare con un elenco collegato e un sacco di algoritmi elaborati, ecc. Allora ok. È se per i soliti dati di input in un modulo, convalidare e mostrare è un po 'inutile e ingiusto.


2

Penso che questo sia un cattivo esempio di una domanda di intervista, ma per una ragione diversa. Un elenco collegato è un concetto così semplice che sapere cos'è è sapere come implementarlo. Se la persona non sa cosa sia un elenco collegato, allora devi spiegare come funziona e, nel farlo, dai via la risposta senza scoprire nulla sul fatto che sappiano o meno come risolvere i problemi . Quindi la domanda è riducibile a "sai già cos'è un elenco collegato e come funziona?", Che non ti dice nulla di utile sulla loro idoneità come programmatore.


2
Le domande più frequenti sono anche soggette al gioco di persone che sono brave a memorizzare.
Paul Nathan,

1
Se devi spiegare come funziona un elenco collegato a un candidato, probabilmente non dovresti assumerlo per fare la programmazione ...
Dima,

2

Scrivere un'implementazione di una lista collegata è una buona domanda per il colloquio, perché rivelerà molto sul modo di scrivere del codice:

  • Sa cos'è un'API? Può usare il codice di altre persone? Può scrivere codice in modo che altri possano usarlo?

  • Sa cos'è un elenco collegato? Conosce collezioni, strutture di dati, algoritmi?

Se non sa nemmeno quali metodi dovrebbe offrire un elenco collegato, sai che probabilmente non ne ha mai usato uno o sa quando usarne uno.

  • Come gestisce il problema? Comincia prima con un'analisi, una piccola specifica, alcuni test in anticipo? O inizia a tagliare via felicemente?

  • Gestisce i casi limite? Che ne dici di rimuovere l'ultimo nodo dall'elenco collegato? Cosa succede se qualcuno prova ad aggiungere un riferimento alla stessa lista collegata alla lista collegata, e quindi elimina il tutto?

  • Gestisce le eccezioni? Ogni linguaggio di programmazione ha le proprie convenzioni per la gestione delle eccezioni: in Java, ci si aspetta che una LinkedList generi una NoSuchElementException quando si esegue getFirst () in un elenco vuoto. Altre lingue potrebbero restituire un indefinito, -1 o una costante.


In un esercizio di programmazione di interviste, a meno che non sia specificamente richiesto, salterei tutti i tipi di gestione dei casi limite, gestione degli errori, ecc., Oltre a quanto necessario per una prova di concetto. MA vorrei anche chiarire che è una scelta che sto facendo. I vincoli durante un'intervista di un'ora o anche di poche ore sono molto diversi dalla situazione in cui stai effettivamente lavorando a qualcosa che vedrà un uso reale.
un CVn del
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.