Sono solo io o questa è una domanda sconcertante nell'intervista tecnologica? [chiuso]


153

sfondo

In un'intervista tecnica mi è stato appena chiesto di scrivere un algoritmo per attraversare un "oggetto" (notare le virgolette) in cui A è uguale a B e B è uguale a C e A è uguale a C.

Questo è tutto. Queste sono tutte le informazioni che mi sono state fornite.

Ho chiesto all'intervistatore quale fosse l'obiettivo ma a quanto pare non ce n'era uno, solo "attraversare" l '"oggetto".

Non conosco nessun altro, ma questa mi sembra una domanda sciocca. Ho chiesto di nuovo, "sto cercando un valore?". No. Basta "attraversarlo".

Perché dovrei mai desiderare di scorrere all'infinito questo "oggetto" ?? Per sciogliere il mio processore forse ??

La risposta secondo l'intervistatore era che avrei dovuto scrivere una funzione ricorsiva.

OK, quindi perché non chiedermi semplicemente di scrivere una funzione ricorsiva? E chi scriverebbe una funzione ricorsiva che non finisce mai?

La mia domanda:

È una domanda valida per tutti voi e, in caso affermativo, potete fornire un suggerimento su cosa potrei perdere? Forse sto pensando troppo a risolvere i problemi del mondo reale. Ho programmato con successo per molto tempo ma questo processo di intervista tecnica mi fa sentire come se non sapessi nulla.


197
L'unica risposta corretta qui è "Non capisco la domanda".
user16764,

16
Bene, se davvero non hanno detto cosa sono A, B e C (come - sono oggetti) e mettono l'oggetto tra virgolette, sembrano avere una propria terminologia unica. Se avessero chiesto come attraversare un grafico a oggetti in cui l'oggetto A fa riferimento all'oggetto B che fa riferimento all'oggetto C che fa riferimento all'oggetto A sarebbe stato comprensibile, ma non so perché debba essere ricorsivo. A proposito, non è necessario che tu mantenga un elenco di oggetti già visitati. Ma sì, sarei preoccupato di lavorare per un'azienda che usa quel test - sembrano confusi.
psr

77
La domanda come descritta è priva di senso, così come la risposta. O stai ricordando male quello che hanno chiesto, o la persona che fa la domanda è un idiota e probabilmente stai meglio non lavorare con lui.
Mason Wheeler,

26
Perché le interviste agli sviluppatori devono essere dolorose? Non possiamo semplicemente sederci, guardare il codice a vicenda e discutere? Gli sviluppatori sapranno dove si trovano gli altri sviluppatori facendo questo e non ci vorranno 6 ore. I test di codice sono i peggiori. Non mi dispiace ammettere che faccio schifo nel fornire soluzioni ottimali mentre 3 sviluppatori che non ho mai incontrato mi guardano mentre scrivo.
Erik Reppen,

19
Ho dovuto controllare il tuo profilo per vedere se vivevi nella mia stessa area perché ho lavorato per un breve periodo in un lavoro in cui un collega che mi ha intervistato mi ha chiesto: "Sei orientato ai dettagli?" A cui ho risposto, "Puoi essere più specifico?" E la sua risposta, "Non posso spiegarlo, ma conosco una persona orientata ai dettagli quando vedo il loro lavoro". Ambiguità d'amore.
Jesse C. Slicer,

Risposte:


305

È una domanda sconcertante, non valida per l'intervista. L'intervistatore non è stato in grado di articolare chiaramente ciò che stava cercando e si aspettava che tu leggessi la sua mente invece di rispondere in modo significativo ai tentativi appropriati di chiarire l'affermazione del problema. Considerati fortunato di non aver ottenuto il lavoro.

A mio avviso, il significato del verbo "attraversare" che opera su un "oggetto" generico è ambiguo. Inizia a sostituire una varietà di nomi diversi per l'oggetto parola e diventa rapidamente evidente che l'attraversamento di un oggetto è significativo solo per un piccolo sottoinsieme dell'universo delle cose che sono oggetti.

Ha senso "attraversare" i nodi di un "albero binario". Non ha senso "attraversare" un "pagliaccio". Tuttavia, un oggetto può rappresentare un "clown" con la stessa facilità con cui può rappresentare un "albero binario".


9
Recentemente ho iniziato a sostituire i nomi in domande stupide con la parola "pagliaccio" +1 signore!
Rupjones,

108
"Clown traversal" - che meme eccezionale per "stupida domanda tecnica". Trasmetterla!
radarbob,

8
Hmm, posso attraversare var clown = {cappello: "con fiore", capelli: "rosso vivo", naso: "palla rossa", bocca: "Bocca rossa incorniciata in bianco", ...};)
mplungjan

