Co mogę zrobić, jeśli osoba przeprowadzająca wywiad nie zna odpowiedzi na swoje pytanie? [Zamknięte]

48

Wczoraj miałem straszne doświadczenie w wywiadzie.

Ankieter zapytał mnie o czystą funkcję wirtualną. Powiedziałem: Może lub nie może mieć definicji w klasie bazowej, ale klasy pochodne powinny zapewniać definicję, chyba że chcą także być klasą abstrakcyjną.

Ale ankieter ciągle pytał: „Czy czysty wirtualny może mieć definicję !!! ???” ... Powiedziałem tak.

Znów powiedział „Czysty?”

Powiedziałem tak. Jest to dozwolone, klasy pochodne mogą jawnie wywoływać tę funkcję, jeśli chcą tego konkretnego zachowania.

Wysłał mnie. Jestem pewien, że nie wie on, że czysta funkcja wirtualna może mieć definicję.

Jak radzić sobie z tego rodzaju ankieterami?

Czy po drugim pytaniu powinienem kłamać, że nie może mieć definicji? :)

Czy powinienem trzymać się słów i stracić okazję do pracy?

bjskishore123
źródło
51
Powinieneś skontaktować się z nimi z przykładem czystej funkcji wirtualnej z definicją, aby wiedzieli.
GManNickG
22
Sugestia GMana to doskonały pomysł. Prawdopodobnie zrobisz wrażenie na rozmówcy, że wystarczająco ci zależy na pracy, aby sprawdzić, czy on ci wierzy, czy nie. A jeśli nauczysz go czegoś tak niekonfrontacyjnie, jak to możliwe, powinno to tylko zachęcić go do myślenia o tobie jako programistce. Wciąż trudna decyzja, czy chcesz tam pracować, czy nie.
Cody Gray
47
Ale czy naprawdę chcesz pracować dla takich ludzi?
29
Jeden z moich ankieterów zadał mi pytanie dotyczące tego wyrażenia arr[++i] = i. A kiedy powiedziałem, że wywołuje to nieokreślone zachowanie i powiedziałem mu o sekwencjach , przez chwilę oniemiał, a potem wyraz jego twarzy i dalsze pytania sprawiły, że uwierzyłem, że nigdy wcześniej nie słyszał tych terminów!
Nawaz
10
Weź pod uwagę, że ankieterzy są często wybierani nie ze względu na ich umiejętności techniczne, ale zdolność do oceny zdolności komunikacyjnych rozmówcy. Umiejętności techniczne są łatwe do oszacowania, zdolność do produktywności i dopasowania do zespołu nie jest. Wydaje mi się, że masz mnóstwo okazji do dostosowania swojego poglądu i wyjaśnienia swojego nalegania, aby tego nie robić, ale nie osiągnąłeś żadnego z nich. To nie poszło dobrze.
Hans Passant,

Odpowiedzi:

82

Nie. I powinieneś podziękować swoim szczęśliwym gwiazdom, za którymi tęskniłeś. Praca dla ludzi, którzy odmawiają przyznania się, że mogą nie wiedzieć wszystkiego i odmawiają uczenia się od innych, jest BARDZO nieprzyjemnym doświadczeniem.

Edward Strange
źródło
7
Dokładniej proces rozmowy kwalifikacyjnej działa w obie strony. Podczas gdy firma ocenia mnie jako pracownika, oceniam ich jako pracodawcę. Wielu uważa, że ​​chcą.
WŁAŚNIE MOJA poprawna OPINIA
W rzeczy samej. Podczas mojej rozmowy telefonicznej na stanowisko kilka dni temu, ankieter poprosił o przykład czegoś, co wykazałoby znajomość języka, którego używa. Pytanie w tej sprawie zostało dodane w ostatniej chwili do osobistego wywiadu. Znam tych facetów i wiem, że są świetnymi deweloperami, więc myślę, że chcę z nimi pracować. :)
greyfade,
49

Przykład czystej funkcji wirtualnej z definicją:

// object.hpp
struct object
{
    // virtual destructor, to allow use as a public base class,
    // but pure to ensure object itself isn't instantiated
    virtual ~object() = 0; 
};

