Wyniki egzaminu

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

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Które narzędzie służy do automatyzacji procesu budowania aplikacji?

A. Figma
B. Jenkins
C. Swagger
D. Postman

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Jenkins to jeden z najpopularniejszych narzędzi do automatyzacji procesów budowania aplikacji, znany z integracji ciągłej (Continuous Integration, CI) oraz dostarczania ciągłego (Continuous Delivery, CD). Dzięki swojej elastycznej architekturze oraz bogatej bibliotece wtyczek, Jenkins umożliwia automatyzację wielu zadań związanych z budowaniem, testowaniem i wdrażaniem oprogramowania. W praktyce, z Jenkins można skonfigurować zadania, które uruchamiają skrypty budujące po każdej zmianie w kodzie źródłowym, co pozwala na szybkie wykrywanie błędów i zapewnienie jakości. Dobrą praktyką jest definiowanie pipeline'ów (pipelining), które integrują różne etapy, takie jak budowanie, testowanie i wdrożenie w jeden zautomatyzowany proces. Jenkins wspiera wiele języków programowania i środowisk, a także integruje się z narzędziami do zarządzania wersjami, co czyni go niezastąpionym narzędziem w procesie DevOps.

Pytanie 2

W programowaniu obiektowym odpowiednikami zmiennych oraz funkcji w programowaniu strukturalnym są

A. pola i kwalifikatory dostępu
B. pola i metody
C. metody statyczne i abstrakcyjne
D. hermetyzacja oraz dziedziczenie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pola i metody to absolutna podstawa, jeśli chodzi o programowanie obiektowe. Właśnie one są najbliższym odpowiednikiem zmiennych i funkcji z podejścia strukturalnego. Moim zdaniem, gdy uczysz się OOP, warto od razu wyłapać tę analogię – pola (czyli inaczej: atrybuty, właściwości, fields) przechowują stan obiektu, a metody (czyli funkcje w klasie) definiują, co obiekt potrafi zrobić. Przykład z życia: klasa Samochód ma pole kolor, które opisuje jego cechę oraz metodę jedź(), która realizuje jakąś akcję. W praktyce programiści bardzo często modelują swoje klasy tak, aby pola były prywatne (zgodnie z zasadą hermetyzacji), a dostęp do nich zapewniały metody publiczne – tzw. gettery i settery. Standardy branżowe, np. JavaBeans w Javie czy konwencje C#, też polegają na tym, że pola odzwierciedlają dane, a metody operacje na tych danych. Z mojego doświadczenia wynika, że rozumienie tej relacji ułatwia zarówno pisanie czytelnego kodu, jak i jego dalsze rozwijanie. To właśnie dzięki rozdzieleniu na pola i metody klasy mogą odwzorowywać obiekty z realnego świata i ich zachowania, co jest głównym celem programowania obiektowego.

Pytanie 3

Złośliwe oprogramowanie stworzone w celu przyznania hakerom uprawnień administracyjnych do komputera ofiary bez jej świadomości, to

A. robak
B. wirus
C. rootkit
D. keylogger

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Rootkit to specyficzny rodzaj złośliwego oprogramowania, który został stworzony właśnie po to, żeby uzyskać i utrzymać nieautoryzowane uprawnienia administracyjne na systemie ofiary, a jednocześnie pozostać jak najbardziej niezauważonym. W praktyce, rootkit pozwala atakującemu przejąć pełną kontrolę nad komputerem – może wtedy instalować inne szkodliwe programy, kraść dane czy omijać zabezpieczenia bez wiedzy użytkownika. Co ważne, rootkity są często wykorzystywane przez cyberprzestępców do tzw. eskalacji uprawnień, czyli podniesienia poziomu dostępu z konta zwykłego użytkownika do administratora (roota), co w świecie Linuksa i Unixa jest dość powszechną strategią. Moim zdaniem, to jeden z najtrudniejszych do wykrycia typów malware – potrafi modyfikować systemowe procesy, a nawet podszywać się pod pliki systemowe, co sprawia, że standardowe antywirusy często go nie wykrywają. W branży IT mówi się wręcz o konieczności korzystania z zaawansowanych narzędzi forensics, np. rootkit detectors i regularnym monitorowaniu integralności systemu, zgodnie z zaleceniami CIS Controls. Jeśli ktoś chce się dobrze zabezpieczyć, to naprawdę warto zwracać uwagę na nieoczywiste symptomy: podejrzane procesy, zmiany w kluczowych plikach systemowych czy dziwne aktywności sieciowe. Rootkit to prawdziwy koszmar administratorów i świetny „przykład z życia” na to, jak ważna jest segmentacja uprawnień i stosowanie zasady najmniejszych uprawnień.

Pytanie 4

Wynikiem wykonania poniższego fragmentu kodu jest wyświetlenie liczb z zakresu od 2 do 20, które są

for (let number = 2; number <= 20; number++) {
    let check = true;
    for (let test = 2; test < number; test++) {
        if (number % test === 0) {
            check = false;
            break;
        }
    }
    if (check) console.log(number);
}
A. parzyste.
B. podzielne przez wartość zmiennej test.
C. pierwsze.
D. podzielne przez wartość zmiennej check.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod wypisuje liczby pierwsze, czyli takie, które mają dokładnie dwa dzielniki: 1 i samą siebie. Liczby pierwsze są podstawą w wielu dziedzinach matematyki i informatyki, szczególnie w kryptografii i algorytmach. Wyszukiwanie liczb pierwszych w danym przedziale to popularne zadanie, które pozwala na lepsze zrozumienie iteracji, pętli i warunków logicznych w programowaniu. Algorytm ten jest również wykorzystywany w optymalizacji algorytmów szyfrowania i generowania kluczy.

Pytanie 5

Jakie składniki powinien mieć plan projektu?

A. Tylko czas wykonania i budżet
B. Wyłącznie etapy projektu
C. Etapy projektu, ramy czasowe, zasoby i zadania
D. Terminy i zasoby ludzkie

Brak odpowiedzi na to pytanie.

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

Który z wymienionych elementów interfejsu użytkownika jest charakterystyczny dla aplikacji działającej na komputerze?

