91) Czym jest Scrum?
Scrum jest to zwinne podejście do tworzenia oprogramowania. To znaczy, nie musi to być tylko oprogramowanie, może to być dowolna rzecz, jakiś produkt. W scrumie pracujemy przyrostowo, w krótkich iteracjach i w dowolnym momencie mamy działającą wersję naszego oprogramowania. Iteracyjnie staramy się dodawać nowe funkcjonalności. Taka jedna iteracja to tzw. sprint. Powinien on trwać maksymalnie miesiąc, najczęściej taki sprint trwa 2 tygodnie.
Częścią sprintu są między innymi sprint planning (planowanie prac na kolejny sprint), daily scrum (codzienne spotkania, na którym omawiamy w zespole, co zostało już zrobione, jakie mamy problemy i czym będziemy zajmować się w następnej kolejności), sprint review (przegląd zrobionych prac) oraz sprint retrospective (retrospektywa).
W scrumie mamy kilka ról. Między innymi Developers (programiści), Product Owner (właściciel produktu) oraz Scrum Master (osoba czuwająca nad tym, w jaki sposób działamy).
92) Czym jest SOLID?
SOLID jest to pięć reguł dotyczących programowania obiektowego. Zaproponował je amerykański programista Robert C. Martin (Uncle Bob) - uważany przez wielu jako autorytet w świecie programowania.
Samo słowo SOLID oznacza coś solidnego, konstruktywnego, czy konkretnego, ale nie od tego wzięła się nazwa. Składają się na nie zasady, które pochodzą kolejno od każdej litery w słowie SOLID.
S jak Single Responsibility Principle (SRP)
Zasada Pojedynczej Odpowiedzialności - Każda klasa powinna mieć tylko jedną odpowiedzialność. Nigdy nie powinien istnieć więcej niż jeden powód do tego, aby ją w przyszłości zmienić.
O jak Open-Closed Principle (OCP)
Zasada Otwarte-Zamknięte - Element oprogramowania powinien być otwarty na rozbudowę, ale zamknięty na modyfikację. Jeżeli mamy jakąś metodę, która jest używana w innych częściach systemu, to nie powinna być już ona modyfikowana.
L jak Liskov Substitution Principle (LSP)
Zasada Podstawienia Liskov - 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. W miejsce typu bazowego możesz podstawić dowolny typ klasy pochodnej i nie powinieneś utracić poprawnego działania.
I jak Interface Segregation Principle (ISP)
Zasada Segregacji Interfejsów - Żaden klient nie powinien być zmuszany do polegania na metodach, z których nie korzysta. Kilka dedykowanych interfejsów jest lepsze niż jeden, który jest zbyt ogólny.
D jak Dependency Inversion Principle (DIP)
Zasada Odwrócenia Zależności - Moduły wysokopoziomowe nie powinny zależeć od modułów niskopoziomowych. I pierwsze, i drugie powinny zależeć od abstrakcji (interfejsów, lub klas abstrakcyjnych). Abstrakcje nie powinny zależeć od szczegółów. To szczegóły powinny zależeć od abstrakcji.
Każdy ten temat rozwijam bardziej szczegółowo na moim blogu, także, jeżeli interesują Cię szczegóły, to koniecznie zerknij (tutaj - SOLID).
93) Czym jest kod zarządzany i niezarządzany?
Kod zarządzany jest napisany w języku wysokiego poziomu np. w C# i umożliwia uruchamianie kodu w zarządzanym środowisku uruchomieniowym CLR w .NET. CLR jest odpowiedzialny za ten kod, kompiluje go do kodu maszynowego i następnie wykonuje. Środowisko uruchomieniowe zapewnia różne usługi, takie jak zarządzanie pamięcią, bezpieczeństwo, obsługa wyjątków itp.
Kod niezarządzany występuje, gdy kod nie jest uruchamiany w środowisku CLR. Jest to kod, który działa poza platformą .NET. Nie świadczą usług języków wysokiego poziomu i działają bez nich.
94) Czym jest refleksja w C#?
Dzięki refleksji możemy pobrać metadane o klasach, zmienić ich definicję w czasie wykonywania programu. Dzięki niej możemy również dynamicznie wywoływać metody. Metody refleksji w C# są dostępne w przestrzeni nazw System.Reflection.
95) Czym jest zakleszczenie (deadlock)?
Deadlock to sytuacja, w której proces nie jest w stanie dokończyć swojego zadania, ponieważ dwa lub więcej procesów czeka na siebie nawzajem.
96) Czym jest serializacja i deserializacja?
Serializacja jest to proces, który przekształca obiekt do np. strumienia bajtów. Serializowany obiekt może dzięki temu zostać np. zapisany na dysku lub też przesłany do innego procesu przez sieć.
Z kolei deserializacja jest procesem odwrotnym do serializacji. Dzięki niej można przywrócić dany obiekt, który wcześniej był strumieniem bajtów.
97) Co to jest destruktor w C#?
Destruktor służy do czyszczenia pamięci i zwalniania zasobów. Możemy też sami stworzyć taki destruktor. Aby to zrobić, wystarczy stworzyć metodę o takiej samej nazwie, co nazwa klasy, bez modyfikatora dostępu i typu zwracanego, poprzedzoną znakiem ~.
Na szczęście w C# mamy Garbage Collector, który sam zajmuje się zwalnianiem zasobów i czyszczeniem pamięci, także nie potrzebujemy tworzyć destruktorów.
public class Program
{
~Program()
{
}
}
98) Czym jest Garbage Collector w C#?
Można powiedzieć, że Garbage Collector ułatwia życie programiście. Ułatwia nam zarządzanie pamięcią, dzięki niemu nie musimy, tak jak to ma miejsce na przykład w C++, wywoływać destruktorów.
Garbage Collector zabezpiecza aplikacje przed przepełnieniem lub wyciekiem pamięci. Działa automatycznie, dokładniej to zajmuje się zarządzaniem stertą, to znaczy szuka referencji do obiektów. Jeżeli do obiektu nie jest przypisana żadna referencja, to znak dla Garbage Collectora, że można taki obiekt usunąć. Niestety Garbage Collector zajmuje się tylko zwalnianiem zasobów zarządzanych (czyli zwykłych klas), natomiast nie zwalnia zasobów niezarządzanych takich jak otwarte pliki, otwarte połączenia do baz danych, obiektów COM. W takich przypadkach musimy sami zadbać o zwalnianie takich zasobów.
99) Czym jest routing?
Routing tłumaczy żądania HTTP na akcje kontrolera. Czyli odpowiada za to, żeby odpowiedni adres URL wykonał przypisaną do niego akcję. Routing w aplikacji ASP.NET Core możemy definiować na kilka sposobów.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
[Route("[controller]/[action]")]
public class TicketController : Controller { }
[Route("Home")]
public IActionResult Index() { return View(); }
[HttpGet("/tickets")]
public IActionResult Tickets() { // … }
[HttpPost("/tickets")]
public IActionResult CreateTicket() { // … }
100) Do czego służy instrukcja lock w C#?
Dzięki instrukcji lock możemy wykonywać bezpiecznie kod wykonywany synchronicznie w środowisku wielowątkowym. Do kodu, który jest wewnątrz instrukcji lock, może mieć dostęp jednocześnie tylko jeden wątek.
private readonly object lockObject = new object();
public void CriticalMethod()
{
lock (lockObject)
{
}
}
ZAKOŃCZENIE
To już były wszystkie pytania, które dla Ciebie przygotowałem. Mam nadzieje, że ta takie materiały przypadły Ci do gustu. Widzimy się już w przyszłym artykule z nowym tematem. Daj znać czy takie wpisy są dla Ciebie wartościowe. 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ęść 9/10).
Następny artykuł - Jak Wygląda i Na Czym Polega Praca Programisty?