Pytanie:
Jak nie brzmieć jak pedant, odpowiadając na pytania podczas rozmowy kwalifikacyjnej, które wydają się proste, ale w rzeczywistości są skomplikowane
Martijn
2015-05-27 19:29:42 UTC
view on stackexchange narkive permalink

Jednym szczególnym problemem, który pojawia się dość często w wywiadach na stanowiska programistyczne, jest sposób odwrócenia łańcucha.

Na pozór wydaje się to bardzo prostym i dość prostym pytaniem. Jednak tak nie jest: rozwiązanie zależy od kodowania łańcucha, sposobu radzenia sobie z klastrami grafemowymi oraz tego, jakie dane wejściowe są prawidłowe, a które nie. Ostatecznie zależy to w dużej mierze od tego, co chcesz zrobić z odwróconym ciągiem.

Jest to bardzo dobrze znany przykład i jest wiele takich sytuacji, w których pozornie proste pytania okazują się nie być proste- w ogóle do dalszej refleksji.

Obawiam się, że kiedy zbyt głęboko poproszę o taki test w wywiadzie, mogę zostać odpisany jako ktoś, kto niepotrzebnie komplikuje proste rzeczy lub pedantyczny w rodzaju „no, właściwie…”.

Jeśli ankieter przeoczył tę złożoność, będę również zbyt długo odpowiadać. OTOH, jeśli nie zajmę się tymi sprawami, podam rozwiązanie, o którym wiem, że jest błędne i może być postrzegane jako pozbawione głębi i zdolności do zidentyfikowania prawdziwych zawiłości.

Jaki jest dobry sposób radzenia sobie z takimi pytaniami?

Uwaga: rozwiązanie zadania nie jest tutaj problemem, to technika rozmowy kwalifikacyjnej.

Podejrzewam, że najlepszy sposób radzenia sobie z tym zależy od poziomu stanowiska, na które rozmawiasz. Jeśli jest to stanowisko młodszego programisty, to dość proste rozwiązanie (w przypadku pytania o odwrócenie ciągów znaków), które działa na znakach BMP, jest prawdopodobnie w porządku. Jeśli jest to stanowisko kierownicze, prawdopodobnie bardziej zależy im na tym, by wiedzieć, że jesteś świadomy skrajnych przypadków i oczekuje się, że wykażesz, że wiesz o wszystkich problemach związanych z Unicode.
Dwanaście odpowiedzi:
Monica Cellio
2015-05-27 19:48:39 UTC
view on stackexchange narkive permalink

Z mojego doświadczenia wynika, że ​​często stwierdzenia problemów w wywiadach celowo pozostawiają nieokreślone szczegóły. Jedną z rzeczy, których szukamy, kiedy to robimy, jest to, jak reaguje kandydat. Dobre wyniki obejmują prośbę o wyjaśnienie lub przedstawienie założeń z góry; wydaje się, że słaby wynik nie bierze go pod uwagę.

Nie chcesz zadawać milionów pytań wyjaśniających zaraz za bramą; jak sugerujesz, może się to nie udać. Więc pierwszą rzeczą do zrobienia jest ustalenie priorytetów dla pytań. Zdecyduj, które pytania musisz zadać, a które możesz odrzucić (wyraźnie).

W twoim przypadku wygląda na to, że chcesz zapytać o kodowanie (to naprawdę ma znaczenie dla tego, jak podchodzisz problem): „Jak kodowany jest ciąg znaków, czy to powinno obsługiwać wszystkie kodowania?” (Zwróć uwagę, co tam zrobiłeś, oferując dokładniejsze rozwiązanie, ale dając im szansę na powiedzenie „nie, nie przejmuj się tym”).

Z drugiej strony zakres danych wejściowych może być czymś, co po prostu wyjaśniasz w drodze. „Sprawdzę tutaj puste dane wejściowe”, „Zakładam, że w tej chwili nie ma Unicode” itp. - niezależnie od twoich ograniczeń. W ten sposób demonstrujesz, że wiesz o tych obawach, a jeśli ankieterowi zależy na tym, zada dodatkowe pytania („ok, teraz musi też robić emoji; jak sobie z tym radzisz?”).

Prawdopodobnie upraszczasz lub odrzucasz także inne części problemu; to powinno być częścią tego. Na przykład, miałem kandydatów do obsługi błędów - złap wyjątek, a następnie powiedz „obsłuż to”, jeśli na przykład obsługa wyjątków nie jest celem problemu. Nikt nie oczekuje, że podczas wywiadu napiszesz kod produkcyjny na tablicy, ale oczekują , że zrozumiesz, jakie są ważne czynniki, które wpływają na sposób pisania tego kodu.