A. Przycisk (Button)
B. Routing
C. Strona HTML
D. API REST

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Przycisk, czyli ten mały element, co go klikamy w aplikacjach, to naprawdę ważna część interfejsu. Używamy go, żeby coś zainicjować, na przykład zapisać dane czy wywołać jakąś funkcję. Fajnie, że można go dowolnie ustawiać – zmieniać wygląd, rozmiar, a nawet to, jak się zachowuje. Dzięki temu pasuje do każdej aplikacji. W dzisiejszych programach, jak WPF, te przyciski mogą mieć różne kolorowe ikony albo nawet animacje, co sprawia, że aplikacja wygląda super. Generalnie, bez przycisków użytkownik by się w aplikacji nie połapał, bo to dzięki nim możemy nawigować, zatwierdzać formularze czy otwierać nowe okna dialogowe.

Pytanie 7

Podaj przykład incydentu w miejscu pracy?

A. złe samopoczucie spowodowane przewlekłą chorobą zatrudnionego, które wystąpiło w biurze
B. kontuzja stawu skokowego, która zdarzyła się w trakcie bezpośredniej drogi do miejsca zatrudnienia
C. złamanie nogi w trakcie urlopu wypoczynkowego przyznanego przez pracodawcę
D. oparzenie dłoni, które miało miejsce podczas nieobowiązkowego szkolenia w czasie prywatnym pracownika

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
To właśnie sytuacja, gdy ktoś doznał kontuzji stawu skokowego podczas bezpośredniej drogi do pracy, jest klasycznym przykładem incydentu związanego z pracą, a konkretnie tzw. wypadku w drodze do pracy. Zgodnie z przepisami BHP oraz praktyką ubezpieczeniową, za incydent w miejscu pracy uznaje się nie tylko zdarzenia mające miejsce na terenie zakładu, ale także te występujące w drodze do lub z pracy – oczywiście pod warunkiem, że droga była bezpośrednia i nieprzerwana, bez załatwiania spraw prywatnych po drodze. Moim zdaniem ta kwestia jest często niedoceniana przez pracowników – wielu z nas zapomina, że wypadek w drodze do pracy daje podobne uprawnienia jak wypadek w zakładzie pracy, oczywiście po spełnieniu określonych wymogów formalnych, np. zgłoszenie incydentu pracodawcy, udokumentowanie miejsca i czasu zdarzenia. W praktyce wielu pracodawców i pracowników nie do końca rozumie, jakie sytuacje faktycznie podlegają pod te przepisy. Na przykład, jeśli ktoś skręcił nogę idąc prosto z domu do pracy i nie zatrzymywał się po drodze, to ten incydent kwalifikuje się jako wypadek w drodze do pracy. Warto znać te zasady, żeby nie przegapić swoich praw. Branżowe standardy, takie jak wytyczne PIP i ubezpieczycieli, jasno wskazują na obowiązek rejestrowania i analizowania takich zdarzeń, bo z punktu widzenia bezpieczeństwa pracy każde takie zdarzenie jest sygnałem do poprawy szeroko rozumianych warunków pracy, nawet jeśli zdarzy się poza samym biurem czy halą.

Pytanie 8

Jakie jest przeznaczenie polecenia "git merge"?

A. Do zakładania nowego repozytorium
B. Do usuwania zmian w repozytorium
C. Do łączenia zmian z różnych gałęzi
D. Do pobierania aktualizacji zdalnego repozytorium

Brak odpowiedzi na to pytanie.

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

W przedstawionej ramce znajduje się fragment opisu metody compile języka Java wykorzystywanej w kontekście wyrażeń regularnych. Który symbol powinien być użyty, aby znaleźć dopasowanie na końcu tekstu?

MetacharacterDescription
|Find a match for any one of the patterns separated by | as in: cat|dog|fish
.Find just one instance of any character
^Finds a match as the beginning of a string as in: ^Hello
$Finds a match at the end of the string as in: World$
\dFind a digit
\sFind a whitespace character
\bFind a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
\uxxxxFind the Unicode character specified by the hexadecimal number xxxx
Źródło https://www.w3schools.com/java/java_regex.asp dostęp 20.08.2020
A. $
B. ^
C. |
D. .

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Znak dolara $ w wyrażeniach regularnych w języku Java jest używany do oznaczenia końca ciągu znaków. Jeśli chcemy sprawdzić, czy konkretny wzorzec występuje na końcu danego tekstu, używamy właśnie tego metaznaku. Przykładowo, wyrażenie regularne World$ dopasuje tekst, w którym słowo World pojawia się na samym końcu. Jest to przydatne w wielu scenariuszach, takich jak walidacja struktury tekstu czy filtrowanie logów, gdzie ważna jest pozycja występowania wzorca. Konwencja ta jest zgodna z ogólnymi standardami regex, co czyni ją intuicyjną i uniwersalną w zastosowaniu. Dolar pełni kluczową rolę w automatyzacji procesów w przetwarzaniu tekstu, umożliwiając efektywne dopasowywanie końcowych wzorców w aplikacjach Java. Użycie $ jest zgodne z dobrymi praktykami kodowania, szczególnie w kontekście walidacji danych wejściowych, gdzie określenie końca ciągu jest często wymagane. Jest to także popularne w analizie danych, gdzie dane muszą spełniać określone kryteria co do ich zakończenia, takie jak rozszerzenia plików czy określone etykiety tekstowe.

Pytanie 10

Wartość liczby 1AF, zapisana w systemie szesnastkowym, po przeliczeniu na system dziesiętny wynosi

A. 6890
B. 431
C. 257
D. 26

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Słuchaj, liczba szesnastkowa 1AF to w systemie dziesiętnym 431. Przeliczenie robimy tak: (1 * 16^2) + (10 * 16^1) + (15 * 16^0). To jest jedna z podstawowych rzeczy, które musisz znać przy konwersji liczb. Szczególnie przydaje się to w programowaniu i ogólnie w informatyce, gdzie często mamy do czynienia z różnymi systemami liczbowymi.

Pytanie 11

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

A. AJAX
B. HTML5
C. SQL
D. CSS3

Brak odpowiedzi na to pytanie.

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

Testy mające na celu identyfikację błędów w interfejsach między modułami bądź systemami nazywane są testami

A. jednostkowymi
B. integracyjnymi
C. wydajnościowymi
D. bezpieczeństwa

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy integracyjne mają na celu wykrycie błędów w interfejsach i połączeniach między modułami lub systemami. Głównym celem tych testów jest sprawdzenie, czy różne komponenty aplikacji współpracują ze sobą zgodnie z oczekiwaniami. Testy integracyjne są przeprowadzane po testach jednostkowych, ale przed testami systemowymi. W praktyce testy te obejmują scenariusze, w których kilka modułów wymienia dane lub współdziała w ramach wspólnego procesu. Integracja jest kluczowa dla zapewnienia, że cały system działa jako spójna całość, co minimalizuje ryzyko błędów na etapie produkcji i poprawia jakość końcowego produktu. Przykładem może być test komunikacji między modułem autoryzacji użytkowników a modułem płatności w aplikacji e-commerce.

