Czy to tylko ja, czy to zaskakujące pytanie do wywiadu technicznego? [Zamknięte]

153

tło

Właśnie w wywiadzie technicznym poproszono mnie o napisanie algorytmu przechodzenia przez „obiekt” (zauważ cytaty), w którym A jest równe B, a B jest równe C, a A jest równe C.

Otóż ​​to. To wszystkie informacje, które otrzymałem.

Zapytałem ankietera, jaki jest cel, ale najwyraźniej nie było jednego, wystarczy „przemierzyć” „obiekt”.

Nie znam nikogo innego, ale wydaje mi się to głupie pytanie. Zapytałem ponownie: „szukam wartości?”. Nie. Po prostu „przejdź”.

Dlaczego miałbym kiedykolwiek chcieć bez końca zapętlać ten „obiekt”? Może stopić mój procesor?

Odpowiedź według ankietera, że powinienem napisać rekurencyjną funkcję.

OK, dlaczego więc nie poprosić mnie o napisanie funkcji rekurencyjnej? A kto napisałby funkcję rekurencyjną, która nigdy się nie kończy?

Moje pytanie:

Czy to jest ważne pytanie dla reszty z was, a jeśli tak, czy możecie podać wskazówkę dotyczącą tego, czego może mi brakować? Być może zbyt intensywnie myślę o rozwiązywaniu rzeczywistych problemów. Od dłuższego czasu z powodzeniem programuję, ale ten proces wywiadu technicznego sprawia, że ​​mam wrażenie, że nic nie wiem.

Matt Cashatt
źródło
197
Jedyną prawidłową odpowiedzią tutaj jest „nie rozumiem pytania”.
user16764
16
Cóż, jeśli naprawdę nie powiedzieli, czym są A, B i C (jak - są obiektami) i umieścili obiekt w cudzysłowie, wydaje się, że mają własną unikalną terminologię. Gdyby zapytali, jak przejść przez wykres obiektowy, w którym obiekt A odwołuje się do obiektu B, który odwołuje się do obiektu C, który odwołuje się do obiektu A, byłby zrozumiały, ale dlaczego ma być rekurencyjny, nie wiem. Nawiasem mówiąc, nie musi to być nieskończone, jeśli utrzymujesz listę już odwiedzonych obiektów. Ale tak, martwiłbym się pracą w firmie przy użyciu tego testu - wydają się zdezorientowani.
psr
77
Opisane pytanie jest bezsensowne, podobnie jak odpowiedź. Albo źle pamiętasz, o co prosili, albo osoba pytająca jest idiotą i prawdopodobnie lepiej nie współpracować z nim.
Mason Wheeler,
26
Dlaczego wywiady z deweloperami muszą być bolesne? Czy nie możemy wszyscy po prostu usiąść i spojrzeć na kod i rozmawiać o sobie? Dzięki temu deweloperzy będą wiedzieć, gdzie przebywają inni deweloperzy, i nie zajmie to 6 godzin. Testy kodu są najgorsze. Nie mam nic przeciwko przyznaniu się do tego, że staram się dostarczać optymalne rozwiązania, a 3 deweloperów, których nigdy nie spotkałem, obserwują mnie podczas pisania.
Erik Reppen
19
Musiałem sprawdzić twój profil, aby zobaczyć, czy mieszkasz w tym samym obszarze co ja, ponieważ pracowałem przez krótki czas w pracy, w której jeden z rozmówców zapytał mnie: „Czy jesteś zorientowany na szczegóły?” Na co odpowiedziałem: „Czy możesz być bardziej szczegółowy?” I jego odpowiedź: „Nie potrafię tego wyjaśnić, ale znam osobę zorientowaną na szczegóły, kiedy widzę jej pracę”. Uwielbiam dwuznaczność.
Jesse C. Slicer,

Odpowiedzi:

305

To zaskakujące, nieprawidłowe pytanie podczas wywiadu. Ankieter nie był w stanie jednoznacznie wyrazić, czego szukał i oczekiwał, że przeczytasz jego / jej zdanie, zamiast wyraźnie reagować na twoje odpowiednie próby wyjaśnienia problemu. Uważaj się za szczęściarza, że ​​nie dostałeś pracy.

