Sono solo io o questa è una sconcertante domanda di un'intervista tecnica? [chiuso]

153

Sfondo

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

Questo è tutto. Questa è tutta l'informazione che mi è stata data.

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

Non so di nessun altro, ma mi sembra una domanda sciocca. Ho chiesto ancora: "Sto cercando un valore?". No. Basta "attraversarlo".

Perché mai dovrei voler passare all'infinito da 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 scriverà una funzione ricorsiva che non finisce mai?

La mia domanda:

Questa è una domanda valida per il resto di voi e, in caso affermativo, potete fornire un suggerimento su cosa potrei mancare? Forse sto pensando troppo a risolvere i problemi del mondo reale. Sono stato codificato con successo per molto tempo ma questo processo di intervista tecnica mi fa sentire come se non sapessi nulla.

    
posta Matt Cashatt 12.04.2012 - 23:10
fonte

13 risposte

305

È una domanda di intervista sconcertante e non valida. L'intervistatore non era in grado di articolare chiaramente ciò che stava cercando e si aspettava che leggessi la sua mente invece di rispondere in modo significativo ai tuoi tentativi appropriati di chiarire la dichiarazione del problema. Considerati fortunato che non hai ottenuto il lavoro.

Il significato del verbo "traverse" che opera su un generico "oggetto" è ambiguo, secondo me. Inizia a sostituire una varietà di nomi diversi per la parola oggetto e diventa subito evidente che l'attraversamento di un oggetto è significativo solo per un piccolo sottoinsieme dell'universo di cose che sono oggetti.

Ha senso "attraversare" i nodi di un "albero binario". Non ha senso "attraversare" un "pagliaccio". Tuttavia, un oggetto può rappresentare altrettanto facilmente un "pagliaccio" in quanto può rappresentare un "albero binario".

    
risposta data 12.04.2012 - 23:46
fonte
39

Posso vedere tre possibilità qui.

  1. Era completamente incompetente. Non c'è molto altro da dire su questo.
  2. Stava deliberatamente rendendolo ambiguo, per vedere quanto avresti fatto nel fare domande per capire cosa avresti dovuto fare e cosa stava veramente cercando.
  3. Per qualsiasi motivo, aveva deciso che non voleva che tu venissi assunto, così ha fatto una domanda che non poteva essere data come risposta. Quando le è stato chiesto quali sono le tue abilità, salta su quella parte e dice qualcosa del tipo: "Gli ho chiesto come attraversare un grafo a tre nodi, e lui era completamente stumped - didn" Ho anche un indizio su come iniziare, ovviamente è grossolanamente incompetente! Non dovremmo nemmeno prendere in considerazione l'assunzione di lui. "
risposta data 13.04.2012 - 00:28
fonte
32

Questa è solo un'ipotesi, ma se si assume che l'intervistatore parli 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 iniziale che implicherebbe che stia parlando di un albero.

    
risposta data 12.04.2012 - 23:13
fonte
15

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

Data:

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

Una tipica risposta errata potrebbe "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 riferimento circolare
  • Come gestire gli array (dovrebbero essere anche ricorsivamente attraversati?)
  • 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 stia per iniziare è stata avviare una conversazione su una domanda apparentemente semplice che ha molti argomenti avanzati: ricorsività, puntatori / riferimenti, aspettative, ecc.

    
risposta data 12.04.2012 - 23:27
fonte
9

Alcuni intervistatori cercano specificamente 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, e sprecano il tempo del loro datore di lavoro e pagano cercando di implementarlo.

    
risposta data 13.04.2012 - 07:10
fonte
7

