Come risponderesti a questa domanda di colloquio di lavoro? [chiuso]

7

Una delle cinque persone che mi ha intervistato ha posto una domanda che ha portato a una discussione di un'ora: "Spiega come si svilupperà una lista ordinata in frequenza delle diecimila parole più usate nella lingua inglese. "

La mia prima risposta è stata quella di assalire le ipotesi alla base del problema. La lingua è una cosa fluida, ho sostenuto. Cambia in tempo reale. Il vocabolario e i modelli di utilizzo cambiano giorno per giorno. Sviluppare un elenco di parole e le loro frequenze significa scattare un'istantanea di un bersaglio in movimento. Qualunque sia la tua istantanea oggi non assomiglierà all'istantanea che prenderà domani o anche tra cinque minuti.

Grazie per avermi dato una risposta e una considerazione.

    
posta ahmed 26.04.2011 - 14:10
fonte

9 risposte

8

My initial response was to assail the assumptions underlying the problem.

... that resulted in an hour-long discussion

Supponendo che non stiate intervistando per una posizione come sviluppatore nell'ambito del trattamento linguistico (o dove gli errori delle specifiche hanno conseguenze potenzialmente fatali), probabilmente avete dato all'intervistatore l'impressione che avete difficoltà a separare l'importante dal incidentale o che tendi ad essere conflittuale.

Non fraintendermi, ho le stesse tendenze e devo lavorare duro per tenerli sotto controllo, ma ho dovuto imparare che trovare scappatoie nelle richieste di cooperazione è solitamente - e spesso per buone ragioni - interpretato come mancanza di empatia e non come segno di intelligenza.

Considera la situazione dell'intervistatore, probabilmente voleva solo sapere come ti avvicini al compito di programmazione comune di accumulare, ordinare e valutare i dati e la tua capacità di comunicare la tua soluzione ad un'altra persona - mentre è costretto dalla situazione di un colloquio di lavoro .

Qualcosa di più elaborato di: "Raccogliere dati sull'uso della lingua è, a causa della sua natura fluida, un problema interessante di per sé. A meno che tu non voglia che io lo approfondisca con te in dettaglio, per ora presumo solo che sia statico." prima di immergerti in una soluzione per una dichiarazione di problemi ragionevolmente idealizzata , è probabile che lasci un'impressione mista.

Per rispondere alla domanda originale:

  • scegli un dizionario adatto (ad esempio Oxford), preferibilmente uno in cui sono già correttamente "stemmed" (se non è possibile eseguirli tramite un algoritmo di derivazione adatto)
  • metti le parole staminali risultanti come chiavi in una matrice associativa / mappa hash / dizionario e inizializza ogni valore con 0
  • per ogni elemento nel corpus che interessa
    • derivano ogni parola
    • se la parola derivata può essere trovata come chiave nella mappa hash precedentemente creata
      • incrementa il valore corrispondente di 1
    • se non può essere trovato, ignoralo
  • stampa HashMap come elenco di tuple di valori-chiave, ordinate in base ai valori

e poi vai nelle possibilità di ottimizzazione per il passo ondulato della mano di "smistamento" se l'intervistatore suggerisce di essere interessato a loro.

    
risposta data 26.04.2011 - 18:08
fonte
7

Questa domanda è una buona domanda di intervista perché invita a discutere su più livelli. Ad un livello, è una domanda di programmazione, per vedere se si sa come scansionare in modo efficiente un corpus di testo inglese per contare l'occorrenza delle parole. Una persona con una buona educazione CS e un paio di anni di esperienza probabilmente lo affronteranno come una domanda di programmazione. È anche una domanda sulla definizione del dominio del problema.

Una persona con più esperienza può anche sapere che l'inglese è un bersaglio mobile e che dove si ottiene il corpus di parole inglesi farà la differenza.

Un utente ancora più sofisticato potrebbe avere la nozione che le parole 10k più frequentemente usate saranno virtualmente indipendenti dal corpus, a meno che non si commetta un errore enorme come usare Shakespeare o un dizionario medico come corpus. Potrebbero voler sapere come devono distinguere i nomi propri da altre parole. Qui ci sono dei veri sottigliezze.

Se la società è impegnata nell'analisi del testo inglese, questa domanda classifica i candidati per livello di abilità. È un controllo sulle affermazioni che fanno nel loro curriculum.

Non devi entrare in un huff perché la domanda è mal definita. Ovviamente non è definito. Uno scopo nel porre la domanda è vedere se riconosci i problemi nella definizione. Ma non concentrarti troppo intensamente su quella parte della domanda. Può darsi che l'intervistatore intenda davvero parlare della tua intelligenza di programmazione, e non è molto sofisticato. Dopo una breve conversazione preliminare, chiedi all'intervistatore: "Vuoi che parli di problemi di programmazione o del dominio dell'analisi del testo inglese?" Se vuoi ottenere il massimo dei voti su questa domanda, devi rispondere alla domanda che l'intervistatore intende chiedere. L'intervistatore potrebbe anche non avere un'idea completamente formata di ciò che vuole sentire.

