Praca daje duże możliwości rozwoju programiście. To właśnie w pracy nabieramy doświadczenia, popełniamy błędy i staramy się wyciągać z nich wnioski oraz oczywiście zarabiamy na życie. Na rynku, nie brakuje ogłoszeń na .Net developera. Czego można się spodziewać na takich rozmowach? W tym wpisie postaram podzielić się swoimi doświadczeniami i odpowiedzieć na to pytanie.
Pracodawcy zamieszczając ogłoszenie zawierają w nim zwykle wymagania i tzw. “mile widziane” czyli rzeczy, które fajnie by było gdyby idealny kandydat wiedział, ale nie jest to konieczne. Z mojego doświadczenia wynika, że wymagania i “mile widziane”, są trochę na wyrost. Także nie przejmujcie się jeśli nie macie 5 lat doświadczenia lub nie znacie dobrze jakiejś technologii. Wysłanie CV nic was nie kosztuje, nic nie tracicie. Jeśli dostaniecie zaproszenie na rozmowę oznacza to, że pracodawca jest zainteresowany taką osobą i macie szanse się wykazać;)
Zwykle proces rekrutacji przebiega kilku etapowo. Pierwszym etapem może być rozmowa z kimś z działu kadr i możemy spodziewać się na niej między innymi pytań o znajomość języków obcych, dostępność czy o wymagania finansowe. Osobiście nie rozumiem jak można pytać o wymagania finansowe, nie badając najpierw kompetencji kandydata? Oczywiście dla pracodawcy, to jest bardzo wartościowa informacja i często decyduje o przejściu na kolejny etap. Szkoda tylko, że wielu pracodawców nie zamieszcza np. widełek płacowych w swoich ogłoszeniach. Myślę że zaoszczędziło by to czas zarówno pracodawcy jak i kandydatom.
Kolejnym etapem jest sprawdzenie wiedzy kandydata, taka weryfikacja może mieć formę testu, rozmowy technicznej lub tego i tego. Poniżej zamieściłem pytania, które często pojawiają się podczas takiej weryfikacji.
.Net i C#
- Co to są typy proste i referencyjne? Jakie są różnice? Gdzie są przechowywane (stos/sterta)?
- Jaka się różnica między ref a out?
- Co oznacza słowo kluczowe np. sealed, partial?
- Co to jest boxing i unboxing?
- Co to jest chcecked i unchecked?
- Garbage Collector zasada działania. Kiedy obiekt jest usuwany z pamięci?
- Co to są obiekty immutable?
- Wszystko co związane ze stringiem np. konkatenacja stringa (StringBuilder)
- Jak działa yield?
- Co to jest delegat?
- Co to są wyrażenia lambda?
- Co to jest serializacja?
- Co to jest refleksja?
- Co to jest atrybut?
- Co oznacza słowo kluczowe volatile?
- Co to jest wątek, co to jest pula wątków?
- Do czego służy słowo lock? Co kryje się pod spodem tego słowa?
- inne mechanizmy synchronizacji Mutex, Semaphore, ManualResetEvent, Interlocked
- Co to jest extension method?
- Co to jest lazy loading i eager loading?
- Co to jest Weak Reference?
OOP i wzorce projektowe
- Co to jest klasa abstrakcyjna?
- Co to jest interfejs i czym się różni od klasy abstrakcyjnej?
- Czy klasa abstrakcyjna może zawierać metody nieabstrakcyjne?
- Co to jest metoda wirtualna?
- Singleton – jak wygląda deklaracja, wady i zalety, jak wygląda bezpieczny wielowątkowy singleton?
- Fabryka, kiedy stosujemy?
- Strategia, adapter, obserwator, dekorator, repozytorium, unit of work
- Wzorce prezentacji MVC, MVP, MVVM
- Co to jest i jakie są rodzaje dependency injection?
- Co to jest inversion of control
WPF
- Co to jest drzewo prezentacji?
- Co to jest drzewo logiczne?
- Co to są Routed Events i jakie są ich rodzaje?
- Co to jest Style Trigger?
- Co to jest Dependency Property?
- Co to jest Attached Property?
- Co to są komendy?
- Co to oznacza, że obiekt jest typy Freezable?
WCF
- Co oznacza ABC?
- Jakiego rodzaju mogą być wiązania?
- Co to jest duplex?
- Co to jest WSDL?
- Co to jest SOAP?
- Co to jest REST serwis?
Agile
- Zasady SOLID
- Fazy TDD (red green refactor)
- Rodzaje testów (jednostkowe,integracyjne,akceptacyjne)
- Co to jest mock?
- Co to jest Scrum? Jakie są w nim role?
- Co to jest Continuous Integration?
SQL
- Jakie są rodzaje złączeń?
- Co oznaczają i gdzie się stosuje klauzule group by i having?
- Co to jest indeks i jakiego mogą być rodzaju?
- Jakie są wady i zalety stosowania indeksów?
- Co to jest i jakie są rodzaje triggerów/wyzwalaczy?
- Co to jest bulk insert?
- Czym sie rózni UNION od UNION ALL, które jest szybsze
- Problem stronicowania wraz z sortowaniem : w której warstwie najlepiej to robić i od czego będzie zależał wybór sposobu
- Co to jest CTE table i do czego się używa (to pytanie jest zaawansowane)
- Czym jest oraz kiedy używać instrukcji MERGE
- Co daje zastosowanie kolumn typu SPARSE w bazie danych i jakie są wady i zalety ich uzycia (to pytanie jest zaawansowane)
- Czym są hinty w kodzie sql
- Co jest szybsze “=” czy “like”
- Kiedy należy stosować GUID jako klucz główny i jakie są tego wady
- Czym różni się tabela tymczasowa zadeklarowana za pomocą “@” od tabeli “#”
Inne
- Co to jest GAC?
- Dlaczego należy podpisywać biblioteki?
- Co to jest deadlock?
- Co to jest race condidtion?
- Co to jest AJAX?
- Jakie są zalety jQuery?
Jak widzicie pytań jest sporo i co chwilę przypominają mi się nowe. Po za takimi pytaniami, możecie spodziewać się, że będziecie musieli napisać kawałek własnego kodu lub przeanalizować czyjś kod i powiedzieć jak się zachowa w konkretnej sytuacji. Możecie spodziewać też się pytań w stylu: klient potrzebuje tego i tego zaprojektuj rozwiązanie. Niektórzy pracodawcy mogą nawet jako jeden z etapów rekrutacji zlecić wykonanie małego projektu.
Niestety, często jest tak, że podczas rozmowy kwalifikacyjnej pracodawca wymaga rocket science, natomiast po rozpoczęciu pracy okazuje się że piszemy dokumentację techniczną lub programujemy z wykorzystaniem .Net 2.0 i Windows Forms, a o testach jednostkowych to możemy co najwyżej pomarzyć.
Aby, wystrzegać się takich pracodawców warto zadawać pytania. Jak będzie wyglądać nasza praca? Jakich technologii, narzędzi czy metodologii używa się w firmie? Z jakich bibliotek czy frameworków będziemy korzystać w czasie pracy? Jak wygląda czas pracy i czy są nadgodziny? Jak będziemy rozliczani? To wszystko sprawi że my też dowiemy się czegoś o pracodawcy i będziemy wiedzieć czym właściwie w nowej pracy mielibyśmy się zajmować i czy w ogóle chcemy tam pracować.
12 Komentarzy
Skip to comment form ↓
Krzysztof Morcinek
3 września 2013 na 00:49 (UTC 2) Link do tego komentarza
Fajne pytania. Skąd zebrales
Od siebie dodam, że na porzadnej rozmowie nie ma “pytanko o atrybuty”, dajesz odpowiedz i jedziemy dalej. Takie “co to są atrybuty” jest tylko wstępem do ciekawszej dyskusji, co/gdzie/jak/dlaczego z naciskiem na praktykę.
Pewnie cześć czytających się wystraszyła rozpiętością tematów. Spokojnie, nie można (nawet nie powinno sie) wiedzieć wszystkiego. Jeśli o połowie potrafisz sensownie pogadac to juz jest bardzo dobrze. Dla przykładu pytanie o rodzaje dependency injection. Można zawsze stosować przez konstruktor jak w MVC, doskonale czuć o co chodzi, a żyć w blogiej nieświadomości innych sposobów:-)
Good post.
graf
3 września 2013 na 00:59 (UTC 2) Link do tego komentarza
Zebrałem z doświadczenia swojego i kilku znajomych. Fakt, że nie trzeba wiedzieć wszystkiego, ale szansę na zatrudnienie rosną wraz z liczbą udzielonych odpowiedzi;) BTW. Mam nadzieje że, nie naraziłem się tym postem potencjalnym przyszłym pracodawcom;)
Krzysztof Seroka
4 września 2013 na 13:05 (UTC 2) Link do tego komentarza
Super wpis, teraz niech się znajdzie ktoś od Web’a i uzupełni listę :-]
Michał
4 września 2013 na 20:54 (UTC 2) Link do tego komentarza
Ja uzupełnię kawałek SQL – wg mnie poziomem odstaje od reszty (pytania są na miejscu ale to raczej poziom podstawowy – ten język też potrafi mieć rożne kruczki).
(pytania czasami zachaczają o MSSQL Serv)
- Czym sie rózni UNION od UNION ALL, które jest szybsze
- Problem stronicowania wraz z sortowaniem : w której warstwie najlepiej to robić i od czego będzie zależał wybór sposobu
- Co to jest CTE table i do czego się używa (to pytanie jest zaawansowane)
- Czym jest oraz kiedy używać instrukcji MERGE
- Co daje zastosowanie kolumn typu SPARSE w bazie danych i jakie są wady i zalety ich uzycia (to pytanie jest zaawansowane)
- Czym są hinty w kodzie sql
- Co jest szybsze “=” czy “like”
- Kiedy należy stosować GUID jako klucz główny i jakie są tego wady
- Czym różni się tabela tymczasowa zadeklarowana za pomocą “@” od tabeli “#”
graf
4 września 2013 na 22:18 (UTC 2) Link do tego komentarza
Super;) Uzupełniłem wpis o twoje pytania. Może macie jeszcze jakieś, które warto by dodać?
Michał Jankowski
4 września 2013 na 22:43 (UTC 2) Link do tego komentarza
Lista super. Większość z tych pytań zadawanych jest na rozmowach kwalifikacyjnych, które prowadzę.
Szkoda tylko, że większość kandydatów nie zna odpowiedzi na te pytania – doświadczenie nie gra tu roli.
Ostatnio nawet zastanawiam się, czy nie podsyłać kandydatom jakiejś listy tematów, o których będzie można porozmawiać w trakcie spotkania.
@rek
5 września 2013 na 12:19 (UTC 2) Link do tego komentarza
Proponuję jeszcze dodać kategorię moich ulubionych czyli pseudo psychotesty:
Co by o Tobie powiedzieli Twoi wrogowie,
Gdzie się widzisz za 5 lat,
10 zastosowań spinaczy,
Co wziął byś na bezludną wyspę,
Jaką książkę ostatnio czytałeś (nietechniczną),
graf
5 września 2013 na 12:42 (UTC 2) Link do tego komentarza
Mnie kiedyś zapytali. Jak sobie Pan radzi w chaosie? Standardowe pytanie to jeszcze o wady i zalety…
Piotr
7 września 2013 na 14:40 (UTC 2) Link do tego komentarza
Trzeba też zadać sobie podstawowe pytanie, czy chce się uczyć dodatkowych rzeczy, których nie wykorzysta się w pracy, tylko po to, żeby zabłysnąć przed osobami rekrutującymi, a na pewno nie po to, żeby pisać w tych dziedzinach, których dodatkowo się nauczyło. Umiejąc na 8000 PLN netto, a dostając 5000 PLN netto nikt nie będzie zadowolony z pracy, bo umie więcej, a nie ma możliwości wykorzystania tej wiedzy. To tak zwana “sztuka dla sztuki”, nic faktycznie potrzebnego ani praktycznego. Dobre dla fanatyków i tylko dla nich. Jeżeli ktoś ma ambicje zostać programistą .NET do końca życia, to może iść w tym kierunku ale licząc na awans – nie warto douczać się w tym, czego i tak człowiek nauczy się w praktyce pracy w danej firmie. Oszczędność energii wydawana na egzystencję.
graf
9 września 2013 na 19:09 (UTC 2) Link do tego komentarza
Często jest tak, że programista zarabia za mało w stosunku do poziomu swojej wiedzy. Czyja jest to jednak wina? Uważam, że wiele osób po prostu godzi się z taką sytuacją, może wynika to z przyzwyczajenia lub z tego, że boją się porzucić swoją obecną pracę gdzie mają ugruntowaną pozycję i budować swoją markę w nowej firmie od zera? Jednak, jeśli chce się coś zmienić trzeba znajdować czas na rozwój. Dzięki niemu podnosimy swoje kwalifikacje i zwiększamy szanse na znalezienie lepszej pracy.
Daniel
11 października 2013 na 18:06 (UTC 2) Link do tego komentarza
Czym sie rozni 1. interfejs od klasy abstraktyjnej, 2. Co to hermetyzacja, 3. modyfikatory klas, czyli jakies slowa kluczowe mozna uzyc gdy tworzysz klase i co one powoduja,
Łukasz
23 października 2014 na 12:59 (UTC 2) Link do tego komentarza
Z js:
Jaka jest różnica między == a === ?
Jak pisać dobry kod js? (chodziło o funkcje natychmiastowe i żeby nie tworzyć zmiennych globalnych)
css:
Jak wyśrodkować element w oknie przeglądarki?
C#.NET:
Jak zaimplementowałbyś singleton, thread safe?
Jak działa garbage collector i czy da się przewidzieć kiedy będzie wywołany?
to tyle co mi przychodzi na myśl:)
Dobrym pomysłem byłoby napisanie wpisu z odpowiedziami na te pytania:)