Pytanie 13

Która z wymienionych właściwości najlepiej charakteryzuje biblioteki dynamiczne?

A. Są ładowane w trakcie działania aplikacji
B. Są ładowane podczas kompilacji
C. Są statycznie dołączane do pliku wykonywalnego
D. Zawierają kod źródłowy aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Biblioteki dynamiczne, znane też jako DLL w Windows czy SO w Unix/Linux, ładują się do pamięci, gdy program działa. To super, bo dzięki temu aplikacja nie marnuje zasobów, a jak zajdzie potrzeba, to może z nich korzystać. Można też aktualizować te biblioteki bez potrzeby rekompilacji całego programu – to duża wygoda. Dzięki dynamicznemu ładowaniu kod może być współdzielony przez różne aplikacje, a to zmniejsza rozmiar plików i sprawia, że łatwiej się tym wszystkim zarządza.

Pytanie 14

Jaka jest złożoność obliczeniowa poniższego algorytmu?

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            array[i][j][k] = i + j + k;
        }
    }
}
A. O(n log n)
B. O(n²)
C. O(n³)
D. O(n)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Złożoność obliczeniowa przedstawionego algorytmu wynosi O(n³), co wynika z trzech zagnieżdżonych pętli, z których każda iteruje po n elementach. W praktyce oznacza to, że liczba operacji, które algorytm wykonuje, rośnie proporcjonalnie do sześcianu liczby n. Przykładowo, jeśli mamy dwa wymiary, złożoność będzie O(n²), ale w tym przypadku mamy trzy wymiary (i, j, k), co podwyższa złożoność do O(n³). Takie sytuacje zdarzają się często w problemach związanych z przetwarzaniem danych w trzech wymiarach, takich jak grafika komputerowa czy analiza danych 3D. W branży, dobrze jest pamiętać, że złożoność O(n³) może być nieefektywna dla dużych n, dlatego warto analizować algorytmy pod kątem ich wydajności i stosować różne techniki optymalizacji, jak na przykład podział danych czy struktury danych zmniejszające złożoność. Warto również zrozumieć, że dla dużych wartości n, czas wykonania algorytmu może być zauważalnie dłuższy, co wpływa na ogólną efektywność systemu.

Pytanie 15

Jaką strukturę danych stosuje się w algorytmie BFS (przeszukiwanie wszerz)?

A. Tablica
B. Graf
C. Zbiór
D. Kolejka

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kolejka jest strukturą danych wykorzystywaną w algorytmie BFS (przeszukiwanie wszerz), co umożliwia przetwarzanie węzłów w kolejności ich dodania – zgodnie z zasadą FIFO (First In First Out). W BFS kolejka przechowuje kolejne wierzchołki do odwiedzenia, co pozwala na eksplorację grafu poziom po poziomie. Dzięki temu BFS jest idealny do znajdowania najkrótszej ścieżki w grafach nieskierowanych oraz przeszukiwania dużych przestrzeni stanów. Kolejka gwarantuje, że każdy wierzchołek jest odwiedzany w odpowiedniej kolejności, co czyni BFS algorytmem niezawodnym i wszechstronnym w zastosowaniach takich jak nawigacja, sieci komputerowe i sztuczna inteligencja.

Pytanie 16

Jedną z zasad standardu WCAG 2.0 jest

A. ograniczanie treści na stronie przez rezygnację z używania alternatywnych tekstów dla obrazów i filmów
B. unikanie przedstawiania informacji w formie uproszczonej
C. stosowanie różnych palet kolorystycznych, w tym o wysokim kontraście
D. używanie jednego, odpowiednio dużego rozmiaru czcionki

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Stosowanie różnych palet kolorystycznych, zwłaszcza takich z wysokim kontrastem, to naprawdę kluczowa sprawa w dostępności cyfrowej. Tak mówi standard WCAG 2.0, dokładniej zasada 1 – Postrzegalność. Chodzi tu głównie o kryterium sukcesu 1.4.3 (Kontrast – minimum), które wyraźnie określa, że tekst i treść graficzna muszą być czytelne dla osób z różnymi potrzebami, np. słabszym wzrokiem albo daltonizmem. Moim zdaniem warto sobie uświadomić, jak wielka to różnica. Przykładowo, jeśli tekst na stronie jest szary na białym tle, osoby starsze lub z wadami wzroku mogą po prostu nie być w stanie nic przeczytać. W praktyce, wysokokontrastowe kombinacje, np. biały tekst na czarnym tle lub na żółtym, bardzo poprawiają dostępność strony. Widać to choćby w trybach "high contrast" w systemach Windows – często osoby pracujące długo przy komputerze z tego korzystają, bo wzrok się mniej męczy. Branżowe dobre praktyki zalecają również nie polegać wyłącznie na kolorze podczas przekazywania informacji – przykładowo, jeśli błąd w formularzu jest oznaczony tylko na czerwono, osoba z daltonizmem tego nie zauważy. To wszystko pokazuje, że kolory i kontrast to nie tylko estetyka, ale klucz do równego dostępu. Z mojego doświadczenia, gdy projektuje się strony zgodnie z WCAG, dobrze jest testować różne ustawienia kontrastu albo korzystać z narzędzi jak Colour Contrast Analyser, żeby mieć pewność, że wszyscy użytkownicy skorzystają ze strony bez problemów.

Pytanie 17

Co to jest algorytm QuickSort?

A. Algorytm wyszukiwania binarnego w posortowanej tablicy
B. Metoda kompresji danych bez strat
C. Wydajny algorytm sortowania oparty na strategii 'dziel i zwyciężaj'
D. Technika przeszukiwania grafu wszerz

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Algorytm QuickSort to jeden z najbardziej popularnych i efektywnych algorytmów sortowania, który opiera się na strategii 'dziel i zwyciężaj'. W praktyce działa w ten sposób, że wybiera element zwany pivotem (osią) i dzieli zbiór na dwie części: jeden z elementami mniejszymi od pivota, a drugi z elementami większymi. Następnie rekurencyjnie sortuje te podzbiory. QuickSort jest niezwykle szybki i wydajny, zwłaszcza dla dużych zbiorów danych, a jego średnia złożoność czasowa wynosi O(n log n). Używa się go w wielu aplikacjach, gdzie istotne jest szybkie przetwarzanie danych, takich jak sortowanie list w aplikacjach webowych czy organizacja danych w bazach. Warto jednak pamiętać, że w najgorszym przypadku, gdy pivot jest źle wybierany, złożoność może wynosić O(n^2), co występuje na przykład w przypadku już posortowanej tablicy. W kontekście praktycznym, dobre praktyki obejmują dobór odpowiedniej metody wyboru pivota, co może znacznie poprawić wydajność algorytmu.

