Najlepsze pytania rekrutacyjne C# wraz z odpowiedziami

Jeśli chcesz zatrudnić profesjonalnego programistę C#, musisz sprawdzić jego umiejętności i wiedzę, żeby przekonać się, czy odpowiada Twoim wymaganiom. Kiedy znajdziesz CV pasujące do stanowiska, zaproś kandydata na rozmowę i określ jego poziom zaawansowania.

Te pytania rekrutacyjne z programowania w C# przydadzą się nie tylko pracodawcom, którzy szukają najlepszego programisty C#, ale też osobom przygotowującym się do rozmowy o pracę. Pomogą im przygotować się na możliwe pytania i powtórzyć podstawowe pojęcia.

Pytania rekrutacyjne dla juniora C#

01

Czym jest manifest assembly w .NET?

Manifest assembly opisuje powiązania i zależności komponentów w assembly oraz zawiera odwołania do zasobów i klas. Jest przechowywany w pliku .exe lub .dll z kodem Microsoft intermediate language (MSIL). Manifest sprawia, że assembly samo się opisuje, wylicza swoje pliki oraz inne assembly, od których zależy.

02

Czym są boxing i unboxing?

Boxing i unboxing służą do konwersji typów, ale różnica polega na tym, że boxing odbywa się niejawnie, a unboxing musi być zapisany jawnie w kodzie. Boxing to proces konwersji typu wartościowego na obiekt lub na dowolny typ interfejsu implementowany przez ten typ wartościowy. Unboxing służy do wydobycia typu wartościowego z obiektu lub z zaimplementowanego typu interfejsu.

03

Czym jest słowo kluczowe unchecked?

C# udostępnia słowa kluczowe checked i unchecked do obsługi wyjątków typów całkowitych. Słowo unchecked wyłącza sprawdzanie przepełnienia przy operacjach arytmetycznych i konwersjach typów całkowitych. Wyniki mogą być wtedy obcięte lub błędne.

04

Czym jest kod zarządzany i niezarządzany?

Kod zarządzany powstaje we frameworku .NET i jest wykonywany przez CLR w trybie zarządzanym. Co więcej, każdy język pisany w .NET Framework to kod zarządzany.

Kod niezarządzany powstaje poza frameworkiem .NET i korzysta z niskopoziomowych funkcji systemu operacyjnego. Przykładem kodu niezarządzanego jest zgodność wsteczna z kodem VB, ASP i COM.

05

Czym jest przestrzeń nazw w C#?

Przestrzeń nazw oddziela jeden zbiór nazw od drugiego. Nazwy klas zadeklarowane w jednej przestrzeni nazw nie kolidują z tymi samymi nazwami klas zadeklarowanymi w innej.

{

    class SampleClass

    {

        public void SampleMethod()

        {

            System.Console.WriteLine(

              "SampleMethod inside SampleNamespace");

        }

    }

}

06

Czym jest MSIL w .NET?

MSIL to Microsoft Intermediate Language - niezależny od procesora zestaw instrukcji, który da się sprawnie przekształcić w kod natywny. MSIL zawiera instrukcje ładowania, zapisywania, inicjalizowania i wywoływania metod na obiektach. 

07

Jaka jest główna różnica między String a StringBuilder?

String jest niemutowalny - jeśli utworzysz obiekt typu string, nie możesz go zmodyfikować, a każda zmiana tworzy w pamięci nowy obiekt typu string. StringBuilder jest mutowalny, więc po utworzeniu obiektu możesz wykonywać na nim dowolne operacje, takie jak insert, replace czy append. Aktualizuje on tekst w jednym miejscu i nie zajmuje nowego obszaru pamięci.

08

Czym jest punkt wejścia programu, gdzie i kiedy istnieje?

Punkt wejścia to metoda main aplikacji konsolowej lub okienkowej w C#. Występuje w każdej aplikacji wykonywalnej i jest miejscem, w którym sterowanie programem się zaczyna i kończy. W programie w C# może istnieć tylko jeden punkt wejścia.

09

Po co używamy bloku finally w C#?

