Gdybyś mógł zadać programistowi C ++ jedno pytanie, aby zmierzyć jego umiejętności w C ++, co by to było?
Pytanie, które uważam za najlepsze, brzmi: czy możesz nazwać „usuń to”; wewnątrz funkcji członka? (Podaję to jako link, abyś mógł to najpierw przemyśleć, a następnie przejść do pytania o najlepszy wywiad w C ++ - kiedykolwiek !, aby zobaczyć poprawną odpowiedź.)
Nie pytam o to, ponieważ oczekuję, że większość ludzi zna odpowiedź. Gdyby to zrobili, pytanie nie byłoby tak przydatne. Proszę o sprawdzenie, czy potrafią znaleźć właściwą odpowiedź i jak to robią.
Najlepsze pytanie do wywiadu w C ++ byłoby problemem programistycznym, a nie pytaniem quizowym.
źródło
CString
,char*
,std::string
itp .; czy zwracają nowy ciąg znaków lub odwracają na miejscu; czy ręcznie zapętlają znaki, czy wywołują funkcję biblioteki. I oczywiście, jeśli nie mogą zrobić czegoś prostego, takiego jak odwrócenie struny, to również wiele o nich mówi! Istnieje również wiele pytań uzupełniających, takich jak czy działa z Unicode, czy działa z UTF-8 itp.Zapytałbym ich, co im się podoba w C ++ 0x. Na tej podstawie mogłem „podzielić” je na różne stereotypy:
Możliwe, że niektóre z tych wiader są dla Ciebie idealne, a niektóre są „dzięki za przybycie”. To pytanie, które szybko dostarcza wielu informacji, to mój zwycięzca.
źródło
Jestem nieco zaskoczony, dlaczego „możesz to usunąć?” jest uważane za interesujące pytanie. Każdy, kto napisał kod COM w C ++, wie, że pierwszą rzeczą, której uczysz się pierwszego dnia podstawowego programowania COM, jest prawidłowe użycie „usuń to”. Przypuszczam, że przydatne może być ustalenie, czy powiedzmy, że ktoś kłamie na temat pisania programów COM, ale jako ogólne pytanie C ++ o wiedzy ogólnej, jeśli ktoś nie może odpowiedzieć od razu, to nie będzie dobrze dla mojego zespołu.
W każdym razie, jeśli Twoim celem jest znalezienie pytania mierzącego umiejętności C ++, wybranie jednego pytania jest niewłaściwą drogą. Obróć to. Prawidłowe pytanie, które należy zadać, to:
To nie jest pytanie, które pozwala uzyskać odpowiedź, której chcesz. Niezależnie od tego wszyscy mówią „osiem”. Pytanie, na które otrzymujesz odpowiedź, którą chcesz, to:
I bum , teraz je masz. Jeśli kandydat myśli, że „coś wspólnego z rekurencją” lub „kiedy użyć wirtualnego destruktora” jest czymś, z czym siódemka ma trudności, to wiesz, że on wie trochę o rekurencji lub niszczycielach itp. i że ich wiedza nie idzie znacznie dalej.
To powinno dać ci znacznie lepszą kalibrację niż wymyślenie kilku ciekawostek. Gdybyś zmusił mnie do wymyślenia dobrego pojedynczego pytania na temat faktu dotyczącego C ++, prawdopodobnie zadałbym coś takiego: „jak zaprojektowałbyś analizator semantyczny i generator kodu dla części kompilatora C ++, który zajmuje się metodami wirtualnymi wywoływany w destruktorze klasy podstawowej? ” Powinieneś zadawać pytania dotyczące prawdziwych rzeczy, nad którymi pracujesz i na których kandydat prawdopodobnie będzie pracował. To był problem, nad którym kiedyś musiałem pracować i myślę, że dałoby to całkiem dobry wgląd w to, jak dana osoba projektuje analizatory semantyczne i generatory kodu, a także ich znajomość C ++.
źródło
Dla zabawy mam programistów C ++ zwijających się z tym małym dzieckiem:
Dlaczego działa to w nieskończoną pętlę (i tak, jest poprawnie wpisane)?
To niesamowite, ile osób się potknęło. Oczywiście nie mogę go już używać po pojawieniu się na stosie przepełnienia . Mruczenie ... mruczenie ...
(Aby uzyskać właściwą odpowiedź, przeczytaj spowiedź i zdecydowanie przeczytaj komentarze)
Dodano pytanie bonusowe
Istnieje wszechstronny klasyczny FizzBuzz (opisany w znanym już artykule Coding Horror ). Nigdy tak naprawdę nie użyłem go w wywiadzie, ale po tym, jak rzuciłem go zespołowi programistycznemu na jeden lunch, wyniki były ... hmm ... zaskakująco dokładne.
Wyznanie
Zostałem złapany na standardowej odpowiedzi „x ++ zwraca wartość oryginalną”. Jednak poprawną odpowiedzią jest to, że zachowanie jest niezdefiniowane z powodu punktów sekwencji. Nikt nigdy nie wspominał o punktach sekwencyjnych przez cały czas, gdy używałem tego, dopóki nie opublikowałem go tutaj.
Zostałem wykształcony i naprawdę chciałbym podziękować wszystkim, którzy poświęcili czas na komentowanie.
źródło
Pierwszą rzeczą, którą należy zadać, jest proste pytanie dotyczące wskaźników. Byłem zdumiony, widząc, jak wielu ludzi, którzy twierdzą, że znają C ++ lub, co gorsza, C, nie jest w stanie odpowiedzieć. Następnie zadałbym proste pytanie dotyczące funkcji wirtualnych. Ta kombinacja mówi bardzo szybko, czy dana osoba faktycznie zna C ++.
źródło
Wiele zależy od tego, jaki C ++ jest napisany w Twojej firmie. (Kiedy musiałem zatrudnić programistów C ++, nigdy nie pytałem o to
delete
, ponieważ zapytałem ich o techniki, dzięki którym nie musieliby pisaćdelete
).Idealnie byłoby, gdybyś chciał zatrudnić ludzi, którzy piszą kod powyżej poziomu, który obecnie pisze Twój zespół, ale nie zbyt wysoko, chyba że chcesz połączyć to ze szkoleniem zespołu, aby wzniósł go na wyższy poziom.
źródło
źródło
Sądzę, że zapytałbym ich, co jeszcze wiedzą, lub, co bardziej prawdopodobne, zadałby im pytanie dotyczące czegoś zupełnie innego.
Zbyt wiele programistów C ++ o tym, którzy mają niewielkie doświadczenie w innych językach. Wąskie doświadczenie jest zwykle ograniczające.
źródło
Najlepsze pytanie dla świetnego programisty C ++ brzmi: „Powiedz mi, dlaczego NIE powinniśmy używać C ++?”
źródło
Nie sądzę, aby było najlepsze pytanie w C ++. C ++ jest tak dużym językiem, a dzięki C ++ 0X jest rozwinięty, że możesz być silny w pewnej subdomenie języka i niewiele więcej o innej jego części. Pytanie „jednym strzałem” sprawi, że czyjaś znajomość tylko niewielkiej części języka będzie ryzykować, że może przeoczyć jego wiedzę na temat innych aspektów tego języka.
źródło
Na StackOverflow jest sporo. Podzielę się kilkoma:
https://stackoverflow.com/questions/2428404/tricky-interview-question-for-c
https://stackoverflow.com/questions/50447/favorite-c-interview-question
https://stackoverflow.com/questions/4269838/interview-question
https://stackoverflow.com/questions/2532102/can-a-pointer-ever-point-to-itself
https://stackoverflow.com/questions/3055141/interview-question-about-virtual-functions-in-c
źródło
Moje ulubione pytanie jest proste:
a) Czy zacząłeś od C, a następnie przeszedł na C ++?
b) Jeśli tak, to jakich pierwszych rzeczy nauczyłeś się inaczej?
Ta odpowiedź zazwyczaj daje mi do zrozumienia, w jaki sposób programista podchodzi do C ++ i ogólnie rozumie OOP i C ++.
nie ma tu odpowiedzi „właściwej” ani „błędnej”, ale zazwyczaj jest to świetny sposób, aby dowiedzieć się, skąd pochodzi kandydat.
źródło
Przedstawiłbym tej osobie nieco kodu z innego języka programowania, który był zorientowany obiektowo i najlepiej nie znajdował się na liście języków, które znają. Kod powinien reprezentować proste zadanie wykonane w tym języku.
Nie chodzi o to, by ustalić ich znajomość C ++, ale dowiedzieć się, jak dobrze rozumieją programowanie. Kiedy zrozumiesz podstawowe pojęcia związane z programowaniem, możesz rozwiązać problemy.
źródło
Jak wdrożyć funkcje wirtualne w C ++, wyjaśnij scenariusz z prawdziwego świata.
źródło
W tej chwili powiedziałbym: „Jak poszedłbyś do implementacji konstruktora przenoszenia dla kontenera?”
Moim uzasadnieniem jest to, że ponieważ konstruktory ruchów są cechą następnego standardu, a nie obecnego, odpowiedź kandydata wskaże, czy dany programista aktywnie dąży do znajomości swojego języka, czy po prostu trzyma się sztuczek, które zna.
źródło
Myślę, że będę prosić ich o opinię do projektu, powiedzmy
std::string
. Zapytałbym ich również, czy użyli innych projektów (np. MFC / ATLCString
,wxString
itd) i zakładając, że masz, poproś, aby porównać i wzorów.Ciągi są na tyle szeroko stosowane, że prawie każdy z prawdziwym doświadczeniem w posługiwaniu się C ++ powinien był użyć co najmniej jednego lub dwóch powyższych. Prawie wszystkie projekty zawierają pewne kompromisy między teoretyczną czystością a praktycznym zastosowaniem. Niektóre mogą działać naprawdę dobrze, ale tylko wtedy, gdy są używane dokładnie zgodnie z przeznaczeniem, podczas gdy inne wymieniają większą wszechstronność na niektóre możliwe niezdarności. Krótko mówiąc, prawie każdy, kto ma prawdziwe doświadczenie powinny być w stanie wyrazić jakieś sensowne opinie ich wzorów i opinie te powinny wam kwotę uczciwą o tym, jak oni myślą, jak oni zaprojektować kod, stopień, do którego wartość pragmatyzm kontra czystości teoretycznej, i tak dalej.
źródło