Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Jaką wydajność posiada sieć, która przesyła 500 MB danych w czasie 10 sekund?

A. 500 Mbps
B. 40 Mbps
C. 400 Mbps
D. 50 Mbps
Na pierwszy rzut oka mogłoby się wydawać, że 50 Mbps to rozsądny wynik, ponieważ 500 MB w 10 sekund to duża ilość danych, ale jeśli przeliczymy jednostki poprawnie, szybko zauważymy błąd. Wynik 50 Mbps oznaczałby, że w ciągu 10 sekund przesyłamy jedynie 500 megabitów, czyli około 62,5 MB danych. To znacznie mniej niż 500 MB, więc taka przepustowość byłaby zdecydowanie zbyt mała, aby przesłać taką ilość danych w podanym czasie. Z kolei odpowiedź 500 Mbps sugeruje przepustowość większą niż w rzeczywistości. Gdyby sieć miała taką wydajność, to w ciągu 10 sekund przesłałaby aż 625 MB danych (500 Mb/s × 10 s = 5000 Mb = 625 MB), czyli więcej niż w zadaniu. Oznacza to, że taka prędkość byłaby zawyżona w stosunku do faktycznej wartości. Natomiast 40 Mbps jest niepoprawne, gdyż oznaczałoby możliwość przesłania jedynie 400 megabitów w 10 sekund, co odpowiada zaledwie 50 MB danych. To prawie dziesięć razy mniej niż rzeczywista ilość danych w zadaniu, więc sieć o takiej przepustowości nie byłaby w stanie wykonać transmisji w podanym czasie. Wszystkie te błędne odpowiedzi wynikają z nieprawidłowego przeliczenia jednostek lub braku uwzględnienia faktu, że bajty należy zamienić na bity przed obliczeniem przepustowości. Tylko wynik 400 Mbps jest zgodny z zasadami i poprawnym przeliczeniem danych.

Pytanie 2

Co zostanie wyświetlone po wykonaniu poniższego kodu?

class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    return `${this.name} makes a noise.`;
  }
}

class Dog extends Animal {
  speak() {
    return `${this.name} barks.`;
  }
}

let dog = new Dog('Rex');
console.log(dog.speak());
A. undefined
B. Error: speak is not defined
C. Rex barks.
D. Rex makes a noise.
Odpowiedź "Rex barks." jest prawidłowa, ponieważ kod definiuje klasę Dog, która dziedziczy po klasie Animal. W klasie Animal mamy metodę speak(), która zwraca tekst wskazujący na dźwięk wydawany przez zwierzę. Kiedy tworzymy instancję klasy Dog, przekazujemy jej imię 'Rex'. Następnie, kiedy wywołujemy metodę speak() na obiekcie dog, zostaje użyta metoda zdefiniowana w klasie Dog, a nie ta z klasy Animal. To dlatego zwracany tekst to 'Rex barks.', co jest poprawnym i oczekiwanym wynikiem. Przykładowo, w praktycznych zastosowaniach, jeśli miałbyś różne klasy zwierząt, można by je zdefiniować w podobny sposób, gdzie każde zwierzę mogłoby mieć swoją unikalną implementację metody speak(), co wprowadza elastyczność i możliwości rozszerzalności w kodowaniu.

Pytanie 3

Jakie narzędzie służy do zarządzania wersjami?

A. Trello
B. Bugzilla
C. Jira
D. Git
Dokładnie tak – Git to obecnie najpopularniejsze narzędzie do zarządzania wersjami kodu źródłowego. Wykorzystuje się go praktycznie w każdej większej firmie IT, a nawet w małych zespołach projektowych. Git pozwala śledzić wszelkie zmiany w projekcie, przywracać starsze wersje plików czy nawet łączyć pracę wielu osób nad tym samym kodem bez ryzyka konfliktów. Największą przewagą Gita nad starszymi systemami jak SVN jest rozproszony charakter – każdy programista ma lokalną kopię całej historii projektu i może pracować offline, a dopiero potem synchronizować zmiany. Z mojego doświadczenia przechodzenie na Gita wymaga chwili nauki, ale to narzędzie daje ogromną kontrolę nad kodem i bezpieczeństwo – nie ma się co bać eksperymentowania, bo zawsze można wrócić do wcześniejszej wersji. W praktyce, na przykład na Githubie czy GitLabie, Git jest podstawą do pracy zespołowej, code review i automatycznych testów. Warto też wspomnieć, że znajomość Gita jest już niemal wymaganiem na rynku pracy, nie tylko wśród programistów, ale też administratorów, testerów czy nawet projektantów dokumentacji. Generalnie, jeśli chodzi o zarządzanie wersjami – Git to złoty standard.

Pytanie 4

Jaką kategorię reprezentuje typ danych "array"?

A. Typ danych złożony
B. Typ wskaźników
C. Typ danych prosty
D. Typ logiczny
Tablica ('array') jest przykładem złożonego typu danych, który pozwala na przechowywanie wielu wartości tego samego typu pod wspólną nazwą. Każdy element tablicy jest dostępny za pomocą indeksu, co umożliwia szybkie i efektywne operacje na dużych zbiorach danych. Tablice są szeroko wykorzystywane w programowaniu do przechowywania list, macierzy i innych struktur, gdzie konieczne jest przechowywanie dużych ilości danych tego samego rodzaju. Dzięki tablicom można zorganizować dane w sposób uporządkowany, co ułatwia ich przetwarzanie, sortowanie i wyszukiwanie.

Pytanie 5

Jakie metody pozwalają na przesłanie danych z serwera do aplikacji front-end?