37
Tutta la mia area di ricerca teorica sulla CS coinvolge la traversata iterativa di clown, zolla insensibile!

6
@JackManey: tutti sanno che i pagliacci devono essere attraversati in modo ricorsivo .
Adam Robinson,

39

Vedo tre possibilità qui.

  1. Era completamente incompetente. Non c'è molto altro da dire su quello.
  2. Stava deliberatamente rendendolo ambiguo, per vedere quanto faresti bene a fare domande per capire cosa avresti dovuto fare e cosa stava davvero cercando.
  3. Per qualsiasi motivo, aveva deciso che non voleva che tu fossi assunto, quindi ha posto una domanda che non aveva dato risposta. Quando le veniva chiesto delle tue abilità, saltava quella parte e diceva qualcosa del tipo: "Gli ho chiesto come attraversare un grafico a tre nodi, ed era completamente sconcertato - non aveva nemmeno idea di come per iniziare. Ovviamente è gravemente incompetente! Non dovremmo nemmeno considerare di assumerlo. "

7
"Gli ho chiesto come attraversare un grafico a tre nodi, ..." Se il post OP correggo, non si fa menzione di un grafico o di un nodo. solo "oggetti". Questa è una forma di "falsa testimonianza". Se scrive qualcosa del genere può essere perseguito!
Emilio Garavaglia,

9
Di solito usi pronomi femminili quando non viene menzionato il genere della persona?
Chan-Ho Suh,

8
@EmilioGaravaglia: prima di tutto, potrebbe non essere mai stato scritto. In secondo luogo, anche supponendo che venga scritto, senza dubbio non avrai mai accesso ad esso, solo una lettera "ci dispiace di informarti ...". Terzo, a meno che tu non abbia una registrazione dell'intervista, come dimostreresti che l'intervistatore non stava dicendo la verità? In conclusione: in teoria dovresti avere ragione, ma in realtà non c'è praticamente alcuna possibilità.
Jerry Coffin,

11
@ Chan-HoSuh: L'OP menziona il genere in uno dei suoi commenti.
Jerry Coffin,

4
@JerryCoffin Le mie scuse quindi.
Chan-Ho Suh,

32

Questa è solo un'ipotesi selvaggia, ma supponendo che l'intervistatore stia parlando di riferimenti a puntatori (ed è una domanda trabocchetto), la risposta è: non c'è nulla da attraversare, perché tutti i riferimenti puntano allo stesso oggetto.

Una funzione ricorsiva? Questo è per attraversare un albero. Non vedo nulla nella domanda originale che implichi che sta parlando di un albero.


28
Vai avanti. Ci sono aziende migliori per cui lavorare.
shufler,

7
Nah. È una causa persa. Se l'intervistatore pensava di avere torto, non avrebbe posto la domanda in primo luogo. Una volta mi è stato chiesto di scrivere un campione in qualsiasi lingua volessi; la persona che mi ha intervistato ha ipotizzato che lo pseudocodice fosse una scelta valida.
Robert Harvey,

8
@Robert Harvey: Cosa c'è che non va nello pseudocodice?
James,

6
@Robert Harvey: Per essere onesti, la maggior parte delle persone vuole capire come risolvere il problema per non scoprire se hai imparato la sintassi di un linguaggio particolare. È abbastanza comune che gli algoritmi siano specificati in pseudocodice.
James,

8
Qual è la differenza tra pseudocodice e Python? :)
David Robinson,

15

Anche se non posso parlare per questo specifico intervistatore, ho visto domande simili in un'intervista di posizione per sviluppatori front-end, quindi la lingua che userò in questo esempio sarà JavaScript.

Dato:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

Una tipica risposta errata può "attraversare" solo il primo livello e stampare / confrontare:

'value1'
2
[Object object]

Quindi, mentre codifico un esempio ricorsivo che attraverserebbe tutti i livelli, vorrei menzionare cose come:

  • Gestione circolare di riferimento
  • Come gestire le matrici (dovrebbero essere attraversate anche in modo ricorsivo?)
  • Le funzioni devono essere valutate e il loro valore di ritorno elaborato?
  • Per JavaScript: il prototipo deve corrispondere e anche le proprietà ereditate devono essere confrontate?

Quindi la "soluzione" che sto supponendo che l'intervistatore stesse cercando era di avviare una conversazione su una domanda apparentemente semplice che ha molti argomenti avanzati: ricorsività, puntatori / riferimenti, aspettative, ecc.