Pytanie 18

Które z poniższych stwierdzeń najlepiej charakteryzuje tablicę asocjacyjną?

A. Tablica przechowująca dane w formie par klucz-wartość
B. Tablica, która przechowuje wyłącznie dane tekstowe
C. Tablica, która zmienia swoje wymiary w trakcie działania programu
D. Tablica, która przechowuje wartości, do których można uzyskać dostęp tylko za pomocą indeksów numerycznych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Tablica asocjacyjna to fajna rzecz, bo przechowuje dane w formie par klucz-wartość. W przeciwieństwie do zwykłych tablic, gdzie używasz numerów do indeksowania, tutaj możesz mieć różne unikalne klucze, na przykład teksty czy liczby. To naprawdę ułatwia wyszukiwanie informacji i organizowanie danych. W Pythonie nazywa się to 'słownikami', a w C++ używa się 'map'. Moim zdaniem, to świetne narzędzie do pracy z większymi zbiorami danych.

Pytanie 19

Które z poniższych twierdzeń najlepiej charakteryzuje bibliotekę w kontekście programowania?

A. Zestaw funkcji i klas, które mogą być wykorzystywane w aplikacjach
B. Zbiór zmiennych globalnych, które są dostępne w trakcie działania aplikacji
C. Zbiór kodu źródłowego, który jest stosowany wyłącznie w fazie kompilacji aplikacji
D. Plik wykonywalny, który funkcjonuje jako odrębny program

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Biblioteka w programowaniu to taka paczka różnych funkcji i klas, które można wykorzystać w wielu projektach. Dzięki nim programiści mają łatwiej, bo korzystają z gotowych rozwiązań, co oszczędza czas na pisanie aplikacji. W bibliotekach można znaleźć przeróżne moduły – od prostych funkcji matematycznych po skomplikowane narzędzia do obsługi grafiki, sieci czy baz danych. Znam parę popularnych bibliotek, takich jak React.js w JavaScript, NumPy w Pythonie czy STL w C++. Używanie bibliotek sprawia, że praca programisty jest efektywniejsza, a tworzenie bardziej złożonych aplikacji idzie szybciej, bo nie musisz wszystkiego pisać od podstaw.

Pytanie 20

Która z poniższych informacji o pojęciu obiekt jest prawdziwa?

A. obiekt jest instancją klasy
B. obiekt to typ złożony
C. obiekt oraz klasa są identyczne
D. obiekt pozwala na zdefiniowanie klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prawidłowo, obiekt w programowaniu obiektowym to konkretny egzemplarz, czyli instancja klasy. Wyobraź sobie klasę jako przepis (np. instrukcja budowy samochodu), a obiekt to już gotowy samochód wyprodukowany według tej instrukcji. W praktyce, kiedy definiujesz klasę w języku takim jak Java, C++ czy Python, tworzysz pewnego rodzaju szablon opisujący, co dany obiekt będzie mógł robić (metody) i jakie będzie miał dane (pola/atrybuty). Dopiero utworzenie instancji tej klasy, czyli wywołanie np. new Car(), powoduje, że powstaje prawdziwy, działający obiekt, z którym możesz coś zrobić – na przykład ustawić mu kolor, zapalić światła czy uruchomić silnik. Z mojego doświadczenia wynika, że właśnie rozróżnienie klasy i obiektu pozwala pisać kod bardziej uniwersalny i czytelny. W dobrych praktykach, na przykład zgodnie z zasadami SOLID, klasa powinna być zrozumiała i opisująca pewien spójny koncept, zaś obiekty powstające na jej podstawie mogą zachowywać się różnie zależnie od wprowadzonych danych. To podejście jest fundamentem programowania nowoczesnych aplikacji, bo pozwala łatwo zarządzać złożonością, testować kod i rozwijać projekty. Warto też pamiętać, że instancja klasy może mieć swój własny, unikalny stan, co odróżnia ją od samej definicji klasy. Bez tworzenia obiektów klasy nie mają praktycznego zastosowania – to właśnie obiekty wykonują zadania w programie.

Pytanie 21

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

A. Oprogramowanie uniemożliwiające dostęp do danych w celu wymuszenia zapłaty
B. Programy zbierające prywatne dane bez zgody użytkownika
C. Złośliwe aplikacje wyświetlające reklamy
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 22

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

A. obsługa wciśniętego przycisku
B. kod Java
C. kod XML
D. obsługa przycisku ekranu dotykowego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod XML jest obecnie najczęściej stosowanym formatem do definiowania wyglądu interfejsów użytkownika w takich narzędziach jak Android Studio czy różnego rodzaju designery graficzne. Kiedy projektujesz layout aplikacji mobilnej albo desktopowej, duża część nowoczesnych narzędzi tworzy właśnie pliki XML, które następnie są interpretowane przez system w czasie uruchamiania aplikacji. Ułatwia to rozdzielenie logiki aplikacji od jej prezentacji, co wydaje się fundamentalne przy większych projektach. Moim zdaniem takie podejście daje ogromne korzyści – można łatwo modyfikować wygląd bez dotykania kodu źródłowego. W praktyce, jeśli używasz np. Android Studio, zbudujesz interfejs przeciągając przyciski czy pola tekstowe, a pod spodem dostaniesz czytelny plik XML. To przyspiesza pracę, zwiększa czytelność projektu i pozwala na późniejsze automatyczne generowanie dokumentacji albo testów interfejsu. Takie standardy są rekomendowane nie tylko przez Google, ale też szeroko stosowane w innych środowiskach, jak chociażby XAML w Microsoft czy FXML w JavaFX. Przezroczystość działania tych narzędzi sprawia, że łatwiej jest pracować zespołowo, bo każdy może szybko zorientować się w strukturze UI patrząc na XML-a. Samo generowanie kodu XML przez narzędzia graficzne to duży krok w kierunku lepszej organizacji pracy i zgodności ze współczesnymi praktykami branżowymi.