A. formatu JSON
B. biblioteki jQuery
C. protokołu SSH
D. metody POST
Wśród zaproponowanych odpowiedzi pojawiło się kilka nieporozumień technicznych, które niestety są dość często spotykane u początkujących programistów. Przede wszystkim, biblioteka jQuery sama w sobie nie jest metodą przesyłania danych – to narzędzie, które może ułatwić pobieranie i wysyłanie danych na front-endzie, ale bez określonego formatu danych (np. JSON) jej obecność niewiele znaczy w kontekście komunikacji z serwerem. Moim zdaniem stąd czasem bierze się mylne przekonanie, że jQuery "przesyła dane", ale to tylko narzędzie, a nie metoda czy format wymiany informacji. Jeśli chodzi o protokół SSH, to jest on zupełnie niepowiązany z komunikacją webową – SSH służy głównie do bezpiecznego zdalnego zarządzania serwerami i nie jest wykorzystywany do przesyłania danych pomiędzy serwerem a przeglądarką. SSH dobrze się sprawdza przy pracy zdalnej na terminalu, ale nie przy typowej wymianie danych w aplikacjach webowych. Z kolei metoda POST to jeden z typów żądań HTTP, który określa sposób przesłania danych do serwera, ale nie precyzuje formatu tych danych. Możemy wysłać w POST-cie tekst, plik, dane binarne, XML czy JSON – nie jest to więc format, tylko sposób komunikacji. Bardzo często początkujący mylą metodę HTTP z formatem danych, co prowadzi do niedokładnych odpowiedzi. Odpowiednie rozróżnienie między narzędziem, protokołem, metodą żądania a formatem danych jest kluczowe w codziennej pracy webdevelopera. W praktyce to właśnie wybór formatu – a nie tylko metody żądania czy użytej biblioteki – decyduje o tym, jak łatwo aplikacje front-end i back-end będą w stanie się "dogadać". JSON jest tu najlepszym przykładem takiego uniwersalnego sposobu wymiany danych.

Pytanie 6

Jakie zasady stosuje programowanie obiektowe?

A. Rozwiązywanie problemów poprzez modelowanie ich przy pomocy klas i obiektów
B. Zastosowanie wyłącznie algorytmów heurystycznych
C. Tworzenie aplikacji z wykorzystaniem relacyjnych baz danych
D. Podział kodu na funkcje i procedury
Programowanie obiektowe polega na rozwiązywaniu problemów poprzez modelowanie ich za pomocą klas i obiektów. Klasy definiują strukturę i zachowanie obiektów, które są instancjami tych klas. Obiekty przechowują stan (dane) w polach i realizują funkcjonalność poprzez metody. Programowanie obiektowe pozwala na odwzorowanie rzeczywistych systemów, dziedziczenie cech, polimorfizm oraz hermetyzację danych, co prowadzi do bardziej modułowego i skalowalnego kodu. Przykłady języków obiektowych to C++, Java i Python.

Pytanie 7

Jakie jest wyjście działania kompilatora?

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

Która z metod zarządzania projektami jest najbardziej odpowiednia, gdy w początkowej fazie projektu zakres nie jest w pełni określony, wymagania mogą zmieniać się podczas realizacji, a także mogą wystąpić nowe potrzeby?

A. PRINCE2
B. Model kaskadowy
C. Agile
D. Model V
Agile to podejście, które w mojej ocenie świetnie sprawdza się właśnie w sytuacjach, kiedy zakres projektu nie jest jasny od samego początku albo wymagania klienta mogą się zmieniać w trakcie prac. To nie tylko teoria – branża IT, ale i coraz więcej innych, korzysta z Agile'a tam, gdzie nie da się wszystkiego przewidzieć. Główna zaleta to iteracyjność i elastyczność. Zamiast jednego dużego planu, praca dzieli się na krótkie sprinty lub iteracje, gdzie co chwilę można coś poprawić, zmienić, dodać nową funkcjonalność albo wycofać się z pomysłu, który okazał się nietrafiony. W praktyce, jak klient zmienia zdanie albo rynek wymusza inne podejście – Agile pozwala szybko reagować bez katastrofalnych opóźnień. Moim zdaniem to właśnie dlatego standardy, takie jak Scrum czy Kanban (oba w duchu Agile), są dziś tak popularne nie tylko w software, ale nawet w marketingu czy budowlance. Co ciekawe, Agile promuje współpracę całego zespołu z klientem na każdym etapie, więc ryzyko, że coś zostanie źle zrozumiane i pójdzie do produkcji, jest dużo mniejsze niż w klasycznych podejściach. Warto pamiętać, że to nie jest model totalnego chaosu – są tu zasady i dobre praktyki, ale największym atutem jest właśnie ta adaptacyjność do zmieniających się warunków projektu.

Pytanie 9

Jaką wartość przyjmie etykieta label po wykonaniu poniższego kodu, gdy zostanie on uruchomiony po naciśnięciu przycisku w aplikacji?

private void Button_click(object sender, routedEventArgs e) {
    int tmp = 0;
    for (int i=0; i<=100; i+=2) {
        tmp += i;
    }
    label.Content = tmp;
}
A. liczby parzyste z przedziału od 0 do 100
B. liczby z przedziału od 0 do 100
C. suma liczb z przedziału od 0 do 100
D. suma liczb parzystych z przedziału od 0 do 100
Kod, który został podany w pytaniu, wykorzystuje pętlę for do obliczenia sumy wszystkich liczb parzystych z przedziału od 0 do 100 włącznie. Zmienna tmp pełni tutaj rolę akumulatora, który z każdą iteracją powiększa swoją wartość o kolejną liczbę parzystą. Startujemy od zera, a dzięki i+=2 pętla przechodzi tylko przez liczby parzyste (0, 2, 4, ..., 100). To bardzo typowy sposób, żeby wyliczyć sumę konkretnego zbioru liczb – w tym przypadku parzystych z określonego zakresu. Moim zdaniem warto zauważyć, że takie podejście świetnie sprawdza się w prostych kalkulatorach, prostych analizach danych czy nawet w grach, gdzie czasem trzeba sumować tylko wybrane wartości. W praktyce, szczególnie w większych projektach, lepiej opakować takie operacje w osobne metody lub korzystać np. z funkcji agregujących LINQ w C#. Ale zasada jest ta sama – najpierw określamy, co konkretnie chcemy sumować (tutaj: liczby parzyste), a potem realizujemy to w pętli. Ten fragment kodu jest też niezłym przykładem, jak optymalnie można przechodzić przez dane, jeśli nie musimy analizować wszystkich możliwych wartości (tutaj: wystarczy co drugi krok). Takie sumowanie przydaje się w pracy z raportami, zestawieniami i w miejscach, gdzie liczy się wydajność przetwarzania danych.

Pytanie 10

Diagramem, który służy do śledzenia realizacji zadań przez członków zespołu projektowego, może być