Blok finally wykona się niezależnie od wyjątku. Kiedy więc podczas wykonywania kodu w bloku try wystąpi wyjątek, sterowanie wraca do bloku catch, a na końcu wykonany zostanie blok finally. Blok finally może zamykać połączenia z bazą danych / zwalniać uchwyty plików.

10

Czym jest OOP i jakie są jego podstawowe zasady?

Programowanie obiektowe rozkłada problem na zbiór bytów zwanych obiektami, a następnie buduje wokół nich dane i funkcje. Opiera się na czterech podstawowych zasadach: hermetyzacji, abstrakcji, dziedziczeniu i polimorfizmie.

Pytania rekrutacyjne dla mida C#

01

Czym jest typ anonimowy w C#?

Dzięki typom anonimowym można utworzyć nowy typ bez jego definiowania. To sposób na zebranie właściwości w jednym obiekcie bez jawnego definiowania typu. Typ generuje kompilator i jest on dostępny tylko w bieżącym bloku kodu. Kompilator wnioskuje typy właściwości.

var anonymousData = new

{  

     ForeName = "Jignesh",  

     SurName = "Trivedi"

};  

Console.WriteLine("First Name : " + anonymousData.ForeName);

02

Czy możesz wyjaśnić zasady SOLID?

SOLID to mnemonik pięciu zasad projektowania programów obiektowych (OOP), dzięki którym kod jest czytelny, elastyczny i skalowalny. Spopularyzował je Robert C Martin i są stosowane w całym spektrum projektowania obiektowego. Skrót rozwija się następująco: 

  • Zasada pojedynczej odpowiedzialności
  • Zasada otwarte-zamknięte
  • Zasada podstawienia Liskov
  • Zasada segregacji interfejsów
  • Zasada odwrócenia zależności

03

Jaka jest różnica między Thread a Task w .NET?

Thread reprezentuje faktyczny wątek na poziomie systemu operacyjnego, z własnym stosem i zasobami jądra. Daje najwyższy stopień kontroli, dzięki czemu można wywołać na wątku Abort(), Suspend() lub Resume(). Warto wspomnieć, że ThreadPool to nakładka na pulę wątków utrzymywaną przez CLR.

Klasa Task z Task Parallel Library łączy zalety obu podejść. Podobnie jak ThreadPool, zadanie nie tworzy własnego wątku systemowego. Zadania wykonuje TaskScheduler, a domyślny scheduler po prostu działa na ThreadPool. W przeciwieństwie do ThreadPool, Task pozwala też dowiedzieć się, kiedy praca się zakończyła, a dzięki generycznemu Task - zwrócić wynik.

04

Wymień różne walidatory ASP.NET

ASP.NET ma zestaw kontrolek walidacyjnych używanych do walidacji formularzy HTML. Istnieje sześć typów walidatorów:

  • RequiredFieldValidator
  • CompareValidator
  • RangeValidator
  • RegularExpressionValidator
  • CustomValidator
  • ValidationSummary

05

Czym są wyrażenia lambda w C#?

Wyrażenie lambda to funkcja anonimowa, której można użyć do tworzenia delegatów lub typów drzew wyrażeń. Za pomocą wyrażeń lambda można pisać funkcje lokalne przekazywane jako argumenty lub zwracane jako wartość wywołań funkcji. 

Oto przykład wyrażenia lambda, w którym x => x * x - określające parametr o nazwie x i zwracające wartość x do kwadratu - jest przypisane do zmiennej typu delegata:

Func<int, int> square = x => x * x;

Console.WriteLine(square(5));

// Output:

// 25

06

Jaka jest różnica między Server.Transfer a Response.Redirect.?

Server.Transfer i Response.Redirect służą do przeniesienia użytkownika z jednej strony na drugą. Response.Redirect() wysyła jednak na nową stronę, aktualizuje pasek adresu i dodaje wpis do historii przeglądarki. Server.Transfer() nie zmienia paska adresu, więc nie da się cofnąć. Używa się go, gdy nie chcemy, żeby użytkownik widział, dokąd trafia.

07

Jaka jest różnica między słowami kluczowymi ref i out?

