Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 8 czerwca 2026 20:22
  • Data zakończenia: 8 czerwca 2026 20:38

Egzamin zdany!

Wynik: 27/40 punktów (67,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Co to jest PWA (Progressive Web App)?

A. System zarządzania treścią dla stron internetowych
B. Aplikacja webowa działająca jak natywna aplikacja mobilna
C. Framework do tworzenia aplikacji mobilnych
D. Biblioteka graficzna do tworzenia animacji
Progressive Web App (PWA) to aplikacja webowa, która łączy cechy stron internetowych i natywnych aplikacji mobilnych, oferując użytkownikom lepsze doświadczenia dzięki technologii webowej. PWA wykorzystują zaawansowane funkcje przeglądarek, takie jak Service Workers, aby zapewnić offline'ową funkcjonalność, powiadomienia push i lepsze zarządzanie pamięcią podręczną. Dzięki temu użytkownicy mogą korzystać z aplikacji niezależnie od jakości połączenia internetowego. Przykłady PWA obejmują aplikacje takie jak Twitter Lite, które umożliwiają użytkownikom przeglądanie treści nawet przy słabym sygnale sieciowym, a także Facebook Lite, który jest zoptymalizowany pod kątem urządzeń o ograniczonych zasobach. Warto również wspomnieć o zastosowaniach PWA w e-commerce, gdzie użytkownicy mogą szybko dodawać produkty do koszyka i dokonywać zakupów bez konieczności ładowania pełnej aplikacji mobilnej. Te właściwości sprawiają, że PWA są zgodne z najlepszymi praktykami branżowymi, zapewniając użytkownikom dostęp do funkcji, które wcześniej były zarezerwowane tylko dla natywnych aplikacji.

Pytanie 2

Które z wymienionych stwierdzeń najtrafniej charakteryzuje klasę bazową?

A. Klasa, która dziedziczy z klasy pochodnej
B. Klasa, która zawsze zawiera metody wirtualne
C. Klasa, która zapewnia wspólne atrybuty i metody dla klas pochodnych
D. Klasa, która nie może być dziedziczona
Klasa bazowa to klasa, która dostarcza wspólne pola i metody dla klas pochodnych. Definiuje ogólną funkcjonalność, która może być rozszerzana lub modyfikowana przez klasy dziedziczące. Dzięki temu programowanie obiektowe umożliwia wielokrotne wykorzystanie kodu, co prowadzi do jego większej modularności i czytelności. Klasa bazowa często zawiera metody wirtualne, które mogą być nadpisywane przez klasy pochodne, co pozwala na dostosowanie funkcjonalności do konkretnych potrzeb. Przykładem jest klasa 'Pojazd', która posiada metody takie jak 'Jedz()' czy 'Zatrzymaj()', a klasy pochodne, np. 'Samochód' lub 'Rower', rozszerzają tę funkcjonalność.

Pytanie 3

Który z wymienionych poniżej przykładów stanowi system informacji przetwarzany przez system informatyczny?

A. System wentylacyjny w biurowcach
B. System do monitorowania temperatury serwerów
C. System zarządzania oświetleniem drogowym
D. System PESEL
System PESEL (Powszechny Elektroniczny System Ewidencji Ludności) jest przykładem systemu informacji przetwarzanym przez system informatyczny, ponieważ gromadzi, przetwarza i udostępnia dane osobowe obywateli Polski. Jest to złożony system, który działa na bazie zintegrowanych baz danych, umożliwiający identyfikację osób, przydzielanie numerów PESEL oraz zarządzanie informacjami o statusie mieszkańców. System ten jest niezbędny dla organów administracji publicznej, umożliwiając im efektywne zarządzanie danymi obywateli w kontekście takich usług, jak wydawanie dowodów osobistych, rejestracja wyborców, a także w kontekście ochrony zdrowia i ubezpieczeń społecznych. PESEL jest zgodny z Europejskim Ogólnochronnym Rozporządzeniem o Ochronie Danych Osobowych (RODO), co dodatkowo podkreśla jego rolę jako kluczowego systemu informacyjnego w obiegu danych w Polsce. Przykłady zastosowań systemu PESEL obejmują obsługę wniosków o świadczenia socjalne oraz dostęp do e-usług, co świadczy o jego fundamentalnym znaczeniu w administrowaniu danymi ludnościowymi.

Pytanie 4

Co to jest Event Loop w JavaScript?

A. Protokół komunikacji między różnymi częściami aplikacji webowej
B. Technika obsługi zdarzeń w aplikacjach React
C. System zarządzania cyklem życia komponentów w Angular
D. Mechanizm pozwalający na asynchroniczne wykonywanie kodu mimo jednowątkowej natury JavaScript
Event Loop w JavaScript to kluczowy mechanizm, który umożliwia asynchroniczne wykonywanie kodu mimo jednowątkowej natury tego języka. JavaScript działa w jednym wątku, co oznacza, że może wykonywać jedną operację w danym czasie. Event Loop pozwala jednak na zarządzanie operacjami asynchronicznymi, takimi jak wywołania API czy operacje na danych, które mogą trwać dłużej. Dzięki temu, zamiast czekać na zakończenie tych operacji, kod może kontynuować wykonywanie innych zadań. W praktyce, gdy operacja asynchroniczna kończy się, jej wynik jest umieszczany w kolejce do przetworzenia, a Event Loop zajmuje się ich przetwarzaniem, kiedy główny wątek jest dostępny. To podejście sprawia, że aplikacje webowe są bardziej responsywne, ponieważ nie blokują interfejsu użytkownika podczas oczekiwania na zakończenie długoterminowych zadań. Dobrą praktyką jest zrozumienie działania Event Loop, ponieważ pozwala to na efektywniejsze zarządzanie asynchronicznością w kodzie JavaScript, co jest niezwykle istotne w przypadku rozwijania nowoczesnych aplikacji webowych.

Pytanie 5

Algorytm zaprezentowany w zadaniu można zrealizować w języku Java wykorzystując instrukcję

Ilustracja do pytania
A. if
B. switch
C. while
D. try
Pętla while w języku Java jest idealna do implementacji algorytmów, które wymagają wielokrotnego wykonywania bloku kodu dopóki określony warunek logiczny pozostaje prawdziwy. W przedstawionym schemacie blokowym widzimy iteracyjny proces, który zaczyna się od przypisania wartości 2 do zmiennej number, a następnie kontynuuje dodawanie 2 do tej zmiennej tak długo, jak długo jej wartość nie osiągnie 10. Struktura ta jest typowym przykładem problemu, który najlepiej rozwiązać za pomocą pętli while. Wyrażenie warunkowe number != 10 jest sprawdzane przed każdą iteracją pętli, co umożliwia zakończenie pętli w momencie, gdy warunek przestaje być prawdziwy. To podejście jest zgodne z dobrymi praktykami programistycznymi, które zalecają minimalizowanie niepotrzebnych obliczeń i zwiększanie czytelności kodu. Pętle while są często stosowane w sytuacjach, gdy liczba iteracji nie jest z góry znana i zależy od dynamicznie zmieniających się warunków, co czyni je wszechstronnym narzędziem w wielu aplikacjach, od przetwarzania danych po kontrolę przepływu w symulacjach komputerowych. Praktyczna znajomość pętli pozwala na efektywne rozwiązywanie problemów w złożonych projektach informatycznych.

Pytanie 6

Na podstawie zamieszczonego fragmentu kodu można stwierdzić, że element o nazwie rysunek jest

MojaKlasa obj1 = new MojaKlasa();
obj1.rysunek();
A. obiektem
B. konstruktorem
C. polem w klasie
D. metodą w klasie
W tym fragmencie kodu wywołujesz funkcję rysunek na obiekcie obj1, który jest instancją klasy MojaKlasa. To znaczy, że rysunek jest metodą tej klasy. Tak naprawdę, w programowaniu obiektowym korzystanie z metod to chleb powszedni – to one definiują zachowanie obiektu. W praktyce, metody są tym, co pozwala obiektom „robić” coś konkretnego, czyli realizować logikę biznesową albo odpowiadać na zdarzenia. Moim zdaniem warto pamiętać, że w standardach takich jak Java czy C#, notacja obj1.rysunek() jednoznacznie wskazuje na wywołanie metody (nawiasy są tu sygnałem, że chodzi o funkcję, a nie o dostęp do pola). To zresztą jest bardzo czytelna konwencja, spotykana praktycznie w każdym języku zorientowanym obiektowo. Dla przykładu, jeśli chciałbyś uzyskać dostęp do pola w obiekcie, nie używałbyś nawiasów, tylko napisałbyś obj1.nazwapola. W pracy nad większymi projektami warto też pamiętać o tzw. enkapsulacji – metody pozwalają „schować” szczegóły implementacji i udostępnić tylko to, co faktycznie powinno być dostępne z zewnątrz. W sumie, wywołanie obj1.rysunek(); dokładnie pokazuje, jak od strony praktycznej wyglądają interakcje z metodą klasy.

Pytanie 7

Co to jest IndexedDB?

A. Niskopoziomowe API do przechowywania dużych ilości danych w przeglądarce użytkownika
B. System zarządzania bazami SQL w aplikacjach backendowych
C. Format indeksowania danych w bazach NoSQL
D. Indeks danych używany przez wyszukiwarki internetowe
Odpowiedzi, które wskazują na inne znaczenia IndexedDB, wynikają z nieporozumień dotyczących funkcji i zastosowania tej technologii. IndexedDB nie jest indeksem danych używanym przez wyszukiwarki internetowe, ponieważ jego głównym celem jest przechowywanie danych lokalnie na urządzeniu użytkownika, a nie indeksowanie ich w sieci. Takie myślenie prowadzi do błędnych wniosków na temat jego funkcjonalności, ponieważ indeksy w wyszukiwarkach takie jak Google służą do szybkiego odnajdywania informacji w ogromnych zbiorach danych dostępnych w Internecie, a nie do lokalnego przechowywania czy manipulacji informacjami. Ponadto, nie jest to system zarządzania bazami SQL w aplikacjach backendowych. IndexedDB działa w przeglądarkach i jest zaprojektowane do pracy w środowisku klienta, podczas gdy bazy SQL, takie jak MySQL czy PostgreSQL, są zazwyczaj używane na serwerach i wymagają odrębnego podejścia do zarządzania danymi. Również twierdzenie, że IndexedDB jest formatem indeksowania danych w bazach NoSQL, jest mylące. IndexedDB to nie format, lecz interfejs API, który wspiera przechowywanie danych w strukturze obiektowej, co czyni go bardziej elastycznym w kontekście przechowywania danych niż tradycyjne bazy NoSQL. W rezultacie, błędne koncepcje wynikają z niepełnego zrozumienia, jak działa IndexedDB oraz jakie są jego główne zastosowania i ograniczenia.

Pytanie 8

Który z wymienionych aktów prawnych odnosi się do ochrony danych osobowych w krajach Unii Europejskiej?

A. DMCA
B. GDPR (RODO)
C. Open Source Initiative
D. Creative Commons
GDPR (RODO) to akt prawny dotyczący ochrony danych osobowych w Unii Europejskiej. Wprowadza on jednolite zasady przetwarzania danych, zwiększając ochronę prywatności obywateli. RODO daje użytkownikom prawo do dostępu do swoich danych, ich poprawiania, a także żądania ich usunięcia (prawo do bycia zapomnianym). Firmy muszą transparentnie informować o celach przetwarzania danych oraz zapewniać odpowiedni poziom zabezpieczeń. Niezastosowanie się do przepisów RODO skutkuje wysokimi karami finansowymi.

Pytanie 9

W jakiej metodzie zarządzania projektami nacisk kładzie się na ograniczenie marnotrawstwa?

A. Waterfall
B. Scrum
C. Prototypowy
D. Kanban
Scrum to inna metodologia zwinna, ale jej celem jest iteracyjne dostarczanie produktów w ramach określonych sprintów, a nie minimalizacja marnotrawstwa. Waterfall to tradycyjny model sekwencyjny, który nie koncentruje się na eliminacji marnotrawstwa, lecz na dokładnym zaplanowaniu projektu na etapie początkowym. Model prototypowy opiera się na iteracyjnym tworzeniu i testowaniu prototypów, ale jego głównym celem jest uzyskanie feedbacku od użytkowników, a nie optymalizacja przepływu pracy.

Pytanie 10

Który z podanych terminów najlepiej odnosi się do składnika statycznego w klasie?

A. Zmienna lokalna wewnątrz danej klasy
B. Pole lub metoda, która jest przypisana do klasy, a nie do jej instancji
C. Funkcja, która wywołuje destruktor danej klasy
D. Metoda z dostępem ograniczonym tylko do tej samej klasy
Składnik statyczny klasy to pole lub metoda, która należy do klasy jako całości, a nie do konkretnego obiektu. Oznacza to, że istnieje tylko jedna kopia składnika statycznego współdzielona przez wszystkie obiekty tej klasy. Przykład w C++: `class Licznik { public: static int liczbaObiektow; }`. Zmienna `liczbaObiektow` przechowuje liczbę utworzonych instancji klasy i jest wspólna dla wszystkich obiektów. Składniki statyczne są często używane do implementacji liczników, zarządzania zasobami lub przechowywania danych globalnych w obrębie klasy.

Pytanie 11

Jaką nazwę kontrolki powinno się umieścić w początkowej linii kodu, w miejscu <???, aby została ona wyświetlona w podany sposób?

Ilustracja do pytania
A. SeekBar
B. RatinoBar
C. Spinner
D. Switch
Switch to kontrolka używana w Androidzie do stworzenia elementu interfejsu użytkownika, który pozwala użytkownikowi przełączać się między dwoma stanami. Domyślnie stany te są identyfikowane jako włączone i wyłączone, co jest szczególnie przydatne w przypadku funkcji wymagających prostego wyboru binarnego, jak na przykład włączanie lub wyłączanie ustawień. Kod XML użyty w pytaniu zawiera atrybuty android:textOff i android:textOn, które są typowe dla klasy Switch i pozwalają zdefiniować tekst, jaki ma być wyświetlany w stanie wyłączonym i włączonym. W praktyce Switch jest często stosowany w aplikacjach mobilnych do kontroli ustawień użytkownika, co pozwala na łatwą i intuicyjną obsługę. Dobrymi praktykami jest używanie Switch w kontekście jednoznacznego wyboru, aby nie wprowadzać użytkownika w błąd. Warto również zadbać o dostępność i odpowiednie etykietowanie kontrolki, co zapewnia jej zrozumiałość dla wszystkich użytkowników.

Pytanie 12

Jaką rolę pełni debugger w trakcie programowania?

A. Do konwersji kodu źródłowego na język maszynowy
B. Do automatycznego generowania dokumentacji projektu
C. Do kontrolowania wersji kodu źródłowego
D. Do wykrywania błędów w czasie działania programu
Debugger to takie narzędzie, które pomaga programistom w znajdowaniu błędów i śledzeniu, co się dzieje z programem, kiedy go uruchamiamy. Można go zatrzymać w dowolnym momencie, co nazywamy breakpoints, i wtedy można zobaczyć, jakie zmienne mają jakie wartości. Dzięki temu można łatwiej dostrzegać błędy logiczne czy składniowe. Wydaje mi się, że to naprawdę ważne narzędzie w pracy każdego programisty, bo ułatwia życie!

Pytanie 13

Do implementacji w aplikacji jednokierunkowej funkcji skrótu, zwanej funkcją haszującą, można wykorzystać algorytm

A. MD5
B. AES
C. RSA
D. DES
Wiele osób myli funkcje szyfrujące z funkcjami skrótu i to jest dość powszechny błąd – spotkałem się z tym wielokrotnie podczas różnych zajęć czy projektów. Algorytmy takie jak DES, AES czy RSA to klasyczne przykłady szyfrów, czyli narzędzi do szyfrowania i odszyfrowywania danych, a nie do generowania skrótu. DES i AES to algorytmy szyfrowania symetrycznego, w których ten sam klucz jest używany zarówno do szyfrowania, jak i odszyfrowywania. RSA z kolei jest przykładem szyfrowania asymetrycznego – opiera się na parze kluczy: publicznym i prywatnym. Różnica jest fundamentalna: szyfrowanie zawsze daje możliwość odzyskania oryginalnych danych przy posiadaniu właściwego klucza, natomiast funkcja skrótu ma być jednokierunkowa, czyli nie ma (w praktyce) sposobu, by z hasha odzyskać oryginał. Stosowanie DES, AES czy RSA wszędzie tam, gdzie chodzi wyłącznie o weryfikację integralności albo podpisanie niewielkiego fragmentu danych, jest nieefektywne, niezgodne z dobrymi praktykami i standardami (np. NIST czy ISO/IEC 27001). Co więcej, taka pomyłka może prowadzić do poważnych błędów w zabezpieczeniach aplikacji. Przykład: szyfrując hasło zamiast haszować, narażamy się na jego łatwe odzyskanie przez atakującego, jeśli wycieknie klucz. Funkcje skrótu (np. MD5, SHA-256) są do tego stworzone – nie pozwalają odtworzyć wejścia, dają szybkie porównania. Warto rozumieć te różnice, bo w praktyce branżowej od tego zależy bezpieczeństwo całych systemów. Moim zdaniem, zaskakująco często nawet doświadczeni programiści się tutaj mylą, zwłaszcza jeśli nie zajmują się na co dzień bezpieczeństwem IT.

Pytanie 14

Co to jest automatyzacja testowania procesów?

A. Używaniem narzędzi oraz skryptów do wykonywania testów w sposób automatyczny bez udziału człowieka
B. Sprawdzaniem poprawności działania aplikacji na urządzeniach przenośnych
C. Kompilowaniem kodu w celu zwiększenia efektywności
D. Integracją testów w środowisku deweloperskim
Automatyzacja procesu testowania to zastosowanie narzędzi, skryptów i technologii do przeprowadzania testów oprogramowania w sposób zautomatyzowany, bez konieczności ciągłej ingerencji człowieka. Automatyzacja pozwala na szybkie i wielokrotne uruchamianie testów regresyjnych, co znacząco zwiększa efektywność testowania, redukuje czas potrzebny na wykrycie błędów i umożliwia jednoczesne testowanie wielu funkcji. Narzędzia takie jak Selenium, JUnit czy TestNG pozwalają na tworzenie skryptów testowych, które automatycznie weryfikują poprawność działania aplikacji na różnych urządzeniach i w różnych środowiskach. Automatyzacja testów to nie tylko oszczędność czasu, ale także wyższa dokładność i powtarzalność testów, co minimalizuje ryzyko przeoczenia krytycznych błędów.

Pytanie 15

Algorytm przedstawiony powyżej może zostać zaimplementowany w języku Java z wykorzystaniem instrukcji:

Ilustracja do pytania
A. if
B. switch
C. while
D. try
Instrukcja 'while' w Javie działa tak, że powtarza blok kodu, aż warunek, który podasz, będzie prawdziwy. To jedna z podstawowych rzeczy w programowaniu i super przydaje się, kiedy nie wiesz z góry, ile razy coś ma się powtórzyć. Na przykład, możesz to wykorzystać, gdy szukasz czegoś w danych albo gdy chcesz, żeby coś wydarzyło się wielokrotnie, jak obsługa kliknięć na stronie.

Pytanie 16

Przedstawione w filmie działania wykorzystują narzędzie

A. debuggera analizującego wykonujący kod
B. kompilatora dla interfejsu graficznego
C. generatora GUI przekształcającego kod do języka XAML
D. generatora kodu java
Wybrana odpowiedź jest trafna, bo faktycznie narzędzie pokazane w filmie to generator GUI, który potrafi przekształcać kod do języka XAML. XAML (czyli Extensible Application Markup Language) jest powszechnie używany do deklaratywnego opisywania interfejsów użytkownika, na przykład w aplikacjach WPF czy UWP na platformie .NET. Jak dla mnie, korzystanie z takich generatorów to ogromna wygoda, bo pozwala błyskawicznie przenosić projekt graficzny do formatu czytelnego dla platformy Microsoftu. Z mojego doświadczenia, wiele zespołów programistycznych stosuje takie rozwiązania, żeby oszczędzić czas na ręcznym pisaniu XAML-a (co potrafi być naprawdę żmudne przy dużych projektach). Co ciekawe, takie narzędzia bardzo dobrze współpracują z designerskimi edytorami UI i potrafią zautomatyzować konwersję nawet z innych formatów graficznych, np. Sketch czy Adobe XD do XAML-a. Branżowe standardy zalecają, by wykorzystywać generatorów GUI właśnie do tego celu, bo minimalizuje to liczbę błędów, przyspiesza wdrożenie zmian i ułatwia współpracę między programistami a projektantami. Warto pamiętać, że XAML jest bardzo elastyczny i umożliwia potem ręczną edycję wygenerowanego kodu – czasem powstają drobne poprawki, ale ogólnie to naprawdę przydatne narzędzie. Ogólnie – jeśli tylko projektujesz UI pod .NET, to automatyczna konwersja do XAML-a to jest coś, co warto znać i wykorzystywać w praktyce.

Pytanie 17

Jednym z rodzajów testów funkcjonalnych, które można przeprowadzić na aplikacji webowej, jest ocena

A. poprawności wyświetlanych elementów aplikacji
B. poziomu optymalizacji kodu aplikacji
C. wydajności aplikacji
D. bezpieczeństwa aplikacji
Testy funkcjonalne w aplikacji webowej są super ważne, bo sprawdzają, czy wszystko działa jak należy. Mówiąc prościej, chodzi o to, żeby zobaczyć, czy wszystkie elementy na stronie są wyświetlane prawidłowo, jak przyciski i formularze. To też dotyczy tego, jak użytkownicy wchodzą w interakcję z różnymi częściami strony. Moim zdaniem, dobrze przeprowadzone testy mogą naprawdę poprawić doświadczenie użytkownika.

Pytanie 18

Które z poniższych nie jest frameworkiem do testowania w JavaScript?

A. Jest
B. Express
C. Jasmine
D. Mocha
Wybór frameworków do testowania w JavaScript, takich jak Mocha, Jest czy Jasmine, może wprowadzać w błąd, jeśli nie rozumie się ich celów i funkcji. Mocha jest elastycznym frameworkiem do testowania, który działa w środowisku Node.js oraz w przeglądarkach, umożliwiając pisanie asynchronicznych testów oraz definiowanie zestawów testowych. Jest z kolei nowoczesnym narzędziem do testowania, które oferuje bogaty zestaw funkcji, w tym wsparcie dla asercji i mockowania, co czyni go bardzo popularnym wśród programistów. Jasmine to framework, który skupia się na zachowaniu aplikacji, pozwalając na pisanie testów w stylu BDD (Behavior-Driven Development). Wybór tych narzędzi do testowania jest zatem uzasadniony i kluczowy dla zapewnienia jakości oprogramowania, jednak odpowiedź wybierająca Express jako framework testowy jest nieprawidłowa, ponieważ Express ma zupełnie inny cel – obsługę serwera i routing w aplikacjach webowych. Często mylone są cele poszczególnych narzędzi, co prowadzi do niepoprawnych wniosków. Zrozumienie, że Express nie jest przeznaczony do testowania, a raczej do budowania aplikacji, jest kluczowe dla efektywnego programowania i testowania. Aspekty te uwypuklają znaczenie znajomości narzędzi oraz ich przeznaczenia w kontekście rozwoju oprogramowania.

Pytanie 19

Jakie składniki powinien mieć plan projektu?

A. Wyłącznie etapy projektu
B. Etapy projektu, ramy czasowe, zasoby i zadania
C. Tylko czas wykonania i budżet
D. Terminy i zasoby ludzkie
Harmonogram projektu powinien zawierać etapy projektu, ramy czasowe, zasoby oraz zadania. Taka kompleksowa struktura umożliwia skuteczne zarządzanie projektem i pozwala na śledzenie postępów. Każdy etap harmonogramu powinien być dokładnie opisany, a zadania powinny być przypisane do odpowiednich członków zespołu. Uwzględnienie zasobów i ram czasowych pozwala na precyzyjne planowanie i minimalizuje ryzyko opóźnień. Harmonogram stanowi nieodłączny element projektów zarządzanych zarówno w modelu Waterfall, jak i Agile, dostarczając przejrzystość na każdym etapie realizacji.

Pytanie 20

Jakiego rodzaju zmiennej użyjesz w C++, aby przechować wartość "true"?

A. tekst
B. bool
C. liczba zmiennoprzecinkowa
D. liczba całkowita
Typ danych 'bool' w języku C++ jest przeznaczony do przechowywania wartości 'true' lub 'false'. Deklaracja 'bool isReady = true;' to przykład poprawnego przypisania wartości logicznej do zmiennej. Typ boolean jest kluczowy w warunkach decyzyjnych, pętlach i operacjach porównawczych. W programowaniu typ 'bool' jest wykorzystywany do kontroli przepływu programu, obsługi wyjątków oraz sprawdzania poprawności danych. Użycie booleanów w kodzie zwiększa jego czytelność i pozwala na bardziej przejrzyste budowanie logiki aplikacji.

Pytanie 21

Kod przedstawiony w języku XML/XAML określa:

<Switch
    android:id = "@+id/switch1"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:background = "#00ffff"
    android:text = "Switch"
    tools:layout_editor_absoluteX = "176dp"
    tools:layout_editor_absoluteY = "389dp" />
A. przełącznik
B. suwak
C. stepper
D. listę rozwijaną
Kod przedstawiony w pytaniu to klasyczny przykład wykorzystania komponentu Switch w Androidzie. Switch, jak sama nazwa wskazuje, służy do przełączania między dwoma stanami — najczęściej włącz/wyłącz, aktywne/nieaktywne. Z punktu widzenia interfejsów mobilnych, przełącznik bardzo często znajduje zastosowanie w ustawieniach aplikacji, np. do szybkiego włączania trybu ciemnego, aktywacji powiadomień czy zezwalania na lokalizację. Ten konkretny xml zawiera podstawowe atrybuty, jak android:id, layout_width, layout_height oraz background, czyli kolor tła, co od razu sugeruje, że nie jest to np. dropdown czy suwak. Co ciekawe, Switch różni się od CheckBoxa tym, że wizualnie lepiej komunikuje zmianę trybu (przesuwający się znacznik), co moim zdaniem zwiększa użyteczność, szczególnie jeśli użytkownik ma szybko zrozumieć, co ustawia. Standardy Material Design wręcz zalecają stosowanie Switch do kontrolowania pojedynczych ustawień, bo jest to bardziej czytelne niż inne widgety. Warto pamiętać, że Switch ma różne warianty i można go rozbudować o obsługę zdarzeń onCheckedChangeListener w kodzie Java albo Kotlin, przez co staje się bardzo elastyczny. Odpowiedź przełącznik jest więc zgodna ze wszystkimi cechami tej kontrolki i jej zastosowaniami w praktyce.

Pytanie 22

Który z wymienionych objawów może sugerować nagłe zagrożenie dla zdrowia?

A. Intensywne pocenie się w gorącym otoczeniu
B. Ostry ból w klatce piersiowej
C. Obniżony nastrój w ciągu dnia
D. Zwiększona efektywność pracy
Ostry ból w klatce piersiowej to jeden z najbardziej alarmujących objawów wskazujących na nagłe zagrożenie zdrowotne, takie jak zawał serca lub zatorowość płucna. Tego rodzaju ból jest często opisywany jako gniotący, ściskający lub rozlewający się na inne części ciała, takie jak ramię, szyja czy żuchwa. W takich przypadkach kluczowe jest szybkie wezwanie pomocy medycznej, ponieważ każda minuta opóźnienia może zwiększyć ryzyko powikłań lub śmierci. Edukacja w zakresie rozpoznawania tego objawu może uratować życie, dlatego tak ważne jest rozróżnianie go od innych mniej groźnych objawów.

Pytanie 23

Które z poniższych narzędzi jest używane do zarządzania wersjami kodu?

A. Docker
B. Kubernetes
C. Git
D. Jenkins
Git jest narzędziem służącym do zarządzania wersjami kodu, które zyskało ogromną popularność wśród programistów na całym świecie. Jego podstawową funkcją jest umożliwienie śledzenia zmian w kodzie źródłowym, co jest niezbędne w procesie tworzenia oprogramowania. Dzięki Gitowi możemy w łatwy sposób przechowywać historię zmian, co pozwala na cofanie się do wcześniejszych wersji projektu, a także na pracę zespołową, gdzie wielu programistów może jednocześnie pracować nad różnymi częściami tego samego projektu. Git wspiera również gałęzie (ang. branches), które umożliwiają równoległe rozwijanie nowych funkcji bez zakłócania głównej linii rozwoju. Jest to kluczowe w środowiskach, gdzie rozwój i wydanie nowych funkcji musi być dobrze zorganizowane. Narzędzie to jest nie tylko darmowe, ale również open-source, co oznacza, że każdy może przyczynić się do jego rozwoju. Git jest standardem w branży IT, a jego znajomość jest często wymagana przez pracodawców. Dzięki swojej elastyczności i wszechstronności Git jest stosowany w projektach open-source, komercyjnych i edukacyjnych.

Pytanie 24

Co oznacza skrót CDN w kontekście aplikacji webowych?

A. Content Definition Notation - notacja do definiowania treści w aplikacjach
B. Cross Domain Navigation - metoda nawigacji między domenami w aplikacjach webowych
C. Compressed Data Node - węzeł kompresji danych w architekturze mikrousług
D. Content Delivery Network - sieć rozproszona geograficznie, służąca do dostarczania treści
Skrót CDN oznacza Content Delivery Network, czyli sieć dostarczania treści. Jest to architektura rozproszona geograficznie, która umożliwia efektywne dostarczanie zasobów internetowych, takich jak obrazy, filmy, skrypty czy pliki CSS. CDN składa się z wielu serwerów, które są rozmieszczone w różnych lokalizacjach na całym świecie. Gdy użytkownik próbuje uzyskać dostęp do treści, zapytanie jest kierowane do najbliższego geograficznie serwera w sieci CDN, co znacząco przyspiesza czas ładowania strony oraz zmniejsza obciążenie głównego serwera. Przykłady popularnych usług CDN to Cloudflare, Amazon CloudFront czy Akamai. Zastosowanie CDN ma kluczowe znaczenie dla poprawy wydajności aplikacji webowych, szczególnie w kontekście globalnych użytkowników, gdzie opóźnienia w dostępie do treści mogą wpływać na doświadczenia użytkowników. Ponadto, wykorzystanie sieci CDN może wspierać również optymalizację SEO, ponieważ szybko ładujące się strony są preferowane przez wyszukiwarki. W branży e-commerce, efektywne korzystanie z CDN jest standardem, który pozwala na utrzymanie wysokiej dostępności i wydajności aplikacji, co jest niezbędne dla sukcesu online.

Pytanie 25

Jakie jest zastosowanie metody fetch() w JavaScript?

A. Sortowanie kolekcji obiektów
B. Manipulacja elementami DOM
C. Filtrowanie elementów tablicy
D. Pobieranie zasobów z sieci asynchronicznie
Metoda fetch() w JavaScript jest kluczowym narzędziem do asynchronicznego pobierania zasobów z sieci. Umożliwia ona wykonywanie zapytań HTTP do serwerów w sposób, który nie blokuje głównego wątku aplikacji, co jest istotne w kontekście zapewnienia płynności działania aplikacji webowych. Użycie fetch() pozwala na pobieranie różnych typów danych, takich jak JSON, tekst, czy pliki binarne. Przykład zastosowania fetch() może wyglądać następująco: fetch('https://api.example.com/data') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => console.log(data)); W tym przykładzie, po nawiązaniu połączenia z API, sprawdzamy, czy odpowiedź jest poprawna, a następnie przetwarzamy dane w formacie JSON. Ponadto, fetch() wspiera nowoczesne praktyki, takie jak obsługa promes (Promises) oraz async/await, co upraszcza kod i poprawia jego czytelność. Użycie tej metody jest zgodne z aktualnymi standardami webowymi, co czyni ją preferowanym rozwiązaniem w nowoczesnym programowaniu JavaScript.