Pytanie 23

Termin ryzyko zawodowe odnosi się do

A. ciężkości skutków niepożądanych zdarzeń związanych z pracą
B. zagrożenia wypadkowego, które może wystąpić w miejscu pracy
C. prawdopodobieństwa, że zdarzenia niepożądane związane z pracą spowodują straty, w szczególności negatywne skutki zdrowotne dla pracowników
D. efektów zagrożeń wypadkowych, jakie występują w miejscu zatrudnienia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pojęcie ryzyka zawodowego w branży BHP jest dość precyzyjnie zdefiniowane i, moim zdaniem, bardzo praktyczne. Chodzi tu właśnie o prawdopodobieństwo, że w wyniku zdarzeń niepożądanych w pracy pojawią się straty – najczęściej w postaci szkód zdrowotnych u pracowników, ale czasem też finansowych czy środowiskowych. To nie tylko sam fakt istnienia zagrożenia, ale ocena, czy i jak bardzo ono może się zaktualizować. W praktyce, np. w branży budowlanej czy energetycznej, ocena ryzyka zawodowego to podstawa organizacji bezpiecznej pracy. W Polsce normy PN-N-18002 i wytyczne Głównego Inspektoratu Pracy jasno mówią, że trzeba analizować zarówno prawdopodobieństwo wystąpienia zagrożenia, jak i potencjalne skutki. Co ciekawe, dla różnych zawodów i stanowisk ocena tego ryzyka może wyglądać zupełnie inaczej – czasem to analiza prostych czynności, czasem złożony audyt. Najlepsze firmy nie ograniczają się do szacowania samego zagrożenia, ale regularnie aktualizują ocenę ryzyka, szkolą pracowników i wdrażają środki zapobiegawcze. Moim zdaniem bez rzetelnej oceny ryzyka nie da się realnie podnieść bezpieczeństwa pracy – to taki fundament wszystkich dalszych działań. Warto zwracać uwagę, że ryzyko zawodowe zawsze wynika z kombinacji zagrożenia i prawdopodobieństwa, a nie tylko z obecności niebezpieczeństwa czy dotychczasowych wypadków.

Pytanie 24

Jak zrealizować definiowanie własnego wyjątku w języku C++?

A. Skorzystać z domyślnej metody obsługi błędów
B. Wykorzystać blok try z pustym blokiem catch
C. Utworzyć klasę, która dziedziczy po std::exception
D. Automatycznie wywołać funkcję throw

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Aby zdefiniować własny wyjątek w języku C++, należy stworzyć klasę dziedziczącą po standardowej klasie 'std::exception' lub jednej z jej pochodnych. Klasa ta może zawierać własne metody i pola, dostosowując obsługę błędów do specyficznych potrzeb aplikacji. Dziedziczenie z 'std::exception' umożliwia korzystanie z funkcji takich jak 'what()', która zwraca opis błędu. Dzięki temu programista może precyzyjnie określić typ i przyczynę wyjątku, co prowadzi do bardziej czytelnego i łatwiejszego w utrzymaniu kodu. Tworzenie własnych wyjątków jest szczególnie przydatne w dużych projektach, gdzie występuje potrzeba kategoryzacji i obsługi różnych typów błędów w zależności od ich źródła.

Pytanie 25

W jaki sposób można ograniczyć problemy społeczne wynikające z nadmiernego używania internetu?

A. Zwiększać czas spędzany przy ekranie
B. Całkowicie wycofać się z aktywności wirtualnych
C. Unikać spotkań z ludźmi w realnym świecie
D. Zachować równowagę pomiędzy relacjami w sieci a tymi w rzeczywistości

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Utrzymywanie równowagi między relacjami online i offline to kluczowy element zapobiegania problemom społecznym wynikającym z nadmiernego korzystania z internetu. Przeplatanie kontaktów wirtualnych z interakcjami twarzą w twarz wzmacnia więzi społeczne i poprawia umiejętności komunikacyjne. Równowaga między życiem cyfrowym a rzeczywistym pozwala unikać izolacji społecznej i wspiera rozwój empatii oraz zdolności interpersonalnych. Jest to szczególnie ważne w kontekście młodzieży, która może być bardziej podatna na negatywne skutki nadmiernej ekspozycji na treści online.

Pytanie 26

W jaki sposób można załadować tylko komponent z biblioteki React?

A. import { Component } from 'react'
B. import React.Component from 'react'
C. import Component from 'react'
D. import [ Component ] from 'react'

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Użycie składni import { Component } from 'react' to zdecydowanie najczęściej spotykany i najbardziej rekomendowany sposób importowania tylko wybranego komponentu z biblioteki React. To tzw. import nazwany, czyli dokładnie wskazujesz, który kawałek kodu chcesz wyciągnąć z całego modułu. W praktyce, jest to bardzo czytelne i pozwala na jasne zarządzanie zależnościami w pliku. Moim zdaniem ma to ogromne znaczenie w większych projektach, bo łatwo potem znaleźć, które elementy są faktycznie wykorzystywane w danym pliku. Co ważne, taka technika importowania jest w pełni zgodna ze standardami ES6, właściwie każdy nowoczesny projekt front-endowy na tym bazuje. Przykład praktyczny: jeśli chcesz stworzyć klasowy komponent React, wystarczy napisać import { Component } from 'react', a potem class MyClass extends Component {...}. Jest to nieco bardziej eleganckie niż importowanie całego obiektu React (np. import React from 'react'), zwłaszcza jeśli nie potrzebujesz całej funkcjonalności. Dodatkowo, takie rozwiązanie może wpływać pozytywnie na bundlowanie kodu, bo nie ściągasz do projektu niepotrzebnych fragmentów biblioteki. Swoją drogą, coraz częściej widać, że programiści skupiają się na minimalizowaniu importów i czytelności kodu – właśnie przez wybór takich rozwiązań.

Pytanie 27

Rozpoczęcie tworzenia procedury składowej o nazwie dodajUsera w MS SQL wymaga użycia poleceń