Całkowicie się zgadzam; Celowo zadaję takie pytania, na które można odpowiedzieć na wiele różnych sposobów i na różnych poziomach abstrakcji. Pomaga mi zobaczyć, jak rozmówca podchodzi do programowania. Czyli jako „programista” czy „inżynier”?
aby wyjść poza tę styczną, jaka jest różnica między „programistą” a „inżynierem”?
@Martijn Spodziewałbym się, że programista to po prostu ktoś, kto łączy coś, co działa w ich przypadkach testowych, ale nie udaje mu się w scenariuszach, które rzeczywiście mają sens, ale po prostu o tym nie pomyślał (jak hakerzy ze starej szkoły unix). Inżynier to ktoś, kto bierze odpowiedzialność za swoją pracę - bez względu na to, czy jest to inżynier mostu, czy inżynier oprogramowania. Dla mnie główną różnicą jest odpowiedzialność i skupienie się na kliencie, a nie tylko na przestrzeganiu specyfikacji (lub „cokolwiek by mi odpowiadało”).
„OK, teraz musi też robić emoji; jak sobie z tym radzisz?” - Pan jest zły.
co jest złego w emoji?
Warto zauważyć, że zadawanie tych pytań w sposób, który opisujesz, jest demonstracją pewnych umiejętności w * gromadzeniu wymagań *, bardzo przydatnych (jeśli nie jest to konieczne) umiejętności w oprogramowaniu.
@Martijn Większość emoji nie znajduje się w podstawowej płaszczyźnie wielojęzycznej (BMP), a odwrócenie ciągu znaków UTF-16 zawierającego znaki spoza BMP wymaga obsługi pary zastępczej jako jednostki.
Nie ogranicza się to jednak do emoji, a obsługa par zastępczych jest jedną z prostszych komplikacji
Emotikony z flagą odwracania () mogą być trudne, ponieważ składają się z dwóch znaków (,), których można by użyć samodzielnie.
Zgodnie ze specyfikacją Unicode nie powinny: zawsze tworzą klaster grafemów. Ale znowu, nie zagłębiajmy się zbytnio w problem programowania, który jest interesującym i zabawnym problemem, ale nie dotyczy tej strony.
„Zakładam tutaj ASCII. W przypadku pełnego Unicode ten problem jest znacznie bardziej skomplikowany, ale może to wykraczać poza zakres tego pytania”. To prawdopodobnie sedno.
@Martijn: Cóż, nie powinieneś ograniczać kontraktu bardziej niż to konieczne lub przynajmniej przydatne: „Zakładam, że jednobajtowe kodowanie oparte na ASCII” byłoby lepsze.
@Martijn Powiedziałbym, że różnica między „koderem” a „inżynierem” tkwi w zasadach projektowania i inżynierii. Zwykle myślę o „koderze” jak o kimś, kto otrzymuje projekt i mówi: „Napisz klasy / funkcje x, y i z z określonym zachowaniem / interfejsami”. Z drugiej strony inżynier myślę bardziej jak o kimś, kto może zebrać wymagania, stworzyć projekt spełniający te wymagania od podstaw, wdrożyć ten projekt, ewentualnie delegując część tej pracy, a następnie wykonać kontrolę jakości i konserwację. Inżynier musi spojrzeć na wszystkie poziomy abstrakcji i zidentyfikować potencjalne problemy projektowe.
bpromas
2015-05-27 19:47:59 UTC
view on stackexchange narkive permalink

Te pytania mają na celu wyeliminowanie programistów, którzy nie potrafią programować. Właściwie nie musisz wdrażać idealnego rozwiązania, wystarczy pokazać, że znasz rozwiązanie problemu. Najpierw podaj prostą, prostą odpowiedź. Jeśli chcesz wziąć pod uwagę specjalne warunki, których nie określono w pytaniu, po prostu załóż taki, który Ci odpowiada, np.

Cóż, zakładając, że łańcuch pochodzi z kodowania X, to najpierw. ..

Najprawdopodobniej właśnie to chcą zobaczyć. To znaczy, jeśli przedstawiają problem jako prosty, prawdopodobnie oczekują prostej odpowiedzi.

A potem po udzieleniu prostej odpowiedzi możesz rozgałęzić się i porozmawiać o niektórych drugorzędnych obawach, które musiałbyś wziąć pod uwagę przemyślenia, aby mieć pewność, że masz idealne rozwiązanie. Mówienie o tych obawach pokazuje, że masz głęboką wiedzę techniczną jako bonus do zdania testu.

Rzeczywiście, chociaż ostrzegałbym przed zbytnią pedanterią. To znaczy, prawie każdy język ma funkcję odwracania napisów; ankieterzy nie zadają tego pytania, ponieważ chcą wiedzieć, jak odwrócić ciąg. Jeśli wydaje się, że nie rozumiesz tego domyślnego fragmentu pytania, może to powodować obawy dotyczące komunikacji. „Czy muszę wszystko przeliterować dla tego faceta / dziewczyny?”
Zibbobz
2015-05-28 00:16:50 UTC
view on stackexchange narkive permalink

Poprowadź prostą odpowiedź, a następnie zapytaj o szczegóły.

Wygląda na to, że wiesz już, jak odwrócić prosty ciąg znaków, i zaczynasz się rozglądać na skrajnych przypadkach, w których ankieter chce po prostu zmierzyć twoje możliwości za pomocą kodowania.

Poprowadź wyjaśnienie, jak to zrobić bez żadnych problemów (zakładam, że masz już coś na myśli), następnie przejdź do problemów, które mogą się pojawić, i w jaki sposób rozwiązać każdy.


