Var Flashcards

1
Q

Pytanie: Co to jest TDD i jakie są jego główne zalety?

A

Odpowiedź: TDD, czyli Test-Driven Development, to technika programowania, w której najpierw pisze się testy, a następnie kod, który je spełnia. Główne zalety to lepsza jakość kodu, mniejsza liczba błędów i łatwość refaktoryzacji.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Pytanie: Jakie są trzy główne etapy TDD?

A

Odpowiedź: Trzy główne etapy TDD to: Czerwony (pisanie testu, który nie przechodzi), Zielony (pisanie minimalnego kodu, aby test przeszedł) i Refaktoryzacja (ulepszanie kodu bez zmiany jego zachowania).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Pytanie: Co to jest DDD i dlaczego jest ważne?

A

Odpowiedź: DDD, czyli Domain-Driven Design, to podejście do projektowania oprogramowania skoncentrowane na dziedzinie problemu. Pomaga w tworzeniu modelu, który odzwierciedla rzeczywistość biznesową i ułatwia komunikację między programistami a ekspertami biznesowymi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Pytanie: Co to jest agregat w kontekście DDD?

A

Odpowiedź: Agregat to skupienie powiązanych obiektów traktowanych jako jednostka dla celów zmian danych. Posiada korzeń agregatu, który jest jedynym punktem dostępu do zarządzania agregatem.

Agregat w kontekście DDD (Domain-Driven Design) odnosi się do wzorca projektowego stosowanego w modelowaniu oprogramowania. Oto kilka kluczowych punktów na temat agregatów w DDD:

  1. Granice: Agregat jest zbiorem obiektów domenowych, które traktowane są jako jedna jednostka dla celów operacji na danych. Agregat ma jasno określone granice, co oznacza, że operacje na jednym agregacie nie wpłyną bezpośrednio na inny agregat.
  2. Korzeń Agregatu: Każdy agregat ma korzeń agregatu, który jest jedynym obiektem w agregacie dostępnym dla obiektów poza agregatem. Wszystkie operacje na agregacie muszą przechodzić przez korzeń agregatu.
  3. Spójność: Jednym z głównych celów agregatu jest zapewnienie spójności biznesowej. Oznacza to, że wszelkie operacje wewnątrz agregatu muszą pozostawiać go w spójnym stanie.
  4. Trwałość: Zazwyczaj korzeń agregatu jest jednostką trwałości, co oznacza, że jest on zapisywany i odczytywany z bazy danych jako jedna jednostka.
  5. Nieprzezroczystość: Wewnętrzne detale agregatu są ukryte dla innych obiektów. Inne obiekty komunikują się z agregatem tylko za pośrednictwem korzenia agregatu.
  6. Operacje: Wszystkie operacje, które mogą naruszyć spójność agregatu, powinny być zawarte wewnątrz agregatu.

Agregaty w DDD pomagają w organizacji i zarządzaniu złożonością w dużych systemach, zapewniając jednocześnie spójność i integralność danych. Pomagają one również w izolacji różnych części domeny, co ułatwia testowanie i rozwijanie oprogramowania.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Pytanie: Jakie są kluczowe wartości metodyki Agile?

A

Odpowiedź: Kluczowe wartości Agile to: ludzie i interakcje ponad procesy i narzędzia, działające oprogramowanie ponad obszerną dokumentację, współpraca z klientem ponad negocjacje umowy oraz reagowanie na zmiany ponad śledzenie planu.

Metodyka Agile opiera się na czterech kluczowych wartościach, które zostały sformułowane w “Manifestie Agile”. Oto one:

  1. Ludzie i interakcje ważniejsze niż procesy i narzędzia.
    • To oznacza, że bardziej istotne jest to, jak ludzie współpracują i komunikują się ze sobą, niż ścisłe przestrzeganie procesów czy korzystanie z konkretnych narzędzi. Zespoły powinny być samodzielne i mieć możliwość dostosowywania się do zmieniających się okoliczności.
  2. Działające oprogramowanie ważniejsze niż obszerna dokumentacja.
    • Chociaż dokumentacja jest ważna, priorytetem w Agile jest dostarczanie działającego oprogramowania. Zamiast poświęcać dużo czasu na tworzenie obszernych specyfikacji, zespoły Agile skupiają się na tworzeniu oprogramowania, które przynosi wartość dla klienta.
  3. Współpraca z klientem ważniejsza niż negocjacje umów.
    • W Agile duży nacisk kładziony jest na bliską współpracę z klientem i regularne uzyskiwanie od niego informacji zwrotnej. Zamiast trzymać się sztywno ustalonych umów, zespoły Agile są otwarte na zmiany i dostosowywanie się do potrzeb klienta w trakcie trwania projektu.
  4. Reagowanie na zmiany ważniejsze niż trzymanie się planu.
    • Świat biznesu jest dynamiczny i nieprzewidywalny. Dlatego metodyka Agile zakłada, że zmiany są nieuniknione i zespoły powinny być przygotowane na dostosowywanie się do nich, zamiast kurczowo trzymać się początkowego planu.