A. create dodajUsera procedure
B. add procedure dodajUsera
C. add dodajUsera procedure
D. create procedure dodajUsera

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polecenie 'create procedure dodajUsera' to właśnie ten sposób, w jaki w Microsoft SQL Server deklaruje się początek nowej procedury składowanej. Wynika to bezpośrednio ze składni T-SQL, gdzie słowo 'create' inicjuje tworzenie nowego obiektu w bazie danych, a 'procedure' określa typ obiektu – procedurę składowaną. Dalej podaje się nazwę, tu akurat 'dodajUsera'. Moim zdaniem, to jedno z podstawowych, ale i najważniejszych poleceń dla każdego, kto chce serio pracować z SQL Serverem, bo bez zrozumienia tej składni bardzo szybko można się pogubić nawet przy prostych operacjach. T-SQL od lat nie zmienia tej konwencji i to jest bardzo wygodne – można śmiało korzystać z tutoriali czy dokumentacji sprzed kilku wersji serwera, bo tu akurat niewiele się zmienia. Przykład praktyczny: gdybyś chciał dodać prostą procedurę, która wstawia użytkownika do tabeli, zacząłbyś właśnie tak: 'create procedure dodajUsera AS BEGIN --tutaj kod END'. Warto wiedzieć, że dobrym zwyczajem jest zawsze nazywać procedury zgodnie z tym, co robią, a nie jakoś przypadkowo, i też często dodawać prefix, np. 'usp_' (od 'user stored procedure'), żeby potem łatwo było je odróżnić od funkcji czy triggerów. Przy dużym projekcie pozwala to zachować porządek. No i nie można zapominać o wersjonowaniu takich procedur – w firmach często stosuje się repozytoria kodu SQL. Generalnie, w środowisku produkcyjnym, każda nowa procedura powinna zaczynać się właśnie od 'create procedure', bez żadnych skrótów czy zamienników.

Pytanie 28

Która z poniższych technologii jest używana do tworzenia wykresów i animacji w przeglądarce?

A. JSON
B. SVG
C. CSV
D. XML

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź SVG (Scalable Vector Graphics) jest prawidłowa, ponieważ jest to standardowy format grafiki wektorowej, który jest szeroko stosowany do tworzenia dynamicznych wykresów i animacji w przeglądarkach internetowych. SVG pozwala na łatwe skalowanie grafik bez utraty jakości, co czyni go idealnym wyborem do aplikacji internetowych, które muszą wyświetlać wykresy w różnych rozmiarach. Przykłady zastosowania SVG obejmują interaktywne wizualizacje danych, takie jak wykresy liniowe, słupkowe czy kołowe, które można zrealizować przy użyciu biblioteki JavaScript, takiej jak D3.js. Ponadto, SVG jest kompatybilne z CSS i JavaScript, co umożliwia stylizowanie oraz dodawanie interakcji do grafik. Warto również zauważyć, że SVG jest częścią specyfikacji HTML5, co podkreśla jego znaczenie w nowoczesnym tworzeniu stron internetowych. Dobrą praktyką jest także dbanie o dostępność i zapewnianie odpowiednich atrybutów, takich jak 'title' i 'desc', aby poprawić doświadczenie użytkowników niepełnosprawnych.

Pytanie 29

Która z metod zarządzania projektem jest oparta na przyrostach realizowanych w sposób iteracyjny?

A. Model spiralny
B. Model wodospadowy (waterfall)
C. Model prototypowy
D. Metodyki zwinne (Agile)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metodyki zwinne, czyli Agile, są naprawdę ciekawe, bo stawiają na iteracyjne podejście. To znaczy, że po trochu, krok po kroku realizujemy projekt, a każda iteracja dostarcza nam kawałek działającego produktu. Dzięki temu możemy łatwo dostosować się do zmieniających się wymagań klienta. W moim doświadczeniu, to świetny sposób na rozwijanie aplikacji, bo pozwala nam regularnie testować i wprowadzać zmiany. W Agile najważniejsza jest współpraca z klientem i szybkie dostarczanie wartości, co czyni ten model bardzo efektywnym, zwłaszcza w szybko zmieniających się warunkach.

Pytanie 30

Jak zostanie przedstawiony poniższy kod XAML?

Ilustracja do pytania
A. Rysunek 2
B. Rysunek 3
C. Rysunek 4
D. Rysunek 1

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W przedstawionym kodzie XAML widoczna jest struktura składająca się z kilku elementów UI ułożonych w pionowym StackLayout co skutkuje wyświetleniem ich w pionowej kolejności. Pierwszym elementem jest Entry z placeholderem Imię a kolejnym Entry z placeholderem Nazwisko co determinuje obecność dwóch pól tekstowych tak jak w Rysunku 4. Następnie w kodzie znajduje się poziomy StackLayout z etykietą Zgoda RODO i przełącznikiem ustawionym na wartość true co oznacza że przełącznik jest domyślnie włączony. To również odpowiada widokowi na Rysunku 4. Kolejny element to Slider z ustawionymi kolorami MinimumTrackColor i MaximumTrackColor co pozwala na zmianę koloru paska suwaka co również jest widoczne w Rysunku 4. Na końcu znajduje się Button z tekstem Zapisz i jest to jedyny przycisk w całym układzie co także zgadza się z Rysunkiem 4. Rozumienie kodu XAML i jego renderowania jest kluczowe w tworzeniu aplikacji mobilnych ponieważ pozwala na precyzyjne określenie wyglądu i funkcjonalności interfejsu użytkownika i jest zgodne z najlepszymi praktykami w projektowaniu UI.

Pytanie 31

Jaki modyfikator umożliwia dostęp do elementu klasy z każdego miejsca w kodzie?

A. Protected
B. Private
C. Public
D. Static

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator 'Public' umożliwia dostęp do składowych klasy z dowolnego miejsca w programie, zarówno w ramach tej samej klasy, jak i poza nią. To najbardziej otwarty modyfikator dostępu, który pozwala na tworzenie interfejsów API, umożliwiających korzystanie z publicznych metod i właściwości przez inne klasy oraz moduły. W praktyce oznacza to, że publiczne metody są widoczne globalnie, co pozwala na ich wywoływanie bez ograniczeń. Jest to przydatne w przypadkach, gdy dana funkcjonalność musi być dostępna w różnych częściach programu lub aplikacji.

Pytanie 32

Jednym z kroków przy publikacji aplikacji mobilnej w sklepie Google Play są testy Beta, które charakteryzują się tym, że są one