Ale to wszystko dotyczy tylko wywiadu. W rzeczywistym miejscu pracy są to szczegóły, które na pewno chcesz rozwinąć zanim znajdziesz odpowiedź. To nie jest pedantyczne podejście - za to ci płacą. Musisz znać te skrajne przypadki, które mogą powodować problemy.

W twoim konkretnym przypadku znajomość aplikacji byłaby pomocna, podobnie jak niektóre informacje wprowadzane przez użytkownika na temat oczekiwanego typu ciągów. Oba są przydatne w znalezieniu odpowiedzi, ale w każdym innym przypadku, jeśli użytkownik nie może udzielić ci konkretnej odpowiedzi, załóż najgorsze i planuj sobie z tym poradzić.

W rzeczywistym miejscu pracy, zwłaszcza w programowaniu, oczekuje się, że będziesz w stanie samodzielnie rozwiązywać te skrajne przypadki i dostosowywać się do nich. Nie zawsze będziesz mieć luksus, by usłyszeć, czego się spodziewać, ale w wywiadzie możesz poprowadzić, udzielając prostego wyjaśnienia, a następnie pokazać, że wiesz , czego się spodziewać. To pokazuje, że możesz wykonać natychmiastowe zadanie i że możesz zaplanować nieprzewidziane sytuacje (nawet dla tych, którzy w rzeczywistości nie rozumieją kodu).

bharal
2015-05-28 00:49:28 UTC
view on stackexchange narkive permalink

O, maaaan, zabawne pytanie i byłem zajęty karmieniem wiewiórek.

Orzechy.

Zawsze udzielaj najprostszej odpowiedzi, jaką możesz. Pozwól, że rozszerzę tutaj o kilka centów.

W twoim przykładzie W scenariuszu, dałbyś funkcję programistyczną, która po odebraniu łańcucha zwraca odwrócony ciąg. Możesz „odrzucić” wszystkie problemy, które powodują, że piszesz więcej o jednym wywołaniu funkcji. W Javie możesz nawet odpowiedzieć na someString.reverse()1.

W przypadku przykładu niezwiązanego z programowaniem, jeśli zostaniesz zapytany „opowiedz mi o sobie” , dałbyś odpowiedź, która zajmuje mniej więcej 1-2 minuty i nie obejmuje całej historii twojego życia, ale raczej najprostsze (naprawdę, najbardziej istotne ) historie, które namalują obraz tego, kim jesteś .

Zwykle ankieter używa pytania, aby odskoczyć do innego pytania lub poprosi Cię o nieco szersze omówienie obszarów, którymi jest zainteresowany. jest organiczny i pozwala im zbudować bardziej skomplikowane pytanie bez przerażania kandydata, zadając trudne pytanie od razu.

Nie chcesz zgadywać, gdzie przeprowadzający rozmowę kwalifikacyjną idzie - chyba że zostaniesz zatrudniony jako medium. Lepiej jest udzielić szerokiej odpowiedzi (przypadkowo także najprostszej odpowiedzi) i pozwolić im skupić się na niektórych obszarach do ekspansji. Pomaga to ankieterowi pozostać na miejscu i powstrzymuje Cię przed prowadzeniem wywiadu. Ankieterom nie podoba się, gdy kandydaci próbują prowadzić rozmowę kwalifikacyjną, choćby dlatego, że chcą mieć ustawione takie same pytania / odpowiedzi, aby sprawiedliwie ocenić wszystkich kandydatów.

~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Ok, nie możesz tego napisać - jak zauważyli inni. Chciałbyś (alert nerd) new StringBuilder (someString) .reverse (). ToString (); ~ Ale dla mnie to było zbyt techniczne dla ogólnego forum profesjonalnego typu, takiego jak to. Więc wziąłem trochę swobody twórczej i skróciłem to. Ogólny punkt - podaj najprostszy - jest tym, co chcę przekazać.