A. Gantta
B. Venna
C. związków encji
D. aktywnosci UML
Diagram Gantta to moim zdaniem jeden z najbardziej praktycznych narzędzi używanych w zarządzaniu projektami, zwłaszcza tam, gdzie zależy nam na zobrazowaniu postępu prac. Ten diagram pozwala nie tylko zobaczyć, jakie zadania są zaplanowane na określony czas, ale też kto za nie odpowiada i jak się mają względem siebie. Osobiście uważam, że z Ganttem łatwiej ogarnąć, kiedy które zadanie się zaczyna, kiedy kończy i czy przypadkiem nie koliduje z innymi. Praktyka pokazuje, że bez takiej wizualizacji łatwo o chaos, szczególnie w większych projektach, gdzie zespół jest rozproszony lub działa zdalnie. Pracując z zespołami spotkałem się z sytuacjami, gdzie właśnie Gantta używało się na codziennych "standupach" do oceny postępu i przydzielania nowych zadań. Standardy branżowe, jak np. PMBOK czy metodyka PRINCE2, także polecają diagram Gantta do śledzenia i raportowania statusu projektu. Co ciekawe, narzędzie to jest wykorzystywane zarówno w klasycznym podejściu do zarządzania projektami, jak i coraz częściej w zespołach zwinnych, choć tam bywa trochę uproszczone. Generalnie – jak dla mnie, umiejętność czytania i tworzenia diagramów Gantta to absolutna podstawa, jeśli ktoś myśli poważnie o pracy przy projektach, niezależnie od branży.

Pytanie 11

W wyniku realizacji zaprezentowanego kodu na ekranie pojawią się:

int tablica[10];

for (int i = 0; i < 10; i++) {
    if (i % 3 != 0)
        std::cout << tablica[i] << ", ";
}
A. elementy z indeksów tablicy, które są podzielne przez 3
B. wszystkie elementy tablicy, które mają wartość nieparzystą
C. elementy tablicy o indeksach: 1, 2, 4, 5, 7, 8
D. wszystkie elementy tablicy, które są wielokrotnością 3
W tym zadaniu najważniejsze było zrozumienie warunku if oraz sposobu działania instrukcji for. Kod przechodzi po wszystkich elementach tablicy o 10 pozycjach, ale wyświetla tylko te, dla których indeks nie jest podzielny przez 3. Sprawdzenie tego realizuje się przez resztę z dzielenia: i % 3 != 0. Czyli dla i=0,3,6,9 warunek nie zostanie spełniony, więc te elementy zostaną pominięte. Zostaną więc wyświetlone elementy o indeksach 1, 2, 4, 5, 7, 8. To jest bardzo popularny patent w programowaniu, kiedy chcemy pominąć pewne elementy w tablicy lub kolekcji na podstawie prostego warunku logicznego. Często używa się podobnych konstrukcji przy analizie danych, np. przy wykluczaniu co któregoś rekordu z przetwarzania, czy też przy operacjach na grafach lub macierzach. Moim zdaniem warto zapamiętać taki sposób sprawdzania, bo pozwala pisać kod bardziej czytelny i łatwy do modyfikacji. Z mojego doświadczenia, gdy programuje się coś na konkursy albo optymalizuje zadania, takie triki z modulo przyspieszają proces myślowy. Dodam jeszcze, że domyślne wartości w tablicy typu int nie są zainicjalizowane, więc wynik jest zależny od środowiska, ale w tym pytaniu chodzi tylko o indeksy, nie wartości.

Pytanie 12

Który z paradygmatów programowania najbardziej akcentuje dziedziczenie oraz polimorfizm?

A. Programowanie funkcyjne
B. Programowanie proceduralne
C. Programowanie obiektowe
D. Programowanie strukturalne
Programowanie obiektowe (OOP) to paradygmat, który kładzie największy nacisk na dziedziczenie i polimorfizm. Dziedziczenie pozwala na tworzenie nowych klas na podstawie już istniejących, co umożliwia ponowne wykorzystanie kodu i jego rozszerzanie. Polimorfizm umożliwia definiowanie metod o tej samej nazwie, ale z różnym zachowaniem w zależności od kontekstu lub obiektu, co zwiększa elastyczność i modularność kodu. Programowanie obiektowe jest szeroko stosowane w językach takich jak Java, C++, Python czy C#, ponieważ pozwala na budowanie skalowalnych i łatwych w utrzymaniu aplikacji.

Pytanie 13

W zestawieniu zaprezentowano doświadczenie zawodowe pracowników firmy IT. Do stworzenia aplikacji front-end powinien/powinna zostać wyznaczony/a

PracownikZnajomość technologii lub programów
AnnaInkscape, Corel Draw
KrzysztofAngular
PatrykHTML, CSS
EwaDjango, .NET
A. Patryk
B. Anna
C. Ewa
D. Krzysztof
Anna zna programy graficzne jak Inkscape czy Corel Draw, które są spoko do tworzenia grafiki wektorowej, ale nie nadają się do budowy aplikacji front-end. Te narzędzia bardziej są w rękach grafików, którzy robią ilustracje i projekty wizualne, więc to nie do końca pasuje do front-endu, gdzie liczy się programowanie interakcji i logiki. Patryk ogarnia HTML i CSS, co jest podstawą do stawiania stron, ale niestety to nie wystarczy do budowy nowoczesnych aplikacji front-end. Musi znasz również frameworki JavaScript, takie jak Angular, React czy Vue.js, żeby aplikacja była interaktywna i by dało się z danymi lepiej zarządzać. Ewa ma umiejętności w Django i .NET, które są używane po stronie serwera. Django to framework w Pythonie, a .NET obsługuje różne języki, w tym C#. Te technologie są super do backendu, ale do front-endu już nie bardzo. Dlatego Ewa może być świetna w budowie serwerowej części aplikacji, ale nie w tworzeniu interfejsu użytkownika. Zrozumienie różnic między backendem a frontendem jest kluczowe, bo jeśli wybierzesz niewłaściwą osobę do zadania, mogą być kłopoty z integracją i wydajnością aplikacji. Dlatego ważne, żeby do front-endu był ktoś z odpowiednim doświadczeniem, tak jak Krzysztof, który zna Angulara.

Pytanie 14

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

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

Jakie kroki należy podjąć po wykryciu błędu w kodzie podczas testowania?

A. Naprawić błąd i przeprowadzić ponowne testy aplikacji
B. Pominąć błąd, jeżeli aplikacja funkcjonuje poprawnie
C. Zgłosić błąd użytkownikowi końcowemu
D. Usunąć moduł, który zawiera błąd
Po znalezieniu błędu w kodzie podczas testowania kluczowym krokiem jest poprawienie błędu i ponowne przetestowanie aplikacji. Taki cykl iteracyjny pozwala na eliminację błędów i zapewnienie, że aplikacja działa zgodnie z oczekiwaniami. Testowanie po każdej poprawce jest niezbędne, aby upewnić się, że wprowadzone zmiany nie wpłynęły negatywnie na inne części aplikacji. Taka praktyka jest integralną częścią Continuous Integration (CI) i Continuous Deployment (CD), które zakładają częste wdrażanie i testowanie kodu. Poprawienie błędów na wczesnym etapie rozwoju minimalizuje koszty i czas potrzebny na naprawę błędów w fazie produkcyjnej, co przyczynia się do stabilności i wysokiej jakości końcowego produktu.