Pytanie 26

Z podanej definicji pola licznik można wywnioskować, iż

class MojaKlasa
{
    private static int licznik;
    ...
A. pole jest związane z określoną instancją klasy i jego wartość jest unikalna tylko dla tej instancji
B. pole nie może być zmieniane w kodzie klasy
C. bieżąca wartość pola jest wspólna dla wszystkich instancji klasy i nie może być zmieniana
D. bieżąca wartość pola jest wspólna dla wszystkich instancji klasy
Warto się chwilę zatrzymać i przeanalizować, skąd biorą się błędne przekonania dotyczące pól statycznych. Bardzo częstym nieporozumieniem jest utożsamianie słowa static z czymś „niezmiennym” albo uniemożliwiającym modyfikacje. Tymczasem static oznacza tyle, że pole nie jest związane z pojedynczym obiektem, tylko z całą klasą – czyli wszystkie obiekty tej klasy dzielą jedną, wspólną wartość licznik. To nie jest tak, że static czyni pole stałym – żeby pole było niezmienne, potrzeba słowa kluczowego final (w Javie), a tutaj go ewidentnie nie ma. Często osoby początkujące mylą static z final i stąd pojawia się przekonanie, że pole nie może być modyfikowane – co nie jest prawdą. Równie błędne jest zakładanie, że każde pole, które nie jest static, jest automatycznie unikalne per instancja. Gdybyśmy usunęli static z definicji licznik, wtedy rzeczywiście każda instancja MojaKlasa miałaby swoją własną wersję tej zmiennej, ale w tym przypadku wszystkie obiekty współdzielą tę samą wartość. Jeszcze inny błąd to przekonanie, że pole prywatne (private) nie może być zmieniane w kodzie klasy – w rzeczywistości private ogranicza dostęp do pola tylko do wnętrza klasy, ale metody tej klasy mają pełne prawo je modyfikować. Tak więc, patrząc z perspektywy dobrych praktyk programistycznych i samej składni, static to po prostu cecha, która decyduje o zakresie współdzielenia pola pomiędzy instancjami, a nie o jego niezmienności czy widoczności na zewnątrz. Moim zdaniem kluczowe jest wyciągnięcie z tego wniosku, że static to współdzielenie, a nie blokada zmian – i na tym polega istota poprawnej odpowiedzi w tym pytaniu.

Pytanie 27

Jakie jest przeznaczenie polecenia "git merge"?

A. Do usuwania zmian w repozytorium
B. Do zakładania nowego repozytorium
C. Do łączenia zmian z różnych gałęzi
D. Do pobierania aktualizacji zdalnego repozytorium
Polecenie "git merge" służy w Git do łączenia zmian z różnych gałęzi. Kiedy pracujemy w zespole i każdy programista rozwija swój fragment kodu na osobnej gałęzi, w pewnym momencie trzeba te zmiany zebrać do kupy, żeby powstała jedna, wspólna wersja projektu. Tu właśnie pojawia się "merge" – pozwala w prosty sposób dołączyć zmiany z jednej gałęzi do drugiej, najczęściej z feature branch do develop albo main. Praktycznie rzecz biorąc, to polecenie sprawdza się zawsze wtedy, gdy chcemy zintegrować efekty pracy kilku osób lub wersje rozwojowe z główną linią kodu. Moim zdaniem, korzystanie z "git merge" to w zasadzie codzienność w projektach zespołowych, bo prawie nikt już nie pracuje tylko na jednej gałęzi. Warto też pamiętać, że merge może czasem prowadzić do konfliktów, jeśli te same fragmenty plików były zmieniane równolegle – wtedy trzeba ręcznie rozwiązać te rozbieżności. W praktyce, dobrą praktyką jest regularne mergowanie, żeby uniknąć lawiny konfliktów na koniec sprintu. Dla mnie "merge" to narzędzie absolutnie kluczowe, bez którego ciężko sobie wyobrazić sensowną pracę z Gitem. No i jeszcze – to nie to samo co "rebase", chociaż oba służą do integracji zmian, ale w różny sposób. Merge zostawia historię połączeń, co ułatwia śledzenie zmian w większych projektach.

Pytanie 28

Który z wymienionych składników charakteryzuje się typowym wystąpieniem w diagramie Gantta?

A. Oś czasu oraz przedziały czasowe dla zadań
B. Wykaz błędów w projekcie
C. Wykaz użytkowników w systemie
D. Model relacji pomiędzy tabelami w bazie danych
Diagram Gantta zawiera oś czasu i zakresy czasowe dla zadań, co pozwala na wizualizację całego harmonogramu projektu. Każde zadanie jest reprezentowane jako pasek na wykresie, którego długość odzwierciedla czas trwania zadania. Diagram ten jest szczególnie pomocny w zarządzaniu złożonymi projektami, gdzie istnieje wiele współzależnych zadań. Dzięki diagramowi Gantta można łatwo określić, które zadania są krytyczne dla terminowego zakończenia projektu oraz jakie są dostępne bufory czasowe. Jest to jedno z najczęściej używanych narzędzi w zarządzaniu projektami.

Pytanie 29

Co to jest JWT (JSON Web Token)?

A. Protokół komunikacyjny do transferu danych między klientem a serwerem
B. Format zapisu danych używany w bazach NoSQL
C. Standard definiujący sposób bezpiecznego przekazywania informacji jako obiekt JSON
D. Biblioteka JavaScript do walidacji formularzy webowych
Chociaż różne podejścia do komunikacji i transferu danych są istotne, żadna z pozostałych odpowiedzi nie odnosi się bezpośrednio do istoty JWT. Protokół komunikacyjny do transferu danych między klientem a serwerem, choć może obejmować różne metody, nie wyraża istoty JWT. Standardy takie jak HTTP, WebSocket czy REST, które służą do przesyłania danych, nie definiują struktury ani zasad bezpieczeństwa związanych z JWT. Format zapisu danych używany w bazach NoSQL, jak MongoDB, nie ma związku z JWT, który jest specyficznie zaprojektowany do przesyłania informacji w formacie JSON, a nie do przechowywania ich w bazach danych. Bazy NoSQL mają swoje własne struktury danych i modele, które różnią się znacznie od modelu JSON Web Token. Podobnie, biblioteka JavaScript do walidacji formularzy webowych nie ma nic wspólnego z JWT, który jest narzędziem do zarządzania autoryzacją i sesjami użytkownika. Te błędne odpowiedzi mogą prowadzić do pomyłek w zrozumieniu, co oznacza JWT i do jakich celów jest przeznaczony. Kluczowym błędem myślowym jest mylenie różnych warstw architektury aplikacji, gdzie JWT jest konkretnym rozwiązaniem do zarządzania bezpieczeństwem, a nie ogólnym protokołem komunikacyjnym czy formatem danych.

Pytanie 30

Jakie informacje można uzyskać na temat metod w klasie Point?

public class Point {
    public void Move(int x, int y) {...}
    public void Move(int x, int y, int z) {...}
    public void Move(Point newPt) {...}
}
A. Zawierają błąd, ponieważ nazwy metod powinny być różne.
B. Zawierają przeciążenie operatora.
C. Służą jako konstruktory w zależności od liczby argumentów.
D. Są przeciążone.
Metody klasy Point są przeciążone, co oznacza, że mogą mieć tę samą nazwę, ale różnią się liczbą lub typem parametrów. Przeciążenie metod to jedna z podstawowych technik programowania obiektowego, która pozwala na bardziej elastyczne projektowanie kodu. Dzięki temu programista może tworzyć metody dostosowane do różnych sytuacji, zachowując spójność nazw i intuicyjność użycia. To zwiększa czytelność i utrzymanie kodu, ponieważ wywołania metod o tej samej nazwie, ale różnych parametrach, są łatwe do zrozumienia i odnalezienia.

Pytanie 31

Jakie obliczenia można wykonać za pomocą poniższego algorytmu, który operuje na dodatnich liczbach całkowitych?

Ilustracja do pytania
A. sumę wprowadzonych liczb
B. sumę cyfr wprowadzonej liczby
C. największy wspólny dzielnik wprowadzonej liczby
D. liczbę cyfr w wprowadzonej liczbie
Analizując algorytm przedstawiony na schemacie, łatwo zauważyć, że nie wykonuje on ani sumowania cyfr, ani nie oblicza największego wspólnego dzielnika, ani nie sumuje wprowadzonych liczb. W praktyce mylenie tych operacji wynika często z pobieżnego czytania algorytmu lub automatycznego kojarzenia słowa „wynik” z sumą. Jednak podstawą analizy algorytmów zawsze powinno być zwracanie uwagi na konkretne instrukcje i sposób przetwarzania danych. W tym przypadku liczba jest dzielona przez 10 w każdej iteracji pętli, a licznik jest zwiększany o jeden za każdym razem, gdy to się dzieje. Nie ma tu żadnego dodawania poszczególnych cyfr, co wyklucza sumowanie cyfr. Nie pojawia się przetwarzanie wielu różnych liczb, więc niemożliwe jest sumowanie wprowadzonych liczb – algorytm pracuje wyłącznie na jednej wartości podanej na wejściu. Narzędzie do obliczania największego wspólnego dzielnika musiałoby operować na dwóch liczbach i wykorzystywać inne operacje, jak reszta z dzielenia. Typowym błędem jest też utożsamianie każdej pętli z operacją sumowania lub łączenia danych, co w tym przypadku nie ma uzasadnienia merytorycznego. Kluczowe jest przy analizie algorytmów zwracanie uwagi na to, jakie operacje są wykonywane w każdej iteracji i czy pojawia się obsługa wielu wartości, czy tylko jednej. Z mojego doświadczenia wynika, że takie drobne błędy myślowe prowadzą często do fałszywych wniosków, dlatego warto dokładnie czytać algorytm krok po kroku i analizować, do czego rzeczywiście prowadzą poszczególne instrukcje. W tym przypadku algorytm po prostu liczy liczbę dziesiętnych „pozycji” w liczbie aż do jej wyzerowania, co odpowiada liczbie cyfr, a nie żadnej z pozostałych interpretacji.

Pytanie 32

Jaki jest wymagany sposób do realizacji algorytmu sortowania bąbelkowego na n-elementowej tablicy?

A. dwie pętle funkcjonujące na co najmniej (n+1) elementach każda
B. n-liczby warunków
C. dwie pętle działające na najwyżej n-elementach każda
D. jedna pętla operująca na 2n elementach oraz warunek
Jedna pętla nie jest wystarczająca do zaimplementowania sortowania bąbelkowego, ponieważ proces porównywania i zamiany miejscami elementów wymaga wielokrotnego przechodzenia przez tablicę. Pętle działające na (n+1) elementach są błędnym założeniem – algorytm działa na n-elementowej tablicy, a każda iteracja zmniejsza liczbę elementów do porównania. Liczba warunków nie ma kluczowego znaczenia w sortowaniu bąbelkowym – najważniejsza jest struktura iteracyjna, która umożliwia porównywanie elementów w parach, aż do momentu pełnego posortowania tablicy.

Pytanie 33

Jakie jest zastosowanie iteratora w zbiorach?

A. Do zmiany rodzaju zbioru w trakcie działania aplikacji
B. Do iterowania po elementach zbioru
C. Do generowania kopii zbiorów
D. Do usuwania elementów ze zbioru
Tworzenie kopii kolekcji to operacja duplikacji danych i nie wymaga iteratorów. Usuwanie elementów z kolekcji może być realizowane przy pomocy iteratora, ale nie jest to jego główna funkcja. Zmiana typu kolekcji to operacja, która często wymaga konwersji lub transformacji, ale iterator nie służy do zmiany typów danych, a jedynie do iteracji po elementach kolekcji.

Pytanie 34

Która z poniższych technologii służy do tworzenia interaktywnych aplikacji webowych bez przeładowania strony?

A. SQL
B. CSS3
C. AJAX
D. HTML5
AJAX, czyli Asynchronous JavaScript and XML, to technologia umożliwiająca tworzenie interaktywnych aplikacji webowych bez konieczności przeładowywania całej strony. Dzięki AJAX, możliwe jest asynchroniczne przesyłanie danych pomiędzy klientem a serwerem, co pozwala na dynamiczne aktualizowanie treści na stronie bez interakcji użytkownika w postaci odświeżania. Przykładem wykorzystania AJAX może być formularz kontaktowy, który po wysłaniu nie przeładowuje całej strony, ale zamiast tego zaktualizowuje tylko wybraną sekcję, informując użytkownika o sukcesie lub błędzie. AJAX jest wykorzystywany w wielu nowoczesnych aplikacjach webowych, takich jak Gmail czy Facebook, gdzie interaktywność i szybkość są kluczowe. W kontekście standardów, AJAX najlepiej współpracuje z technologiami takimi jak RESTful API oraz JSON, co optymalizuje wymianę danych. Przy implementacji AJAX ważne jest również przestrzeganie zasad związanych z wydajnością i bezpieczeństwem, takich jak unikanie ataków XSS oraz odpowiednie zarządzanie sesjami użytkowników.

Pytanie 35

Co będzie wynikiem działania poniższego kodu JavaScript?

const obj = {
  name: 'John',
  greet: function() {
    setTimeout(function() {
      console.log(`Hello, ${this.name}`);
    }, 1000);
  }
};
obj.greet();
A. Hello, John
B. TypeError
C. Hello, undefined
D. Hello, null
Odpowiedzi `Hello, John`, `TypeError` oraz `Hello, null` są wynikiem niepełnego zrozumienia zasad działania kontekstu `this` w JavaScript oraz mechanizmów związanych z wywołaniami funkcji w różnych kontekstach. W przypadku pierwszej z tych odpowiedzi, można by sądzić, że `this` w funkcji anonimowej odwołuje się do obiektu `obj`, co jest błędne, ponieważ w momencie wywołania funkcji przez `setTimeout` kontekst `this` traci odniesienie do obiektu, a zamiast tego wskazuje na obiekt globalny. W efekcie `this.name` nie zwraca wartości `'John'`, lecz `undefined`. Druga odpowiedź, związana z `TypeError`, nie zrozumiała, że żadne błędy nie są generowane w tym kodzie, a funkcja anonimowa wykonuje się bezproblemowo, jednak z błędnym kontekstem. Ostatnia propozycja, `Hello, null`, również jest nietrafiona, ponieważ nie istnieje sytuacja, w której `this` w tym kontekście mogłoby się odwoływać do `null`. Należy również pamiętać, że JavaScript różni się od wielu innych języków programowania, gdzie `this` jest bardziej ściśle powiązane z obiektem, w którym metoda została wywołana. Zrozumienie kontekstu `this` jest kluczowe w pracy z JavaScript, szczególnie w pracy z funkcjami asynchronicznymi oraz w zastosowaniach programowania obiektowego.

Pytanie 36

Jakiego kodu dotyczy treść wygenerowana w trakcie działania programu Java?

Ilustracja do pytania
A. Kodu 1
B. Kodu 2
C. Kodu 4
D. Kodu 3
W przypadku kodu 4 mamy do czynienia z operatorem modulo zastosowanym na zmiennych x i y. Wiąże się to z próbą podziału przez zero co w języku Java skutkuje wygenerowaniem wyjątku java.lang.ArithmeticException. Przykładowo jeśli y wynosi zero to operacja x % y jest niedozwolona i spowoduje wyjątek. Rozumienie jak bezpiecznie wykonywać operacje arytmetyczne w Javie jest kluczowe dla unikania takich błędów. Zgodnie z dobrymi praktykami należy zawsze sprawdzać wartości zmiennych przed wykonaniem operacji matematycznych które mogą prowadzić do błędów wykonania programu. Ważne jest aby stosować techniki obsługi wyjątków try-catch które pozwalają na przechwycenie i odpowiednie zarządzanie błędami. Używanie odpowiednich testów jednostkowych może pomóc w wcześniejszym wykryciu takich problemów co jest standardem w branży programistycznej. Zrozumienie obsługi błędów w programowaniu pozwala na tworzenie bardziej niezawodnych i odpornych na błędy aplikacji co jest istotnym aspektem pracy profesjonalnego programisty.

Pytanie 37

Jakie narzędzie jest wykorzystywane do zgłaszania błędów w projektach IT?

A. Blender
B. Photoshop
C. Git
D. JIRA
Photoshop to narzędzie do edycji grafiki rastrowej i nie jest związane z raportowaniem błędów w projektach informatycznych. Blender to zaawansowane narzędzie do modelowania 3D, animacji oraz renderowania, używane głównie w produkcji filmów, gier i wizualizacji, ale nie posiada funkcji zarządzania błędami w kodzie. Git to system kontroli wersji, który umożliwia zarządzanie kodem źródłowym, śledzenie zmian i współpracę programistów nad projektem, ale nie służy bezpośrednio do raportowania błędów w projektach – choć można wykorzystać go pośrednio poprzez integrację z narzędziami do zarządzania błędami, jak np. JIRA.

Pytanie 38

Która z poniższych nie jest prawidłową metodą zarządzania stanem w React?

A. useState hook
B. Redux
C. Context API
D. React.stateManager
Odpowiedzi, które wskazałeś, takie jak Redux, Context API oraz useState hook, są w rzeczywistości powszechnie uznawanymi metodami zarządzania stanem w React. Redux, jako zewnętrzna biblioteka, usprawnia zarządzanie stanem poprzez wprowadzenie centralnego store'a, który przechowuje wszystkie dane w aplikacji. Dzięki temu, każdy komponent może subskrybować zmiany w stanie, co pozwala na prostą synchronizację danych oraz ich śledzenie. Context API jest wbudowane w React i pozwala na udostępnianie danych między komponentami bez potrzeby przekazywania propsów, co znacząco upraszcza hierarchię komponentów i poprawia ich czytelność. Hook useState natomiast, jest prostym i intuicyjnym rozwiązaniem do zarządzania lokalnym stanem w komponentach funkcyjnych, co jest szczególnie przydatne w mniejszych projektach. Zrozumienie, dlaczego te metody są uznawane za poprawne, jest kluczowe, ponieważ pozwala na efektywne zarządzanie stanem w aplikacjach React. Często błędne wnioski wynikają z nieznajomości narzędzi dostępnych w ekosystemie React lub z mylnego przekonania, że dany sposób zarządzania stanem musi być uniwersalny. W rzeczywistości, najlepsze podejście zależy od skali oraz specyfiki projektu.

Pytanie 39

Które z wymienionych działań, które są częścią procesu kreowania prostej galerii zdjęć w formie aplikacji mobilnej, powinno być realizowane przez zespół?

A. Stworzenie dokumentacji kodu aplikacji
B. Wdrożenie funkcji dodajZdjecie()
C. Przygotowanie i konfiguracja repozytorium dla projektu
D. Przygotowanie testu jednostkowego dla funkcji przegladajZdjecia()
Pozostałe odpowiedzi są zadaniami, które w większości przypadków mogą być realizowane indywidualnie, co czyni je zadaniami jednostkowymi. Implementacja funkcji dodajZdjecie() dotyczy konkretnego aspektu programistycznego, który może być wykonany przez jednego dewelopera. Wymaga ona znajomości języka programowania oraz logiki potrzebnej do dodawania zdjęć do galerii, co zazwyczaj nie wymaga współpracy z innymi członkami zespołu. Przygotowanie i skonfigurowanie repozytorium dla projektu natomiast to techniczny proces, który również najczęściej realizuje jedna osoba, odpowiedzialna za ustawienie środowiska pracy. Tworzenie testu jednostkowego dla funkcji przegladajZdjecia() to kolejny krok, który można wykonać samodzielnie, koncentrując się na testowaniu konkretnej funkcji w izolacji, bez potrzeby angażowania innych programistów. W przypadku tych zadań, choć mogą one być częścią większego projektu, to ich realizacja nie wymaga współpracy zespołowej, co sprawia, że nie są to zadania zespołowe.

Pytanie 40

Jakiego typu testy są stosowane do sprawdzania funkcjonalności prototypu interfejsu?

A. Testy zgodności
B. Testy obciążeniowe
C. Testy interfejsu
D. Testy efektywnościowe
Testy interfejsu są kluczowe w procesie weryfikacji funkcji prototypu interfejsu użytkownika. Testy te koncentrują się na sprawdzeniu poprawności działania wszystkich elementów graficznych, takich jak przyciski, pola tekstowe, menu rozwijane oraz formularze. Testy interfejsu pozwalają upewnić się, że interakcje użytkownika z aplikacją przebiegają zgodnie z oczekiwaniami i nie powodują błędów w nawigacji. Dzięki nim można wykryć problemy związane z nieprawidłowym rozmieszczeniem elementów, brakiem reakcji na kliknięcia lub nieintuicyjnym działaniem, co pozwala na wczesne wdrożenie poprawek i zwiększenie użyteczności aplikacji.