* W Javie możesz nawet odpowiedzieć `someString.reverse ()` *. Zwłaszcza jeśli sprawdziłeś to w dokumentacji API i upewniłeś się, że `java.lang.String` ma metodę` reverse () `. W przeciwnym razie Twój rozmówca może nie być pod wrażeniem.
@Atsby Nie wspominając o tym, że nawet gdyby istniała taka metoda, najprawdopodobniej działałaby tylko w przypadku niektórych rodzajów odwrócenia. Czy chcesz odwrócić znak po znaku? Punkt kodowy po punkcie kodowym? Odwrócony tekst, ale nie liczby? A co ze znakami Unicode, takimi jak LTR / RTL itp.? A może tak naprawdę nie chcesz odwracać ciągu - może po prostu chcesz wydrukować go od tyłu? : P
`someString.reverse ()` jest moim zdaniem poprawną odpowiedzią (zakładając, że ankieter ma jakiś sens). W profesjonalnym programowaniu ważne jest, aby nie wymyślać koła na nowo, ponieważ to tylko marnuje czas (a tym samym pieniądze) i ogólnie daje produkt o niższej jakości. Jeśli ankieter mówi, że faktycznie chce, abyś zaimplementował funkcję, zaczynasz z nim rozmowę o jego wymaganiach, tak jak w prawdziwym świecie.
@dan-gph Zupełnie się nie zgadzam. Celem pytania (lub jednego z punktów) jest określenie, czy kandydat potrafi napisać prosty kod i rozwiązać problem. Nie mają czasu, aby wdrażać złożoną logikę biznesową przy użyciu wielu istniejących bibliotek, więc używają prostszego problemu, który można łatwo zbadać. Wcale nie świadczy to o tym, że chciałbyś wymyślić na nowo koło w ramach swojej pracy.
@MatthewRead,, dlatego musisz zapytać ich, czego chcą. Jeśli chcą, abyś odwrócił tablicę znaków za pomocą pętli for tylko po to, aby pokazać, że możesz to zrobić, to im to dasz. Poznajesz ich wymagania i je spełniasz. Jednak należałoby zapytać, w jaki sposób kandydat odwróciłby ciąg znaków w kodzie produkcyjnym na określonej platformie.
@Luaan ma rację, ale jeśli pytanie brzmi: „napisz kod, aby odwrócić ciąg znaków”, najprostszą odpowiedzią jest proste odwrócenie ciągu. Jeśli pytanie brzmi „odwróć punkt kodowy ciągu przez punkt kodowy” (cokolwiek to znaczy), zrób najprostszą implementację tego, a następnie pozwól im zapytać o inne rzeczy o odwracaniu tekstu, ale nie liczb.
Aby naprawić kod, możesz po prostu zamienić „Java” na „Ruby” lub „Python”).
@Nakilon, nie możesz też zrobić some_string.reverse () w Pythonie.
@Chan-HoSuh, O prawda, stdlib w Pythonie to taki bałagan - nigdy nie wiadomo, co to jest metoda, a co funkcja.
Joe Strazzere
2015-05-27 19:45:55 UTC
view on stackexchange narkive permalink

Jaki jest dobry sposób radzenia sobie z takimi pytaniami?

Należy pamiętać, że ankieter prawie na pewno nie chce, abyś go uczył i nie Nie szukam rozwlekłej odpowiedzi, ale chce po prostu stosunkowo prostego i prostego rozwiązania pytania.

Kolejnym kluczem jest zrozumienie kontekstu pytania. Jeśli stanowisko jest rolą programisty, to teoretyczne / matematyczne wyjaśnienie nie jest prawdopodobne, czego szuka ankieter. Bardziej prawdopodobne jest znalezienie praktycznego rozwiązania. Jeśli zamiast tego szukasz stanowiska badawczego, to odpowiednie mogą być bardziej teoretyczne odpowiedzi.

Podobnie jak w przypadku odpowiedzi na pytania na szkolnym egzaminie - spróbuj spojrzeć na to z punktu widzenia ankietera / nauczyciela. Podaj odpowiedź, którą Twoim zdaniem chce usłyszeć podczas rozmowy kwalifikacyjnej, a nie to, w co możesz wierzyć lub wiedzieć, że jest matematycznie / filozoficznie / teoretycznie możliwe i / lub poprawne.

Przede wszystkim udzielaj stosunkowo krótkich odpowiedzi. Wywiad nie powinien być zdominowany przez Twoją odpowiedź na jedno „zagadkowe” pytanie.

Generalnie się zgadzam, ale ostrzegam przed * „Podaj odpowiedź, którą Twoim zdaniem ankieter chce usłyszeć” *. To może być niebezpieczne. Często zadaję pytania, które sugerują, że szukam jednej rzeczy, kiedy naprawdę chcę sprawdzić, czy kandydat ma własny mózg i zdaje sobie sprawę, że standardowa, pozornie oczywista, odruchowa odpowiedź nie ma tutaj zastosowania. Odpowiadaj na pytania zgodnie z zadanymi pytaniami, być może w * kontekście *, w którym Twoim zdaniem przebywa ankieter, ale następnie przedstaw to jako założenie swojej odpowiedzi.
HLGEM
2015-05-27 19:43:15 UTC
view on stackexchange narkive permalink

Jeśli tak działa twój umysł, czy nie byłbyś najszczęśliwszy w miejscu, które to docenia? Znalezienie pracy może zająć więcej czasu, ale jeśli to zrobisz, lepiej będzie, jeśli odpowiesz na pytania dokładnie tak, jak Twoim zdaniem należy na nie odpowiedzieć. Niektóre zawody wymagają tej umiejętności radzenia sobie ze złożonością, a inne nie. Jak myślisz, co by cię uszczęśliwiło?

Tak jak mój tata zawsze mówił: „Bądź sobą. Chyba że jesteś palantem, to bądź kimś innym”.
Czy kiedykolwiek wspomniał o Batmanie? Bo jeśli możesz być Batmanem, zawsze bądź Batmanem.
Phil Miller
2015-05-29 10:26:49 UTC
view on stackexchange narkive permalink

Prowadziłbym, pytając, czy mogę założyć, cokolwiek myślisz, że biorą za pewnik, i początkowo unikałbym wyraźnego wspominania o tym, w jaki sposób założenie może być fałszywe.