Pytanie 16

Co to jest framework?

A. zbiór procedur, danych oraz złożonych typów danych używanych w kodzie źródłowym aplikacji
B. platforma programistyczna oferująca określone komponenty oraz narzucająca szkielet lub metodologię tworzenia aplikacji
C. oprogramowanie, które za pomocą metody drag and drop pozwala na stworzenie interfejsu aplikacji
D. narzędzie przeznaczone do opracowywania, edytowania, testowania i uruchamiania oprogramowania
Sporo osób myli framework z innymi narzędziami programistycznymi, co moim zdaniem wynika z tego, że wszystkie te elementy – biblioteki, IDE, gotowe komponenty – jakoś się ze sobą przeplatają w codziennej pracy. Jednak framework to pojęcie o wiele szersze niż tylko zbiór procedur, danych czy typów danych obecnych w kodzie aplikacji. Tak naprawdę framework tworzy cały szkielet pod projekt i narzuca określone reguły, przez co programista nie ma pełnej swobody, ale za to zyskuje uporządkowanie pracy. Często ludzie utożsamiają framework z narzędziami typu drag and drop, bo te też przyspieszają budowę interfejsu, ale to zupełnie inna bajka. Framework nie ogranicza się wyłącznie do warstwy wizualnej ani do samego projektowania UI – obejmuje ogólną architekturę, zarządzanie zależnościami, obsługę zapytań czy nawet bezpieczeństwo. Z kolei środowisko programistyczne (IDE) rzeczywiście służy do kodowania, testowania czy uruchamiania aplikacji, ale nie narzuca architektury, nie daje gotowych założeń projektowych. Typowy błąd myślowy to traktowanie frameworka jako „większej biblioteki” albo narzędzia, które coś ułatwia – a sedno leży właśnie w tym, że narzuca określony sposób myślenia o projekcie i pilnuje, żeby kod rozwijał się według ustalonego schematu. Przykłady jak Spring, Django czy Laravel pokazują, że framework wyznacza kierunek całej aplikacji, a nie tylko dostarcza pojedyncze funkcje czy narzędzia. W praktyce, korzystanie z frameworka to nie tylko wygoda, ale i przestrzeganie pewnych standardów, co jest bardzo cenione w profesjonalnych zespołach developerskich.

Pytanie 17

Jakie pola powinny być umieszczone w klasie nadrzędnej w strukturze dziedziczenia?

A. Pola, które są charakterystyczne jedynie dla pojedynczej klasy pochodnej
B. Pola, które są wspólne dla wszystkich klas pochodnych
C. Pola, które są tylko prywatne
D. Pola, które są wykorzystywane tylko w funkcjach statycznych
W klasie bazowej w hierarchii dziedziczenia umieszcza się pola, które są wspólne dla wszystkich klas pochodnych. Dzięki temu klasy pochodne mogą dziedziczyć te same właściwości, co eliminuje konieczność ich wielokrotnego definiowania. Jest to jedna z głównych zalet programowania obiektowego, umożliwiająca reużywalność kodu i zwiększenie spójności w projekcie. Przykładem może być klasa 'Pracownik', która zawiera pola takie jak 'imię', 'nazwisko' i 'wynagrodzenie', a klasy pochodne, takie jak 'Inżynier' czy 'Księgowy', mogą dziedziczyć te same pola, dodając jedynie specyficzne właściwości dla swojej roli.

Pytanie 18

Co to jest Service Worker w kontekście Progressive Web Apps?

A. Protokół komunikacji między przeglądarką a serwerem
B. Narzędzie do testowania wydajności aplikacji
C. Skrypt działający w tle przeglądarki, niezależnie od strony webowej
D. Usługa hostingowa dla aplikacji webowych
Service Worker to skrypt działający w tle przeglądarki, który umożliwia tworzenie bardziej zaawansowanych funkcji w aplikacjach webowych. Działa on niezależnie od głównego wątku, co oznacza, że może obsługiwać różne zadania, takie jak zarządzanie pamięcią podręczną, synchronizacja w tle czy obsługa powiadomień push. Dzięki temu, aplikacje webowe stają się bardziej responsywne i mogą działać offline, co jest kluczowe w kontekście Progressive Web Apps (PWA). Przykładem zastosowania Service Workera może być umożliwienie użytkownikowi przeglądania treści, gdy nie ma dostępu do Internetu, poprzez cachowanie zasobów na urządzeniu. Warto zaznaczyć, że Service Worker jest zgodny z wieloma przeglądarkami i stanowi istotny element w projektowaniu nowoczesnych aplikacji webowych, zgodnych z najlepszymi praktykami branżowymi, takimi jak responsywność i dostępność.

Pytanie 19

Jakie wartości może przyjąć zmienna typu boolean?

A. 1, -1
B. O oraz każdą liczbę całkowitą
C. trzy dowolne liczby naturalne
D. true, false
Zmienna typu logicznego (boolowskiego) w językach programowania, takich jak C++, Java czy Python, może przyjmować tylko dwie wartości: true (prawda) oraz false (fałsz). Te wartości są fundamentalne w logice komputerowej, ponieważ umożliwiają podejmowanie decyzji oraz kontrolowanie przepływu programu poprzez struktury warunkowe, takie jak instrukcje if, while czy for. Na przykład, w języku Python, tworząc zmienną logiczną, możemy użyć operatorów porównania, aby określić, czy dwie wartości są równe: is_equal = (5 == 5), co ustawia is_equal na true. Zmienne logiczne są zdefiniowane w standardach programowania, takich jak IEEE 754 dla reprezentacji liczb zmiennoprzecinkowych, gdzie wartość logiczna jest kluczowa dla operacji porównawczych. Dobrze zrozumiana logika boolowska jest niezbędna dla programistów, ponieważ stanowi podstawę algorytmu decyzyjnego oraz wpływa na efektywność kodu.

Pytanie 20