Chociaż te wartości podkreślają pewne aspekty bardziej niż inne, nie oznacza to, że te “mniej ważne” elementy są całkowicie odrzucane. Manifest Agile mówi: “Stawiając na lewej stronie większy nacisk, uznajemy wartość elementów po prawej stronie”. Innymi słowy, chodzi o to, aby znaleźć odpowiednią równowagę i dostosować się do konkretnej sytuacji.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Pytanie: Co to jest Scrum i jakie są jego główne role?

A

Odpowiedź: Scrum to ramy pracy Agile skoncentrowane na dostarczaniu wartości w krótkich iteracjach zwanych sprintami. Główne role w Scrum to: Product Owner, Scrum Master i Zespół Deweloperski.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Pytanie: Co to są mikroserwisy i jakie są ich główne zalety?

A

Odpowiedź: Mikroserwisy to architektura aplikacji, w której aplikacja składa się z wielu niezależnych serwisów komunikujących się ze sobą. Główne zalety to skalowalność, niezawodność, łatwość wdrażania i możliwość użycia różnych technologii w różnych serwisach.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Pytanie: Jakie są wyzwania związane z wdrażaniem i zarządzaniem mikroserwisami?

A

Odpowiedź: Wyzwania to m.in.: zarządzanie wieloma bazami danych, monitorowanie i śledzenie błędów w rozproszonym środowisku, złożoność sieci i komunikacji między serwisami oraz zarządzanie wersjami i zależnościami między serwisami.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Pytanie: Jakie są najlepsze praktyki w zakresie komunikacji między mikroserwisami?

A

Odpowiedź: Najlepsze praktyki to m.in.: unikanie komunikacji synchronicznej na rzecz asynchronicznej, użycie lekkich protokołów (np. HTTP/REST, gRPC), korzystanie z wzorców takich jak Circuit Breaker do obsługi błędów oraz unikanie ściśle powiązanych zależności między serwisami.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Pytanie: Jakie narzędzia i technologie są często używane w architekturze mikroserwisów?

A

Odpowiedź: Popularne narzędzia i technologie to m.in.: Docker, Kubernetes, Istio, RabbitMQ, Kafka, Consul oraz różne platformy chmurowe oferujące usługi dla mikroserwisów.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Pytanie: Jakie są główne wyzwania związane z TDD?

A

Odpowiedź: Wyzwania związane z TDD to m.in.: początkowy wzrost czasu potrzebnego na rozwój, trudność w napisaniu odpowiednich testów dla skomplikowanej logiki oraz potrzeba ciągłego utrzymania i aktualizacji testów w miarę ewolucji kodu.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Pytanie: Jak TDD wpływa na jakość kodu?

A

Odpowiedź: TDD może prowadzić do lepszej modularności, mniejszej liczby błędów, lepszej czytelności kodu oraz łatwiejszej refaktoryzacji, ponieważ każda zmiana jest weryfikowana przez testy.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Pytanie: Co to jest wartość obiektowa (Value Object) w DDD?

A

Odpowiedź: Wartość obiektowa to obiekt, który reprezentuje opisowy aspekt dziedziny z naciskiem na atrybuty, a nie tożsamość. Są niezmienne i nie mają globalnej tożsamości.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Pytanie: Jakie są różnice między encją a wartością obiektową w DDD?

A

Odpowiedź: Encja ma trwałą tożsamość przez cały czas życia, podczas gdy wartość obiektowa jest zdefiniowana przez jej atrybuty i nie ma trwałej tożsamości. Encje są zazwyczaj modyfikowalne, podczas gdy wartości obiektowe są niezmienne.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Pytanie: Co to jest burndown chart w Scrum?

A