inline object::~object()
{
    // empty implementation
}
GManNickG
źródło
6
To nie jest tylko przykład czystej funkcji wirtualnej z definicją, ale przykład, w jaki sposób może być faktycznie przydatny. +1.
j_random_hacker
3
Nie wiedziałem, że możesz to zrobić. Chłodny! = D
gablin
2
Jest to sposób na utworzenie podstawowego obiektu polimorficznego. Następnie można go użyć do dynamicznego rzutowania w dół hierarchii. Przydatne w niektórych okolicznościach, np. Wtyczki, do sprawdzenia, czy wtyczka jest oczekiwanego typu (przy założeniu, że na pewno wywodzi się z twojej klasy podstawowej). Nawiasem mówiąc, czysty wirtualny destruktor MUSI otrzymać definicję.
CashCow 30.01.2011
Gdyby tylko to mogło być trywialne , byłoby miło.
Deduplicator
42

Problemem nie jest poprawność techniczna, ale umiejętności społeczne / komunikacyjne. Wytrzymaj, ale uznaj punkt widzenia ankietera i pozwól mu uratować twarz.

Gdy zobaczysz, na co polował („czysty?” To dobra wskazówka), dobrą odpowiedzią może być:

Powszechnie uważa się, że funkcje czysto wirtualne nie mogą mieć definicji. Jednak technicznie rzecz biorąc, aby funkcja wirtualna była czysta, musi mieć ją =0w deklaracji. Nadal może mieć definicję (spróbuj, skompiluje się!). Oczywiście jest to rzadko używane, a w praktyce, gdy większość ludzi mówi „czysto wirtualna”, sugeruje brak definicji.

dbkk
źródło
3
Zasadniczo skopiowałeś mój komentarz 25 minut. zanim to napisałem! W jaki sposób? - Usunięto +1 i komentarz o podobnej tematyce.
Steve314,
3
To kolejny dobry punkt. Kiedyś argumentowałem swoją ocenę na testach, ponieważ pokazałem mojemu profesorowi, że kod, który napisałem na teście, skompiluje się. Kompilator nie kłamie ... nigdy ...
jmort253
3
To była dokładnie moja myśl. Mówiąc „tak, mogę”, bez wyjaśnienia, wydaje mi się jasne, że osoba przeprowadzająca wywiad uznała, że ​​nie rozumie pytania. Rozwijając odpowiedź, wyjaśnisz, że a) rozumiesz pytanie i b) faktycznie znasz odpowiedź. Nie sądzę, że osoba przeprowadzająca wywiad musiała się mylić, próbując naciskać na tę kwestię, jest to oczywiście dość powszechne nieporozumienie, że ludzie myślą, że czyste funkcje wirtualne nie mogą mieć definicji.
Dean Harding
10
@ Zachowaj podróż w czasie od 500 powtórzeń, musisz przegapić powiadomienie
Pekka obsługuje GoFundMonica
Zrobiłem to samo kilka lat temu w wywiadzie dla C ++ (dla systemu o wysokiej wydajności), w którym wyjaśniłem, że użycie obiektu funkcji może mieć lepszą wydajność niż użycie wskaźnika funkcji z powodu wstawiania i wyjaśniłem mu to. Zacytowałem także książkę „Effective C ++”. Wstał, żeby sprawdzić książkę i powiedział, że nie wie o tym i był pod wrażeniem. Dobrze jest wyjaśnić swoją odpowiedź.
softveda,
10

Można było wyjaśnić, jak zadeklarować funkcję czysto wirtualną z implementacją.

W rzeczywistości chciałbym, żebyś tu był, ponieważ nie znam się na tym, jak to zrobić.