W programie desktopowym stworzono rozwijaną listę oraz przypisano cztery funkcje do obsługi zdarzeń tej kontrolki. Jaki komunikat pojawi się po dokonaniu wyboru w tej liście?
W XAML (uproszczona wersja):

<ComboBox SelectionChanged="Funkcja1" DragEnter="Funkcja2"
    LostFocus="Funkcja3" KeyDown="Funkcja4">
</ComboBox>
W kodzie:
private void Funkcja1(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show("Zdarzenie 1");
}
private void Funkcja2(object sender, DragEventArgs e)
{
    MessageBox.Show("Zdarzenie 2");
}
private void Funkcja3(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Zdarzenie 3");
}
private void Funkcja4(object sender, KeyEventArgs e)
{
    MessageBox.Show("Zdarzenie 4");
}
A. Zdarzenie 2
B. Zdarzenie 3
C. Zdarzenie 4
D. Zdarzenie 1
Wybrałeś dokładnie to, co trzeba. W tej sytuacji kluczowe jest rozpoznanie, że zdarzenie SelectionChanged jest wywoływane zawsze wtedy, gdy użytkownik wybierze inną pozycję z ComboBoxa. I to właśnie do tego zdarzenia przypisana jest metoda Funkcja1, która wyświetla komunikat "Zdarzenie 1". Trochę to wygląda niepozornie, ale SelectionChanged to jeden z najczęściej obsługiwanych eventów w aplikacjach desktopowych opartych na WPF czy UWP – praktycznie zawsze reagujemy na wybór użytkownika w kontrolkach ComboBox, ListBox albo nawet ListView. Z mojego doświadczenia wynika, że początkujący programiści często mylą to zdarzenie z innymi, jak LostFocus, które odpala się, gdy kontrolka traci fokus, albo z DragEnter (zupełnie inny przypadek, bo dotyczy przeciągania danych). Warto pamiętać, że KeyDown reaguje dopiero na naciśnięcie klawisza, a nie na wybór myszką. Takie rozróżnienie jest codziennością przy tworzeniu bardziej zaawansowanych interfejsów użytkownika. Praktyczna wskazówka: jeśli chcesz reagować na wybór użytkownika i np. ładować dodatkowe dane czy weryfikować coś po stronie aplikacji, to SelectionChanged jest strzałem w dziesiątkę. Standardy branżowe sugerują nie przesadzać z obsługą zbyt wielu eventów jednocześnie dla tej samej kontrolki, bo to może prowadzić do konfliktów i dziwnych zachowań UI. Mocno polecam samemu poeksperymentować – otworzyć Visual Studio, zrobić prostą aplikację WPF, podpiąć te eventy i zobaczyć, które kiedy się odpalają. Dzięki temu dużo szybciej utrwala się ta wiedza niż z samej teorii.

Pytanie 21

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. pierwsze.
B. podzielne przez wartość zmiennej check.
C. parzyste.
D. podzielne przez wartość zmiennej test.
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 22

Jakie określenie w programowaniu obiektowym odnosi się do "zmiennej klasy"?

A. Pole
B. Obiekt
C. Konstruktor
D. Metoda
Obiekt to instancja klasy, która posiada swoje pola i metody, ale sam w sobie nie jest zmienną klasy – jest to jednostka przechowująca dane i wykonująca operacje. Metoda to funkcja należąca do klasy, która definiuje zachowanie obiektu, ale różni się od pola, które przechowuje dane. Konstruktor to specjalna metoda klasy, która jest wywoływana podczas tworzenia obiektu i służy do inicjalizacji jego pól, ale sam w sobie nie jest zmienną klasy – raczej definiuje, jak te zmienne są ustawiane podczas tworzenia obiektu.

Pytanie 23

Jaki typ testów ocenia funkcjonalność aplikacji z punktu widzenia użytkownika końcowego?

A. Testy funkcjonalne
B. Testy obciążeniowe
C. Testy zgodności
D. Testy użyteczności
Testy obciążeniowe skupiają się na sprawdzaniu, jak aplikacja działa pod dużym ruchem lub obciążeniem, co pozwala ocenić jej wydajność, ale nie dotyczy to bezpośrednio doświadczeń użytkownika. Testy funkcjonalne mają na celu sprawdzenie, czy poszczególne funkcje aplikacji działają zgodnie z założeniami, ale nie badają wygody użytkowania. Testy zgodności natomiast weryfikują, czy aplikacja spełnia określone normy i standardy, co ma niewiele wspólnego z oceną użyteczności aplikacji przez użytkownika końcowego.

Pytanie 24

Który z wymienionych kroków wchodzi w skład testowania aplikacji?

A. Debugowanie kodu w celu znalezienia błędów
B. Opracowywanie interfejsu graficznego
C. Projektowanie bazy danych
D. Kompilowanie aplikacji
Debugowanie kodu w celu znalezienia błędów to jeden z kluczowych etapów testowania aplikacji. Proces ten polega na uruchamianiu programu w trybie debugowania, co pozwala na śledzenie jego działania linijka po linijce i identyfikowanie miejsc, w których występują błędy. Debugowanie umożliwia analizowanie wartości zmiennych, śledzenie przepływu programu i wykrywanie nieoczekiwanych zachowań, co jest niezbędne do usunięcia błędów i poprawy wydajności aplikacji. Narzędzia do debugowania, takie jak Visual Studio, PyCharm czy Chrome DevTools, pozwalają na dokładne testowanie kodu na różnych etapach jego rozwoju, co znacząco skraca czas naprawy błędów i zwiększa jakość oprogramowania.

Pytanie 25

Jaki typ pamięci RAM powinno się wybrać do efektywnego komputera do gier?

A. DDR3
B. DDR5
C. LPDDR4
D. DDR4
Wybór odpowiedniego rodzaju pamięci RAM jest kluczowy dla osiągnięcia maksymalnej wydajności w komputerze gamingowym. DDR5, najnowszy standard pamięci dynamicznej RAM, oferuje znaczące ulepszenia w porównaniu do swoich poprzedników. Główne różnice dotyczą prędkości, efektywności energetycznej oraz pojemności. DDR5 może oferować prędkości sięgające 8400 MT/s, co przyczynia się do szybszego transferu danych, co ma bezpośredni wpływ na wydajność gier i aplikacji wymagających wysokiej przepustowości. Ponadto, DDR5 wprowadza architekturę, która pozwala na zwiększenie ilości pamięci w jednym module, co umożliwia konfiguracje do 128 GB na pojedynczy moduł, co jest niezwykle korzystne dla graczy korzystających z bardziej wymagających tytułów. Przykłady gier, które potrafią w pełni wykorzystać możliwości DDR5 to Cyberpunk 2077 czy Call of Duty: Warzone, gdzie wydajność pamięci jest kluczowym elementem w uzyskiwaniu płynności rozgrywki. Stosowanie DDR5 nie tylko poprawia wydajność, ale również zwiększa przyszłościowość sprzętu, co sprawia, że jest to najlepszy wybór na dzisiejszym rynku komputerów gamingowych.

