Wydaje się, że istnieje OGROMNA rozbieżność między tym, czego oczekuję od kogoś, kto studiował programowanie przez kilka lat na uniwersytecie, a tym, co się właściwie zna.
Nie mam ochoty zadawać zbyt skomplikowanych pytań w wywiadach. Niektóre z moich zwykłych pytań to:
Jaka jest różnica między typem odniesienia a typem wartości?
Jeśli wydaje się, że rozmówca tak naprawdę nie rozumie własnej odpowiedzi lub jeśli nie zna terminologii, której używam, wchodzę w więcej szczegółów, prosząc go o wyjaśnienie, co się dzieje, gdy piszę int i = 0; w metodzie, co z obiektem o = 0, obiektem o = nowa MyClass () itp.
Zasadniczo robię wszystko, co w mojej mocy, aby oszukać rozmówcę, aby powiedział mi o stosie wywołań, stosie itp., I staram się pozostać przy koncepcjach agnostycznych z językiem. Jeśli rozmówca powie mi, że zrobił dużo C, C ++ lub c #, nurkuję głębiej w konkretnym języku i prawdopodobnie w szczegółach implementacji.
W razie potrzeby pytam rozmówcę, co to jest stos wywołań lub gdzie przechowywane są argumenty przekazywane do funkcji w wybranym przez niego języku rozkazującym.
większość rozmówców nie ma pojęcia o tym, czym jest callstack, nie mówiąc już o boksie itp.
Jaka jest różnica między klasą abstrakcyjną a interfejsem. W jakich przypadkach należy stosować jeden na drugim?
Zwykle proszę również, aby wyobrazili sobie projekt małej biblioteki z przypadkiem użycia mającym na celu wykorzystanie pewnego dziedzictwa i niektórych abstrakcyjnych fabryk
Większość rozmówców nie ma pojęcia, jaki może być prawdziwy cel dziedziczenia. Zazwyczaj znają niektóre słowa kluczowe (wirtualne, zastępowanie itp.), Ale tak naprawdę nie wiedzą, kiedy ich użyć, nie mówiąc już o wyjaśnieniu, czym jest wirtualna tabela.
Mimo że wcześniej sprawdzam CV, nawet w przypadku osób z 5-letnim doświadczeniem w projektach z udziałem złożonych architektur, powiedziałbym, że mniej niż 25% wszystkich moich rozmówców może poprawnie odpowiedzieć na te dwa pytania. A kiedy mówię poprawnie, nie mam na myśli „dogłębnie” ... tylko po to, aby mieć przybliżone wyobrażenie o tym, czym jest ta koncepcja.
Jeśli chodzi o juniorów, nie mam nic przeciwko zatrudnieniu kogoś, kto nie wie, jak dobrze zorganizować swój czas, lub kogoś, kto nie jest przyzwyczajony do procesów budowy przemysłowej, ale mam wrażenie, że jeśli ktoś nie słyszał słowa „ callstack ”po kilku latach studiowania informatyki jest albo głupi, albo niemotywowany, albo wybrał swój uniwersytet bardzo niemądrze.
Myślisz, że jestem tu zbyt ekstremistką? Czy często uczyć się tych podstawowych po ukończeniu uniwersytetu? Czy znasz osoby, które nie były z nimi zaznajomione i po kilku latach stały się bardzo dobrymi inżynierami oprogramowania? I czy uważasz, że moja firma może mieć problem z przyciąganiem utalentowanych ludzi, czy może doświadczasz tego samego rodzaju problemów w procesie rekrutacji?
Edytować. jeśli chodzi o „typ natychmiastowy”, było to dosłowne tłumaczenie z francuskiego na angielski, jak zwykle przeprowadzamy nasze wywiady w języku francuskim. Naprawiłem to w swoim pytaniu. Ale nadal myślę, że wszyscy doskonale rozumiecie, co miałem na myśli, co to za punkt widzenia, prawda?