A. przeprowadzane na podstawie dokumentu zawierającego przypadki testowe
B. przeprowadzane przez grupę docelowych użytkowników aplikacji
C. podzielone na testy funkcjonalne, wydajnościowe oraz skalowalności
D. realizowane przez zespół testerów zatrudnionych przez firmę Google

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy Beta są kluczowym etapem w procesie publikacji aplikacji mobilnej w sklepie Google Play, ponieważ pozwalają na uzyskanie cennych informacji zwrotnych od rzeczywistych użytkowników aplikacji. W tej fazie aplikacja jest udostępniana ograniczonej grupie docelowych użytkowników, którzy są zainteresowani testowaniem oprogramowania przed jego oficjalnym wydaniem. Użytkownicy ci mają możliwość zgłaszania błędów, proponowania ulepszeń oraz oceny funkcjonalności, co jest niezwykle ważne, aby zapewnić, że produkt spełnia wymagania rynku. Przykładem zastosowania testów Beta może być aplikacja społecznościowa, która w pierwszej fazie testowania pozwala wybranej grupie użytkowników na dzielenie się swoimi doświadczeniami. Otrzymane dane są następnie analizowane w celu wprowadzenia niezbędnych poprawek przed pełnym wprowadzeniem aplikacji na rynek. Ponadto, przeprowadzanie testów Beta jest zgodne z najlepszymi praktykami w branży oprogramowania, zgodnie z metodykami Agile, które podkreślają znaczenie interakcji z użytkownikami oraz ich wkładu w rozwój produktów.

Pytanie 33

Jakie z wymienionych narzędzi pozwala na jednoczesne korzystanie z systemów BIN, DEC i HEX?

A. Przeglądarka grafów
B. Microsoft Word
C. Kalkulator systemowy
D. GIMP

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kalkulator systemowy to narzędzie, które umożliwia użytkownikom pracę z różnymi systemami liczbowymi, takimi jak system dziesiętny (DEC), binarny (BIN) oraz szesnastkowy (HEX). Jego funkcjonalność pozwala na konwersję wartości liczbowych pomiędzy tymi systemami, co jest niezwykle przydatne w kontekście programowania, inżynierii komputerowej oraz nauk przyrodniczych. Dzięki kalkulatorowi systemowemu, użytkownicy mogą wprowadzać liczby w jednym systemie, a następnie uzyskiwać ich odpowiedniki w pozostałych systemach, co znacznie ułatwia analizę danych. Na przykład, wpisując liczbę w systemie binarnym, można natychmiast zobaczyć jej reprezentację w systemie dziesiętnym i szesnastkowym, co jest kluczowe w zadaniach związanych z konwersją kodów czy obliczeniami w architekturze komputerowej. Ponadto, kalkulatory systemowe często zawierają funkcje umożliwiające przeprowadzanie bardziej skomplikowanych operacji, takich jak dodawanie czy odejmowanie w różnych systemach liczbowych, co czyni je nieocenionym narzędziem w programowaniu i obliczeniach naukowych. Narzędzia te są zgodne z powszechnie przyjętymi standardami, takimi jak IEEE 754 dla reprezentacji liczb zmiennoprzecinkowych, co zapewnia ich wysoką dokładność i niezawodność w obliczeniach.

Pytanie 34

Przedstawiono funkcjonalnie równoważne fragmenty kodu aplikacji Angular oraz React.js.

Angular
submit(f) {
    console.log(f.value); 
}
<form #f="ngForm" (ngSubmit)="submit(f)">
    <input ngModel name="tytul" type="text" id="tytul">
    <button>Dodaj</button>
</form>
React
handleSubmit = e => {
    e.preventDefault();
    console.log('tytul: ' + e.currentTarget.tytul.value);
};
render() {
    return (
        <div>
            <form onSubmit={this.handleSubmit}>
                <input type="text" id="tytul" />
                <button>Dodaj</button>
            </form>
        </div>
    );
}
A. obsługę zdarzenia przesłania formularza
B. funkcję, która wypełnia dane w formularzu podczas jego inicjalizacji
C. funkcję, która zapisuje do zmiennych f lub e dane z pola <input> formularza
D. wyświetlanie w konsoli przeglądarki danych pobranych z pól formularza w czasie rzeczywistym, gdy użytkownik je wypełnia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Oba fragmenty kodu, zarówno w Angularze jak i React.js, pokazują obsługę zdarzenia zatwierdzenia formularza. W Angularze zdarzenie submit jest obsługiwane poprzez przypisanie funkcji submit do atrybutu ngSubmit. Ta funkcja otrzymuje jako argument obiekt formularza, a następnie wypisuje jego wartość w konsoli za pomocą f.value. Jest to zgodne z dobrymi praktykami Angulara, gdzie korzysta się z dwukierunkowego wiązania danych i obiektu formularza do zarządzania danymi wejściowymi. W przypadku React.js funkcja handleSubmit jest przypisywana do zdarzenia onSubmit formularza. W tej funkcji nie tylko logujemy dane wejściowe, ale również używamy e.preventDefault(), aby zapobiec domyślnemu działaniu formularza, co jest standardową praktyką w React.js, gdzie zarządzamy stanem komponentów samodzielnie. W obu przypadkach kluczową czynnością jest reakcja na zdarzenie wysłania formularza, co pozwala na dalsze przetwarzanie danych wejściowych, walidację lub wysyłanie ich do serwera.

Pytanie 35

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 4
B. Deklaracji 3
C. Deklaracji 2
D. Deklaracji 1

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Deklaracja 1 pokazuje dokładnie taką definicję konstruktora, jaka powinna być użyta w języku C++. Nazwa klasy i konstruktora musi być identyczna, a składnia Owoc::Owoc(double waga, string nazwa) jest kanoniczna w C++ dla implementacji konstruktora poza klasą. Użycie this->waga = waga jasno wskazuje, że chodzi o przypisanie wartości z parametru do pola składowego klasy. W praktyce to jest bardzo często spotykany wzór przy pisaniu konstruktorów dla klasy, która ma kilka pól – tak można odróżnić parametry funkcji od pól klasy. Moim zdaniem warto zawsze zwracać uwagę na taki zapis, bo to pomaga unikać błędów, zwłaszcza przy większych projektach, gdzie pól może być sporo i łatwo się pomylić. W dodatku stosowanie składni this-> od razu sygnalizuje, że działamy na polach konkretnej instancji obiektu. Takie podejście jest zgodne ze wszystkimi standardami C++ i bez problemu skompiluje się w każdym środowisku. W praktyce często spotykam się z tym, że ktoś próbuje stosować inne notacje czy podpatrzone w innych językach konstrukcje, ale w C++ to właśnie taki zapis jest poprawny i klarowny dla każdego programisty. Dla czytelności kodu i łatwości utrzymania projektu, zdecydowanie polecam trzymać się tej formy. Dobrze jest też pamiętać, że w nowszych wersjach C++ można też użyć listy inicjalizacyjnej, ale tutaj przedstawiony sposób jest w pełni poprawny i zrozumiały.