Jonathan Wood
źródło
5
Po prostu deklarujesz funkcję jako wirtualną, a następnie udostępniasz implementację. Jest to dość rzadka praktyka, aby to zrobić, ale w „Effective C ++, 3rd Edition” Scott Meyers opisuje kilka scenariuszy, w których jest to przydatne. W szczególności, ponieważ funkcja jest czysto wirtualna, klasa, w której została zadeklarowana, jest abstrakcyjna, ale ponieważ ma implementację, daje podklasom domyślną implementację, którą mogą jawnie wybrać, jeśli chcą.
1
Cóż, to nie tłumaczy JAK to się stało. Jeśli ktoś jest zainteresowany, sprawdź en.wikipedia.org/wiki/… . W każdym razie nadal myślę, że wyjaśnienie, jak to zrobić, byłoby najlepszą odpowiedzią.
1
+1 - a ja popieram twoją drugą linię. Gorzej, chyba że byłbym w wyjątkowo „ale czasem w złym” nastroju, stanąłbym po stronie ankietera. Problem polega na tym, że możesz tylko odgadnąć swoje przekonania do pewnego stopnia, w przeciwnym razie faktycznie nic nie wiesz.
Steve314,
1
@ Steve314: Heh, uważam, że im starszy jestem, tym bardziej jestem otwarty na to, że się mylę. Zawsze jest ktoś, kto wie więcej niż ja. :-)
@Jonathon - tak, ale bez 100% dokładnego wskazania, jak powinienem być pewny wszystkich moich opinii, skąd mam wiedzieć, które z nich zadać? A być otwartym na bycie w błędzie, czy to oznacza, że ​​zawsze powinienem zakładać, że inni ludzie mają rację, a ja się mylę? Wszyscy od czasu do czasu możemy być pewni siebie, ale się mylimy, ale czy to oznacza, że ​​nigdy nie powinniśmy potwierdzać naszej pewności? A jeśli mój poziom zaufania nie powinien być moim przewodnikiem po tym, czy trzymam się broni, dopóki nie zobaczę mocnych dowodów, co powinienem?
Steve314,
6

Wiele razy, kiedy przeprowadzam wywiad z kandydatem, szukam sposobu, w jaki dana osoba radzi sobie z niepewnością lub radzi sobie z konfrontacją. Następnym razem, kiedy przeprowadzasz wywiad, bądź na to wrażliwy i spróbuj konstruktywnie odpowiedzieć na pytanie lub wyjaśnić swoje stanowisko. To może być ważniejsze niż poprawna odpowiedź.

ראובן
źródło
To świetna odpowiedź.
Neil G
+1: Tak przeprowadzam wywiad. Bardziej zależy mi na tym, jak współdziałamy i wymieniamy myśli bardziej niż to, co jest dobre, a co nie. Opracuj swoją pozycję i / lub wyjaśnij jej uzasadnienie, a także wykażesz, że nie tylko jesteś kompetentny, ale także jesteś „graczem zespołowym”.
mummey,
Kolejna +1: Myślę, że ważne jest, aby zatrudnić ludzi, którzy mogą się dobrze kłócić . Jeśli nowy najemnik nie będzie w stanie obronić swoich pomysłów, nie osiągnie daleko w zespole z innymi silnymi ludźmi!
Zan Lynx
5

Byłem w wywiadach, w których wiedziałem więcej niż mój ankieter. Chcieli jednak, aby ktoś wypełnił rolę i nie mieli (oczywiście) nikogo, kto mógłby przeprowadzić wywiad na tym poziomie.

Czy w twoim przypadku czujesz, że była to ślepa ignorancja lub prawdziwe nieporozumienie? Być może wiadomość zwrotna z przykładami i referencjami: sprawdź, jak zareagują przed podjęciem decyzji.

Skłaniam się ku „ślepej niewiedzy”, choć opiera się na twoim pytaniu i pozostałbym jasny ...

gbn
źródło
Ankieter zadał tylko to pytanie i wysłał mnie. Nie mogę się z nimi skontaktować, ponieważ nie mam identyfikatora e-mail.
bjskishore123
@ bjskishore123: przez agencję?
Trzymałbym się
tak, poprzez konsultacje.
bjskishore123
+1 To powszechne doświadczenie. Tylko raz miałem wywiad z każdym, kto wiedział wystarczająco dużo, aby sprawdzić mój zestaw umiejętności.
Orbling
3

W takiej sytuacji proponuję napisać prostą klasę z wirtualną funkcją z ciałem i sprawdzić, czy się kompiluje. Przynajmniej proponuję przeszukać temat w Google.

