Blog Dla Młodszych Programistów C#/.NET

W poprzednim artykule przeanalizowaliśmy 10 pierwszych pytań wraz z odpowiedziami z rozmów kwalifikacyjnych na stanowisko młodszy programista .NET. Natomiast w tym artykule będziemy kontynuować tę serię i przejdziemy do kolejnych pytań wraz z odpowiedziami.

100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 2/10)


11) Czym jest konstruktor?


Konstruktor jest to specjalna metoda, o takiej samej nazwie co klasa. Nie zawiera w sygnaturze typu zwracanego. Jest wywoływany przy utworzeniu obiektu. Konstruktorów może być wiele, jeżeli mają inne sygnatury, ale może też nie być żadnego, w takim przypadku uruchomiony zostaje domyślnie pusty konstruktor.

public class Student
{
    public Student()
    {

    }

    public Student(int age)
    {

    }
}


12) Co to jest GUID?


GUID jest to skrót od Global Unique Identifier, czyli globalny unikalny identyfikator. Jest generowany między innymi na podstawie czasu wygenerowania oraz liczb pseudolosowych. Składa się z 32 znaków i prawdopodobieństwo wygenerowania dwóch identycznych kluczy jest minimalne.

public class Program
{
    static void Main(string[] args)
    {
        var guid = Guid.NewGuid();
        Console.WriteLine(guid);
    }
}

//Wynik: 649eeac0-6f1e-4f46-bcd3-60d0afd5d7a1


13) Jaka jest różnica pomiędzy unsigned int, a signed int?


Unsigned to typ int bez znaku i oznacza typ, które przechowują tylko dodatnie liczby. Natomiast signed int, oznacza typ int, który może przyjmować zarówno dodatnie, jak i ujemne liczby. Unsigned i signed możemy zastosować również dla innych typów, np. byte, short czy long. Typ int ma rozmiar 32 bity. W przypadku unsigned int możesz zastosować dowolną liczbę całkowitą z przedziału od 0 do ponad 4 miliardów. Natomiast w przypadku signed int będzie to liczba całkowita od ponad -2 miliardy do ponad 2 miliardy. Czyli rozmiar są takie same, tylko w innych zakresach.

int signed = -1;
uint unsigned = 1;


14) Czym jest refaktoryzacja?


Refaktoryzacja, czyli zmiana struktury kodu bez zmiany funkcjonalności. Refaktoryzację przeprowadzamy w celi zwiększenia jakości kodu bez wytwarzania nowej funkcjonalności. W przeprowadzenie poprawnej refaktoryzacji pomagają wcześniej napisane testy jednostkowe, dzięki którym zabezpieczymy się przed ewentualnym regresem.


15) Czym jest var?


Var jest tzw. typem domniemanym i programiści C#, mają do niego dostęp od wersji 3.0. Możemy użyć typu domniemanego tylko w przypadkach, gdy kompilator jest w stanie domyślić się, jaki typ zostanie stworzony w czasie kompilacji. A może się tego domyślić niejawnie dzięki inicjalizacji. Czyli tak naprawdę już w czasie kompilacji wiemy, na jaki typ zostanie zamieniony var. Stosujemy go, ponieważ dzięki niemu nasz kod jest bardziej czytelny i jest bardzo przydatny między innymi w zapytaniach LINQ, ponieważ nie musimy wtedy pisać długich nazw zmiennych. Tak naprawdę np. zapis var a = 1 jest identyczny, do zapisu int a = 1. Kompilator na podstawie inicjalizacji w obu przypadkach wie, że chodzi nam o typ int. Warto podkreślić, że nie można użyć typu domniemanego var, dla samej deklaracji bez inicjalizacji. Tak samo dla właściwości, pól, czy metod.

int a = 1;
var b = 1;


16) Wyjaśnij słowo kluczowe static?


