2010-06-22 15 views
6

Podczas wywiadów z absolwentami zazwyczaj zadaję im pytania dotyczące struktur danych, algorytmów i teorii złożoności. Naprawdę chciałbym zadać pytanie, które pozwoli im wykazać się znajomością wielowymiarowych koncepcji, nie koncentrując się na konkretnych kwestiach językowych.Jakieś dobre pytanie związane z pracą z wywiadem?

Masz dobre pytania? Jedyne pytanie, jakie mogłem wymyślić, to jak napisać Singleton, który obsługuje dostęp wielowątkowy.

+0

Człowieku, zawiodłem na rozmowie o pracę, ponieważ nie zawracam sobie głowy zamkami, itp. Używanie języka zaprojektowanego dla rozsądnej współbieżności ma swoje zalety . –

Odpowiedz

3

Uważam, że klasyczne pytanie "napisz mi pytanie o producenta-konsumenta" jest całkiem niezłe. Możesz mówić o synchronizacji w sposób ręczny wcześniej przez pięć minut (np. Zacznij od "Co robi Object.wait() zrobić?" Jakie inne metody są związane z? Czy możesz podać przykład, kiedy możesz ich użyć? techniki współbieżności mogą być używane w praktyce [ponieważ tak naprawdę rzadko zdarza się, że używanie prymitywów wait/notify jest najlepszym rozwiązaniem]? "). Upewnij się, że kandydat adresy (lub przynajmniej daje do zrozumienia, że ​​jest świadomy), zarówno atomowość ("brakujące aktualizacje") i zmienność (widoczność nowej wartości na innych wątkach)

Następnie po rozmowie na temat teoria ich, zmusić ich do poświęcenia kilku minut na pisanie kodu dla prymitywnej kolejki producenta-konsumenta. Powinno to być proste dla każdego, kto rzeczywiście rozumie to, o czym mówili powyżej, a jednak wyeliminuje tych, którzy potrafią "mówić w rozmowie", ale faktycznie nie rozumieją tego w praktyce (prawdopodobnie najniebezpieczniejsza grupa).

To, co podoba mi się w tych ćwiczeniach z mini-kodowaniem, to to, że często łatwo je rozciągnąć. Na przykład, jeśli kandydat łatwo wykona zadanie, możesz zapytać, w jaki sposób rozszerzyć go na sytuację XXX - wymyśl wymagania, które znasz, przesunie granice noddy, o które prosiłeś. Pozwala to nie tylko dostosować głębokość zadawanych pytań, ale daje również wgląd w to, jak dobrze kandydat radzi sobie z wyjaśnianiem wymagań i modyfikacjami istniejącego projektu (co jest bardzo ważne w tej branży).

1

Tutaj można znaleźć kilka tematów do omówienia:

  • nici wdrożenie (kernel vs przestrzeni użytkownika)
  • pamięć lokalna wątku
  • synchronizacji prymitywy
  • zakleszczenia, livelocks
1
  • Różnice między muteksem a semafor.
  • Użycie zmiennych warunkowych.
  • Kiedy nie używać nici. (np. multipleksowanie IO)
1

Porozmawiaj z nimi o popularnym, ale nie znanym temacie, gdzie obsługa gwintów jest niezbędna.

Polecam Ci, zbuduj z nich serwer , oczywiście tylko na papierze lub tylko w słowach. Wynik powinien wyglądać mniej więcej tak: istnieje główny wątek, który nasłuchuje na gnieździe. Kiedy coś nadchodzi, przechodzi przez gniazdo do puli, a następnie ten wątek wraca do nasłuchu. Pula ma ustaloną liczbę miejsc. Wątki przetwarzania żądań są dedykowane do pobrania zadania z puli. Dowiedz się, co jest lepsze, jeśli wątki sprawdzają pulę jednocześnie, lub główny wątek listy wybierze wolny slot/wątek dla nowego żądania przychodzącego. Spróbuj napisać mały pseudokod lub wykres dla obu stron obsługi puli.

Przedstawiamy małą aplikację: licznik stron, która informuje, ile żądań strony zostało wykonanych od momentu uruchomienia serwera. Nie mów im, że licznik musi być chroniony przed równoczesną modyfikacją, niech odkryje, jak to zrobić z muteksami lub synchronizacją, czy cokolwiek innego. Być może można pominąć część serwera WWW, aplikacja licznika stron jest łatwiejsza do określenia.

Kolejnym przykładem jest chat, z klientami 2+ i serwerem, dowiedz się, jak rozwiązać problem, aby wszystkie wiadomości dotarły w tej samej kolejności dla wszystkich klientów. Lub gra reflex: serwer czeka na 1,5,5 s losowo, następnie mówi "peek-a-boo", a gracz wygrywa, który najpierw naciska klawisz spacji. Określ go na 2 graczy, a następnie spróbuj rozszerzyć do N graczy.


Należy również pamiętać o elektrowniach jądrowych. Stanowiska NPP: "programista niebędący programatorem". Istnieją kolesie, którzy mogą mówić o problemach z programowaniem, znają wszystkie 3/4-literowe skróty (są lot w świecie Java, EJB, JSP, XSLT i moje ulubione: POJO, co oznacza Pure Old Java Objects, lol), rozumieją i modyfikują kody, lub robią podobne programy z bazy, ale zawodzą nawet przy niewielkich problemach, muszą to zrobić sami, np. znajdowanie najbliższego elementu w bazie w tablicy. Czasami zajmuje to miesiące, aż się okaże. Dobrze radzą sobie w wywiadach, ponieważ się do tego przygotowują. Może nawet nie wiedzą, że są to NPP, to znany efekt: http://en.wikipedia.org/wiki/Dunning-Kruger_effect

Trudno jest rozpoznać przeciwnych kolesi, którzy nie słyszeli o modnych bibliotekach lub wzorach, ale mogą uczyć się nawet w rozmowa o pracę. (Uwaga osobista: mój ostatni wywiad był w 1999 r. I wydaje mi się, że nie będę już przeprowadzał wywiadu. Nigdy wcześniej nie słyszałem o dynamicznych stronach internetowych, ale w trakcie wywiadu wymyśliłem termin "sesja", pytanie było to, jak zbudować prostą aplikację internetową dla człowieka wiszącego, zostałem zatrudniony.)

Powiązane problemy