Pytanie 36

Które z poniżej wymienionych afirmacji najtrafniej charakteryzuje proces interpretacji kodu?

A. Tłumaczenie kodu źródłowego na język maszynowy w czasie rzeczywistym
B. Generowanie bibliotek dynamicznych dla programu
C. Analiza struktury kodu przed tłumaczeniem
D. Tworzenie pliku wykonywalnego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Interpretacja kodu to proces tłumaczenia kodu źródłowego na język maszynowy w czasie rzeczywistym, instrukcja po instrukcji. Jest to charakterystyczne dla języków takich jak Python, JavaScript i Ruby, które używają interpreterów. Dzięki temu program jest wykonywany od razu, bez konieczności wcześniejszego generowania pliku wykonywalnego. Zaletą interpretacji jest szybka analiza i możliwość natychmiastowego testowania kodu, co przyspiesza proces debugowania i prototypowania aplikacji.

Pytanie 37

Jaka będzie zawartość zmiennej filteredItems po wykonaniu poniższego kodu?

const items = [
  { id: 1, name: 'phone', price: 500 },
  { id: 2, name: 'laptop', price: 1000 },
  { id: 3, name: 'tablet', price: 750 }
];

const filteredItems = items.filter(item => item.price > 600)
                          .map(item => item.name);
A. ['laptop', 'tablet']
B. ['phone']
C. [{id: 2, name: 'laptop', price: 1000}, {id: 3, name: 'tablet', price: 750}]
D. ['laptop', 'tablet', 'phone']

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Zmienna filteredItems zawiera tylko te elementy, których cena jest większa niż 600. W tym przypadku w tablicy items mamy trzy obiekty: 'phone' z ceną 500, 'laptop' z ceną 1000 oraz 'tablet' z ceną 750. Funkcja filter przeszukuje tablicę items i zwraca tylko te obiekty, które spełniają warunek price > 600, co daje nam 'laptop' oraz 'tablet'. Następnie, metoda map przekształca te obiekty w tablicę ich nazw, co skutkuje finalnym wynikiem ['laptop', 'tablet']. Takie podejście do filtrowania danych i mapowania ich na inne wartości jest niezwykle przydatne w programowaniu, szczególnie w pracy z danymi, gdzie często potrzebujemy wyodrębnić i przekształcić dane w bardziej użyteczne formy. Użycie metod filter i map jest zgodne z najlepszymi praktykami w JavaScript i przyczynia się do bardziej czytelnego oraz zwięzłego kodu.

Pytanie 38

Jakie jest podstawowe zadanie firewalla w systemie komputerowym?

A. Ochrona danych na poziomie aplikacji internetowych
B. Zarządzanie ruchem sieciowym i blokowanie nieautoryzowanego dostępu
C. Zapobieganie wyciekom informacji na skutek awarii systemu
D. Szyfrowanie danych przesyłanych w sieci

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Firewall to taki strażnik w sieci, który decyduje, co może wejść lub wyjść z naszego systemu. Główną jego rolą jest właśnie zarządzanie ruchem sieciowym – analizuje każde połączenie, każdy pakiet danych i na podstawie ustalonych reguł pozwala albo blokuje ruch. Z mojego doświadczenia wynika, że bez firewalla w firmowej sieci to jak zostawić otwarte drzwi na oścież, serio. To narzędzie nie tylko zatrzymuje nieautoryzowany dostęp z zewnątrz, ale czasem też może blokować ryzykowne próby połączeń wychodzących – na przykład, gdy jakiś wirus próbuje kontaktować się z serwerem złodziei danych. W praktyce najczęściej spotkasz firewalle sprzętowe w routerach firmowych oraz programowe na komputerach i serwerach. Branżowo przyjmuje się, że firewall działa na poziomie sieci (warstwa 3 i 4 modelu OSI), co jest najlepszym miejscem, żeby odsiać niepożądany ruch zanim w ogóle dotrze do cennych serwisów. Ważne jest też, że dobrze skonfigurowany firewall to podstawa każdej strategii bezpieczeństwa, zgodnie z normami ISO/IEC 27001. W sumie, moim zdaniem żaden admin nie wyobraża sobie bez niego sensownej ochrony sieci – to absolutna podstawa.

Pytanie 39

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

A. Rozwiązywanie problemów związanych z użytkowaniem aplikacji
B. Opis testów jednostkowych
C. Instrukcje dotyczące obsługi poszczególnych funkcji aplikacji
D. Opis metody instalacji aplikacji

Brak odpowiedzi na to pytanie.

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

Oznaczenie ochrony przeciwpożarowej przedstawione na symbolu wskazuje na

Ilustracja do pytania
A. punkt remote release
B. system alarmowy przeciwpożarowy
C. przełącznik zasilania
D. rozdzielnię elektryczną

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ten symbol jednoznacznie wskazuje na ręczny ostrzegacz pożarowy, będący kluczowym elementem systemu alarmowego przeciwpożarowego. W praktyce taki przycisk znajdziesz w korytarzach szkół, biur czy dużych hal, zwykle przy wyjściach ewakuacyjnych. Po naciśnięciu wywołuje on alarm w całym obiekcie, pozwalając na szybką reakcję służb oraz ewakuację osób znajdujących się w strefie zagrożenia. Moim zdaniem zrozumienie działania i lokalizacji ręcznych ostrzegaczy jest absolutnie fundamentalne dla bezpieczeństwa pożarowego każdego budynku. Zgodnie z normą PN-EN 54-11 oraz wytycznymi Państwowej Straży Pożarnej, oznaczenie to musi być dobrze widoczne, z wyraźną, czerwoną barwą tła i prostym, czytelnym symbolem. Praktyka pokazuje, że w sytuacjach krytycznych ludzie dużo szybciej reagują na jednoznaczne oznaczenia graficzne niż na same napisy. Właśnie dlatego tak bardzo przykłada się wagę do poprawnej widoczności i rozmieszczenia tych znaków. Sam system alarmowy przeciwpożarowy, którego częścią są takie przyciski, jest podstawą nie tylko ochrony ludzi, ale też minimalizowania strat materialnych, bo pozwala na natychmiastowe powiadomienie odpowiednich służb. Warto zapamiętać, że ręczne ostrzegacze są regularnie testowane podczas przeglądów PPOŻ i ich prawidłowe oznakowanie to wymóg prawny oraz element dobrej praktyki branżowej.