Znaczenie czasownika „trawers” ​​działającego na rodzajowym „obiekcie” jest, moim zdaniem, niejednoznaczne. Zacznij podstawiać różnorodne rzeczowniki słowem „obiekt”, a szybko stanie się oczywiste, że przemierzanie obiektu ma znaczenie tylko dla małego podzbioru wszechświata rzeczy, które są przedmiotami.

Sensowne jest „przechodzenie” po węzłach „drzewa binarnego”. „Przemierzanie” „klauna” nie ma sensu. Jednak obiekt może równie łatwo przedstawiać „klauna”, jak i „drzewa binarnego”.

Matt
źródło
9
Niedawno przeszedłem praktykę zastępowania rzeczowników w głupich pytaniach słowem „klaun” +1 sir!
rupjones
108
„Clown traversal” - co za świetny mem na „głupie pytanie techniczne”. Przekazać!
radarbob
8
Hmm, mogę przejść przez var clown = {kapelusz: „z kwiatem”, włosy: „jasnoczerwony”, nos: „czerwona kula”, usta: „czerwone usta oprawione w białą”, ...};)
mplungjan
37
Cały mój obszar teoretycznych badań nad CS dotyczy iteracyjnego przechodzenia przez klauna, ty niewrażliwy grudo!
6
@JackManey: Wszyscy wiedzą, że klaunów należy pokonywać rekurencyjnie .
Adam Robinson
39

Widzę tutaj trzy możliwości.

  1. Była całkowicie niekompetentna. Niewiele więcej do powiedzenia na ten temat.
  2. Celowo czyniła to dwuznacznym, aby zobaczyć, jak dobrze poradzisz sobie z zadawaniem pytań, aby dowiedzieć się, co powinieneś zrobić i czego naprawdę chciała.
  3. Z jakiegokolwiek powodu zdecydowała, że ​​nie chce, żebyś cię zatrudnił, więc zadała pytanie, na które nie można było odpowiedzieć. Gdy zapytano ją o twoje umiejętności, przeskoczyła tę część i powiedziała coś w stylu: „Zapytałem go, jak przejść przez trójwęzłowy wykres, a on był kompletnie zakłopotany - nawet nie miał pojęcia, jak na początek. Oczywiście jest rażąco niekompetentny! Nie powinniśmy nawet rozważać jego zatrudnienia.
Jerry Coffin
źródło
7
„Zapytałem go, jak przejść przez wykres trójwęzłowy, ...” Jeśli post OP jest poprawny, nie ma wzmianki o wykresie lub węźle. tylko „obiekty”. Jest to forma „fałszywego świadectwa”. Jeśli napisze, coś takiego może zostać ścigane!
Emilio Garavaglia,
9
Czy zwykle używasz zaimków żeńskich, gdy nie wymieniono płci osoby?
Chan-Ho Suh,
8
@EmilioGaravaglia: Przede wszystkim może nigdy nie zostać napisane. Po drugie, nawet zakładając, że zostanie spisany, bez wątpienia nigdy nie uzyskasz do niego dostępu, tylko list „Z przykrością informujemy cię ...”. Po trzecie, jeśli nie masz nagrania z wywiadu, jak udowodnisz, że osoba przeprowadzająca wywiad nie mówiła prawdy? Podsumowując: teoretycznie powinieneś mieć rację - ale w rzeczywistości nie ma praktycznie żadnej szansy.
Jerry Coffin
11
@ Chan-HoSuh: OP wspomina o płci w jednym ze swoich komentarzy.
Jerry Coffin
4
@JerryCoffin Przepraszam.
Chan-Ho Suh,
32

To tylko dzikie przypuszczenie, ale zakładając, że osoba przeprowadzająca wywiad mówi o odnośnikach do wskaźnika (i jest to podchwytliwe pytanie), odpowiedź brzmi: nie ma nic do przejścia, ponieważ wszystkie odniesienia wskazują na ten sam obiekt.

Funkcja rekurencyjna? To do przemierzania drzewa. W pierwotnym pytaniu nie widzę nic, co sugerowałoby, że mówi o drzewie.