Pytanie 26

Co to jest automatyzacja testowania procesów?

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

Pytanie 27

Klasa Mieszkaniec zawiera atrybuty: imie, nazwisko, ulica, nrDomu, rokUrodzenia. W tej klasie umieszczono opisane poniżej konstruktory (zapisano jedynie typy argumentów). Do tworzenia obiektu za pomocą konstruktora kopiującego wykorzystany będzie konstruktor określony w punkcie

A. Mieszkaniec(string, string);
B. Mieszkaniec(string, string, string, int, int);
C. Mieszkaniec();
D. Mieszkaniec(Mieszkaniec&);
Konstruktor kopiujący to taka fajna metoda, która pozwala nam stworzyć nowy obiekt, będący kopią innego obiektu tej samej klasy. To naprawdę ważny element w programowaniu obiektowym, bo dzięki niemu możemy tworzyć nowe instancje bez konieczności ręcznego wpisywania wartości pól. Taki konstruktor kopiujący dba o to, żeby dane były spójne i integralne, co jest super istotne, zwłaszcza przy obiektach, które mają wskaźniki lub potrzebują dynamicznie przydzielanej pamięci.

Pytanie 28

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

A. obsługa przycisku ekranu dotykowego
B. kod Java
C. kod XML
D. obsługa wciśniętego przycisku
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 29

Co to jest ORM w kontekście programowania?

A. Output Rendering Module - moduł renderujący dane wyjściowe w aplikacjach
B. Organized Resource Model - model organizacji zasobów w aplikacjach webowych
C. Object-Relational Mapping - technika konwersji danych między systemami typów w relacyjnych bazach danych
D. Operational Reliability Management - zarządzanie niezawodnością operacyjną systemów
W kontekście programowania istnieje wiele terminów i technik, które mogą wprowadzać w błąd, jeśli zostaną źle zrozumiane. Na przykład, 'Operational Reliability Management' odnosi się do zarządzania niezawodnością operacyjną systemów, co jest ważne, ale nie ma bezpośredniego związku z koncepcją ORM, ponieważ skupia się na zapewnieniu ciągłości działania systemów i minimalizacji przestojów. Kolejna koncepcja, 'Organized Resource Model', sugeruje modelowanie zasobów w aplikacjach webowych, co również nie odnosi się do techniki ORM. ORM skupia się na konwersji danych między obiektami a relacyjnymi bazami danych, a nie na organizacji zasobów. Wreszcie, 'Output Rendering Module' to termin związany z wyświetlaniem danych, co również nie jest związane z ORM, który nie zajmuje się renderowaniem, a jedynie mapowaniem danych. Kluczowym błędem myślowym jest mylenie celów różnych technik i narzędzi w programowaniu. Zrozumienie, że ORM jest konkretną techniką konwersji danych, a nie zarządzania operacyjnego lub modelowania zasobów, to fundament, który pozwala właściwie zinterpretować jego zastosowanie w praktyce programistycznej. Właściwa znajomość tych terminów oraz umiejętność rozróżnienia ich funkcji jest kluczowa w profesjonalnym programowaniu, by unikać nieporozumień i wdrażać odpowiednie rozwiązania w projektach informatycznych.

Pytanie 30

W jakiej sytuacji kolekcja typu lista okaże się bardziej wydajna niż tablica?

A. Gdy liczba elementów w kolekcji jest niezmienna
B. Gdy liczba elementów w kolekcji zmienia się dynamicznie
C. Gdy mamy pewność co do dokładnego rozmiaru kolekcji przed kompilacją
D. Gdy chcemy uzyskać dostęp do elementów przy pomocy indeksu
Lista to dynamiczna struktura danych, która pozwala na efektywne dodawanie i usuwanie elementów, zwłaszcza gdy liczba elementów zmienia się w trakcie działania programu. Listy są bardziej elastyczne niż tablice, ponieważ mogą dynamicznie dostosowywać swoją wielkość bez potrzeby alokacji dodatkowej pamięci. W przypadku dynamicznych operacji, takich jak częste wstawianie i usuwanie elementów, listy są znacznie bardziej wydajne niż tablice, które wymagają przesunięcia wszystkich elementów po każdej operacji. Listy świetnie sprawdzają się w implementacji kolejek, stosów oraz w strukturach, które muszą rosnąć i kurczyć się podczas działania aplikacji.

Pytanie 31

Jedną z dolegliwości, która pojawia się u programistów w wyniku długotrwałego korzystania z myszki komputerowej lub klawiatury, objawiającą się bólami, drętwieniem oraz zaburzeniami czucia w obszarze 1-3 palca dłoni jest

A. zespół suchego oka
B. zespól cieśni kanału nadgarstka
C. kifoza
D. Dyskopatia
Zespół cieśni kanału nadgarstka to schorzenie, które powstaje w wyniku ucisku na nerw pośrodkowy w kanale nadgarstka. Jest to wąski tunel utworzony przez kości nadgarstka oraz więzadła, przez który przechodzą ścięgna oraz nerwy odpowiedzialne za czucie i ruch w dłoni. Objawy zespołu cieśni kanału nadgarstka obejmują bóle, drętwienie oraz zaburzenia czucia, szczególnie w obszarze pierwszych trzech palców ręki. Praca z myszą komputerową i klawiaturą przez długi czas, szczególnie w niewłaściwej ergonomicznej pozycji, może prowadzić do nadmiernego obciążenia i zapalenia tkanek otaczających nerw pośrodkowy. W praktyce, osoby cierpiące na to schorzenie często skarżą się na problemy z chwytaniem przedmiotów, a także na osłabienie siły uchwytu. W leczeniu zespołu cieśni kanału nadgarstka zaleca się m.in. unikanie czynników przyczynowych, stosowanie ortez, fizjoterapię oraz w niektórych przypadkach leczenie chirurgiczne. Należy również zwrócić uwagę na ergonomię stanowiska pracy, co może znacząco zredukować ryzyko wystąpienia tej dolegliwości. Zarządzanie czasem spędzanym przy komputerze oraz regularne przerwy są kluczowe w prewencji tego schorzenia.

