.NET Developer – Jak rozmowa rekrutacyjna (część techniczna) może pójść nie po Twojej myśli.

Loading Likes...

W dobie korona wirusa taka rozmowa techniczna przeważnie prowadzona jest online, jest to bardzo fajna opcja, ponieważ można w ciągu dnia odbyć kilka takich rozmów. Niestety nie zawsze jest to takie przyjemne i proste, dlatego też przytoczę własną historię i podzielę się swoimi odczuciami. Co zatem może pójść nie tak?

Aplikowałem na stanowisko .NET Developer. Moja rozmowa niestety zaczęła się od problemów natury technicznej, związanych z Teams’ami. Kamera się nie włączyła i nie widziałem kamerki drugiej osoby. Pojawił mi się za to komunikat, który cały czas informował mnie, że czekamy na pojawienie się wszystkich osób. Było to dość kłopotliwe, ponieważ nie miałem też dostępu do ekranu drugiej strony, więc przykład musiałem analizować z wklejonych linijek kodu do czatu. Zamiast skupić się w pełni na rozmowie, masz w głowie tylko myśl jak tą kamerkę włączyć, no niestety – złośliwość rzeczy martwych.

Pewnie interesują Cię pytania, które dostałem, a szczególnie te, na których poległem 🙂

No niestety, ta rozmowa w mojej ocenie to totalna klapa z mojej strony – w skrócie, nie “sprzedałem się” tak jak chciałem, natomiast nie traktuje tego w kategoriach porażki. Wszystko jest trudne zanim stanie się proste i tak samo jest z rozmowami rekrutacyjnymi. W dłuższym rozrachunku można na tym tylko zyskać, więc wyciągam odpowiednie wnioski i dogłębnie analizuje swoje słabości i ich przyczyny.

Rozmowa zaczęła się od pytań dotyczących C#

Pytanie 1. Co wyświetli się w konsoli?

Prowadzący rozmowę zasugerował mi, że nie ma tutaj słowa kluczowego “ref” – przez co skupiłem się tylko na tym aspekcie. Bez dłuższego zastanowienia się odpowiedziałem, że wyświetli się liczba 3, co niestety jest nieprawdą. Nie wiem dlaczego, ale nie przemyślałem sobie bardziej tej odpowiedzi. Nie chce się usprawiedliwiać tym, że dostałem ten urywek kodu na czacie, według mnie, po prostu podpowiedź i stres trochę mnie zblokowały.

Wracając do tego przykładu po rozmowie, mogę mieć tylko pretensje do siebie, odpowiedź na to pytanie była banalna i nie chodziło tutaj w ogóle o słowo “ref”. Lista jest typem referencyjnym, więc do metody Add, trafia kopia typu referencyjnego, więc lista powinna zawierać dodatkową liczbę w kolekcji. Czyli 4 elementy. Peszek. 🙂

Pytanie 2. Czym różni się klasa od klasy abstrakcyjnej?

Odpowiedziałem, że klasa abstrakcyjna służy jako klasa bazowa dla klasy i używamy jej, aby dziedziczyć po niej pewne własności i metody. Na to prowadzący zapytał mnie “Ale czym się różnią?” i yyyy 🙂 Pomyślałem, że zapomniałem powiedzieć o czymś ważnym i zacząłem grubo rozmyślać. Niestety wybiegłem tak daleko w rozmyśleniach, a odpowiedź była znów banalna. Prowadzącemu zależało na odpowiedzi: “Klasy abstrakcyjnej nie można użyć, aby utworzyć obiekt.“. Jak mi to powiedział, pomyślałem sobie, że jestem idiotą, natomiast tak czasami bywa, że przez błędne myślenie zapominamy o najprostszych rzeczach.

Pytanie 3. Jakie znasz modyfikatory dostępu?

Moja odpowiedź: “Private, public, internal, i coś jeszcze” – Jak to mawia klasyk. To jest dramat. No niestety, porażka. Zapomniałem odpowiedzi na kolejne banalne pytanie, niestety w większości swoich projektów korzystam tylko z private i public. Prowadzący zapytał mnie więc o sytuację, w której mam własność w klasie abstrakcyjnej, i chcę aby dostępność tej własności była tylko z poziomu klasy, która dziedziczy po tej klasie abstrakcyjnej. Chodziło mu o modyfikator protected. Takie proste. Ma-sa-kra.