5
Questo ha senso in questo modo, WSKid. Sfortunatamente, nessuno di quel contesto è stato offerto.
Matt Cashatt,

3
È vero, questo sta davvero afferrando le cannucce. Avrebbero dovuto presentare un caso d'uso, o un esempio di 3 oggetti, o qualcosa per dare un indizio al problema reale.
WSkid,

1
Pensavo lo stesso, solo per gli attributi degli oggetti Python. Sapere in quale domanda si aspettavano una risposta sarebbe stato di grande aiuto, ma ciò potrebbe essere previsto dal contesto della posizione, ad esempio python dev, c # dev, javascript dev, php dev, ecc.
Ken

2
+1 per trovare un contesto in cui la domanda ha un senso!
Donal Fellows,

9

Alcuni intervistatori in particolare cercano di porre domande per vedere se il candidato è abbastanza intelligente e onesto da dare una di queste due risposte:

Non lo so.

o forse:

Non posso rispondere come indicato.

Non vogliono un candidato che accetti la pura BS come una specifica, che perda il tempo del suo datore di lavoro e paghi cercando di implementarlo.


6
Tutta la nostra vita siamo condizionati, in uno scenario come questa intervista, a essere in grado di fornire una risposta a una domanda. Se dire "Non lo so" (cosa che ho fatto, a proposito) era accettabile, allora avrei dovuto dirmelo anche prima. Un tentativo in buona fede di rispondere a una domanda di intervista non equivale necessariamente a come trattare una specifica o un insieme di requisiti inadeguati. E penso che sia questo il punto, queste interviste sono andate fuori rotta e in molti casi mancano il punto.
Matt Cashatt,

Una buona risposta. Tuttavia, non dimenticare che ci vuole molta esperienza per poterlo dire. Personalmente, posso dire che l'esperienza con le interviste è una parte vitale del lavoro. @MatthewPatrickCashatt se l'intervistatore non accetterà "Non lo so", quindi non molto di più per discutere dell'IMO.
Arin,

2
Le domande trabocchetto possono essere la pesca a traina o l'abiezione di incompetenza. In ogni caso, se un intervistatore pone domande a trabocchetto che non vuoi lavorare lì.
Ben Brocka,

7