Pytanie 32

Jakie są główne różnice między środowiskiem RAD (Rapid Application Development) a klasycznymi IDE?

A. RAD koncentruje się tylko na testowaniu programów
B. RAD funkcjonuje tylko w systemach operacyjnych Linux
C. RAD nie oferuje żadnych narzędzi do debugowania
D. RAD pozwala na szybkie tworzenie prototypów i rozwijanie aplikacji przy minimalnej ilości kodu
RAD (Rapid Application Development) to metodologia tworzenia oprogramowania, która kładzie nacisk na szybkie prototypowanie i iteracyjne podejście do rozwoju aplikacji, minimalizując czas poświęcany na pisanie kodu od podstaw. Kluczowym aspektem RAD jest możliwość szybkiego dostosowywania aplikacji do zmieniających się wymagań biznesowych oraz ciągła interakcja z klientem. Narzędzia RAD, takie jak Visual Studio, Delphi czy OutSystems, pozwalają na budowanie aplikacji przy użyciu graficznych interfejsów, gotowych komponentów i automatycznego generowania kodu, co znacząco skraca czas wprowadzenia produktu na rynek. RAD doskonale sprawdza się w przypadku projektów o krótkim cyklu życia i wymagających szybkich zmian.

Pytanie 33

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest

A. dostosowanie interfejsu użytkownika do różnych typów odbiorców
B. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
C. informowanie obiektów o modyfikacji stanu innych obiektów
D. monitorowanie interakcji użytkownika i wysyłanie wyjątków
Wszystkie pozostałe odpowiedzi są błędne z kilku powodów. Dopasowanie interfejsu użytkownika do różnych typów użytkowników nie jest funkcją wzorca Obserwator, lecz bardziej związane jest z koncepcjami UX/UI (User Experience/User Interface) i personalizacją. Chociaż interfejs może korzystać z danych powiadomień od wzorca Obserwator, sam wzorzec nie zajmuje się dostosowywaniem interfejsu do preferencji użytkownika. Obserwowanie interakcji użytkownika i wysyłanie wyjątków również nie jest celem wzorca Obserwator. Takie działania zazwyczaj są obsługiwane przez mechanizmy zdarzeń lub kontrolery, które rejestrują interakcje, ale nie mają na celu bezpośredniego monitorowania i reagowania na zmiany stanu innych obiektów. Wreszcie, obsługa funkcji synchronicznych w kodzie aplikacji jest zupełnie inną kwestią, powiązaną z asynchronicznością, obiegiem zdarzeń i obiektami Promise, a nie z tym, co oferuje wzorzec Obserwator. Wzorzec ten nie ma na celu synchronizacji, a raczej dążenie do luźnego powiązania między obiektami, co jest kluczowe dla efektywnej i elastycznej architektury aplikacji.

Pytanie 34

Co to jest shadow DOM?

A. Wirtualny DOM używany przez biblioteki jak React i Vue.js
B. Metoda renderowania grafiki 3D w przeglądarkach
C. Technika stylizacji elementów w CSS przy użyciu cieni
D. Mechanizm enkapsulacji kodu HTML, CSS i JavaScript w komponenty webowe
Zastosowanie błędnych koncepcji w kontekście Shadow DOM prowadzi do nieporozumień na temat jego funkcji. Przykładem niepoprawnego podejścia jest mylenie Shadow DOM z technikami stylizacji CSS przy użyciu cieni, co jest całkowicie innym zagadnieniem. W rzeczywistości Shadow DOM nie zajmuje się stylizacją w tradycyjnym sensie, lecz umożliwia tworzenie izolowanych instancji DOM, co jest kluczowe w kontekście wielokrotnego użycia komponentów. Innym błędnym zrozumieniem jest myślenie, że Shadow DOM jest metodą renderowania grafiki 3D, czego nie jest; techniki 3D w przeglądarkach są zazwyczaj związane z WebGL. Ponadto, wirtualny DOM, używany przez biblioteki takie jak React czy Vue.js, nie ma związku z Shadow DOM, ponieważ wirtualny DOM jest abstrakcyjną reprezentacją rzeczywistego DOM, mającą na celu optymalizację aktualizacji UI. Shadow DOM natomiast skupia się na izolacji i enkapsulacji kodu. Zrozumienie tych różnic jest kluczowe dla efektywnego wykorzystania technologii webowych, a ich ignorowanie może prowadzić do błędnych implementacji oraz zwiększenia złożoności projektów webowych. Aby skutecznie pracować z komponentami, należy znajomość Shadow DOM zintegrować z innymi technologiami, trzymając się najlepszych praktyk i standardów.

Pytanie 35

Która z wymienionych zasad jest istotna dla bezpiecznego użytkowania portali społecznościowych?

A. Regularne kontrolowanie ustawień prywatności
B. Udostępnianie jak największej ilości informacji osobowych
C. Unikanie stosowania silnych haseł do konta
D. Zgłaszanie treści, które naruszają regulamin
Regularne sprawdzanie ustawień prywatności jest kluczowym aspektem bezpiecznego korzystania z portali społecznościowych, ponieważ to właśnie te ustawienia decydują o tym, jakie informacje udostępniamy innym użytkownikom. Użytkownicy powinni być świadomi, że domyślne ustawienia prywatności często są skonfigurowane w sposób, który umożliwia szeroką dostępność ich danych osobowych. Przykładowo, wiele platform społecznościowych domyślnie ustawia profile jako publiczne, co oznacza, że każdy może zobaczyć ich zawartość. Zmieniając te ustawienia, użytkownicy mogą ograniczyć widoczność swoich postów, zdjęć, a także informacji osobistych tylko do wybranej grupy osób, co znacząco zwiększa ich bezpieczeństwo. Warto także regularnie aktualizować te ustawienia, ponieważ platformy często wprowadzają nowe funkcje, które mogą zmieniać domyślne zasady dotyczące prywatności. Zgodnie z wytycznymi RODO oraz innymi standardami ochrony danych osobowych, użytkownicy mają prawo do kontrolowania swoich informacji, co czyni regularne sprawdzanie ustawień prywatności nie tylko zaleceniem, ale również obowiązkiem każdego świadomego użytkownika internetu.

Pytanie 36

W jaki sposób określa się wypadek związany z pracą?