Słowo kluczowe ref przekazuje dane o obiekcie zainicjalizowanym przed wejściem do funkcji. Z kolei out mówi kompilatorowi, że obiekt zostanie zainicjalizowany wewnątrz funkcji. Pamiętaj, że ref działa dwukierunkowo, a out tylko na wyjściu.

08

Czym jest LINQ?

LINQ (Language Integrated Query) to jednolita składnia zapytań w C# i VB.NET, służąca do pobierania danych z różnych źródeł i formatów. Jest wbudowana w C# i VB, aby zlikwidować rozdźwięk między językami programowania a bazami danych i zapewnić jeden interfejs zapytań dla różnych typów źródeł danych.

09

Wyjaśnij pokrótce cykl życia strony ASP.NET.

Cykl życia ASP.NET dzieli się na cykl życia aplikacji i cykl życia strony. Fazy cyklu życia strony to inicjalizacja, tworzenie instancji kontrolek na stronie, odtwarzanie i utrzymywanie stanu, wykonanie kodu obsługi zdarzeń oraz renderowanie strony. Cykl życia aplikacji ASP.NET obejmuje etapy: start aplikacji, tworzenie obiektów, utworzenie HttpApplication, zwolnienie zasobów i zakończenie aplikacji.

10

Jakie są tryby stanu sesji w ASP.NET?

Stan sesji ASP.NET obsługuje pięć różnych trybów: 

Off - służy do wyłączenia sesji w serwisie.

InProc - sesje są przechowywane w procesie aplikacji na serwerze WWW. W zależności od wersji IIS może to być aspnet_wp.exe lub w3wp.exe.

StateServer - sesje są przechowywane przez usługę systemową State Server.

SQLServer - do przechowywania danych sesji używana jest baza SQL Server

Custom - zarządzanie stanem sesji przez własnego dostawcę. Magazynem może być cokolwiek, co zaimplementujesz w dostawcy.

Pytania rekrutacyjne dla seniora C#

01

Jaka jest różnica między wczesnym a późnym wiązaniem w C#?

W polimorfizmie na etapie kompilacji, czyli przy wczesnym wiązaniu, stosuje się wiele metod o tej samej nazwie, ale różnych typach parametrów lub ich liczbie. Dzięki temu można wykonywać różne zadania pod tą samą nazwą metody w tej samej klasie, co nazywa się przeciążaniem metod.

Polimorfizm w czasie wykonania, czyli późne wiązanie, pozwala używać tych samych nazw metod z tymi samymi sygnaturami, czyli tym samym typem lub tą samą liczbą parametrów, ale nie w tej samej klasie. Wynika to z tego, że kompilator nie dopuszcza tego na etapie kompilacji.

02

Jak zaimplementować generyczną akcję w WebAPI?

Web API to interfejs programistyczny, więc nie da się zaimplementować generycznej akcji - musi ono znać sygnatury metod z góry.

03

Wyjaśnij różnicę między stałymi a zmiennymi tylko do odczytu.

Stałe są obliczane na etapie kompilacji, a zmienne tylko do odczytu w czasie wykonania. Stałe obsługują tylko zmienne typów wartościowych (jedynym wyjątkiem są łańcuchy znaków), a zmienne tylko do odczytu mogą przechowywać zmienne typów referencyjnych. Stałych używa się, gdy wartość nie zmienia się w czasie wykonania, a zmiennych tylko do odczytu głównie wtedy, gdy faktyczna wartość nie jest znana przed uruchomieniem. Zmienne tylko do odczytu można zainicjalizować wyłącznie w miejscu deklaracji lub w konstruktorze.

04

Jaka jest różnica między interfejsem a klasą abstrakcyjną w .NET?

Interfejs deklaruje wyłącznie właściwości, metody i zdarzenia, bez modyfikatorów dostępu. Wszystkie zadeklarowane składowe muszą zostać zaimplementowane.

Klasa abstrakcyjna może deklarować pola i dostarczać częściową implementację funkcjonalności oraz składowe abstrakcyjne/wirtualne, które muszą zaimplementować klasy dziedziczące.