Nella mia recente esperienza di interviste, la maggior parte degli intervistatori pone domande sulla codifica. La codifica è semplice e ben definita. L'intervistatore non deve pensarci troppo per farti una domanda di codifica. Ha anni di esperienza nella lettura e nella scrittura del codice e un sacco di tempo per cercare bug mentre si fumble alla lavagna.

    
risposta data 26.04.2011 - 17:32
fonte
4

Non penso che sia stata una domanda trabocchetto, davvero. Avrei appena assunto un corpus di parole adatto e poi ho spiegato come risolvere il problema.

A meno che non si trattasse di un'intervista per un posto sul gruppo di discussione.

    
risposta data 26.04.2011 - 16:56
fonte
3

Mi piace l'approccio di questi ragazzi: link

Risolvi il problema di programmazione, se vogliono che tu risolva il problema aziendale di quali fonti di dati usare, discuti le possibili fonti e quali pensi siano i loro meriti e dici che vorrai fare test e confrontare i risultati con la frequenza esistente liste, ecc.

    
risposta data 26.04.2011 - 14:24
fonte
2

La domanda in sé non è sufficientemente definita per essere una domanda tecnica.

Trovo strano che da questa singola domanda scaturisca una discussione lunga un'ora ... Ma dal momento che evidentemente si è verificato, puoi essere certo che il comitato di intervistati non sapeva nemmeno cosa cercavano. È molto probabile che stessero valutando la tua prima azione (cioè se l'intervistato sputasse (non-pseudo-) codice, sarebbe stato visto negativamente).

Senza ulteriori informazioni, vorrei semplicemente dare la risposta ovvia alla norma: registrare ogni parola di ogni persona di lingua inglese sulla Terra per un giorno e poi affermare queste ipotesi:

  1. Registrare chi voglio è un'opzione fattibile e praticabile (cioè l'attrezzatura è disponibile ed è in qualche modo possibile).
  2. Un giorno o qualsiasi altro intervallo di tempo selezionato, è un campione o parole sufficientemente grande.

A parte semi-correlati: scusa, ma non sono d'accordo con

Vocabulary and usage patterns shift day-to-day. To develop a list of words and their frequencies means taking a snapshot of a moving target. Whatever snapshot you take today isn't going to look like the snapshot you take tomorrow or even five minutes from now.

Il volgare di una persona è controllato da chi sta indirizzando o parlando. Anche se le persone con cui interagisci ogni giorno possono essere diverse - quindi, apportando un cambiamento nelle parole pronunciate - è ingenuo presumere che ogni persona che parla inglese abbia lo stesso cambiamento successivo.

    
risposta data 26.04.2011 - 16:34
fonte
0

Per prima cosa vorrei chiedere una serie di requisiti per l'oggetto lista: "In quale forma sono i dati aggiunti alla lista?" sarebbe la mia prima domanda Una volta stabiliti i requisiti, avrei quindi impostato la progettazione dell'oggetto da abbinare.

Se pensi che il progetto sia o meno sensato è in una certa misura né qui né là; come sviluppatore potresti non pensare che un progetto a cui ti viene chiesto di lavorare sia ragionevole o fattibile, ma in generale è compito tuo dare al cliente ciò che hanno chiesto.

Potrebbe essere stata una conversazione interessante, ma pensi che un'ora di discussione sul punto di semantica sia stato utile come mostrare al ragazzo che sapevi come scrivere software?

    
risposta data 26.04.2011 - 14:22
fonte
0

Mi piacerebbe fare la forza bruta e google ogni parola in un dizionario e ordinare le parole in base al numero di pagine dei risultati per ogni query.

Potresti anche essere in grado di utilizzare Google Libri per cercare oltre una vasta quantità di letteratura inglese.

O è una risposta troppo pratica?

    
risposta data 26.04.2011 - 17:02
fonte
0

Vorrei usare swap-sort.

Mi guardavano con gli occhi vuoti e alla fine dicevano: "Ma questo è il modo più lento per ordinare!", sottintendendo che avevo appena fallito l'intervista.

Risponderei: Sarebbe lenta la prima volta, concessa, ma poi sarebbe veloce in seguito, perché, siamo onesti, la lista di frequenza delle più comuni parole inglesi da 10K non cambierà molto su un ogni giorno, quindi dovresti scegliere l'algoritmo più semplice possibile, che persino un bambino di 5 anni possa capire. In questo modo, non possono insinuarsi strani bug, edge case, ecc.

Poi prenderei le mie cose e direi: "È stato un piacere incontrarti con te" perché ovviamente non ero quello che cercavano.

Chiarimento

Dopo l'ordinamento originale, gli elementi nell'elenco vedrebbero la loro classifica andare avanti e indietro di pochissimo, se ce ne sono. Ad esempio, "F * ck" rimarrebbe vicino per molti anni a venire, quindi lo swap-sort (bubble-sort per voi studenti universitari) avrebbe ben poco da scambiare prima che la lista fosse ordinata di nuovo.

    
risposta data 26.04.2011 - 19:05
fonte
-2

Il mio pensiero immediato: usa google per trovare un elenco preesistente. Potrebbe non essere la risposta che stanno cercando, ma dimostra che non perderai tempo a reinventare la ruota.

    
risposta data 04.07.2012 - 07:51
fonte

Leggi altre domande sui tag