Jeśli ankieter podejmie wyzwanie, przyznaje się do porażki i nie wygląda na to, że zaraz cię udusi, to powinieneś być w dobrej formie. W przeciwnym razie prawdopodobnie nie jest to osoba, z którą chcesz pracować.

Dima
źródło
3

Całkowicie nie zgadzam się z pomysłem, że powinieneś zrezygnować z firmy, ponieważ facet przeprowadzający z tobą wywiad nie zna odpowiedzi na jego pytanie. Nawet podczas pracy spotkasz ludzi upartych, nawet gdy się mylą. To dobra umiejętność manewrowania ludźmi, aby uzyskać właściwą odpowiedź.

W moim przypadku ankieter zapytał, jak obliczyć wariancję wielu liczb na wielu komputerach. Zacząłem od stwierdzenia, że ​​wariancja jest średnią kwadratów minus kwadrat średnich. Wtrącił: „nie, to jest E[(x - mu)²]”.

Powiedziałem: „Tak, masz rację. Ale twoja formuła jest taka sama jak moja. Wyprowadźmy to razem”. A potem wyprowadziliśmy to razem.

W sytuacji, gdy uznasz, że osoba przeprowadzająca wywiad jest niedowierzająca, musisz zmienić swoje podejście. Powiedz mu, że jest to rzadko znana funkcja (ma to na celu sprawienie, byś brzmiał mniej jak wiedzący wszystko), a jeśli chce, wyślesz mu przykładowy program lub odniesienie do książki C ++ po wywiadzie (jest to dzięki czemu wywiad może przejść z wdziękiem do przodu).

Spróbuj wyobrazić sobie rzeczy z jego perspektywy. Pewnego dnia będziesz przeprowadzać wywiady z ludźmi i czasem się mylisz. Jak chciałbyś, aby lśniący kandydat odpowiedział na takie pytanie?

Neil G.
źródło
Średnia to E [(x - mu) ²], chociaż prawdopodobnie miałeś na myśli to. Możesz więc ocenić, że dla E [x² - 2xmu + mu²] = E [x²] - E [2xmu - 2mu²] - E [mu²] E [(x-mu)] wynosi zawsze 0, a E [mu²] = mu² as mu jest stałą w ten sposób udowodnioną.
CashCow 30.01.11
2

Myślę, że powinieneś przenieść wywiad z biurka na komputer z kompilatorem. To rozwiązałoby problem.

Stefano Borini
źródło
1

EDYCJA: najwyraźniej całkowicie się mylę, patrz komentarze poniżej tej odpowiedzi. Pozostawienie odpowiedzi tutaj w celach edukacyjnych.

Niestety się mylisz. Funkcja wirtualna może mieć definicję; czysty wirtualne funkcja nie. Brak definicji sprawia, że ​​jest czysty.

Philip Potter
źródło
8
Nie, przykro mi. On ma rację.
GManNickG
1
BZZT !!! Źle! = 0 jest tym, co czyni go czystym. Takie funkcje mogą mieć definicje.
Edward Strange
4
huh, pokoloruj mnie zaskoczony. Nigdy tego nie wiedziałem.
Philip Potter
3
Wikipedia wyjaśnia, że ​​„Chociaż metody czysto wirtualne zwykle nie mają implementacji w klasie, która je deklaruje, czysto wirtualne metody w C ++ mogą zawierać implementację w swojej klasie deklarującej, zapewniając awaryjne lub domyślne zachowanie, które klasa pochodna może delegować w razie potrzeby. „ Nawet jeśli zdefiniowanie jego implementacji przez funkcję wirtualną jest czymś niezwykłym lub nietypowym, jest możliwe.
Cody Gray
1

Wiesz, że cokolwiek odpowiedziałeś, jest słuszne. Moim zdaniem wykonałeś dobrą robotę, trzymając się odpowiedzi, ponieważ miałeś rację. Nie ma potrzeby kłamać, ponieważ jeśli nie dzisiaj, jakiś inny ankieter czasu dowie się o czysto wirtualnych funkcjach !!!! .. On również może cię testować, aby sprawdzić, jak silna jesteś w swoich decyzjach? Czy jesteś osobą, która łatwo daje się ponieść emocjom? Nie ma potrzeby tracić nadziei, ponieważ dobrze znasz swoje


źródło