Meccanica del ragionamento durante le interviste di programmazione [chiuso]

1

Questo non è il solito "Non voglio scrivere codice durante un'intervista", in questa domanda l'ipotesi è che

  • Ho bisogno di scrivere codice durante un'intervista (pensa al livello di riscrittura di quicksort o mergesort da zero)
  • So come funziona l'algoritmo o ho un'idea di base su come dovrei iniziare a lavorare da lì, cioè non ricordo l'algoritmo a memoria

Ho notato che anche su una lavagna, I sempre finisce per scrivere codice bug o codice che non viene compilato. Se c'è un errore di battitura, qualsiasi cosa di solito vivi con quello ... ma quando c'è un incidente a causa di un caso particolare non scoperto, finisco per perdere la fiducia nelle mie capacità.

Mi rendo conto che forse gli intervistatori potrebbero voler vedere come scrivo il codice e / o come risolvo i problemi piuttosto che la correzione del codice della lavagna, ma vorrei chiedere a come dovrei affrontare il problema precedente in termini mentali, cioè quali misure mentali dovrei seguire quando scrivo il codice per un'intervista con i due punti elenco sopra .

Ci deve essere una serie unica e concordata di passi che dovrei seguire per evitare di rimanere bloccati / presi in particolari casi di eccezione (casi limite) che potrebbero finire per perdere tempo e energie piuttosto che concentrarsi sull'algoritmo generale per il generale caso.

Spero di aver chiarito il punto

    
posta user129506 02.06.2014 - 14:45
fonte

2 risposte

2

Se mi venisse chiesto di scrivere il codice per un problema che pensavo fosse particolarmente schizzinoso o con complicazioni sul caso limite, scriverei per prima cosa le note sulla lavagna. Per un semplice esempio, diciamo che mi è stato chiesto di scrivere il metodo Arrays.toString(int[] array) in Java. Scriverei alla lavagna qualcosa come:

  • Se l'input è null , restituisci "null"
  • Se l'input è un array vuoto, restituisci "[]"
  • Altrimenti, devo:
    • Genera un "[" per il primo elemento
    • Genera un "]" per l'ultimo elemento
    • Genera un ", " tra gli elementi
    • Se c'è esattamente un elemento, non stampare un ", " .

Quindi, direi all'intervistatore che normalmente scriverò i test in primo luogo per testare ciascuno di questi proiettili e chiedere loro se vogliono che lo faccia qui. Supponendo che loro dica no, mentre scrivo il codice, terrei conto di ognuno di questi proiettili e li controllerò dato che sono abbastanza sicuro che funzionino.

Fare questo passo di pianificazione è qualcosa che potresti e dovresti sicuramente mettere in pratica con alcuni dei problemi più semplici su Project Euler o da Elementi delle interviste di programmazione libro.

    
risposta data 02.06.2014 - 15:36
fonte
2

I noticed that even on a whiteboard, I always end up writing bugged code or code that doesn't compile.

Ho visto questo accadere nelle interviste e spesso è seguito da una dichiarazione di diniego. Il candidato farà fatica a scrivere un codice efficace, quindi farà affermazioni come "Scrivo codice migliore di questo". Il problema qui è che il candidato ha appena dimostrato di non farlo.

Mentre è possibile controbattere sostengono che il problema è il contesto. Quel risolvere i problemi in un'intervista non è lo stesso che nel tranquillo spazio privato della tua scrivania. È il contesto dell'intervista che conta per ottenere con successo il lavoro per quella scrivania silenziosa.

I realize that perhaps interviewers might want to look at how I write code and/or how I solve problems rather than proof-compiling my whiteboard code

C'è una nessuna soluzione a un problema se non viene compilato e gli intervistatori possono vedere come scrivi il codice dopo averlo messo sulla lavagna.

Il tuo argomento è questo: Le mie capacità di problem solving con questo linguaggio di programmazione non sono relative alla mia comprensione della sintassi dei linguaggi e delle regole di compilazione .

Se vuoi dimostrare solo le tue capacità di problem solving, allora chiedi di risolvere il problema in un linguaggio di programmazione diverso. Uno in cui non commetterai errori.

how should I approach the above problem in mental terms, i.e. what mental steps should I follow when writing code for an interview with the two bullet points above

Practice:

Le sfide di programmazione popolare di Google per le interviste e poi pratica risolverle. Se la lavagna presenta una sfida, acquista una lavagna e esercitati su una.

Esercitati a scrivere codice sorgente su carta con una penna. Rivedi il tuo lavoro per ottenere accuratezza compilativa e poi lavora per migliorarlo.

Studia le regole per il compilatore che stai utilizzando.

Non c'è una risposta facile se non quella di lavorare per migliorare se stessi nelle aree in cui sono più deboli.

Buona fortuna per le interviste.

    
risposta data 02.06.2014 - 15:55
fonte

Leggi altre domande sui tag