W podanym przez Ciebie przykładzie być "Czy mogę założyć, że łańcuch jest prostym ASCII?"

Takie podejście ma kilka zalet

  • Przenosi Cię do odpowiedzi na zadane pytanie tak szybko, jak czujesz się komfortowo idąc, nie zaniedbując potencjalnego „wpadki”
  • To pokazuje, że zdajesz sobie sprawę z wagi weryfikacji swoich założeń
  • Pokazuje, że jesteś świadomy reprezentacji tekstu poza ASCII
  • Pozwala uniknąć postawienia ankietera na miejscu z jakąkolwiek alternatywną interpretacją, którą mógłbyś zidentyfikować
+1. Świetna odpowiedź. Kluczem jest to, że chcesz pokazać, że jesteś doświadczonym programistą (wiesz rzeczy dogłębnie i szukasz wyjaśnień), a jednocześnie dobrze traktujesz klientów. Prowadząc pytaniem „Załóż ASCII”, pokazujesz pierwszą cechę, a nie zagłębiając się w grupowanie grafemów, pokazujesz drugą. Wskazujesz, że możesz wejść głębiej, jeśli tego wymaga rozmowa kwalifikacyjna, ale zostawiasz osobę prowadzącą rozmowę kwalifikacyjną.
Vietnhi Phuvan
2015-05-27 20:11:38 UTC
view on stackexchange narkive permalink

Zaproponowanie rozwiązania, które jest o wiele bardziej złożone, niż poszukiwane przez ankietera, nie spodobałoby się ankieterowi. Mnie też nie pasowałoby, gdybym był twoim menadżerem.

Przekształcenie czegoś prostego w coś złożonego, kiedy oczekuje się od ciebie zrobienia czegoś prostego, doprowadzi cię do śmierci. Nikt nie prosi cię o prowadzenie kursu odwracania strun. Dostarcz rozwiązanie, które masz dostarczyć Jeśli potrzebujesz wyjaśnień co do tego, czego oczekujesz, zapytaj - nie zgaduj. Jeśli masz zastrzeżenia lub zastrzeżenia, zgłoś je w osobnym komunikacie.

Cóż, to cały problem mojego pytania. Odwrócenie łańcucha nie jest czymś prostym bez dalszych specyfikacji. Nie komplikuję problemu, problem jest skomplikowany. Jak mam przejść przez to, że jestem świadomy komplikacji bez - dokładnie tak, jak powiedziałeś - prowadzenia kursu o odwracaniu strun.
Podaj rozwiązanie, którego oczekuje ankieter. Jeśli nie wiesz, czego oczekuje ankieter, zapytaj go. A PO udzieleniu odpowiedzi, której oczekuje ankieter, wskaż, gdzie osoba przeprowadzająca rozmowę lub Ty możesz nadmiernie uprościć.
@Martijn, wydajesz się bardziej zainteresowany pokazaniem „tak, mam dużą wiedzę na temat wszystkich zawiłości” niż „tak, rozumiem, jak zaangażować się w sensowną interakcję z klientami w kwestii tego, jaki problem naprawdę chcą rozwiązać”. Zauważyłem, że ludziom bardziej zależy na tym drugim niż na pierwszym.
Rozumiem co mówisz. Gdyby tak się stało w rzeczywistym scenariuszu pracy, moje pytanie dotyczyłoby przypadku użycia. Dlaczego chcesz, aby zadanie zostało wykonane i co zamierzasz z tym zrobić. Stamtąd często można łatwo odgadnąć i zweryfikować wymagania techniczne. Ale pytania do rozmowy kwalifikacyjnej nie są wymagane dla użytkownika końcowego. Celem pytania nie jest uzyskanie wyniku zadania, ale sprawdzenie, jak wykonuję zadanie. Ale dopasowując pytanie do tego, pytając, dlaczego pytają i czego chcą się dowiedzieć, brzmi to dla mnie, jeszcze mądrzejszy tyłek.
@Chan-HoSuh Nie jest to prosty problem tylko dlatego, że tak myślą. Na tym polega cała podstawa sprzedawców oleju wężowego. Problem jest zwykle bardziej złożony, niż myśli użytkownik. Jeśli dr pyta o historię rodziny, czy popisuje się, czy rozwiązuje problem.
@Martijn Czy dobrze jest uzyskać ocenę A na egzaminie? Nie widziałem jeszcze egzaminu, który nie wymagałby dostosowywania odpowiedzi do oczekiwań projektanta egzaminu. Podobnie jak egzamin, rozmowa kwalifikacyjna to specjalnie zaprojektowana sytuacja, w której prawdopodobnie żadna inteligentna osoba, ankieter lub rozmówca nie lubi brać udziału. Ale istnieje, jak egzaminy. Osoba przeprowadzająca rozmowę jest Twoim klientem. On czegoś chce, tak jak profesor chce czegoś od studenta zdającego egzamin. Podobnie jak profesor, chce czegoś, co może ocenić i pokazać innym: „Ta osoba zdała / poniosła porażkę z tych powodów”.
@Blam, dlaczego zakładasz, że ankieter uważa, że ​​to prosty problem? Często wiedzą, że tak nie jest. Nie o to jednak chodzi w problemie z rozmową kwalifikacyjną, niezależnie od tego, czy chodzi o odwrócenie ciągów, czy coś innego.
@Chan-HoSuh Nie zgadzam się. Pytanie nie jest proste tylko dlatego, że tak myślą. Na studiach miałem błędne pytania, przy czym wskazanie błędu dawało mi dodatkowe punkty. Co jest zamknięte od rozwiązania do ...? Odpowiedziałem, że nie ma rozwiązania w postaci zamkniętej, które bym rozwiązał metodami numerycznymi. Na początku dostałem zero i gdy nikt nie miał rozwiązania w formie zamkniętej, wrócił i przyznał mi pełny kredyt. Ten sam profesor napisał list polecający, dzięki któremu dostałem się na studia magisterskie.
@Blam Nie sądzę, żebyś uważnie czytał mój komentarz. Wyraźnie powiedziałem, że ankieterzy mogą wiedzieć, że to nie jest proste. W każdym razie twój przykład jest nieistotny: oczywiście, jeśli problem jest wadliwy, jak stwierdzono, jest to inna sytuacja.
@Chan-HoSuh Inna sytuacja? Gdybyś wiedział, że pytanie jest błędne, nie zadawałbyś go. Wiedzieć, że to nie jest proste, to nie to samo, co nie wiedzieć, że to nie jest proste. Nie masz podstaw, by zakładać, że osoba przeprowadzająca rozmowę rozumie złożoność tekstu. Wczytuję i analizuję tekst, żeby żyć i nawet 99% programistów nie rozumie złożoności.
Część problemu dla mnie polega na tym, że nie wiesz, czy ankieter wie o złożoności, czy dba o nią, i próbując dowiedzieć się, co chcą od ciebie usłyszeć, możesz już umieścić cię w obozie pedantycznym
Ludzie już to sugerowali, ale zawsze uważałem, że dobrze jest nawiązać do pewnych subtelności, zanim przejdę do odpowiedzi „podręcznikowej”, a czasami najpierw udzielę „odpowiedzi”, jeśli jest to najszybsze. Chodzi mi o to, że wydaje się, że ludzie uwielbiają pytać o Javę: „Dlaczego klucz do hashmapy miałby być niezmienny?” kiedy oczywiście prawdziwa odpowiedź brzmi, że nie musi. Odpowiedziałem na to szybko, podając podręcznikową odpowiedź, a następnie „ALE ludzie naprawdę chcą, aby hash nie zmieniał się podczas używania, więc rozważ te przypadki…” i było dobrze. -
paparazzo
2015-05-27 22:09:44 UTC
view on stackexchange narkive permalink

