Pytania z kursu

 0    58 フィッシュ    devmementomori1
mp3をダウンロードする 印刷 遊びます 自分をチェック
 
質問 答え
Jakie są paradygmaty programowania obiektowego?
Klasa `Samochód` dziedziczy po `Pojazd`, ukrywa pola i ma różne zachowania metod.
学び始める
Enkapsulacja, dziedziczenie, polimorfizm, abstrakcja.
S (Single Responsibility) z SOLID
`InvoicePrinter` tylko drukuje faktury.
学び始める
Klasa powinna mieć tylko jedno zadanie.
O (Open/Closed) z SOLID
Dodanie nowego typu płatności bez zmiany istniejącego kodu.
学び始める
Klasa powinna być otwarta na rozszerzanie, zamknięta na modyfikacje.
L (Liskov Substitution) z SOLID
`Kwadrat` nie powinien dziedziczyć po `Prostokąt`, jeśli zmienia logikę wymiarów.
学び始める
Klasa pochodna musi poprawnie zastępować bazową.
I (Interface Segregation) z SOLID
`IPrinter` i `IScanner` zamiast `IMultifunctionDevice`.
学び始める
Lepiej mieć wiele małych interfejsów niż jeden duży.
D (Dependency Inversion) z SOLID
Klasa używa `ILogger`, nie `ConsoleLogger`.
学び始める
Moduły powinny zależeć od abstrakcji, nie konkretów.
Czym jest memory leak?
Nieusunięta subskrypcja eventu.
学び始める
Pamięć zajęta przez obiekty, do których nie ma już referencji.
Czym jest reguła DRY?
Wydziel wspólną logikę do metody.
学び始める
Nie powtarzaj kodu.
Czym jest reguła KISS?
Nie twórz skomplikowanego wzorca tam, gdzie wystarczy zwykła metoda.
学び始める
Utrzymuj rozwiązania proste.
Czym jest reguła YAGNI?
Nie pisz kodu „na zapas”.
学び始める
Nie implementuj funkcji, dopóki nie jest potrzebna.
Czym jest klasa, a czym obiekt?
`class Samochód` → `new Samochód()`.
学び始める
Klasa to szablon, obiekt to jej instancja.
Czym różni się JSON od XML?
JSON: `{"imie": "Jan"}` / XML: `<imie>Jan</imie>`.
学び始める
JSON jest lżejszy, oparty na klucz–wartość; XML jest rozbudowany i tagowy.
Czym jest serializacja?
`JsonConvert. SerializeObject(obj)`.
学び始める
Zamiana obiektu na format tekstowy lub bajtowy do zapisu lub przesłania.
Czym są wzorce projektowe?
Singleton, Fabryka, Strategia.
学び始める
Gotowe schematy rozwiązywania typowych problemów.
Jak działa wzorzec Singleton?
`Logger. Instance`.
学び始める
Gwarantuje jedną instancję klasy w systemie.
Jak działa wzorzec Fabryka?
`ShapeFactory. Create("Circle")`.
学び始める
Tworzy obiekty bez ujawniania logiki tworzenia.
Jaki jest cel wzorca Strategia?
`ISortStrategy` → `QuickSort`, `MergeSort`.
学び始める
Pozwala dynamicznie zmieniać algorytm w czasie działania.
Jakie modyfikatory dostępu istnieją w C#?
学び始める
public, private, protected, internal, protected internal, private protected.
public (C#)
`public void Start()` można wywołać z dowolnego miejsca.
学び始める
Dostępny wszędzie.
private (C#)
Prywatne pole `_age` dostępne tylko wewnątrz klasy.
学び始める
Dostępny tylko w tej samej klasie.
protected (C#)
Metoda `protected void Init()` dostępna w klasach dziedziczących.
学び始める
Dostępny w klasie i klasach pochodnych.
internal (C#)
Klasa `internal Helper` widoczna tylko w tym projekcie.
学び始める
Dostępny w obrębie tego samego zestawu (assembly).
protected internal (C#)
Klasa dziedzicząca z innego projektu może mieć dostęp.
学び始める
Dostępny w tym samym zestawie lub w klasach pochodnych.
private protected (C#)
Klasa bazowa i dziedzicząca w jednym projekcie mają dostęp.
学び始める
Dostępny tylko w tej samej klasie i klasach pochodnych w tym samym zestawie.
Jakie metody posiada każdy obiekt?
`obj. ToString()`.
学び始める
`ToString()`, `Equals()`, `GetHashCode()`, `GetType()`.
Po czym można dziedziczyć w C#?
`class Car: Vehicle, IDrivable`.
学び始める
Po jednej klasie i wielu interfejsach.
Czym jest sterta i stos?
`int x` → stos, `new Car()` → sterta.
学び始める
Stos – dane lokalne; sterta – obiekty dynamiczne.
Różnica między przesłanianiem a nadpisywaniem metod?
`public new void Print()` / `public override void Print()`.
学び始める
`new` ukrywa metodę bazową, `override` ją nadpisuje.
Czym są słowa kluczowe ref i out?
`Add(ref a, out b)`.
学び始める
`ref` przekazuje przez referencję (musi być zainicjowany), `out` – inicjalizowany w metodzie.
Czym jest refleksja?
`typeof(Car). GetProperties()`.
学び始める
Mechanizm odczytu metadanych typów w czasie działania.
Czym są typy generyczne?
`List<T>`.
学び始める
Klasy/metody działające z różnymi typami.
Czym są generyczne ograniczenia?
`where T: class`.
学び始める
Warunki na typy generyczne.
Czym są generyczne delegaty?
`Func<T, TResult>`.
学び始める
Delegaty z parametrami typów.
Jak działa wyrażenie using?
`using(var fs = new FileStream(...))`.
学び始める
Automatycznie zwalnia zasoby po użyciu (`IDisposable`).
Jak działa async/await?
`await Task. Delay(1000)`.
学び始める
Umożliwia asynchroniczne operacje bez blokowania wątku.
Jak wykonać akcję równolegle?
`Parallel. ForEach(list, x => DoWork(x))`.
学び始める
`Parallel. ForEach` lub `Task. WhenAll()`.
Czy z metody asynchronicznej można złapać wyjątek?
`try {await Save();} catch {}`.
学び始める
Tak, przez `try/catch` wokół `await`.
Czym są atrybuty?
`[Obsolete("Nie używaj")]`.
学び始める
Metadane opisujące elementy kodu.
Czym jest (un)boxing?
`object o = 5; int i = (int)o;`.
学び始める
Boxing – pakowanie typu wartościowego w obiekt; unboxing – odwrotnie.
Czym są słowa kluczowe const i readonly?
`const int X=5; readonly int Y;`.
学び始める
`const` – stała w czasie kompilacji, `readonly` – tylko do odczytu po inicjalizacji.
Jak działa słowo kluczowe yield?
`yield return x;`.
学び始める
Zwraca kolejne elementy sekwencji (leniwe iterowanie).
Różnica między First a Single (LINQ)?
学び始める
`First()` – pierwszy element; `Single()` – dokładnie jeden element.
Różnica między First a FirstOrDefault (LINQ)?
学び始める
`FirstOrDefault()` zwraca `null`/`default`, jeśli brak elementu.
Różnica między interfejsem a klasą abstrakcyjną?
`interface IRun {}` / `abstract class Animal {}`.
学び始める
Interfejs – definicja bez implementacji; klasa abstrakcyjna – może mieć implementację.
Czym jest metoda rozszerzająca?
`public static bool IsEmpty(this string s)`.
学び始める
Statyczna metoda dodająca nowe zachowanie do istniejącego typu.
Różnica między is a as?
`if(x is Car)` / `var c = x as Car`.
学び始める
`is` sprawdza typ, `as` rzutuje bez wyjątku.
Jak działa protokół HTTP?
`GET /index. html → 200 OK`.
学び始める
Protokół żądań i odpowiedzi klient–serwer, bezstanowy.
Jakie są kategorie kodów HTTP?
404 – nie znaleziono.
学び始める
1xx – info, 2xx – sukces, 3xx – przekierowanie, 4xx – błąd klienta, 5xx – błąd serwera.
Czym różni się uwierzytelnianie od autoryzacji?
Login vs dostęp do panelu admina.
学び始める
Uwierzytelnianie – kim jesteś, autoryzacja – co możesz.
Czym jest Middleware?
Middleware logujący żądania.
学び始める
Komponent przetwarzający żądanie w potoku HTTP.
Jak działa wbudowany kontener DI?
`services. AddScoped<IRepo, Repo>();`
学び始める
Zarządza zależnościami przez wstrzykiwanie instancji (`AddScoped`, `AddSingleton`).
Czym jest AddScoped?
Każde żądanie HTTP ma własną instancję repozytorium.
学び始める
tworzony raz na cały request (żądanie). Oznacza to, że w trakcie obsługi jednego zapytania HTTP wszystkie klasy, które potrzebują tego serwisu, dostaną tę samą instancję. Ale gdy przyjdzie kolejne żądanie HTTP, powstanie nowa instancja.
Czym jest AddSingleton?
Logger lub konfiguracja aplikacji.
学び始める
Rejestruje zależność tworzoną tylko raz na cały czas działania aplikacji.
Czym jest AddTransient?
Serwis krótkotrwały np. generator tokenów.
学び始める
Jeśli w jednym żądaniu HTTP serwis A wstrzykuje B, a B wstrzykuje C, to każda z tych instancji dostanie nowy obiekt Transient. Czyli możesz mieć kilka różnych instancji tego samego serwisu w ramach jednego requesta.
Enkapsulacja (paradygmat OOP);
Prywatne pola + publiczne metody/ właściwości walidujące dane.
学び始める
Ukrywanie stanu obiektu i udostępnianie go przez kontrolowany interfejs
Dziedziczenie (paradygmat OOP)
`class Car: Vehicle` dziedziczy metody i pola.
学び始める
Tworzenie nowych typów na bazie istniejących, współdzielenie i rozszerzanie zachowania.
Polimorfizm (paradygmat OOP);
`virtual`/`override` lub implementacja różnych `IInterface` w klasach pochodnych.
学び始める
Jedno wywołanie — różne zachowania zależnie od typu.;`virtual`/`override`
Abstrakcja (paradygmat OOP);
abstract class Shape` z metodą `Area()` bez konkretnej implementacji
学び始める
Eksponowanie tylko tego, co istotne, ukrywanie szczegółów implementacyjnych.;

コメントを投稿するにはログインする必要があります。