Odpowiedź: Burndown chart to wykres, który pokazuje, ile pracy pozostało do zrobienia w trakcie sprintu. Oś pionowa reprezentuje ilość pracy, a oś pozioma reprezentuje czas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Pytanie: Jakie są różnice między Scrum a Kanban?

A

Odpowiedź: Scrum jest ramą pracy z określonymi rolami i rytuałami, skupiającą się na dostarczaniu wartości w krótkich iteracjach zwanych sprintami. Kanban skupia się na ciągłej poprawie i dostarczaniu wartości, z naciskiem na przepływ pracy i ograniczenie pracy w toku (Work In Progress).

17
Q

Pytanie: Jakie są główne zalety i wady architektury mikroserwisów?

A

Odpowiedź: Zalety to m.in.: skalowalność, niezawodność, niezależność serwisów, możliwość użycia różnych technologii w różnych serwisach. Wady to m.in.: złożoność zarządzania, wyzwanie w monitorowaniu i śledzeniu błędów, trudność w zarządzaniu transakcjami między serwisami.

18
Q

Pytanie: Co to jest baza danych typu polyglot persistence w kontekście mikroserwisów?

A

Odpowiedź: Polyglot persistence oznacza użycie różnych baz danych w zależności od potrzeb konkretnego serwisu. W architekturze mikroserwisów każdy serwis może mieć swoją własną bazę danych, która jest najlepiej dostosowana do jego wymagań.

19
Q

Pytanie: Jakie są najlepsze praktyki w zakresie bezpieczeństwa mikroserwisów?

A

Odpowiedź: Do najlepszych praktyk należą: uwierzytelnianie i autoryzacja na poziomie API, szyfrowanie komunikacji między serwisami, zarządzanie tajnymi danymi (np. hasłami) w bezpieczny sposób oraz regularne skanowanie podatności i aktualizacja zależności.

20
Q

Pytanie: Jak mikroserwisy komunikują się ze sobą?

A

Odpowiedź: Mikroserwisy mogą komunikować się ze sobą za pomocą synchronicznych protokołów, takich jak HTTP/REST lub gRPC, lub asynchronicznie za pomocą systemów kolejkowania wiadomości, takich jak RabbitMQ czy Kafka.

21
Q

Co to jest “paradygmat” w kontekście IT i programowania oprogramowania ?

A

W kontekście IT i programowania oprogramowania, “paradygmat” odnosi się do modelu lub stylu programowania, który określa strukturę i podejście do tworzenia programów. Różne paradygmaty programowania oferują różne metody organizacji i wykonywania kodu, a wybór paradygmatu może wpłynąć na sposób myślenia programisty oraz na strukturę i wydajność tworzonego oprogramowania. Oto kilka głównych paradygmatów programowania w IT:

  1. Paradygmat imperatywny: Programowanie oparte na instrukcjach, które mówią komputerowi, “co zrobić”. Języki takie jak C, Pascal i większość języków skryptowych opierają się na tym paradygmacie.
  2. Paradygmat obiektowy (OOP): Programowanie oparte na “obiektach”, które reprezentują jednostki danych i funkcje, które na nich działają. Języki takie jak Java, C++ i Python obsługują OOP.
  3. Paradygmat funkcyjny: Programowanie oparte na funkcjach matematycznych, gdzie wynik funkcji zależy wyłącznie od jej argumentów. Języki takie jak Haskell, Lisp i Erlang są przykładami języków funkcyjnych.
  4. Paradygmat logiczny: Programowanie oparte na logice i zdaniach, które opisują relacje między danymi. Prolog to przykład języka logicznego.
  5. Paradygmat deklaratywny: Zamiast mówić komputerowi, jak coś zrobić (jak w paradygmacie imperatywnym), mówisz mu, co chcesz osiągnąć, a komputer sam decyduje, jak to zrobić. SQL, język zapytań do baz danych, jest przykładem języka deklaratywnego.
  6. Paradygmat zdarzeniowy: Programowanie oparte na reagowaniu na zdarzenia, takie jak kliknięcia myszką czy naciśnięcia klawisza. Jest to często stosowane w programowaniu interfejsów użytkownika.

W praktyce wiele języków programowania obsługuje wiele paradygmatów, co pozwala programistom wybierać odpowiednie podejście w zależności od konkretnego zadania. Wybór paradygmatu może wpłynąć na czytelność, wydajność, łatwość utrzymania i skalowalność kodu.