05

Jaki jest wynik poniższego krótkiego programu? Uzasadnij odpowiedź.

Przeanalizuj zadanie:

class Program {

  static String location;

  static DateTime time;

  static void Main() {

    Console.WriteLine(location == null ? "location is null" : location);

    Console.WriteLine(time == null ? "time is null" : time.ToString());

  }

}

Wynik będzie następujący:

location is null

1/1/0001 12:00:00 AM

Choć obie zmienne są niezainicjalizowane, String jest typem referencyjnym, a DateTime typem wartościowym. Jako typ wartościowy niezainicjalizowana zmienna DateTime przyjmuje wartość domyślną - północ 1/1/1 (tak, to rok 1 n.e.), a nie null.

06

Czym jest klasa GOD i dlaczego należy jej unikać?

Klasy GOD to skuteczny sposób na zepsucie aplikacji. To klasy, które przechowują mnóstwo informacji i mają wiele odpowiedzialności. Jedna zmiana w kodzie najprawdopodobniej wpłynie na inne części klasy, a pośrednio na wszystkie inne klasy, które z niej korzystają. Może to prowadzić do jeszcze większego bałaganu w utrzymaniu, bo nowe funkcje dokłada się wyłącznie do niej.

07

Kiedy użyłbyś usługi Duplex WCF?

Duplex służy do implementacji wzorca callback. Można zaimplementować dwie opcje, gdy nie wiadomo, kiedy nastąpi zdarzenie:

Przy odpytywaniu (polling) można wysyłać żądania co X minut, żeby sprawdzić, czy zdarzenie wystąpiło. Serwer powinien zwrócić szczegóły zdarzenia (jeśli wystąpiło) albo flagę mówiącą, że trzeba pytać dalej. Callback oznacza, że klient przesyła formularz opisujący, co serwer ma zrobić, gdy zdarzenie nastąpi. Serwer zapamiętuje te dane i sam wykonuje wywołanie, uruchamiając funkcję klienta (inicjuje komunikację).

Komunikacja duplex w WCF może wymagać specjalnej konfiguracji sieci, bo w wielu przypadkach sieć pozwala wywoływać usługi zewnętrzne, ale zabrania im oddzwaniania.

08

Czym jest delegat w .NET?

Delegat przypomina wskaźnik na funkcję i pozwala programiście opakować odwołanie do metody w obiekcie delegata. Taki obiekt można przekazać do kodu, który wywoła wskazaną metodę, nie wiedząc na etapie kompilacji, która metoda zostanie wywołana. Delegatów można też użyć do tworzenia własnych zdarzeń w klasie.

09

Po co używamy instrukcji lock w C#?

Słowo kluczowe lock gwarantuje, że jeden wątek nie wejdzie do sekcji krytycznej kodu, gdy jest w niej inny wątek. Jeśli inny wątek spróbuje wejść do zablokowanego kodu, będzie czekać, aż obiekt zostanie zwolniony. Słowo lock wywołuje Enter na początku bloku i Exit na jego końcu. 

private static readonly Object obj = new Object();

lock (obj)

{

    // critical section

}

10

Wyjaśnij następujące skróty w .NET: IL, CIL, MSIL, CLI i JIT.

IL to Intermediate Language - niezależny od procesora, częściowo skompilowany kod. W .NET IL nazywa się Common Intermediate Language (CIL), a we wczesnych latach .NET nosił nazwę Microsoft Intermediate Language (MSIL). CLI to Common Language Infrastructure, otwarta specyfikacja opracowana przez Microsoft. JIT oznacza kompilację just-in-time, czyli sposób wykonywania kodu, w którym kompilacja odbywa się w trakcie działania programu.

home-05
Zatrudniasz programistów C#?
Mamy ludzi, których szukasz!
Skontaktuj się
Szukasz sprawdzonych programistów C# do swojego zespołu?

W naszej sieci talentów są setki sprawdzonych w boju ekspertów od tworzenia oprogramowania.

Jesteś programistą C# i szukasz świetnych projektów? Dołącz jako Talent