Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 10 kwietnia 2026 16:29
  • Data zakończenia: 10 kwietnia 2026 16:53

Egzamin niezdany

Wynik: 4/40 punktów (10,0%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu— sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Jakie polecenie w Gicie jest używane do zapisywania zmian w lokalnym repozytorium?

A. git clone
B. git push
C. git pull
D. git commit
Polecenie 'git push' przesyła zapisane lokalnie commity do zdalnego repozytorium, ale samo w sobie nie zapisuje zmian lokalnie. 'git clone' kopiuje istniejące repozytorium zdalne na komputer lokalny, co jest pierwszym krokiem do pracy z kodem, ale nie służy do zapisywania zmian. 'git pull' pobiera najnowsze zmiany z repozytorium zdalnego i scala je z lokalnym repozytorium, co umożliwia aktualizację kodu, ale nie zapisuje nowych zmian lokalnie jak 'git commit'.

Pytanie 2

Która z poniższych technologii służy do tworzenia aplikacji mobilnych za pomocą języków webowych?

A. Spring Boot
B. ASP.NET Core
C. React Native
D. Django
Spring Boot, ASP.NET Core oraz Django to technologie związane z tworzeniem aplikacji webowych, ale każda z nich ma swoje unikalne zastosowania i nie służy do tworzenia aplikacji mobilnych z użyciem języków webowych. Spring Boot jest frameworkiem opartym na Javie, który upraszcza rozwój aplikacji opartych na architekturze mikroserwisów oraz aplikacji webowych. Jego głównym celem jest uproszczenie procesu konfiguracji i uruchamiania aplikacji backendowych, a nie tworzenie interfejsów użytkownika w środowisku mobilnym. ASP.NET Core to framework od Microsoftu, który umożliwia tworzenie aplikacji internetowych i API w języku C#. Choć jest bardzo elastyczny i może być używany do tworzenia różnych typów aplikacji, nie jest zaprojektowany z myślą o mobilnych interfejsach użytkownika. Z kolei Django to framework oparty na języku Python, który skupia się na szybkim rozwoju aplikacji webowych z wykorzystaniem architektury Model-View-Template. Każda z tych technologii ma swoje miejsce w ekosystemie tworzenia oprogramowania, ale ich zastosowanie w kontekście aplikacji mobilnych jest ograniczone. Typowym błędem myślowym jest mylenie frameworków działających w środowisku serwerowym z technologiami dedykowanymi do rozwoju aplikacji mobilnych. W praktyce, do rozwoju aplikacji mobilnych należy wykorzystywać technologie, które są specjalnie dostosowane do tego celu, takie jak React Native, Flutter czy Xamarin, które oferują nativne rozwiązania i lepszą integrację z platformami mobilnymi.

Pytanie 3

Jaki rodzaj testów można scharakteryzować przedstawionym opisem?

NazwaOpisCzynnościPo teście
Formularz osobowySprawdzenie odpowiedzi formularza na błędy użytkownika1. czy wpisano wszystkie wymagane pola?
2. czy e-mail zawiera znak @?
3. czy nr telefonu zawiera cyfry, zgodnie ze wzorcem?
4. czy jest zgoda na przetwarzanie danych?
Usunąć z bazy danych wpisane podczas testowania osoby
A. testy funkcjonalne
B. testy jednostkowe
C. testy zgodności
D. testy wydajnościowe
Wiele osób myli tu pojęcia i sądzi, że sprawdzanie formularza pod kątem walidacji danych to np. testy jednostkowe albo wydajnościowe. Moim zdaniem to typowy błąd wynikający z mylenia poziomów testowania albo niezrozumienia celów tych testów. Testy wydajnościowe koncentrują się na tym, ile system „wytrzyma” – chodzi o liczbę użytkowników, czas odpowiedzi czy zużycie zasobów, a nie o to, czy pola są dobrze sprawdzane. Testy jednostkowe z kolei dotyczą poszczególnych fragmentów kodu, takich jak pojedyncze funkcje czy metody – ich zadaniem jest wyłapywanie błędów logicznych w kodzie, ale nie sprawdzają one całościowego działania funkcji biznesowej z perspektywy użytkownika. Testy zgodności są czymś innym – mają na celu zweryfikowanie, czy system spełnia wymagania formalne, normy prawne albo branżowe standardy (np. czy spełnia RODO, WCAG itp.), a nie typowe błędy użytkownika. W praktyce, jeśli ktoś wskazuje na któryś z tych rodzajów testów w kontekście walidacji formularza, to pewnie wynika to z niejasnego rozróżniania, co jest funkcjonalnością, a co technicznym aspektem systemu. Warto pamiętać, że testy funkcjonalne zawsze dotyczą sprawdzenia, czy konkretny fragment oprogramowania robi dokładnie to, czego oczekuje użytkownik – nie mniej, nie więcej. To najbardziej „namacalne” z testów, bo pozwalają sprawdzić realne scenariusze użycia, często takie, które znajdą się później w rękach klientów. I to właśnie dlatego są kluczowe przy testowaniu formularzy czy innych elementów interfejsu.

Pytanie 4

Jakie będą skutki wykonania podanego fragmentu kodu w języku C++?

vector <int> liczby;
for(int i=0; i<10; i++) {
    liczby.push_back(2*i);
}
A. Z tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej początku.
B. Do tablicy liczby, na jej końcu, dodawane są nowe wartości.
C. Do tablicy liczby, na jej początku, dodawane są nowe wartości.
D. Z tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej końca.
Analizując zaproponowane odpowiedzi, łatwo zauważyć kilka typowych nieporozumień, które często pojawiają się na etapie nauki pracy z kolekcjami w C++. Po pierwsze, wielu osobom myli się pojęcie 'dodawania na początku' z 'dodawaniem na końcu', zwłaszcza że niektóre struktury standardowe, jak listy dwukierunkowe (std::list), umożliwiają wygodne wstawianie na początku (push_front). Jednak w przypadku std::vector nie ma metody push_front, a push_back oznacza zawsze dodanie nowego elementu do końca wektora, co powoduje, że kolejność elementów jest zachowana zgodnie z kolejnością ich dodawania. Błędne jest także przekonanie, że za każdym przebiegiem pętli z wektora coś jest usuwane – takie operacje wymagałyby jawnego wywołania metod erase(), pop_back() lub pop_front(), których tutaj w ogóle nie zastosowano. To bardzo istotne, bo domyślnie wektor nie usuwa niczego sam z siebie. Równie często spotykanym błędem jest mylenie działania innych kolekcji, jak np. kolejki FIFO (gdzie pop_front rzeczywiście usuwa pierwszy element), z zachowaniem vectora, który domyślnie dodaje na końcu. Sporo osób wychodzi z założenia, że 'dynamiczna tablica' powinna się samoistnie przesuwać lub skracać – ale to nie jest prawda w C++. Warto zapamiętać, że vector w C++ jest stworzony głównie do efektywnego rozbudowywania od końca i to jest zgodne z koncepcją dynamicznego zarządzania pamięcią w nowoczesnych językach programowania. Każdy inny sposób użycia wymaga dodatkowego kodu. Z mojego punktu widzenia dobrze jest od razu wyrobić sobie nawyk rozróżniania, która operacja jest domyślnie dostępna w danym kontenerze. Brak tej wiedzy prowadzi do błędnych założeń co do działania kodu i generuje trudne do wychwycenia błędy logiczne.

Pytanie 5

Jakie informacje przedstawia diagram Gantta?

A. Model przepływu danych
B. Plan działań w projekcie
C. Strukturę plików w projekcie
D. Relacje między różnymi projektami
Hierarchia plików w projekcie to struktura katalogów i plików organizująca kod źródłowy, ale nie przedstawia harmonogramu zadań. Powiązania między różnymi projektami mogą być zarządzane na poziomie systemów ERP lub narzędzi do zarządzania portfelami projektów, ale diagram Gantta skupia się na pojedynczym projekcie. Schemat przepływu danych to narzędzie inżynierii oprogramowania, które opisuje sposób przesyłania informacji między komponentami systemu, ale nie pełni funkcji harmonogramu projektowego.

Pytanie 6

W przedstawionym filmie ukazano kreator interfejsu użytkownika, dla którego automatycznie powstaje

A. obsługa przycisku ekranu dotykowego
B. kod XML
C. obsługa wciśniętego przycisku
D. kod Java
Często można się pomylić, sądząc, że narzędzia do projektowania interfejsów użytkownika generują od razu kod w takich językach jak Java czy implementują obsługę konkretnych zdarzeń, np. wciśnięcia przycisku. Z mojego doświadczenia wynika, że to jeden z najczęstszych błędów myślowych na początku nauki programowania. W praktyce, narzędzia typu drag&drop koncentrują się na warstwie prezentacyjnej – opisują, jak mają wyglądać poszczególne elementy, ale nie zajmują się logiką działania. Kod Java albo inny kod źródłowy odpowiedzialny za obsługę zdarzeń czy funkcjonalności aplikacji musi być dopisany ręcznie przez programistę. Automatyczne generowanie kodu logicznego przez edytory graficzne jest raczej niezalecane, bo prowadzi do trudnego w utrzymaniu kodu i sprawia, że aplikacja traci na przejrzystości. Jeśli chodzi o obsługę wciśnięcia przycisku czy przycisku ekranu dotykowego, to są to akcje, które definiuje się później w kodzie źródłowym – na przykład poprzez implementację listenerów w kodzie Java w Androidzie albo przez bindingi w innych frameworkach. Te narzędzia mają za zadanie generować opis struktury interfejsu, a nie jego zachowanie. Często spotyka się też przekonanie, że to właśnie kod Java stanowi podstawę aplikacji – oczywiście to prawda, ale nie w kontekście automatycznego generowania przez narzędzia graficzne; one skupiają się na XML, który jest dużo bardziej uniwersalny do takich celów. Moim zdaniem najlepszą praktyką jest wyraźne oddzielenie warstwy prezentacji (np. XML) od logiki biznesowej i ręcznego kodowania zdarzeń, bo to pozwala na wygodne rozwijanie i utrzymywanie aplikacji, szczególnie w większych zespołach.

Pytanie 7

Co to jest Docker?

A. Framework JavaScript do tworzenia aplikacji mobilnych
B. Narzędzie do automatyzacji procesu tworzenia dokumentacji
C. Platforma do tworzenia, wdrażania i uruchamiania aplikacji w kontenerach
D. System zarządzania bazami danych
Chociaż odpowiedzi wskazujące na system zarządzania bazami danych, framework JavaScript oraz narzędzie do automatyzacji dokumentacji mogą wydawać się na pierwszy rzut oka przekonywujące, to w rzeczywistości są one dalekie od prawdy. System zarządzania bazami danych odnosi się do oprogramowania, które służy do przechowywania i zarządzania danymi, jak MySQL czy PostgreSQL, ale nie ma nic wspólnego z konteneryzacją aplikacji. Framework JavaScript, jak React czy Angular, jest narzędziem do budowania interfejsów użytkownika, a nie do zarządzania środowiskiem uruchomieniowym aplikacji. Z kolei narzędzia do automatyzacji dokumentacji, takie jak Sphinx czy JSDoc, koncentrują się na generowaniu dokumentacji technicznej z kodu źródłowego, co również nie ma związku z konteneryzacją. Wiele osób myli te pojęcia z Dockerem przez brak znajomości architektury aplikacji oraz sposobu, w jaki są one wdrażane w nowoczesnym środowisku IT. Konteneryzacja pozwala na izolację aplikacji i ich zależności, co jest kluczowe dla zapewnienia stabilności i spójności w różnych środowiskach, co nie jest celem wspomnianych odpowiedzi. Aby lepiej zrozumieć funkcję Dockera, warto zaznajomić się z koncepcjami związanymi z wirtualizacją oraz zarządzaniem środowiskami deweloperskimi, co pomoże uniknąć tego typu nieporozumień w przyszłości.

Pytanie 8

Jakie jest oznaczenie komentarza wieloliniowego w języku Java?

A. // ... //
B. """ ... """
C. /* ... */
D. <!-- ... -->
Komentarze wieloliniowe w języku Java zapisuje się właśnie w taki sposób: /* ... */. Taki zapis pozwala na umieszczenie kilku linii tekstu między znakami otwierającym /* i zamykającym */, które kompilator całkowicie ignoruje podczas tłumaczenia kodu. Z mojego doświadczenia to jest najwygodniejsza forma, kiedy trzeba wyłączyć większy fragment kodu – np. część algorytmu, której chwilowo nie chcemy wykonywać lub większy blok dokumentacji. Bardzo często używa się komentarzy wieloliniowych przy pisaniu tzw. docstringów, choć w Javie do dokumentacji API lepiej stosować komentarze JavaDoc z podwójnym ukośnikiem i gwiazdką (/** ... */), ale zwykłe /* ... */ są super uniwersalne – czy to na zajęciach, czy w dużych projektach zespołowych. Moim zdaniem, jeśli uczysz się Javy, warto pamiętać, żeby nie mieszać komentarzy wieloliniowych z jednoliniowymi (// ...), bo to czasem prowadzi do zamieszania, szczególnie przy większych refaktoryzacjach. Co ciekawe, takie same komentarze znajdziesz też w C czy C++, więc jak ktoś zna te języki, to szybko się odnajdzie. W sumie to prosta sprawa, ale zdziwiłbyś się ile osób próbuje stosować inne formaty, które działają w zupełnie innych technologiach. No i jeszcze taka drobna uwaga z praktyki: nigdy nie wstawiaj komentarza wieloliniowego wewnątrz innego; Java tego nie obsługuje i kompilator się pogubi.

Pytanie 9

Który z wymienionych elementów może stanowić część menu w aplikacji desktopowej?

A. MenuItem
B. ScrollBar
C. CheckBox
D. Canvas
CheckBox to komponent, który umożliwia wybór jednej lub wielu opcji, ale nie jest częścią systemu menu – zwykle znajduje się w formularzach lub ustawieniach aplikacji. ScrollBar to element interfejsu umożliwiający przewijanie treści w oknie aplikacji, ale nie jest elementem menu. Canvas to kontener do rysowania elementów graficznych i obiektów, ale nie pełni funkcji w kontekście tworzenia menu aplikacji desktopowych.

Pytanie 10

Jaki protokół komunikacyjny jest używany w aplikacjach IoT (Internet of Things)?

A. HTTP
B. FTP
C. SMTP
D. MQTT
HTTP, FTP i SMTP to protokoły, które mają swoje zastosowania, jednak w kontekście IoT nie są optymalnym wyborem. HTTP (Hypertext Transfer Protocol) jest protokołem opartym na połączeniach, który jest szeroko stosowany w aplikacjach webowych do przesyłania dokumentów i zasobów. Jego charakterystyka, związana z dużym narzutem na dane i brakiem mechanizmów publikacji-subskrypcji, sprawia, że nie nadaje się do efektywnej komunikacji między dużą liczbą urządzeń IoT. FTP (File Transfer Protocol) służy głównie do przesyłania plików, co w kontekście IoT jest rzadko potrzebne, a jego złożoność oraz wymóg ciągłego połączenia czynią go nieodpowiednim do komunikacji w czasie rzeczywistym. SMTP (Simple Mail Transfer Protocol), z kolei, to protokół do wysyłania wiadomości e-mail, co również nie jest adekwatne dla urządzeń IoT, które często potrzebują szybkiej i niezawodnej wymiany danych. Typowym błędem myślowym jest założenie, że ponieważ te protokoły są powszechnie używane w innych kontekstach, mogą być równie skuteczne w IoT. W rzeczywistości, specyfika IoT wymaga odmiennych podejść, jak te, jakie oferuje MQTT, które są dostosowane do ograniczeń i wymagań tego dynamicznego środowiska.

Pytanie 11

Co oznacza termin 'hoisting' w JavaScript?

A. Technika zarządzania pamięcią polegająca na usuwaniu nieużywanych obiektów
B. Metoda ładowania skryptów z zewnętrznych źródeł
C. Optymalizacja kodu wykonywana przez silnik JavaScript
D. Przenoszenie deklaracji zmiennych i funkcji na górę ich zakresu podczas fazy kompilacji
Nieprawidłowe odpowiedzi na to pytanie mogą wynikać z nieporozumienia na temat podstawowych zasad działania JavaScript i jego mechanizmu wykonawczego. Optymalizacja kodu przez silnik JavaScript to proces, który ma miejsce w tle, ale nie odnosi się bezpośrednio do hoistingu, ponieważ ten termin dotyczy przenoszenia deklaracji na górę zakresu. Kolejna koncepcja zarządzania pamięcią, polegająca na usuwaniu nieużywanych obiektów, odnosi się do garbage collection, a nie do hoistingu. Garbage collection jest procesem, w którym silnik JavaScript automatycznie zwalnia pamięć zajmowaną przez obiekty, do których już nie ma odniesienia, co jest niezwiązane z mechanizmem przenoszenia deklaracji. Metoda ładowania skryptów z zewnętrznych źródeł dotyczy sposobu, w jaki JavaScript może być integrowany z HTML, ale nie ma związku z hoistingiem. Często mylone są te koncepcje ze względu na złożoność JavaScript i jego asynchroniczny charakter. Kluczowe w pracy z JavaScript jest zrozumienie, jak różne mechanizmy, takie jak hoisting, wpływają na organizację kodu i mogą prowadzić do błędów, jeśli nie są prawidłowo stosowane. Programiści powinni być świadomi, że niewłaściwe użycie hoistingu może skutkować trudnymi do wykrycia błędami, co podkreśla wagę dobrej praktyki w zakresie strukturyzacji kodu.

Pytanie 12

Który z wymienionych elementów NIE stanowi części instrukcji dla użytkownika programu?

A. Opis testów jednostkowych
B. Rozwiązywanie problemów związanych z użytkowaniem aplikacji
C. Opis metody instalacji aplikacji
D. Instrukcje dotyczące obsługi poszczególnych funkcji aplikacji
Instrukcja użytkownika programu zawiera opisy dotyczące sposobu instalacji aplikacji, konfiguracji oraz obsługi poszczególnych funkcji. Jest to kluczowy dokument pomagający użytkownikom w szybkim wdrożeniu się w pracę z oprogramowaniem. Zawiera również sekcje dotyczące rozwiązywania typowych problemów oraz wskazówki, jak efektywnie korzystać z narzędzi i funkcji aplikacji. Instrukcja użytkownika może być dostępna w formie elektronicznej (PDF, strony WWW) lub papierowej, a jej celem jest uproszczenie procesu wdrażania oraz ograniczenie liczby zgłoszeń do działu wsparcia technicznego. Dokumentacja tego typu stanowi również ważny element budowania pozytywnego doświadczenia użytkownika (UX).

Pytanie 13

W celu wdrożenia w aplikacji internetowej mechanizmu zbierania danych statystycznych na komputerach użytkowników, można użyć

A. formulacje
B. ciasteczka
C. buforowanie
D. sesje
Ciasteczka, czyli tzw. cookies, to naprawdę podstawowy, a zarazem bardzo skuteczny mechanizm wykorzystywany w aplikacjach internetowych właśnie do zbierania i przechowywania danych statystycznych na komputerach użytkowników. Przeglądarki obsługują je praktycznie od zawsze i każda strona, która chce śledzić zachowanie odwiedzających, korzysta z cookies – choćby do zapamiętywania wizyt, identyfikowania użytkowników czy przechowywania preferencji. Co istotne, ciasteczka działają po stronie klienta, więc idealnie nadają się do przechowywania niewielkich ilości informacji bez konieczności ciągłego odpytywania serwera. W praktyce branżowej cookies są fundamentem dla narzędzi analitycznych, takich jak Google Analytics – to właśnie tam są zapisywane unikalne identyfikatory użytkowników, sesji czy kanałów ruchu. Z mojego doświadczenia mogę dodać, że jeśli ktoś kiedyś chciałby zbudować własny system analityczny, to zacznie właśnie od ciasteczek, bo są łatwo dostępne przez JavaScript i bardzo dobrze wspierane przez standardy sieciowe (np. RFC 6265). Warto też pamiętać o kwestiach prywatności i RODO, bo dzisiaj strony muszą informować użytkowników o użyciu cookies. Niemniej, jeśli chodzi o mechanizm zbierania statystyk na komputerze użytkownika, to cookies są wręcz nie do zastąpienia.

Pytanie 14

Pierwszym krokiem w procesie tworzenia aplikacji jest

A. opracowanie architektury systemu
B. wybór zestawu typów i zmiennych dla aplikacji
C. analiza wymagań klienta
D. stworzenie przypadków testowych
Analiza wymagań klienta to taki trochę fundament całego procesu tworzenia aplikacji. Bez niej ciężko ruszyć dalej, bo nie wiadomo, co właściwie trzeba zbudować i jakie cele ma spełniać projekt. Z mojego doświadczenia wynika, że rozmowy z klientem potrafią odkryć wiele niewypowiedzianych oczekiwań – czasem nawet takie, o których sam klient nie pomyślał, ale są kluczowe dla sukcesu produktu. Bez szczegółowego zrozumienia, czego dokładnie potrzebuje użytkownik końcowy, łatwo wpaść w pułapkę budowania funkcjonalności na ślepo lub tworzenia rozwiązań, które nikomu się nie przydadzą. W branży IT mówi się, że im lepsza analiza na starcie, tym mniej poprawek i niespodzianek później w trakcie realizacji. Standardy takie jak IEEE 830 czy metodyki typu Agile i Scrum mocno podkreślają rolę rozmów z klientem oraz dokumentowania wymagań, zanim przejdzie się dalej. Praktycznie każda większa firma najpierw zbiera wymagania – czy to poprzez warsztaty, wywiady, czy analizę procesów biznesowych. Takie podejście pozwala lepiej zaplanować zakres projektu, oszacować koszty i ustalić priorytety. Bez tego nawet najlepsza architektura czy testy nie uratują projektu przed nieporozumieniami i opóźnieniami.

Pytanie 15

Definicja konstruktora dla zaprezentowanej klasy w języku C++ może być sformułowana jak poniżej:

class Owoc
{
    public:
        double waga;
        string nazwa;
        Owoc(double waga, string nazwa);
};

Deklaracja 1:
Owoc::Owoc(double waga, string nazwa) {
    this -> waga = waga;
    this -> nazwa = nazwa;
}

Deklaracja 2:
Construct::Owoc(double waga, string nazwa) {
    this -> waga = waga;
    this -> nazwa = nazwa;
}

Deklaracja 3:
Construct::Owoc(double waga, string nazwa) {
    this.waga = waga;
    this.nazwa = nazwa;
}

Deklaracja 4:
Owoc::Owoc(double waga, string nazwa) {
    this.waga = waga;
    this.nazwa = nazwa;
}
A. Deklaracji 3
B. Deklaracji 2
C. Deklaracji 1
D. Deklaracji 4
Wiele osób, szczególnie na początku nauki, myli się tu przez znajomość składni z innych języków lub nie do końca rozumie, jak działa zakres nazw w C++. Najczęstszy błąd w przedstawionych błędnych deklaracjach polega na używaniu nieprawidłowej nazwy klasy w kwalifikatorze zasięgu, czyli przed '::'. W C++ implementując konstruktor poza ciałem klasy, musimy napisać Owoc::Owoc(...), a nie, na przykład, Construct::Owoc(...). To bardzo podstawowa, ale kluczowa kwestia, która wynika z zasad języka. Często osoby przesiadające się z innych języków, np. z Javy czy C#, próbują też używać notacji this.waga (z kropką), co niestety w C++ jest nieprawidłowe – tutaj operator dostępu do składowych przez wskaźnik to '->', bo this jest wskaźnikiem do obiektu. Takie subtelności bywają podchwytliwe i sam pamiętam, jak łatwo się na tym przejechać, zwłaszcza jak się przeskakuje pomiędzy językami. Jeszcze inny typowy błąd to mylenie konstruktora z zupełnie innymi funkcjami albo próba zadeklarowania konstruktora w przestrzeni nazw, która nie odpowiada klasie – przez co kompilator nie rozpoznaje takiej funkcji jako konstruktora i pojawiają się często niejasne błędy kompilacji. Warto mocno zapamiętać, że w C++ musimy bardzo pilnować zarówno nazewnictwa, jak i składni operatorów, bo automatycznych podpowiedzi na etapie pisania kodu czasem brakuje. Dobrą praktyką jest też sprawdzanie, czy używamy poprawnych typów dostępu do pól (-> zamiast .). Wreszcie, nie można używać innych nazw klas niż tej, której konstruktor rzeczywiście definiujemy. Każde odstępstwo od tej reguły prowadzi do sporych problemów i nieporozumień w kodzie. Z mojego doświadczenia wynika, że te drobiazgi, które wydają się mało istotne, potem najbardziej komplikują pracę i utrzymanie projektu. Warto więc od razu przyzwyczajać się do poprawnej składni i nie kombinować z rozwiązaniami "z innych światów" – C++ rządzi się swoimi prawami i trzymając się ich, można zyskać sporo pewności przy pisaniu kodu.

Pytanie 16

W przypadku przedstawionego fragmentu kodu Java, wyjątek zostanie zgłoszony, gdy wartość zmiennej index wyniesie:

try {
    int[] liczby = {1, 2, 3, 4, 5, 6};
    System.out.println(liczby[index]);
}
catch (Exception e) {
    System.out.println("wystąpił błąd.");
}
A. 7
B. 1
C. 5
D. 0
W sytuacjach gdy analizujemy dostęp do elementów tablicy w języku Java istotne jest zrozumienie jak działają indeksy tablicowe. Tablica o długości n posiada indeksy od 0 do n-1. W tym kontekście tablica liczby ma sześć elementów co oznacza że poprawne indeksy to 0 do 5. Wyjątkowa sytuacja jak ArrayIndexOutOfBoundsException pojawia się gdy próbujemy uzyskać dostęp do indeksu większego niż największy dostępny indeks lub mniejszego niż zero. W przypadku indeksu 0 lub 1 dostęp jest poprawny i nie spowoduje wyjątku ponieważ te indeksy mieszczą się w zakresie długości tablicy. Częsty błąd myślowy polega na myleniu długości tablicy z maksymalnym indeksem co jest przyczyną błędów logicznych w programach. Podobnie indeks 5 jest również poprawny ponieważ odnosi się do ostatniego elementu tablicy o długości sześciu elementów. Aby unikać takich błędów ważne jest nie tylko znać teorię ale również stosować ją w praktyce. Regularne pisanie testów jednostkowych oraz walidacja danych wejściowych mogą pomóc w minimalizacji ryzyka wystąpienia takich wyjątków w aplikacjach komercyjnych. Stosowanie dobrej obsługi wyjątków i odpowiedni debugging są kluczowe w procesie tworzenia oprogramowania zwłaszcza w dużych projektach gdzie stabilność i niezawodność aplikacji są priorytetowe dla użytkowników końcowych.

Pytanie 17

Jakie znaczenie ma krajowa normalizacja dla produktów i usług?

A. Usuwa konieczność przeprowadzania kontroli jakości
B. Restrukcjonuje innowacje technologiczne
C. Gwarantuje lepszą zgodność oraz jakość
D. Ogranicza liczbę dostępnych towarów
Wielu ludzi myśli, że normalizacja zmniejsza liczbę dostępnych produktów, ale to nie tak. W rzeczywistości standardy sprawiają, że pojawia się jeszcze więcej różnych produktów, które spełniają określone normy. A ten pomysł, że pozbywanie się kontroli jakości to coś dobrego, to chyba jakieś nieporozumienie – normalizacja wcale nie zastępuje kontroli jakości, ona ją raczej wspiera. I nie ma co mówić, że innowacji technologicznych jest mniej przez normalizację – wręcz przeciwnie, standardy dają solidny podstawy do tego, żeby rozwijać nowe technologie i produkty, które odpowiadają potrzebom rynku.

Pytanie 18

Aplikacje funkcjonujące w systemach Android do komunikacji z użytkownikiem wykorzystują klasę

A. Fragments
B. Screens
C. Windows
D. Activity

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W systemie Android klasa Activity to absolutna podstawa komunikacji aplikacji z użytkownikiem. To właśnie ona reprezentuje jeden ekran interfejsu użytkownika, coś w stylu okna dialogowego w klasycznych aplikacjach desktopowych. Cały cykl życia aplikacji, obsługa zdarzeń, wyświetlanie elementów graficznych czy reagowanie na akcje użytkownika – wszystko to ogarnia Activity. Bez niej praktycznie żadna aplikacja nie ruszy, bo to właśnie Activity zarządza np. wywołaniem widoku, obsługą kliknięć czy przekazywaniem danych pomiędzy różnymi ekranami. Moim zdaniem, jeśli ktoś chce programować na Androida, najpierw powinien dobrze przyswoić, jak działa Activity i jej cykl życia (onCreate, onStart itd.), bo to pozwala tworzyć aplikacje zgodne z założeniami platformy. W praktyce deweloperzy bardzo często korzystają z dziedziczenia po klasie Activity, aby rozszerzyć funkcjonalność swoich aplikacji, a także używają jej do uruchamiania nowych ekranów oraz zarządzania nawigacją. Warto jeszcze pamiętać, że dobra znajomość Activity pomaga unikać typowych problemów z zarządzaniem pamięcią czy nieprawidłowym obsługiwaniem powrotów do aplikacji po przerwie. Z mojego doświadczenia, zrozumienie działania Activity to taka baza, bez której trudno iść dalej w temacie Androida.

Pytanie 19

Który z wymienionych algorytmów działających na tablicy jednowymiarowej ma złożoność obliczeniową \( O(n^2) \)?

A. Sortowanie bąbelkowe
B. Wyszukiwanie metodą binarną
C. Wyświetlenie elementów
D. Sortowanie szybkie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie bąbelkowe to taki klasyczny algorytm, który ma złożoność \( O(n^2) \). Chociaż jest dość prosty w zrozumieniu, to nie za bardzo sprawdza się w większych zbiorach danych. Działa tak, że porównuje sąsiadujące ze sobą elementy i zamienia je miejscami, jeśli są w złej kolejności. Trochę to czasochłonne, ale warto znać ten algorytm, bo pokazuje podstawy sortowania.

Pytanie 20

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. stepper
B. przełącznik
C. listę rozwijaną
D. suwak

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 21

Która zasada zwiększa bezpieczeństwo w sieci?

A. Pobieranie plików z niepewnych źródeł
B. Korzystanie z mocnych, unikalnych haseł
C. Zaniedbywanie aktualizacji systemu operacyjnego
D. Dzielnie się hasłami z przyjaciółmi

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Używanie silnych, unikalnych haseł jest fundamentalną zasadą poprawiającą bezpieczeństwo w sieci. Silne hasło to takie, które składa się z co najmniej 12 znaków, zawiera wielkie i małe litery, cyfry oraz znaki specjalne. Takie hasła są trudne do złamania przez ataki brute force, które wykorzystują algorytmy do próbowania różnych kombinacji znaków. Przykładem silnego hasła może być 'P@ssw0rd!2023', które łączy różnorodne typy znaków. Używanie unikalnych haseł dla różnych kont jest równie ważne, ponieważ w przypadku naruszenia bezpieczeństwa jednego konta, inne pozostają zabezpieczone. Standardy takie jak NIST (National Institute of Standards and Technology) zalecają tworzenie haseł w sposób, który ogranicza ich przewidywalność. Narzędzia do zarządzania hasłami, takie jak LastPass czy 1Password, mogą pomóc w generowaniu i przechowywaniu silnych haseł, co dodatkowo redukuje ryzyko. Stosowanie tej zasady jest kluczowe w kontekście ochrony danych osobowych oraz zapobiegania kradzieży tożsamości.

Pytanie 22

Jaką wartość będzie miała zmienna result po wykonaniu poniższego kodu PHP?

$array = [5, 1, 8, 3, 7];
$result = 0;
foreach ($array as $value) {
  if ($value > $result) {
    $result = $value;
  }
}
A. 5
B. 7
C. 24
D. 8

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wartość zmiennej result po wykonaniu podanego kodu PHP wynosi 8, ponieważ kod ten ma na celu znalezienie największej liczby w tablicy. Zmienna $result jest początkowo ustawiona na 0, co oznacza, że każda liczba z tablicy, która jest większa od zera, zostanie przypisana do $result. W trakcie iteracji przez tablicę $array, każdy element jest porównywany z bieżącą wartością $result. Kiedy napotykamy wartość 5, która jest większa od 0, zmienna $result zostaje zaktualizowana do 5. Następnie porównujemy 1, co nie zmienia $result. Kiedy napotykamy 8, zmienna $result jest aktualizowana do 8, ponieważ 8 jest większe od 5. Kolejne wartości 3 i 7 również nie zmieniają $result, ponieważ są mniejsze od 8. Po zakończeniu pętli, $result pozostaje równe 8, co jest największą wartością w tablicy. To podejście jest zgodne z dobrymi praktykami programistycznymi, gdzie używa się pętli do przetwarzania kolekcji danych w sposób optymalny i przejrzysty.

Pytanie 23

Które z poniższych narzędzi służy do analizy wydajności stron internetowych?

A. Postman
B. Webpack
C. Docker
D. Lighthouse

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Lighthouse to narzędzie opracowane przez Google, które służy do audytowania wydajności stron internetowych. Jego głównym celem jest analiza jakości strony w kontekście szybkości ładowania, dostępności oraz SEO. Podczas audytu Lighthouse generuje szczegółowy raport, w którym przedstawione są różne metryki, takie jak czas do pierwszego renderowania, czas ładowania zasobów, a także ocena dostępności elementów strony. Narzędzie to doskonale wpisuje się w obecne standardy branżowe, zachęcając programistów do stosowania najlepszych praktyk. Przykładowo, wykorzystanie Lighthouse pozwala na identyfikację problemów, które mogą wpływać na doświadczenia użytkowników, takich jak zbyt duże obrazy, zbyt skomplikowane skrypty czy brak kompresji zasobów. Dzięki tym informacjom, deweloperzy mogą wprowadzać konkretne zmiany, które przyczynią się do poprawy wydajności strony, co jest kluczowe w kontekście SEO oraz satysfakcji użytkowników.

Pytanie 24

Jakie z wymienionych czynności może zagrażać cyfrowej tożsamości?

A. Klikanie w podejrzane linki w wiadomościach e-mail
B. Cykliczna zmiana haseł do kont
C. Tworzenie unikalnych oraz mocnych haseł
D. Aktywacja uwierzytelniania dwuskładnikowego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Klikanie w podejrzane linki w wiadomościach e-mail to jedno z najczęstszych źródeł infekcji i naruszenia cyfrowej tożsamości. Cyberprzestępcy często wykorzystują phishing, czyli technikę polegającą na wysyłaniu fałszywych wiadomości, które wyglądają na autentyczne. Kliknięcie w link może prowadzić do zainstalowania złośliwego oprogramowania lub przekierowania na stronę wyłudzającą dane logowania. Aby uniknąć tego zagrożenia, zaleca się sprawdzanie adresu nadawcy, unikanie otwierania załączników z nieznanych źródeł i korzystanie z filtrów antyphishingowych.

Pytanie 25

Która z wymienionych zasad odnosi się do zachowania prywatności w sieci?

A. Stosowanie pseudonimów zamiast rzeczywistych imion na mediach społecznościowych
B. Umieszczanie wszystkich zdjęć na platformach społecznościowych
C. Przechowywanie haseł w wiadomościach e-mail
D. Publikowanie danych osobowych na otwartych platformach

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Używanie pseudonimów zamiast prawdziwych imion na portalach społecznościowych jest jedną z podstawowych zasad ochrony prywatności w internecie. Dzięki temu ograniczasz możliwość identyfikacji i śledzenia Twojej aktywności przez osoby trzecie. Pseudonimy minimalizują ryzyko kradzieży tożsamości i redukują ilość danych osobowych dostępnych publicznie. To działanie jest szczególnie ważne dla dzieci i młodzieży, chroniąc ich przed cyberprzemocą i innymi zagrożeniami. W wielu serwisach można także dostosować ustawienia prywatności, ukrywając profil przed osobami spoza listy znajomych.

Pytanie 26

Jakiego kwalifikatora powinno się użyć dla metody, aby umożliwić do niej dostęp jedynie z wnętrza tej klasy oraz klas dziedziczących, a także, by metoda ta nie była dostępna w żadnej funkcji?

A. protected
B. public
C. reinterpret_cast
D. private

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Słowo kluczowe protected to w programowaniu obiektowym zdecydowanie ciekawa sprawa – i, szczerze mówiąc, bardzo przydatne narzędzie, jeśli chodzi o kontrolę dostępu do metod i pól w klasach. Wybierając protected, dajesz znać kompilatorowi, że dana metoda ma być dostępna tylko wewnątrz tej klasy i przez klasy pochodne, czyli dziedziczące. To oznacza, że kod spoza tej hierarchii (na przykład zwykłe funkcje czy metody innych klas) nie będzie mógł się do niej „dobrać”, nawet jeśli bardzo by chciał. W praktyce często korzysta się z protected, gdy projektujesz klasy bazowe i chcesz, żeby pewne operacje były do dyspozycji tylko dla klas dziedziczących, ale już nie dla całego świata. Przykładowo, możesz mieć klasę Figure i w niej metodę protected calculateArea(), którą nadpisują konkretne figury, ale nie chcesz, żeby ktoś poza tym drzewem dziedziczenia się do niej odwołał. To podejście daje większą elastyczność niż private (bo pozwala na dostęp potomkom), ale jednocześnie lepszą kontrolę niż public. Moim zdaniem, stosowanie protected to bardzo dobra praktyka, gdy wiesz, że chcesz zabezpieczyć metody, ale nie chcesz ich zupełnie „zamykać” tylko dla pojedynczej klasy. Warto też pamiętać, że to rozwiązanie promuje tzw. hermetyzację – czyli jedną z kluczowych zasad OOP, co jest mocno doceniane w profesjonalnych projektach.

Pytanie 27

Który z wymienionych frameworków służy do budowy aplikacji webowych w C#?

A. Angular
B. React.js
C. ASP.NET Core
D. Django

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
ASP.NET Core to nowoczesny, wydajny i skalowalny framework opracowany przez Microsoft, który jest przeznaczony do budowy aplikacji webowych w języku C#. ASP.NET Core umożliwia tworzenie dynamicznych stron internetowych, API oraz aplikacji mikroserwisowych. Jego modularność i wsparcie dla kontenerów (Docker) oraz chmury sprawiają, że jest to jeden z najczęściej wybieranych frameworków w środowiskach enterprise. ASP.NET Core obsługuje zarówno aplikacje serwerowe, jak i aplikacje klient-serwer, a dzięki technologii Razor Pages i Blazor pozwala na budowanie aplikacji, w których logika biznesowa jest ściśle zintegrowana z warstwą prezentacji. Dodatkowo ASP.NET Core oferuje wbudowane mechanizmy do zarządzania tożsamością użytkowników, autoryzacji i autentykacji, co czyni go doskonałym wyborem do tworzenia aplikacji biznesowych oraz korporacyjnych.

Pytanie 28

Jakie oznaczenie posiada norma krajowa w Polsce?

A. EN
B. ISO
C. IEC
D. PN

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polska Norma, czyli PN, to taki nasz krajowy znak, który mówi, jakie powinny być standardy jakości i techniczne dla różnych produktów i usług w Polsce. Normy PN są dostosowane do tego, czego potrzebujemy na rynku, ale często są oparte na międzynarodowych normach, takich jak ISO czy europejskich EN. Choć wdrażanie tych norm jest dobrowolne, to w wielu branżach ich przestrzeganie jest wręcz konieczne, jeśli chcemy zdobyć odpowiednie certyfikaty jakości. Warto je znać, bo dzięki nim możemy czuć się bezpieczniej, a jakość produktów staje się lepsza. To też wspiera rozwój nowych technologii w Polsce.

Pytanie 29

Które z poniższych narzędzi jest używane do statycznej analizy kodu JavaScript?

A. Jest
B. ESLint
C. Webpack
D. Babel

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
ESLint to narzędzie służące do statycznej analizy kodu JavaScript, które pomaga programistom w identyfikacji błędów, niezgodności z konwencjami kodowania oraz problemów z wydajnością. Jego główną zaletą jest możliwość dostosowania reguł analizy do indywidualnych potrzeb projektu, co czyni go bardzo elastycznym narzędziem. W praktyce, korzystając z ESLint, możesz skonfigurować reguły, które będą zintegrowane z twoim edytorem kodu, co pozwala na bieżąco otrzymywać informacje o problemach w kodzie. To znacznie poprawia jakość pisania kodu i przyspiesza proces code review. Ponadto, ESLint wspiera różne biblioteki i frameworki, takie jak React czy Vue, co czyni go uniwersalnym rozwiązaniem w ekosystemie JavaScript. Warto również zaznaczyć, że regularne stosowanie ESLint może pomóc zespołom programistycznym w utrzymaniu spójności kodu oraz ułatwia pracę nowym członkom zespołu, którzy mogą szybko zrozumieć zasady panujące w projekcie.

Pytanie 30

Jakie jest przeznaczenie dokumentacji wdrożeniowej?

A. Do testowania wydajności aplikacji
B. Do tworzenia zadań w systemie kontroli wersji
C. Do opisania procesu instalacji i konfiguracji aplikacji w środowisku produkcyjnym
D. Do zarządzania bazą danych aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dokumentacja wdrożeniowa opisuje proces instalacji i konfiguracji aplikacji w środowisku produkcyjnym. Obejmuje ona szczegółowe instrukcje dotyczące wymaganych komponentów systemowych, zależności oraz kroków niezbędnych do prawidłowego wdrożenia aplikacji. Dzięki dokumentacji wdrożeniowej administratorzy IT oraz zespoły DevOps mogą skutecznie zarządzać procesem implementacji, minimalizując ryzyko błędów i przestojów. Dokument ten zawiera również informacje o kopiach zapasowych, procedurach przywracania systemu oraz testach przeprowadzanych po wdrożeniu, co zapewnia stabilność i bezpieczeństwo aplikacji po przeniesieniu jej na serwery produkcyjne. Kompleksowa dokumentacja wdrożeniowa to kluczowy element zarządzania cyklem życia oprogramowania (SDLC).

Pytanie 31

Jaka jest składnia komentarza jednoliniowego w języku Python?

A. #
B. !
C. //
D. ""

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Komentarz jednoliniowy w Pythonie zaczynamy od znaku hash, czyli #. To jest taki uniwersalny sposób na szybkie dodanie uwagi lub wyjaśnienia bez wpływu na działanie kodu. Moim zdaniem to bardzo praktyczne – wystarczy po prostu wpisać # i reszta linii jest ignorowana przez interpreter. W dużych projektach często spotyka się krótkie komentarze obok wyrażeń, np. x += 1 # inkrementacja liczby porządkowej. Co ciekawe, Python nie posiada stricte blokowych komentarzy, jak niektóre inne języki (np. /* ... */ w C lub Java), więc hashe naprawdę często się stosuje. To niesamowicie pomaga przy czytelności kodu, szczególnie gdy wracamy do własnych plików po kilku tygodniach albo pracujemy w zespole. PEP 8, czyli oficjalny przewodnik stylu Pythona, zaleca wręcz regularne używanie komentarzy do wyjaśniania „dlaczego” coś robimy, nie tylko „co” robimy. Dobrze napisany komentarz może skrócić czas szukania błędów albo tłumaczenia rozwiązań innym. Z mojego doświadczenia, warto pilnować, by komentarze nie były przestarzałe – łatwo zapomnieć o ich aktualizacji po zmianach w kodzie. Jeśli kiedyś napotkasz kod bez #, a z innymi znakami, to od razu czerwona lampka: to raczej nie jest Python.

Pytanie 32

Co to jest CSS Grid?

A. Dwuwymiarowy system układu elementów na stronie opary na siatkach
B. Biblioteka komponentów wizualnych dla aplikacji webowych
C. Format plików graficznych obsługiwany przez CSS3
D. Metoda optymalizacji plików CSS dla lepszej wydajności strony

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CSS Grid to nowoczesny, dwuwymiarowy system układu elementów na stronie internetowej, który umożliwia projektantom i deweloperom łatwe i elastyczne tworzenie skomplikowanych układów. Dzięki CSS Grid możemy definiować zarówno kolumny, jak i wiersze, co pozwala na precyzyjne umieszczanie elementów w kontekście całego układu. Przykładem zastosowania CSS Grid może być stworzenie responsywnej galerii zdjęć, gdzie można łatwo zmieniać liczbę kolumn w zależności od szerokości ekranu. CSS Grid jest zgodny z najnowszymi standardami W3C i stał się kluczowym elementem w nowoczesnym web designie. Dzięki właściwościom takim jak grid-template-areas, grid-template-columns, czy grid-auto-rows, projektanci mogą w intuicyjny sposób organizować treści, co poprawia zarówno estetykę, jak i użyteczność stron. Ponadto, korzystanie z CSS Grid pozwala na zmniejszenie zależności od zewnętrznych bibliotek JavaScript do układania elementów, co podnosi wydajność i usprawnia proces tworzenia stron.

Pytanie 33

Które z wymienionych sformułowań najlepiej definiuje oprogramowanie typu ransomware?

A. Złośliwe aplikacje wyświetlające reklamy
B. Oprogramowanie uniemożliwiające dostęp do danych w celu wymuszenia zapłaty
C. Programy zbierające prywatne dane bez zgody użytkownika
D. Oprogramowanie stosowane do realizacji ataków DDoS

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Oprogramowanie typu ransomware to rodzaj złośliwego oprogramowania, które ma na celu zablokowanie dostępu do danych użytkownika, a następnie wymuszenie okupu w zamian za ich przywrócenie. Ransomware działa na zasadzie szyfrowania plików na zainfekowanym urządzeniu, co uniemożliwia użytkownikowi korzystanie z danych. Po dokonaniu szyfrowania, ofiara otrzymuje wiadomość z żądaniem okupu, zazwyczaj w kryptowalutach, które mają na celu anonimowość transakcji. Przykłady ransomware to oprogramowanie takie jak WannaCry oraz Petya, które spowodowały globalne ataki, skutkując znacznymi stratami finansowymi dla wielu organizacji. Zgodnie z definicjami i standardami, takimi jak NIST (National Institute of Standards and Technology), ransomware jest klasyfikowane jako jedno z najpoważniejszych zagrożeń dla bezpieczeństwa informacji. Warto również zauważyć, że ransomware rozwija się, a jego twórcy stosują różne techniki, aby zwiększyć skuteczność ataków, takie jak wykorzystywanie luk w oprogramowaniu oraz phishing, aby zainfekować systemy użytkowników.

Pytanie 34

W jakim przypadku należy umieścić poszkodowanego w pozycji bocznej bezpiecznej?

A. w przypadku urazu kręgosłupa
B. w przypadku omdlenia, gdy osoba jest przytomna
C. w sytuacji urazu pleców, gdy osoba jest świadoma
D. gdy wystąpi omdlenie i brak tętna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ułożenie poszkodowanego w pozycji bocznej bezpiecznej jest kluczowym krokiem w sytuacjach medycznych, zwłaszcza w przypadku omdlenia, gdy osoba jest przytomna i oddycha. Ta pozycja ma na celu zapewnienie drożności dróg oddechowych, co jest niezbędne, aby uniknąć zadławienia się własnymi wymiotami lub śliną. W sytuacji, gdy osoba traci przytomność, lecz nadal oddycha, ułożenie jej na boku minimalizuje ryzyko aspiracji i wspiera naturalne funkcje oddechowe. Ważne jest, aby przyjąć tę pozycję, ale również monitorować stan poszkodowanego, sprawdzając jego oddech i reakcje. Zgodnie z wytycznymi Europejskiej Rady Resuscytacji, w takich sytuacjach kluczowe jest, aby osoba była w pełni zabezpieczona i nie mogła się przewrócić. Przykłady zastosowania tej techniki obejmują sytuacje, gdzie osoba straciła przytomność na skutek omdlenia związanego z nagłym spadkiem ciśnienia krwi lub innymi czynnikami. Wykorzystanie pozycji bocznej bezpiecznej jest standardem w pierwszej pomocy i jest szkolone w ramach kursów dla ratowników oraz medyków.

Pytanie 35

Jakie jest wyjście działania kompilatora?

A. Plik źródłowy w języku o wyższym poziomie
B. Kolekcja instrukcji w języku pośrednim
C. Zestaw błędów występujących w kodzie
D. Plik maszynowy gotowy do uruchomienia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Plik maszynowy gotowy do uruchomienia jest wynikiem działania kompilatora. Po przekształceniu kodu źródłowego na język maszynowy tworzony jest plik binarny, który może być uruchomiony na komputerze bez konieczności ponownej kompilacji. Pliki te są szybkie i efektywne, ponieważ kod został wcześniej zoptymalizowany i przetworzony na instrukcje rozumiane przez procesor. Przykłady takich plików to .exe w systemie Windows lub pliki binarne w systemach Linux. Plik maszynowy to ostateczna forma programu, gotowa do dystrybucji i użytkowania.

Pytanie 36

Który z poniższych elementów nie jest związany z architekturą mikroserwisów?

A. Monolityczny kod źródłowy
B. Skalowalność poszczególnych usług
C. Komunikacja przez API
D. Niezależne wdrażanie usług

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Monolityczny kod źródłowy to podejście, w którym wszystkie komponenty aplikacji są ze sobą ściśle powiązane i zintegrowane w jedną całość. W przeciwieństwie do architektury mikroserwisów, która pozwala na budowę systemów jako zbioru niezależnych usług, monolityczne podejście ogranicza możliwości rozwoju i skalowania aplikacji. W mikroserwisach poszczególne usługi mogą być rozwijane, wdrażane i skalowane niezależnie od siebie, co zwiększa elastyczność i skraca czas realizacji. Przykładem zastosowania architektury mikroserwisów może być serwis e-commerce, w którym oddzielne mikroserwisy obsługują płatności, zarządzanie produktami i wysyłkę. Dzięki temu, jeśli chcemy wprowadzić zmiany w systemie płatności, możemy to zrobić bez wpływu na inne obszary aplikacji. Warto również zauważyć, że podejście to umożliwia lepsze zarządzanie zespołami deweloperskimi, które mogą pracować równolegle nad różnymi usługami, co przyspiesza proces dostarczania wartości dla użytkowników.

Pytanie 37

Jakie jest główne zadanie ochrony danych osobowych?

A. Utrudnianie działalności organom ścigania
B. Udostępnianie danych osobowych w celach marketingowych
C. Gwarantowanie anonimowości dla internautów
D. Zabezpieczenie danych osobowych przed nieautoryzowanym dostępem i ich wykorzystaniem

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ochrona danych osobowych przed nieuprawnionym dostępem i wykorzystaniem to podstawowy cel ochrony danych osobowych. Zasady ochrony prywatności, takie jak RODO (GDPR), zapewniają użytkownikom prawo do kontroli nad swoimi danymi i decydowania, kto może je przetwarzać. Firmy i organizacje muszą wdrażać środki techniczne oraz organizacyjne, aby zabezpieczyć dane przed wyciekiem, kradzieżą i nadużyciami. Przestrzeganie tych zasad nie tylko chroni jednostki, ale również buduje zaufanie klientów do przedsiębiorstw.

Pytanie 38

Który z etapów umożliwia zwiększenie efektywności aplikacji przed jej wydaniem?

A. Optymalizacja kodu
B. Tworzenie interfejsu graficznego
C. Dodawanie komentarzy do kodu
D. Testowanie jednostkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Optymalizacja kodu to kluczowy etap poprawy wydajności aplikacji przed jej publikacją. Polega na eliminacji zbędnych operacji, poprawie algorytmów oraz minimalizacji użycia zasobów, co pozwala na szybsze działanie aplikacji i zmniejszenie jej zapotrzebowania na pamięć. Optymalizacja kodu obejmuje również refaktoryzację, czyli przekształcenie kodu w bardziej czytelną i efektywną formę bez zmiany jego funkcjonalności. Dzięki optymalizacji aplikacje działają płynniej, szybciej się ładują i oferują lepsze doświadczenie użytkownika, co ma kluczowe znaczenie dla SEO oraz pozycjonowania aplikacji w wyszukiwarkach. Dodatkowo, zoptymalizowany kod jest łatwiejszy w utrzymaniu i rozwijaniu, co przekłada się na długoterminowe korzyści dla zespołu deweloperskiego.

Pytanie 39

Jakie z wymienionych czynności można zrealizować przy pomocy składnika statycznego danej klasy?

A. Tworzenie prywatnych kopii pól dla każdej instancji
B. Umożliwienie dzielenia pól klasy pomiędzy zaprzyjaźnione klasy
C. Wywołanie destruktora klasy bez jej usuwania
D. Zachowanie wartości wspólnych dla wszystkich instancji klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Składnik statyczny klasy przechowuje wartości wspólne dla wszystkich instancji danej klasy. Oznacza to, że niezależnie od liczby utworzonych obiektów, istnieje tylko jedna kopia składowej statycznej, która jest współdzielona przez wszystkie instancje. Składowe statyczne są często wykorzystywane do przechowywania liczników, stałych wartości lub danych konfiguracyjnych. Metody statyczne mogą być wywoływane bezpośrednio na klasie, bez konieczności tworzenia obiektu, co czyni je niezwykle użytecznymi w przypadku funkcji narzędziowych.

Pytanie 40

Jakie jest podstawowe zadanie funkcji zaprzyjaźnionej w danej klasie?

A. Ograniczenie widoczności atrybutów klasy
B. Umożliwienie funkcji dostępu do prywatnych atrybutów klasy
C. Generowanie kopii pól obiektu w innej klasie
D. Dodawanie nowych instancji do klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Funkcja zaprzyjaźniona umożliwia dostęp do prywatnych i chronionych składowych klasy, z którą jest zaprzyjaźniona. To mechanizm, który pozwala na utrzymanie hermetyzacji, jednocześnie umożliwiając wybranym funkcjom lub klasom bezpośredni dostęp do wewnętrznych danych innej klasy. Funkcje zaprzyjaźnione często są stosowane do operacji, które wymagają dostępu do wewnętrznych danych klasy, ale nie powinny być jej metodami, np. operacje arytmetyczne lub porównawcze na obiektach tej klasy.