Przeczytaj o ankiecie. Czy są techniczni i cenią szczegóły, czy też zajmują się biznesem i chcą, aby postrzeganie było łatwe? Czy są tylko ankieterami i tylko przeglądają scenariusz? Jaka jest natura tej pozycji - czy jest to aplikacja sterująca lotem, czy tylko zwykłe wewnętrzne czyszczenie danych dla jednorazowego załadowania.

W rzeczywistości zdarzają się skrajne przypadki w produkcji. Możesz zaprojektować dla nich z góry lub sobie z tym poradzić, gdy to nastąpi. Zwykle jest to droższe, gdy to się stanie. W najlepszym przypadku użytkownik znajduje złe dane i poświęca czas na ich naprawienie. Co gorsza, nie znajdziesz złych danych, w wyniku czego firma popełnia kosztowny błąd.

Tak, użytkownicy mogą być sfrustrowani, gdy zadajesz właściwe pytania, ale mogą narazić się na bałagan, jeśli coś, o czym nie uważali w tym czasie za ważne, pojawi się jako problem z produkcją.

Szoruję i wczytuję dane w ramach mojej pracy i jest to o wiele bardziej złożone, niż większość ludzi przyznaje. Te dwa słowa to nie to samo „nie mogę” i „nie mogę” to nie to samo. Nie mają nawet tych samych podwójnych cudzysłowów. Użytkownicy nie rozumieją, że to, co kopiujesz z programu Word, niekoniecznie jest tym, co wpisałeś. Powiedziano mi, żebym załadował dane, o których wiedziałem, że chcą je przeszukać. Powiedziałem im, że musimy normalizować, a oni powiedzieli, że nie potrzebujemy wierności. Z pewnością kluczowy klient nie mógł wyszukać inteligentnej oferty i poszedł balistycznie. Teraz mogę z góry zadawać właściwe pytania. Chodzi o to, że możesz zadawać pytania, na które są gotowi, tylko w sposób, który ma dla nich znaczenie. Ostrzeż ich o tym, co może się nie udać, tak aby kiedy coś się stało, pamiętają, że próbował mnie ostrzec.

Wiele firm poszukuje programistów zorientowanych na szczegóły. Musisz zadać pytanie w taktowny sposób. Jeśli nie nagradzają szczegółów, to nie jest to dobre rozwiązanie dla Ciebie. Rozmawiasz z nimi tak samo, jak oni z tobą.