Mi sembra che questa sia una domanda (poco articolata) riguardante una lista circolare circolare. Avrei probabilmente chiesto se fosse questo che intendevo (perché la risposta sarebbe sicuramente diversa da un'altra sopra la quale è dire che sono tutti riferimenti allo stesso oggetto).

Se si trattava di una domanda di elenco collegato, allora tu (in questo caso) hai un elenco linkato singolarmente, dove il nodo finale punta all'altro capo (anche se è stato formulato come dici tu - allora può essere doppiamente collegato se A punti a B e C - ma il chiarimento sulla parte intervistatore potrebbe aiutare questo).

A - > B - > C - > A

Inoltre (e questo accade sempre), l'intervistatore potrebbe aver letto questa domanda, ritenendo che fosse una domanda "buona", ma in realtà non conosceva la risposta da sé (o anche che cosa intendesse).

    
risposta data 13.04.2012 - 03:16
fonte
5

Parte della sfida qui è ottenere maggiori dettagli ponendo domande specifiche per scoprire che esiste una struttura ad albero e quali sono le componenti coinvolte nel fare un attraversamento. Ci può essere stato il presupposto che non ci siano molte altre strutture di dati che si attraversano oltre agli alberi, ma questo è un po 'un salto nella mia mente.

    
risposta data 12.04.2012 - 23:42
fonte
3

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

    
risposta data 12.04.2012 - 23:39
fonte
3

Write an algorithm to traverse an "object" (notice the quotes) where A is equal to B and B is equal to C and A is equal to C.

Sembra che la maggior parte delle persone supponga che A, B e C siano dei puntatori, ma potrebbero anche essere semplicemente dei clown. (O membri della classe clown.) Oppure potrebbero essere nomi di clown. (O nomi di classe o sottoclassi della classe clown.)

Avrei trasformato le tabelle e chiesto se questo è il modo in cui tipicamente preparano le specifiche di sviluppo, e poi dire loro come potrei aiutarle con la fase di sviluppo delle specifiche dei requisiti. Una scarsa comunicazione delle aspettative porta a un prodotto di lavoro scadente. O l'avrebbero capito o no, se non l'avessero capito, me ne andrei.

    
risposta data 13.04.2012 - 19:25
fonte
2

Mentre la domanda era formulata male e l'intervistatore era chiaramente inutile nel fornire qualsiasi direzione, ho un approccio leggermente diverso su ciò che veniva chiesto.

Penso che l'intervistatore stia cercando una soluzione che abbia attraversato la struttura dell'oggetto usando un tipo di riflessione. L'informazione che i tre oggetti erano uguali avrebbe dovuto provocare una conversazione di confronto tra identità dell'oggetto (A == B significa che gli oggetti sono in realtà lo stesso oggetto in memoria), o confronto di uguaglianza di 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 tra profondità e profondità.

    
risposta data 13.04.2012 - 17:17
fonte
2

Sono arrivato molto tardi a questa festa, ma penso che l'intervistatore abbia posto questa domanda in modo errato:

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 questo ordine.

Quindi la risposta corretta sarebbe un algoritmo ricorsivo.

    
risposta data 30.10.2013 - 22:49
fonte
1

I was just asked in a tech interview to write an algorithm to traverse an "object" (notice the quotes) where A is equal to B and B is equal to C and A is equal to C.

Il object in questione è costituito dalle parti A,B and C e forma un triangle . La persona sta semplicemente chiedendo se l'oggetto (una raccolta) contiene tutte le parti uguali.

L'intervistatore vuole sapere se presentato con parti A, B and C puoi dire se sono tutti uguali senza rimanere bloccati in un ciclo infinito. Questa domanda è stupidamente semplice da capire e comunque sono riusciti a fartelo chiedere.

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

La semplicità della domanda ha provocato confusione, ed è veramente formulata male.

La dicitura corretta avrebbe dovuto essere.

Write an algorithm to check the parts of a collection to see if they are all equal to each other. Care must be given not to get stuck in an infinite loop. For example; if parts A is equal to B and B is equal to C and A is equal to C could cause problems.

The answer according to the interviewer was that I should have written a recursive function.

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

EDIT : dopo qualche riflessione. No, non è possibile controllare che una raccolta contenga tutte le parti uguali utilizzando 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 durante la programmazione e chiedere a qualcuno di scrivere un algoritmo per testare una raccolta è perfettamente normale. A seconda del linguaggio di programmazione, questo problema può essere risolto con una sola riga di codice.

Formulazione come hanno fatto e aspettarsi la risposta sbagliata non è normale. Poiché questa domanda è stata fatta un anno fa. Spero davvero che tu abbia finito per lavorare da qualche altra parte. Sarei interessato a sentire dal post originale come vanno le cose per lui / lei.

    
risposta data 17.06.2013 - 19:28
fonte
0

Era una domanda per un'intervista in Java, se così fosse, voleva provare le tue abilità con l'override di "hashcode" e "equals".

Dovresti sovrascrivere questi due metodi e usare il metodo equals override per fermare la ricorsione quando confronti A con A.

Senza sovrascrivere, il tuo confronto per "oggetto" da A a B, da A a C e da A ad A sarà tutto vero ma dopo averlo sostituito, solo quando l'oggetto A confrontato con l'oggetto A restituirà vero dove altri confronti restituiranno false.

    
risposta data 16.04.2012 - 20:01
fonte

Leggi altre domande sui tag