Robert Harvey
źródło
28
Pójść dalej. Są lepsze firmy do pracy.
shufler
7
Nie To przegrana sprawa. Gdyby osoba przeprowadzająca wywiad myślała, że ​​się mylił, nie zadałby tego pytania. Kiedyś poproszono mnie o napisanie próbki w dowolnym języku, który chciałem; osoba przeprowadzająca ze mną rozmowę uznała, że pseudokod jest prawidłowym wyborem.
Robert Harvey
8
@Robert Harvey: Co jest złego w pseudokodzie?
James
6
@Robert Harvey: Szczerze mówiąc, większość ludzi chce dowiedzieć się, jak rozwiązać problem, a nie dowiedzieć się, czy nauczyłeś się składni określonego języka. Często zdarza się, że algorytmy są określane w pseudokodzie.
James
8
Jaka jest różnica między pseudokodem a Pythonem? :)
David Robinson,
15

Chociaż nie mogę wypowiadać się w sprawie tego konkretnego ankietera, widziałem podobne pytania w wywiadzie dla programistów frontonu, więc językiem, którego użyję w tym przykładzie, będzie JavaScript.

Dany:

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

Typowa zła odpowiedź może „przejść” tylko pierwszy poziom i wydrukować / porównać:

'value1'
2
[Object object]

Więc kodując rekurencyjny przykład, który przechodziłby przez wszystkie poziomy, wspomniałem takie rzeczy jak:

  • Obsługa referencji kołowych
  • Jak radzić sobie z tablicami (czy powinny one również być przechodzące rekurencyjnie?)
  • Czy należy oceniać funkcje i przetwarzać ich wartość zwracaną?
  • W przypadku JavaScript: czy prototyp powinien pasować i czy odziedziczone właściwości również należy porównać?

Tak więc „rozwiązaniem”, które, jak przypuszczam, szukał ankieter, było rozpoczęcie rozmowy na pozornie proste pytanie, które ma wiele zaawansowanych tematów - rekurencyjność, wskazówki / referencje, oczekiwania itp.

WSkid
źródło
5
To ma sens w ten sposób, WSKid. Niestety żaden z tych kontekstów nie był oferowany.
Matt Cashatt,
3
To prawda, że ​​naprawdę chwyta się słomek. Powinny one przedstawić przypadek użycia, przykładowe obiekty 3 lub coś, co pozwoli wprowadzić rzeczywisty problem.
WSkid 12.04.12
1
Myślałem tak samo, tylko w przypadku atrybutów obiektów Python. Wiedza, w którym pytaniu oczekują odpowiedzi, byłaby bardzo pomocna, ale można tego oczekiwać w kontekście stanowiska, tj. Python dev, c # dev, javascript dev, php dev itp.
Ken
2
+1 za znalezienie kontekstu, w którym pytanie ma sens!
Donal Fellows
9

Niektórzy ankieterzy starają się zadawać pytania, aby sprawdzić, czy kandydat jest wystarczająco inteligentny i uczciwy, aby udzielić jednej z tych dwóch odpowiedzi:

Nie wiem

albo może:

Nie mogę na to odpowiedzieć, jak stwierdzono.

Nie chcą kandydata, który zaakceptuje czystą BS jako specyfikację i marnuje czas swojego pracodawcy i płaci, próbując ją wdrożyć.

hotpaw2
źródło
6
Przez całe nasze życie jesteśmy uwarunkowani, w takim scenariuszu jak ten wywiad, aby móc udzielić odpowiedzi na pytanie. Jeśli powiedzenie „nie wiem” (które, tak przy okazji, zrobiłem) było do przyjęcia, to powinienem był to powiedzieć wcześniej. Próba udzielenia w dobrej wierze odpowiedzi na pytanie podczas rozmowy kwalifikacyjnej niekoniecznie musi być równoznaczna z tym, jak traktujemy nieodpowiednią specyfikację lub zestaw wymagań. I myślę, że o to chodzi, te wywiady zboczyły z kursu i w wielu przypadkach nie mają sensu.
Matt Cashatt
Taka dobra odpowiedź. Nie zapominaj jednak, że wypowiedzenie tego wymaga dużego doświadczenia. Osobiście mogę powiedzieć, że doświadczenie w rozmowach kwalifikacyjnych jest istotną częścią pracy. @MatthewPatrickCashatt, jeśli osoba przeprowadzająca wywiad nie zaakceptuje „Nie wiem”, to niewiele więcej, aby omówić IMO.
arin
2
Podstępne pytania to trollowanie lub skrajna niekompetencja. Tak czy inaczej, jeśli ankieter zadaje podchwytliwe pytania, nie chcesz tam pracować.
Ben Brocka,
7