Pytanie 4. Wspomniał pan o modyfikatorze internal, czym się różni od public?

Odpowiedziałem, że internal od public się różni tym, że internal jest jeszcze bardziej dostępny. Niestety nie wiedziałem dla kogo – chodziło tutaj, że internal jest dostępny dla całego pliku .dll. Nie mam z tym styczności, kiedyś o tym pamiętałem i wypadło z głowy. Warto pamiętać. Kolejna wpadka.

Pytanie 5. Czym się różni metoda wirtualna od abstrakcyjnej?

Po serii mini porażek głowa przestała pracować, dostałem kolejne w zasadzie proste pytanie, na które odpowiedziałem tak: Obie te metody możemy sobie nadpisać. Zapomniałem o bardzo istotnej rzeczy, że w metodzie abstrakcyjnej nie możemy napisać jej logiki, jej ciała (więc nadpisując ją, dopiero piszemy jej implementację), natomiast w wirtualnej możemy od razu napisać jej implementacje w klasie abstrakcyjnej. Mogłem też dopowiedzieć, że metody abstrakcyjne, muszą być zaimplementowane w “podklasie”, a wirtualne nie.

Oczywiście nie są to wszystkie pytania, było ich znacznie więcej, natomiast opisuje tylko te, na które nie odpowiedziałem. Po C# przyszła kolej, na bardziej ogólne pojęcia tj.zasady S.O.L.I.D, wzorce projektowe, DDD, TDD.

Trochę pogadaliśmy, nie było raczej wtopy w tych tematach.

Pytanie 6. Co pan wie na temat CI/CD, i czy miał pan z tym styczność, z jakich narzędzi pan korzystał?

Niestety nie miałem nigdy z tym styczności, więc nie mogłem przyzwoicie odpowiedzieć na to pytanie. Wiedziałem mniej więcej na czym to polega, ale nie miałem żadnego doświadczenia, nie korzystałem też np. z Azura. Z pewnością jest to istotne na tym stanowisku i jest to umiejętność, którą planuje opanować w niedługiej przyszłości.

Pytanie 7. Co to jest REST API?

To jest pytanie z cyklu, robisz to na co dzień, ale jak to ładnie ubrać w słowa, żeby powiedzieć tego definicję?

Nie przygotowałem sobie w głowie definicji, więc zacząłem opowiadać ogólnie o API, prowadzący dopytywał, ja odpowiadałem. Odpowiedź na to pytanie powinna wyglądać tak: API czyli rodzaj połączenia umożliwiającego komunikację, a REST to standard, który określa zasady projektowania tego API, i potem powinienem opisać te standardy. Naprawdę warto przed rozmową przypomnieć sobie proste definicję, potem odpowiadając na takie pytanie jest po prostu dużo łatwiej.

Również porozmawialiśmy trochę na ten temat, był też poruszony temat MVC i możliwej architektury takiej aplikacji, wydaje mi się, że akurat tutaj odpowiedziałem przyzwoicie. Rozmowy rekrutacyjne naprawdę dają sporo pozytywnego do myślenia.

Pod koniec rozmowy rozmawialiśmy jeszcze ogólnie o git.

Dostałem serio banalnie proste pytanie. Powinienem był na nie odpowiedzieć, natomiast przez to, że używam gita częściej w środowisku pracy (czyt. IDE), zapomniałem o tym na śmierć. Treść pytania poniżej – facepalm

Pytanie 8. Jak zmienić branch na Gicie?

Oczywiście chodziło o polecenie “git checkout nazwa_brancha“, no bywa tak, że człowiek zapomina, nawet tak banalnie prostych rzeczy. W normalnym świecie jak zapomnisz słowa kluczowego, wpiszesz w Google “switch branch” i wyskoczy Ci to czego szukasz, natomiast podczas rozmowy musisz posiłkować się tylko swoją głową.

Mam nadzieję, że przyda się komuś ta wiedza, i że Wasze rozmowy pójdą dużo lepiej. Dzięki tej rozmowie dowiedziałem się o swoich słabych stronach i z pewnością na kolejną rozmowę, będę przygotowany lepiej.

 

 

 

 

 

 

 

 

 

 

About the Author: Jerzy Kołakowski

Pasjonat informatyki, bloger. Full-stack Developer Technologie:
  • ASP.NET MVC
  • ASP.NET CORE
  • Angular 2+

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Facebook