Pytania rekrutacyjne .NET
Z jakimi pytaniami z języka programowania .NET możesz się spotkać na rozmowie rekrutacyjnej? Poniżej przedstawiamy 21 pytań, które warto znać, jeśli ubiegasz się o stanowisko programisty .NET.
1. Różnice pomiędzy klasą a obiektem
Zarówno klasy, jak i obiekty są podstawą języka programowania C#. Obiekt ma konkretne wartości i można na nim wykonywać dalsze operacje. Klasa jest ogólnym zbiorem obiektów o różnych wartościach.
2. Czym jest klasa abstrakcyjna
To rodzaj klas, dla których nie można tworzyć obiektów. To klasa, która została zadeklarowana za pomocą słowa kluczowego. Można po niej dziedziczyć.
3. Czym jest enkapsulacja (hermetyzacja)?
Ukrywanie w obiektach pewnych funkcji, do których użytkownik obiektów nie powinien mieć dostępu np.ukrycie możliwości zmiany wartości w konkretnym obiekcie lub ukrycie danych przy pomocy modyfikatora private.
4.Czym jest dziedziczenie i jakie ma zalety?
Dziedziczenie jest mechanizmem dzielenia funkcjonalności pomiędzy poszczególnymi klasami (klasa może dziedziczyć po innej klasie atrybuty i zachowania). Klasy dziedziczące to inaczej klasy pochodne. Klasy, po których dziedziczą inne klasy to klasy bazowe. Z jednej klasy bazowej można uzyskać dowolną liczbę klas pochodnych. Główną zaletą dziedziczenia jest możliwość ponownego wykorzystania napisanego wcześniej kodu.
Dziedziczenie umożliwia dostosowanie klas będących niżej w hierarchii do swoich potrzeb, a także wprowadza modularność, czyli umożliwia wprowadzanie nowych funkcjonalności.
5. Czym jest Garbage Collector i jak działa?
Garbage Collector jest pewnego rodzaju odśmiecaczem pamięci. Pozwana na automatyczne zarządzanie dynamicznie przydzieloną pamięcią. Polega na sprawdzeniu wszystkich obiektów i zwalnianiu tych, dla których nie ma aktualnych referencji (czyli tych fragmentów pamięci, które nie są potrzebne).
6. Czym jest SOLID?
To zbiór zasad, którymi należy się kierować, korzystając z obiektowych języków programowania. Skrót SOLID pochodzi od konkretnych zasad:
- S(ingle responsibility), czyli zasada jednej odpowiedzialności;
- O(pen/closed principle), czyli zasada otwarte/zamknięte – klasy powinny być otwarte na rozszerzenia i zamknięte na modyfikacje;
- L(iscov Substitution), czyli zasada podstawienia Liskova – funkcje które używają wskaźników lub referencji do klas bazowych, muszą być w stanie używać również obiektów klas dziedziczących po klasach bazowych, bez dokładnej znajomości tych obiektów;
- D(ependency inversion principle), czyli odwrócenia zależności – Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych. Zależności między nimi powinny wynikać z abstrakcji.
7. Wady i zalety Singletona
Singleton to kontrowersyjny wzorzec projektowy, choć niektórzy programiści mówią na niego ”antywzorzec”. Trzeba dokładnie wiedzieć, w jakich okolicznościach można z niego skorzystać. Zalety Singletona to: nie jest ograniczony do jednej instancji (przy niewielkiej zmianie tego podejścia można zarządzać większą ilością obiektów), klasa utworzona przy pomocy tego wzorca może samodzielnie kontrolować liczbę swoich instancji, proces pobierania instancji klas jest niewidoczny dla użytkowników. Główną wadą Singletona jest sztywno określona liczba instancji. To podejście mocno utrudnia testowanie aplikacji i łamie co najmniej 2 zasady podejścia SOLID, najczęściej dwie pierwsze.
8. Wzorzec projektowy Fabryka
Fabryka to kreacyjny wzorzec projektowy, którego zadaniem jest dostarczenie interfejsu do tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas. Dzięki temu pojedynczy obiekt może tworzyć swoje reprezentacje i podtypy w trakcie działania programu.
9. Czym jest refleksja w .NET?
To mechanizm, który pozwala na dostęp do metadanych (czyli informacjach przechowywanych np. w plikach exe) klas lub obiektów.
10. Czym jest polimorfizm w .NET
To mechanizm, który pozwala używać wartości, zmiennych i podprogramów na kilka różnych sposobów.
11. Czym jest atrybut
Atrybut to znacznik metadanych, który umożliwia przekazywanie informacji do środowiska wykonawczego. Atrybut określa zachowanie różnych danych. Najczęściej spotykanym przykładem użycia atrybutów, jest użycie ich np. w Web Service lub dodatnie informacji o autorze.
12. Czym jest CLR
To środowisko uruchomieniowe dla platformy .NET, przewidziane do pracy na wielu platformach i maszynach.
13. Czym jest extension method?
To metoda rozszerzeniowa, która umożliwia rozszerzenie funkcjonalności istniejących już typów. Może być zadeklarowana tylko w klasie statycznej i powinna być zadeklarowana przed typem, który chcemy rozszerzyć.
14. Co to jest LINQ
LINQ (Language Integrated Query) to część technologii Microsoft .NET, która umożliwia zadawanie pytań na obiektach. W przestrzeni, która obsluguje LINQ są bazy danych, język XML, obiekty implementujący interfejs.
15. Czym jest koncepcja delegacji w C#?
Delegacje w C# są wskaźnikami metod, które są opakowane w konkretną klasę. Obiekt w delegacji przechowuje listę metod, które obsługuje. To jest bardzo bezpieczne rozwiązanie, którego poprawność jest sprawdzana za każdym razem.
16. Czym są wyrażenia lambda
To anonimowa metoda (bez deklaracji) używana do tworzenia delegatów w LINQ. Przydaje się zwłaszcza w przypadku, gdy daną funkcję wywołuje się tylko raz.
17. Czym są obiekty immutable
Typy niemutowalne to typy zmienne. Obiekty immutable to wszystkie typy numeryczne, struktury oraz value type – klasy niemutowalne np. String, DateTime, typy anonimowe, ImmutableList. Te typy nie mogą zostać zmienione po ich inicjalizacji.
18. Czym są obiekty mutable?
To typy zmienne, które mogą zostać zmienione po ich inicjalizacji.
19. Charakterystyka wzorca MVC
Model-View-Controler to wzorzec architektoniczny, który służy do organizowania struktury aplikacji, posiadających GUI. Model to reprezentacja problemu lub logiki aplikacji, View opisuje, w jaki sposób wyświetlać część modelu w ramach GUI. Może składać się z kilku mniejszych widoków. Controller zarządza i aktualizuje model, by odświeżały się widoki interfejsu w momencie wykonywania akcji w systemie. Wszystkie części modelu MVC są ze sobą ściśle powiązane.
20. Jakie rodzaje testów możemy wyróżnić?
Podział testów ze względu na weryfikowalne obiekty, takie jak klasy, komponenty, podsystemy, całe systemu lub ich integrację pomiędzy sobą. Można także wyróżnić testy strukturalne (białoskrzynkowe), które weryfikują kod źródłowy oraz testy czarnoskrzynkowe, które weryfikują warstwy interfejsu i są niezależne od kodu.
Podział testów ze względu na metodę weryfikacji np. testy statyczne i dynamiczne. Podział testów ze względu na poziomy: testy jednostkowe, testy integracyjne i testy komponentów, testy systemowe, testy integracyjne z innymi systemami oraz testy akceptacyjne.
21. Pytanie w formie żartu: co powie żona na zmianę pracy?
Zmiana pracy wiąże się z pewnym ryzykiem, dlatego też warto zawsze upewnić się, że partnerka czy żona w pełni popierają tę decyzję ;). To pytanie jest ważne także z perspektywy rekrutera, który zorientuje się, jeśli kandydat przyjdzie na rozmowę kwalifikacyjną z nastawieniem innym niż zmiana dotychczasowego stanowiska pracy. W takim przypadku dalsza rozmowa kwalifikacyjna nie spełni swojego zadania.