A jeśli chodzi o wisiorek? Zadawaj pytania, używając terminów, które ankieter rozumie i powiedz im, dlaczego. Jeśli nie wiedzą, jakie jest kodowanie lub ascii, zapytaj ich, czy to tylko klawisze na klawiaturze.

W pokerze mają takie powiedzenie, że zawsze podbijaj nutsa (najwyższa możliwa ręka). Mogą dokładnie szukać programisty analnego i dać im szansę to zobaczyć. Raz przewracają oczami, a potem się wycofują.

Henry Tseng
2015-05-27 23:10:14 UTC
view on stackexchange narkive permalink

Pierwsze pytanie, które powinieneś sobie zadać podczas rozmowy kwalifikacyjnej, dotyczy tego, kto przeprowadza z Tobą rozmowę. Jaka jest ich rola? W zależności od roli, jaką pełnią w firmie, ich doświadczenie będzie się różnić, od wysoce technicznych, przez kierownicze, po wspieranie rówieśników, itp. ... Ponieważ doświadczenia będą się różnić, tak samo będą z oczekiwaniami.

Jaka jest ich rola, pomoże ci zrozumieć, jakie jest prawdziwe pytanie.

Przykłady tego, o czym mówię:

Dla kierownika technicznego , który na co dzień odgrywa mniejszą rolę w programowaniu, mogą pytać jesteś pytaniem, ponieważ chcą zobaczyć, jak rozwiązujesz problemy. Być może napotkali problem podczas zarządzania innym programistą i byli bardzo sfrustrowani szczegółową odpowiedzią. Nawet jeśli pytanie jest wysoce techniczne, możliwe, że po prostu sprawdzili je w Internecie. Często oczekują, że będziesz w stanie uzyskać wyniki, zamiast bez końca programować się w dziurze. Chociaż mają wiedzę branżową, ich głównym zainteresowaniem jest realizacja projektu. Oczywiście będziesz chciał być zwięzły i szybko uzyskać odpowiedź, ale wyjaśnij, że rzeczywista sytuacja może wymagać szczegółów, których nie można złamać.

* AKTUALIZACJA Znaczenie terminu „kierownik techniczny” może się różnić w zależności od branży / firmy. Ale tutaj odnoszę się do wyżej wymienionego zastosowania.

W przypadku programisty , który będzie Twoim rówieśnikiem, możesz zwykle założyć, że testuje Cię pod kątem znajomości domeny. Oczywiście widziałem również skrajność, w której ankietowany był proszony o rozwiązanie problemu za pomocą sortowania przez scalanie, kiedy istniały tysiące dobrze napisanych bibliotek w języku programowania, z którym pracowaliśmy. Umiejętność rozwiązania tego problemu w żaden sposób nie wykazała kompetencji na stanowiskach pracy. Było to raczej bardziej skomplikowane wyzwanie: „Czy jesteś wystarczająco dobry? Nie chcę spędzać całego czasu na opiece nad dzieckiem”. W takim przypadku rozsądnie byłoby, nawet jeśli przyjmujesz założenia, aby odpowiedzieć na swoje pytanie, przywołać wszystkie zastrzeżenia, aby pokazać im, że jesteś bystry i doświadczony.

„Tech lead” to tytuł zwykle nadawany silnym programistom, którzy udzielają wskazówek technicznych innym programistom, a czasami mają dodatkowe obowiązki zarządcze. Jeśli kiedykolwiek znajdziesz się w rozmowie z „kierownikiem technicznym”, nie omawiaj szczegółów. Programiści, którzy oszczędzają na szczegółach, tworzą błędy. Wskaż tam szczegóły i pozwól ankieterowi zdecydować o pominięciu go w zakresie pytania.
Dzięki, że zauważyłeś! Różne firmy używają tytułów do różnych celów. Najbardziej spotykałem się z „głównym programistą”, „architektem rozwiązań” lub „starszym inżynierem” jako rolą zorientowaną na programistę i „liderem technicznym” jako rolą kierownika projektu. Niemniej jednak zrozum, że osoba, której rola jest przede wszystkim mniej oparta na codziennym programowaniu, zwykle oczekuje innych odpowiedzi.
gnasher729
2015-05-30 19:27:23 UTC
view on stackexchange narkive permalink

Przeczytałem dyskusję na thedailywtf. Jeśli chcesz to zrobić poprawnie z ciągami znaków Unicode, jest to niezwykle trudne i prawdopodobnie niemożliwe. Z drugiej strony, nigdy nie widziałem nikogo, kto chciałby odwrócić strunę w prawdziwym życiu.

Więc ogłosiłbym, że pokażę kod, który odwraca kolejność punktów kodowych Unicode w ciągu (dając ankieterowi szansę spytania o coś innego), wyjaśnię, dlaczego odwrócenie kolejności wygranych bajtów ' być akceptowalnym i pisz jasny i wydajny kod, który robi to, co powinien.