Słowem kluczowym static możemy oznaczyć zarówno klasę, metodę, pole czy właściwość i oznacza daną składową jako statyczna. Aby wywołać metodę statyczną, nie tworzymy nowej instancji obiektu, ale odwołujemy się do niej poprzez nazwę klasy i następnie nazwę składowej. Czyli może to być pole, właściwość, czy metoda. W takim przypadku pamięć jest rezerwowana w momencie pierwszego użycia tej metody. Jeżeli oznaczymy klasę słowem kluczowym static, to jest ona statyczna i ta nasza klasa może zawierać wyłącznie składowe statyczne. Natomiast możemy stworzyć klasę niestatyczną i wewnątrz niej tylko niektóre składowe mogą być statyczne. W takim przypadku możemy odwoływać się do ich składowych na 2 różne sposoby. Do składowych statycznych – poprzez nazwa klasy i nazwa składowej. Natomiast do składowych niestatycznych będziemy mieli dostęp po utworzeniu nowej instancji tej klasy, czyli po stworzeniu nowego obiektu.

public static class Math
{
    public static int Number1 { get; set; }

    public static int GetResult()
    {
        return 0;
    }
}


17) Do czego służy słowo kluczowe this?


Słowo this w C# ma kilka zastosować. Po pierwsze możemy go użyć wewnątrz klasy i wtedy this odwołuje się do bieżącej instancji klasy. Możemy też użyć tego słowa, tworząc metody rozszerzające i wtedy pierwszy parametr musi zostać oznaczony tym słowem i oznacza klasę, którą rozszerzamy.

public class Student
{
    private string name;

    public Student(string name)
    {
        this.name = name;
    }
}

public static class StringExtensions     
{
    public static string NewMethod(this string model)
    {
        return model;
    }
}


18) Jaka jest różnica pomiędzy tablicą, a listą?


Przede wszystkim rozmiar tablicy jest sztywny, a listy jest dynamiczny. W przypadku listy możesz dowolnie dodawać i usuwać elementy z listy, natomiast w przypadki tablicy nie ma takiej możliwości.

var list = new List<int>();
var table = new int[5];


19) Jaka jest różnica pomiędzy właściwościami, a polami?


Przede wszystkim enkapsulacją. Jeżeli chodzi o pole, to jest to zwykła zmienna, z kolei właściwość ma dodatkowo getera i setera, dzięki którym jest możliwość wprowadzenie dodatkowej walidacji i enkapsulacji. Masz tutaj większą kontrolę nad danymi i możesz ustawić odpowiedni modyfikator dostępy zarówno dla zapisu, jak i dla odczytu. To znaczy, możesz np. zezwolić na zmiany właściwości tylko wewnątrz klasy, a odczyt może być publiczny. Ponadto w setcie często przydatne może być wprowadzenie dodatkowej walidacji poprawności danych. Zazwyczaj dobrą praktyką jest tworzenie publicznych właściwości, zamiast pól. Z kolei pola zazwyczaj tworzymy prywatne.

private int _field;
public int Properties { get; private set; }


20) Jak nazywa się klasa bazowa dla wszystkich wyjątków?


Bazową klasą dla wszystkich wyjątków jest klasa Exception. Jeżeli chcesz stworzyć własny wyjątek, to Twoja klasa powinna właśnie dziedziczyć po klasie Exception.

public class MyNotFoundException : Exception
{
    public MyNotFoundException(string url) : base($"Invalid page: {url}.")
    {
    }
}


ZAKOŃCZENIE


To tyle pytań w tym artykule. Kolejne przeanalizujemy już w kolejnym wpisie. Jeżeli taki materiał Ci się spodobał, to koniecznie dołącz do mojej społeczności – darmowe zapisy, gdzie będziesz również miał dostęp do dodatkowych materiałów.

To wszystko na dzisiaj, do zobaczenia w kolejnym artykule.

Poprzedni artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 1/10).
Następny artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 3/10).
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
CTO & Founder - FindSolution.pl
Programista C#/.NET. Specjalizuje się w Blazor, ASP.NET Core, ASP.NET MVC, ASP.NET Web API, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Komentarze (2)
dariuszj
DARIUSZJ, niedziela, 2 stycznia 2022 01:00
Jaka jest różnica pomiędzy unsigned int, a signed int? Błąd w zakresach - powinno być milardów a nie bilionów.
Kazimierz Szpin
KAZIMIERZ SZPIN, niedziela, 2 stycznia 2022 10:12
@DARIUSZJ, tak masz rację – chodzi oczywiście o zakresy w miliardach. Już poprawiłem, dzięki za zwrócenie na to uwagi :)
Dodaj komentarz

Wyszukiwarka

© Copyright 2024 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Regulamin. Polityka prywatności. Design by Kazimierz Szpin