A. Każde zdarzenie, które wymaga interwencji technicznej w miejscu zatrudnienia
B. Każdy incydent wynikający z działania osób trzecich
C. Nagłe zdarzenie związane z pracą, powodujące uraz lub śmierć
D. Każde zdarzenie, które prowadzi do opóźnienia w wykonaniu obowiązków
Wypadek przy pracy to nagłe zdarzenie związane z wykonywaną pracą, które powoduje uraz lub śmierć pracownika. Wypadki te mogą być wynikiem zaniedbań, nieprzestrzegania zasad BHP lub nieodpowiedniego zabezpieczenia stanowiska pracy. Przykładami wypadków przy pracy są upadki z wysokości, porażenia prądem, oparzenia chemiczne lub uszkodzenia ciała przez maszyny. Pracodawca jest zobowiązany do zgłaszania każdego wypadku przy pracy, prowadzenia dochodzenia w celu ustalenia przyczyn i wdrażania działań zapobiegających powtórzeniu się podobnych sytuacji. Wypadki przy pracy są jedną z głównych przyczyn absencji oraz roszczeń pracowniczych, dlatego prewencja i edukacja w zakresie BHP są niezwykle istotne.

Pytanie 37

Co to jest JWT (JSON Web Token)?

A. Otwarty standard do bezpiecznego przekazywania informacji między stronami jako obiekt JSON
B. Protokół komunikacji między frontendem a backendem
C. Format przechowywania danych w bazach NoSQL
D. Biblioteka JavaScript do manipulacji danymi JSON

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
JWT, czyli JSON Web Token, to otwarty standard (RFC 7519), który definiuje sposób bezpiecznego przekazywania informacji między stronami jako obiekt JSON. Głównym celem JWT jest zapewnienie autoryzacji i integralności danych. Token składa się z trzech części: nagłówka, ładunku i podpisu. Nagłówek określa algorytm użyty do podpisu, ładunek zawiera dane użytkownika (np. identyfikator, role), a podpis umożliwia weryfikację, że token nie został zmieniony po jego wydaniu. Dzięki tej strukturze JWT jest popularny w aplikacjach webowych, gdzie użytkownicy muszą być autoryzowani w różnych sekcjach aplikacji. Praktycznym zastosowaniem JWT jest autoryzacja API, gdzie serwery mogą weryfikować tożsamość użytkowników na podstawie tokenów przesyłanych w nagłówkach HTTP, co zwiększa bezpieczeństwo i elastyczność w komunikacji między systemami. Warto podkreślić, że JWT powinny być używane zgodnie z najlepszymi praktykami, takimi jak stosowanie HTTPS, aby chronić dane przed przechwyceniem, oraz regularne odnawianie tokenów, aby zminimalizować ryzyko ich wykorzystywania przez osoby nieuprawnione.

Pytanie 38

Jaką rolę pełni element statyczny w klasie?

A. Ogranicza dostęp do metod publicznych w klasie
B. Automatycznie likwiduje obiekty klasy po zakończeniu działania programu
C. Pozwala na dynamiczne dodawanie nowych metod
D. Zachowuje wspólną wartość dla wszystkich instancji tej klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Składnik statyczny klasy przechowuje wartości współdzielone przez wszystkie obiekty tej klasy. Jest to jedno z najbardziej efektywnych narzędzi w programowaniu obiektowym, pozwalające na ograniczenie zużycia pamięci oraz zapewnienie spójności danych. Główna rola składnika statycznego polega na utrzymaniu jednej kopii zmiennej lub metody, która jest dostępna niezależnie od liczby instancji klasy. To oznacza, że zmiana wartości składowej statycznej jest natychmiast widoczna dla wszystkich obiektów klasy. Przykładem jest licznik instancji klasy lub konfiguracja globalna aplikacji, gdzie statyczność pozwala na scentralizowanie danych i ich jednolite zarządzanie.

Pytanie 39

Jakie jest podstawowe użycie metod wirtualnych?

A. Umożliwienie wielokrotnego dziedziczenia
B. Umożliwienie dynamicznego wiązania metod w czasie wykonania
C. Umożliwienie korzystania z metod bezpośrednio z klasy bazowej
D. Zapewnienie, że metoda działa wyłącznie na danych statycznych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metody wirtualne umożliwiają dynamiczne wiązanie metod w czasie wykonywania programu (ang. runtime). Oznacza to, że wywołanie metody zależy od rzeczywistego typu obiektu, a nie od typu wskaźnika lub referencji, za pomocą której został on wywołany. Mechanizm ten pozwala na implementację polimorfizmu, który jest jednym z kluczowych filarów programowania obiektowego. Dzięki metodom wirtualnym można uzyskać elastyczność i rozszerzalność kodu, umożliwiając klasom pochodnym dostarczanie własnych wersji metod zdefiniowanych w klasie bazowej. To prowadzi do bardziej zorganizowanego i skalowalnego kodu, ponieważ nowe funkcjonalności można dodawać, rozszerzając istniejące klasy, zamiast modyfikować kod bazowy.

Pytanie 40

Co to jest BEM w kontekście CSS?

A. Browser Extension Module - moduł rozszerzeń przeglądarki
B. Backend Encryption Method - metoda szyfrowania danych w backendzie
C. Bootstrap Element Manager - narzędzie do zarządzania elementami Bootstrap
D. Metodologia nazewnictwa klas CSS: Block, Element, Modifier

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
BEM, czyli Block, Element, Modifier, to metodologia służąca do organizacji i strukturyzacji kodu CSS, co znacząco ułatwia zarządzanie i rozwijanie projektów internetowych. W BEM każda klasa CSS jest zbudowana w sposób, który jasno definiuje jej rolę w kontekście całej aplikacji. Na przykład, blok to niezależny komponent, taki jak 'navbar' czy 'button', element to część bloku, która nie ma sensu sama w sobie, jak 'navbar__item', a modyfikator wskazuje na różne stany lub warianty bloku lub elementu, jak 'button--primary' lub 'button--disabled'. Zastosowanie BEM pozwala na lepszą czytelność kodu oraz unikanie konfliktów nazw, co jest kluczowe w dużych projektach. Praktyka ta jest szeroko stosowana w branży, a wiele frameworków CSS, takich jak Bootstrap, przyjmuje zasady BEM dla swoich komponentów, co wspiera stworzenie spójnego i łatwego w utrzymaniu stylu. Zrozumienie BEM jest fundamentem dla programistów front-end, ponieważ pozwala na efektywniejszą współpracę w zespole oraz lepszą organizację kodu.