«

»

wrz 02

Rozmowa kwalifikacyjna .Net Developer

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

  1. Krzysztof Morcinek

    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.

    1. graf

      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;)

  2. Krzysztof Seroka

    Super wpis, teraz niech się znajdzie ktoś od Web’a i uzupełni listę :-]

  3. Michał

    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 “#”

    1. graf

      Super;) Uzupełniłem wpis o twoje pytania. Może macie jeszcze jakieś, które warto by dodać?

  4. Michał Jankowski

    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.

  5. @rek

    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ą),

    1. graf

      Mnie kiedyś zapytali. Jak sobie Pan radzi w chaosie? Standardowe pytanie to jeszcze o wady i zalety…

  6. Piotr

    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ę.

    1. graf

      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.

  7. Daniel

    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,

  8. Łukasz

    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:)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć tych znaczników i atrybutów HTMLa: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Current day month ye@r *