Mi sembra che questa sia una domanda (scarsamente articolata) riguardante un elenco circolare collegato. Avrei probabilmente chiesto se fosse questo il significato (perché la risposta sarebbe sicuramente diversa da un'altra sopra, vale a dire che sono tutti riferimenti allo stesso oggetto).

Se questa era una domanda dell'elenco collegato, allora (in questo caso) hai un elenco collegato singolarmente, in cui il nodo finale punta all'altra estremità (anche se se fosse formulato come dici tu - allora potrebbe essere doppiamente collegato se A punta a B e C - ma un chiarimento da parte dell'intervistatore sarebbe di aiuto).

A -> B -> C -> A

Inoltre (e questo accade sempre), l'intervistatore potrebbe aver letto questa domanda, pensato che fosse una "buona" domanda, ma in realtà non conosceva la risposta (o nemmeno cosa significasse).


1
Grazie Maich - penso che il tuo ultimo punto sia il più probabile.
Matt Cashatt,

5

Parte della sfida qui è quella di ottenere maggiori dettagli ponendo domande specifiche per scoprire che esiste una struttura ad albero e quali sono i componenti coinvolti nel fare un attraversamento. Si potrebbe supporre che non ci siano molte altre strutture di dati che si attraversano oltre agli alberi, ma è un po 'un balzo nella mia mente.


1
Grazie JB King. È bene ricordare di porre domande. In questo caso particolare, l'ho fatto. In effetti, ho anche chiesto se fosse un albero e la risposta era no! Ma il tuo punto di vista è ben noto che è mia responsabilità distillare quante più informazioni possibili ponendo domande.
Matt Cashatt,

3

Potrebbero voler provare a capire come affrontare strani problemi. Ma in questo caso, non ha nulla a che fare con un "colloquio tecnico". Sembra più un colloquio psicologico.


5
Mi piacerebbe vedere un esempio di una delle loro specifiche tecniche per un progetto software.
Chuck D,

Se il colloquio è per un analista del sistema o una posizione simile, questo è del tutto appropriato: il tuo compito è aiutare i clienti a chiarire le loro domande, piuttosto che rispondere a loro.
reinierpost,

1
@ reinierpost - Non lo era.
Matt Cashatt,

3

Scrivi un algoritmo per attraversare un "oggetto" (nota le virgolette) dove A è uguale a B e B è uguale a C e A è uguale a C.

Sembra che la maggior parte delle persone supponga che A, B e C siano indicatori, ma potrebbero anche essere altrettanto facilmente pagliacci. (O membri della classe dei clown.) O potrebbero essere nomi di clown. (O nomi di classe. O sottoclassi della classe di clown.)

Avrei rovesciato le carte e chiesto se questo è il modo in cui in genere preparano le specifiche di sviluppo, e poi dire loro come potrei aiutarli con la fase di sviluppo delle specifiche dei requisiti. La scarsa comunicazione delle aspettative porta a un prodotto di lavoro scadente. O l'avrebbero preso o no, se non l'hanno preso, me ne andrei.


2

Mentre la domanda era formulata male e l'intervistatore era chiaramente inutile nel fornire qualsiasi direzione, ho un'idea leggermente diversa di ciò che mi è stato chiesto.

Penso che l'intervistatore stesse cercando una soluzione che attraversasse la struttura dell'oggetto usando un qualche tipo di riflessione. Le informazioni secondo cui i tre oggetti erano uguali avrebbero dovuto indurre una conversazione sul confronto dell'identità degli oggetti (A == B significa che gli oggetti sono realmente lo stesso oggetto in memoria) o il confronto sull'uguaglianza degli oggetti (A == B significa che i valori degli oggetti sono lo stesso).

Il fatto che l'intervistatore abbia affermato che la risposta era una funzione "ricorsiva", probabilmente indicava che era prevista una discussione sulla copia e sul confronto profondi rispetto a quelli superficiali.


2

Venendo molto tardi a questa festa, ma penso che l'intervistatore abbia erroneamente posto questa domanda:

Scrivi un algoritmo per attraversare un array e determinare che A è uguale a B e B è uguale a C e A è uguale a C, in quell'ordine.

Quindi la risposta corretta sarebbe un algoritmo ricorsivo.


1

In un'intervista tecnica mi è stato appena chiesto di scrivere un algoritmo per attraversare un "oggetto" (notare le virgolette) in cui A è uguale a B e B è uguale a C e A è uguale a C.

Il object oggetto in questione è costituito dalle parti A,B and Ce forma a triangle. La persona chiede semplicemente se l'oggetto (una raccolta) contiene tutte le parti uguali.

L'intervistatore vuole sapere se presentate le parti si A, B and Cpuò dire se sono tutte uguali senza rimanere bloccati in un ciclo infinito. Questa domanda è stupidamente semplicemente comprensibile e sono comunque riusciti a risolverlo nel chiederlo.

Sono tutti uguali quando A == B && B == C && A == C , ma ciò può essere semplificato solo A == B && A == C.

La semplicità della domanda ha provocato confusione ed è formulata in modo errato.

La formulazione corretta avrebbe dovuto essere.

Scrivi un algoritmo per controllare le parti di una raccolta per vedere se sono tutte uguali tra loro. Bisogna fare attenzione a non rimanere bloccati in un ciclo infinito. Per esempio; se le parti A sono uguali a B e B è uguale a C e A è uguale a C potrebbe causare problemi.


La risposta secondo l'intervistatore era che avrei dovuto scrivere una funzione ricorsiva.

Sì, puoi rispondere alla domanda are all my parts equalutilizzando le funzioni ricorsive. No, questa non è una soluzione efficiente.

EDIT : Dopo aver pensato. No, non è possibile verificare che una raccolta contenga tutte le parti uguali usando una funzione ricorsiva.

La soluzione più efficiente è la seguente.

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

Questo problema si verifica nella programmazione e chiedere a qualcuno di scrivere un algoritmo per testare una raccolta è perfettamente normale. A seconda del linguaggio di programmazione questo problema può spesso essere risolto con una sola riga di codice.

Formulare come hanno fatto e aspettarsi una risposta sbagliata non è normale. Da quando questa domanda è stata posta un anno fa. Spero davvero che tu abbia finito per lavorare altrove. Sarei interessato a sentire dal post originale come vanno le cose per lui / lei.


2
Le cose sono andate alla grande: sono andato più veloce che potevo da quella compagnia e da allora sono stato felice.
Matt Cashatt,

0

Se fosse una domanda di intervista a Java, in tal caso, potrebbe voler mettere alla prova le tue abilità con l'override di "hashcode" e "uguale".

Dovresti sovrascrivere questi due metodi e utilizzare il metodo degli uguali sovrascritti per interrompere la ricorsione quando si confronta A con A.

Senza eseguire l'override, il confronto per "oggetto" da A a B, da A a C e da A ad A risulterà tutto vero, ma dopo l'override, solo quando l'oggetto A rispetto all'oggetto A restituirà vero dove altri confronti restituiranno falso.

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.