Wydaje mi się, że jest to (słabo artykułowane) pytanie dotyczące okrągłej listy powiązanej. Prawdopodobnie zapytałbym, czy właśnie o to chodzi (ponieważ odpowiedź na pewno byłaby inna niż inna powyżej, co oznacza, że ​​wszystkie są odniesieniami do tego samego obiektu).

Jeśli było to pytanie z listą połączoną, to Ty (w tym przypadku) masz pojedynczo połączoną listę, w której węzeł końcowy wskazuje na drugi koniec (chociaż jeśli został sformułowany tak, jak mówisz - wtedy może być podwójnie powiązany, jeśli A wskazuje na B i C - ale pomoże to wyjaśnienie ze strony ankietera).

A -> B -> C -> A

Również (i tak się dzieje cały czas) ankieter mógł przeczytać to pytanie, pomyślał, że jest to „dobre” pytanie, ale tak naprawdę nie znał odpowiedzi (lub nawet co to znaczyło).

Maich
źródło
1
Dzięki Maich - myślę, że twój ostatni punkt jest najbardziej prawdopodobny.
Matt Cashatt
5

Wyzwanie polega na tym, aby uzyskać więcej szczegółów, zadając konkretne pytania, aby dowiedzieć się, że istnieje struktura drzewa i jakie elementy są zaangażowane w przechodzenie. Być może przyjęto założenie, że poza drzewami nie ma wielu innych struktur danych, ale jest to pewien skok.

JB King
źródło
1
Dzięki JB King. Dobrze jest zadawać pytania. W tym konkretnym przypadku tak zrobiłem. W rzeczywistości zapytałem nawet, czy to drzewo, a odpowiedź brzmiała „nie”! Ale dobrze rozumiesz, że moim obowiązkiem jest rozpowszechniać jak najwięcej informacji, zadając pytania.
Matt Cashatt,
3

Mogą chcieć dowiedzieć się, jak radzisz sobie z dziwnymi problemami. Ale w tym przypadku nie ma to nic wspólnego z „wywiadem technicznym”. To bardziej przypomina wywiad psychologiczny.

Benjamin B.
źródło
5
Chciałbym zobaczyć przykład jednej z ich specyfikacji technicznych dla projektu oprogramowania.
Chuck D
Jeśli rozmowa dotyczy analityka systemowego lub podobnego stanowiska, jest to całkowicie trafne: Twoim zadaniem jest pomóc klientom w wyjaśnieniu ich pytań, a nie udzielenie odpowiedzi.
reinierpost
1
@ reinierpost - Nie było.
Matt Cashatt,
3

Napisz algorytm do przejścia przez „obiekt” (zauważ cudzysłowy), w którym A jest równe B, a B jest równe C, a A jest równe C.

Wygląda na to, że większość ludzi zakłada, że ​​A, B i C są wskaźnikami, ale równie dobrze mogą być klaunami. (Lub członkowie klasy klauna.) Lub mogą to być imiona klaunów. (Lub nazwy klas. Lub podklasy klasy klauna.)

Odwróciłbym tabele i zapytałbym, czy w ten sposób zazwyczaj przygotowują specyfikacje programistyczne, a następnie powiedziałbym im, w jaki sposób mogę im pomóc w fazie opracowywania specyfikacji wymagań. Słaba komunikacja oczekiwań prowadzi do kiepskiego produktu pracy. Albo by to dostali, albo nie zrobiliby, gdyby tego nie dostali, odszedłbym.

Jim
źródło
2

Chociaż pytanie było źle sformułowane, a osoba przeprowadzająca wywiad wyraźnie nie była pomocna w udzielaniu wskazówek, mam nieco inne zdanie na temat tego, o co pytano.