Następnie powiedziałbym „jeśli chcesz, mogę Ci powiedzieć, jakie są problemy z tym kodem”. Po przeczytaniu dyskusji pojawiła się nieskończona liczba problemów, od całkiem rozsądnych po absolutnie ezoteryczne do niemożliwych do rozwiązania. Słyszałem też, że są ankieterzy, którzy powiedzą „jest błąd w Twoim kodzie, czy możesz go znaleźć”, więc masz na to odpowiedź :-)

W wielu sytuacjach programistycznych, gdy pytasz o wyjaśnienia, osoba proszona o wyjaśnienia tak naprawdę nie ma pojęcia. Więc jeśli zamiast pytać o specyfikację, której nie mają, napiszesz specyfikację i zapytasz „czy ta specyfikacja jest dla Ciebie akceptowalna”, jest to o wiele bardziej pomocne.

Jeśli zostaniesz poproszony o kod do skopiowania pliku, możesz zapytać, co powinieneś zrobić w przypadku wszystkich możliwych błędów. Zamiast tego możesz wymyślić plan, co zrobić, i zapytać „oto, co sugeruję, co powinno być zrobione, gdy są problemy, czy wszystko w porządku”. Myślę, że to idzie o wiele lepiej niż niekończące się prośby o wyjaśnienia. Oznacza to również, że najprawdopodobniej twoje sugestie zostaną zaakceptowane lub zastąpione czymś lepszym, a nie czymś, co twój szef wymyślił na miejscu, ponieważ go o to poprosiłeś.

user8365
2015-05-27 20:04:22 UTC
view on stackexchange narkive permalink

Myślę, że powinieneś poprosić o wyjaśnienie. Wywiad nigdy nie jest miejscem, w którym można „zgadywać, co myśli ankieter”.

Jeśli chcą prostego rozwiązania, to:

  myReverseStringFunction ("banana") {print "ananab";}  

Można to postrzegać jako: geniusz, prostoduszny lub sprytny.

Osobiście wolałbym zatrudniać ludzi, którzy są zdolni do robienia skomplikowanych rzeczy i współpracować z nimi, aby to złagodzić, niż ludzi, którzy nie mają umysłowej mocy i nie wiedzą, jak uczynić ich mądrzejszymi.

EDYCJA: Zwykle w pytaniach o kodowanie wywiadów nie oczekuje się pisania kodu, który w pełni się kompiluje, ma pełne pokrycie testów jednostkowych, obsługuje błędy, sprawdza poprawność danych wprowadzonych przez użytkownika, jest zbyt wydajny, skaluje, wygląda elokwentnie, pięknie itp. Zawsze możesz zapytać. Dobry ankieter poinformowałby Cię, czego się oczekuje.

EDYCJA 2: Może powinniśmy przestać zadawać pytania programistyczne podczas rozmów kwalifikacyjnych i po prostu spojrzeć na wpisy kandydata na Githubie.

Prawda boli.
Chcę zatrudniać ludzi, którzy też potrafią robić skomplikowane rzeczy, ale odpowiedź „ananab” nie zrobiłaby na mnie dobrego wrażenia.
czy możesz wskazać język, w którym to faktycznie działa?
Cóż, byłbym pod wrażeniem tego, zakładając, że zapewniają one również realne rozwiązanie, gdy odpowiednio uściślę moje pytanie i zapytam ponownie.
@MonicaCellio - Ja też bym tego nie zrobił i gdybym z kimś przeprowadzał wywiad, dałbym mu o tym znać.
@njzk2 - pseudokod, kompiluje się na białej tablicy.
Jako kandydat chciałbym * nie * pracować dla kogoś, kto akceptuje wyrażenie „print" ananab "jako odpowiedź. Ale nie mogę wymyślić prostego sposobu na przetestowanie tego bez utraty mojej wymarzonej pracy, w której taka odpowiedź jest źle widziana.
Wygląda na to, że ktoś proszony jest o napisanie funkcji sortowania i udzielenie odpowiedzi „print 1,2,3”. Nie pokazuje, że potrafisz pisać kod lub że znasz algorytmy odwracania / sortowania czegokolwiek, tylko że znasz definicję „odwróconego” / „posortowanego”. Jeśli nie możesz zademonstrować, czego chcą w rozmowie kwalifikacyjnej, masz przerąbane. Wydaje mi się jednak, że przegapiłem sens, w jaki sposób można to postrzegać jako genialne. Czy jest to bierno-agresywny protest wobec braku realnej specyfikacji zadania?
@SteveJessop - Oczywiście, że nie. To trochę ekstremalny przykład, ale myślę, że są programiści, którzy stworzyli podobne hacki, aby przeprowadzić test jednostkowy lub po prostu sprawić, by coś działało. Lepszy programista poprosiłby o trochę więcej wyjaśnień, ponieważ lepszy ankieter wyjaśniłby trochę więcej na temat tego, czego oczekuje.
@Atsby - To jest przykład przyjęcia czegoś w rodzaju „prostoty” słowa, które jest rzucane w naszym zawodzie zbyt często, trochę zbyt dosłownie. Programujesz wystarczająco długo i znajdziesz znacznie gorsze wykroczenia, ponieważ ten kod może sprawić, że test jednostkowy zostanie zaliczony i to wszystko, co ma znaczenie w przypadku niektórych podejść do programowania.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...