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.
źródło
Odpowiedzi:
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”.
źródło
Widzę tutaj trzy możliwości.
źródło
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.
źródło
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:
Typowa zła odpowiedź może „przejść” tylko pierwszy poziom i wydrukować / porównać:
Więc kodując rekurencyjny przykład, który przechodziłby przez wszystkie poziomy, wspomniałem takie rzeczy jak:
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.
źródło
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ć.
źródło
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).
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
object
Mowa składa się z częściA,B and C
, a to tworzytriangle
. Osoba po prostu pyta, czy obiekt (kolekcja) zawiera wszystkie równe części.Ankieter chce wiedzieć, czy przedstawione części
A, B and C
mogą 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ć.
Tak, możesz odpowiedzieć na pytanieare all my parts equal
za 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.
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.
źródło
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.
źródło