Wydaje mi się, że ankieter szukał rozwiązania, które przemierzy strukturę obiektu za pomocą pewnego rodzaju odbicia. Informacja, że ​​trzy obiekty były równe, powinna była skłonić do rozmowy o porównaniu tożsamości obiektu (A == B oznacza, że ​​obiekty są w rzeczywistości tym samym obiektem w pamięci) lub porównania równości obiektu (A == B oznacza, że ​​wartości obiektów są to samo).

Fakt, że ankieter powiedział, że odpowiedź była funkcją „rekurencyjną”, prawdopodobnie wskazywał, że można się spodziewać dyskusji na temat głębokiego kontra płytkiego kopiowania i porównania.

Lucas
źródło
2

Spóźniam się na tę imprezę, ale myślę, że osoba przeprowadzająca wywiad nieprawidłowo zadała to pytanie:

Napisz algorytm, aby przejść przez tablicę i ustalić, że A jest równe B, a B jest równe C, a A jest równe C, w tej kolejności.

Wtedy poprawną odpowiedzią byłby algorytm rekurencyjny.

pgthew
źródło
1

Właśnie w wywiadzie technicznym poproszono mnie o napisanie algorytmu przechodzenia przez „obiekt” (zauważ cytaty), w którym A jest równe B, a B jest równe C, a A jest równe C.

objectMowa składa się z części A,B and C, a to tworzy triangle. Osoba po prostu pyta, czy obiekt (kolekcja) zawiera wszystkie równe części.

Ankieter chce wiedzieć, czy przedstawione części A, B and Cmogą powiedzieć, czy wszystkie są równe bez utknięcia w nieskończonej pętli. To głupie pytanie jest po prostu zrozumiałe, a mimo to udało im się je zadać, zadając je.

Wszystkie są sobie równe A == B && B == C && A == C, ale można to uprościć A == B && A == C.

Prostota pytania wywołała zamieszanie i jest naprawdę źle sformułowana.

Prawidłowe sformułowanie powinno być.

Napisz algorytm, aby sprawdzić części kolekcji i sprawdzić, czy wszystkie są sobie równe. Należy uważać, aby nie utknąć w nieskończonej pętli. Na przykład; jeśli części A są równe B, a B jest równe C, a A jest równe C, może powodować problemy.


Według ankietera odpowiedź była taka, że ​​powinienem napisać funkcję rekurencyjną.

Tak, możesz odpowiedzieć na pytanie are all my parts equalza pomocą funkcji rekurencyjnych. Nie, to nie jest skuteczne rozwiązanie.

EDYCJA : Po namyśle. Nie, nie można sprawdzić, czy kolekcja zawiera wszystkie równe części za pomocą funkcji rekurencyjnej.

Najbardziej wydajne rozwiązanie jest następujące.

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";

Ten problem występuje w programowaniu, a proszenie kogoś o napisanie algorytmu w celu przetestowania kolekcji jest całkowicie normalne. W zależności od języka programowania problem ten często można rozwiązać za pomocą tylko jednego wiersza kodu.

Sformułowanie, jak oni, i oczekiwanie złej odpowiedzi nie jest normalne. Ponieważ to pytanie zostało zadane rok temu. Naprawdę mam nadzieję, że skończyłeś w pracy gdzie indziej. Byłbym zainteresowany usłyszeniem z oryginalnego postu, jak rzeczy się dla niego potoczyły.

Reactgular
źródło
2
Sprawy potoczyły się wspaniale - biegł jak najszybciej z tej firmy i od tamtej pory jestem szczęśliwy.
Matt Cashatt,
0

Czy to pytanie do wywiadu w Javie, jeśli tak, to może chciał przetestować twoje umiejętności za pomocą nadpisywania „hashcode” i „equals”.

Będziesz musiał zastąpić te dwie metody i użyć metody przesłoniętej równości, aby zatrzymać rekurencję, gdy porównasz A z A.

Bez przesłonięcia porównanie dla „obiektu” od A do B, od A do C i od A do A da wynik prawdziwy, ale po zastąpieniu tylko wtedy, gdy obiekt A w porównaniu do obiektu A zwróci wartość true, gdy inne porównania zwrócą wartość false.

rpatali
źródło