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.
01
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
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
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
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
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
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
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
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
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
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.
01
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
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:
03
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
ASP.NET ma zestaw kontrolek walidacyjnych używanych do walidacji formularzy HTML. Istnieje sześć typów walidatorów:
05
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
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
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
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
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
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.
01
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
Web API to interfejs programistyczny, więc nie da się zaimplementować generycznej akcji - musi ono znać sygnatury metod z góry.
03
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
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
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
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
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
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
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
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.
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
Dane rejestrowe:
Firma
Usługi
Najczęściej poszukiwani specjaliści