Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 26 marca 2026 11:44
  • Data zakończenia: 26 marca 2026 12:10

Egzamin zdany!

Wynik: 33/40 punktów (82,5%)

Wymagane minimum: 20 punktów (50%)

Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Jaką strukturę danych można zrealizować, korzystając jedynie z wymienionych poniżej metod:

push(arg) – dodaje element
pop() – usuwa ostatnio dodany element
peek() – zwraca ostatnio dodany element bez usuwania
isEmpty() – sprawdza czy istnieją dane w strukturze
A. kolejka
B. tablica
C. stos
D. drzewo binarne
Pomyłka przy tym pytaniu jest dość zrozumiała, bo wiele osób myli dostępne operacje ze strukturą, którą zamierzają użyć. Metody push, pop, peek i isEmpty wskazują wyraźnie na stos, jednak nietrudno ulec wrażeniu, że można je zastosować także w tablicy czy nawet kolejce. Problem w tym, że tablica daje bezpośredni dostęp do dowolnego elementu (indeksowanie), a tych operacji tutaj nie mamy — bez get(index) czy set(index, value) nie da się użyć jej w typowy sposób, więc zamienia się bardziej w zwykły pojemnik, niż prawdziwą tablicę. Kolejka natomiast wymaga operacji typu enqueue (dodanie na koniec) i dequeue (usunięcie z początku), czyli tzw. FIFO (First-In-First-Out), czego tutaj nie zrealizujesz samymi push i pop - one zawsze odnoszą się do końca struktury, nie do jej początku. Drzewo binarne to już zupełnie inna para kaloszy: wymaga rozbudowanych operacji na węzłach i gałęziach, a dostępne tu metody nawet nie zbliżają się do tego typu funkcjonalności — nie ma dodawania dzieci, przeszukiwania czy sprawdzania położenia w strukturze. Typowym błędem jest też utożsamianie samych nazw operacji z ogólną strukturą danych, bez zastanowienia się, jaki dokładnie model dostępu do danych one umożliwiają. Warto zapamiętać, że jeśli dostępne masz tylko push, pop, peek i isEmpty, to jesteś w świecie stosu - i tylko jego.

Pytanie 2

Jakie czynności należy wykonać, aby zrealizować zdarzenie kliknięcia na przycisk w aplikacji desktopowej?

A. Zmienić plik XAML
B. Utworzyć metodę w systemie menu
C. Zaprojektować nowy dialog modalny
D. Powiązać zdarzenie kliknięcia z odpowiednią metodą w kodzie
Podłączenie zdarzenia kliknięcia do odpowiedniej metody w kodzie to podstawowy krok w obsłudze interakcji użytkownika z przyciskiem w aplikacjach desktopowych. W środowiskach takich jak WPF (Windows Presentation Foundation), WinForms czy Qt, każda kontrolka (np. przycisk) może posiadać przypisaną metodę, która zostanie wywołana w momencie kliknięcia. Dzięki temu możliwe jest wykonywanie operacji, takich jak otwieranie nowych okien, przetwarzanie danych lub aktualizacja interfejsu użytkownika. Prawidłowa implementacja zdarzeń jest kluczowa dla funkcjonalności aplikacji i umożliwia dynamiczne reagowanie na działania użytkownika. W środowiskach takich jak Visual Studio, proces ten jest intuicyjny i często realizowany przez mechanizm 'kliknij i przeciągnij', a następnie przypisanie kodu do wygenerowanego szkieletu funkcji.

Pytanie 3

Kod XAML zaprezentowany powyżej zostanie wyświetlony jako:

Ilustracja do pytania
A. A
B. C
C. B
D. D
Wybrałeś dokładnie taką odpowiedź, jaką powinien wskazać każdy, kto dobrze rozumie XAML i układ StackLayout. Zobacz, co tu się dzieje: dwa pola Entry wyświetlają się jedno pod drugim, co daje klasyczną strukturę formularza – najpierw pole "Imię", potem "Nazwisko". Dalej mamy StackLayout z orientacją poziomą (Horizontal), więc etykieta "Zgoda RODO" oraz przełącznik Switch pojawiają się obok siebie – to bardzo typowy sposób na prezentację zgody na coś w aplikacjach, bo nie ma sensu rozdzielać tego na dwie linie. Po nich pojawia się Slider z ustawionym Value na 0.5 i kolorami MinimumTrackColor oraz MaximumTrackColor, czyli dokładnie tak jak widać na obrazku – jeden kolor po lewej, drugi po prawej i kółko pośrodku. Na końcu jest Button "Zapisz". Moim zdaniem, taki układ to wręcz klasyka budowy prostych formularzy w aplikacjach mobilnych opartych na XAML. Swoją drogą, to świetny przykład, jak StackLayout pozwala na szybkie i czytelne układanie elementów na ekranie, bez zbędnego komplikowania interfejsu. W praktyce warto jeszcze pamiętać, że oddzielenie pól Entry podnosi czytelność, a stosowanie układów poziomych sprawdza się wtedy, gdy chcesz, żeby użytkownik od razu widział etykietę i jej kontrolkę. Widać tu też dbałość o kolory i spójność wizualną. Według mnie, warto od razu testować takie formularze na różnych urządzeniach, bo StackLayout zachowuje się przewidywalnie, ale warto mieć na uwadze responsywność – no i nie zapomnij, że Slider i Switch mają swoje domyślne wartości, które można łatwo sterować z kodu.

Pytanie 4

Co oznacza pojęcie 'hoisting' w JavaScript?

A. Mechanizm zarządzania pamięcią w przeglądarce
B. Metoda ładowania skryptów z zewnętrznych źródeł
C. Proces podnoszenia deklaracji zmiennych i funkcji na górę zakresu
D. Technika optymalizacji kodu przez silnik JavaScript
Hoisting to mechanizm w JavaScript, który polega na tym, że deklaracje zmiennych i funkcji są przenoszone na górę zakresu, w którym zostały zadeklarowane. Oznacza to, że możesz używać zmiennych i funkcji przed ich faktyczną deklaracją w kodzie. Na przykład, jeśli zadeklarujesz zmienną za pomocą 'var' lub funkcję, możesz odwołać się do niej wcześniej, a JavaScript zrozumie, o co chodzi. Przykład: jeśli napiszesz 'console.log(x); var x = 5;', to nie dostaniesz błędu, ponieważ 'x' jest hoistowane na górę, jednak jej wartość będzie 'undefined' do momentu przypisania jej wartości. Zrozumienie hoistingu jest kluczowe dla pisania poprawnego kodu w JavaScript, ponieważ może to prowadzić do zaskakujących rezultatów. Warto wiedzieć, że hoisting nie działa w ten sam sposób dla deklaracji 'let' i 'const'. Te zmienne są hoistowane, ale nie mogą być używane przed ich deklaracją, co prowadzi do błędu 'Temporal Dead Zone'. Dlatego zaleca się unikanie deklaracji zmiennych w sposób, który może prowadzić do nieporozumień, i zawsze deklarować zmienne na początku zakresu, w którym będą używane.

Pytanie 5

Jakie działanie wykonuje polecenie "git pull"?

A. Pobiera zmiany z zdalnego repozytorium i scala je z lokalnym
B. Tworzy nową gałąź w repozytorium
C. Zachowuje zmiany w lokalnym repozytorium
D. Eliminuje plik z repozytorium
Polecenie 'git pull' pobiera najnowsze zmiany ze zdalnego repozytorium i scala je z lokalnym repozytorium. Jest to jedno z podstawowych poleceń w Git, pozwalające na synchronizację lokalnej kopii projektu z wersją przechowywaną w chmurze lub na serwerze. Dzięki 'git pull' programiści mogą na bieżąco aktualizować swoje repozytoria i unikać konfliktów, które mogłyby wyniknąć z pracy na nieaktualnej wersji kodu. Proces ten automatycznie łączy pobrane zmiany, co eliminuje konieczność ręcznego kopiowania plików lub komend.

Pytanie 6

Kompilator może wygenerować błąd "incompatible types", gdy

A. do zmiennej typu int przypisano wartość 243
B. w trakcie deklaracji zmiennej wystąpił błąd, zastosowano nieistniejący typ
C. funkcja oczekuje całkowitej jako argumentu, a została wywołana z napisem jako parametrem
D. funkcja zwraca typ void, a w momencie wywołania nie jest przypisana do żadnej zmiennej
Zła deklaracja zmiennej raczej spowoduje inne komunikaty o błędach, jak 'cannot find symbol', a nie 'incompatible types'. Jak przypisujesz liczbę do zmiennej typu int, to jest wszystko w porządku, więc błędu nie będzie. Pamiętaj, że funkcje typu void nie zwracają wartości, ale jeśli próbujesz coś przypisać, to dostaniesz raczej komunikat 'void type not allowed here'. To różne sprawy.

Pytanie 7

Który element dokumentacji technicznej jest istotny dla ustalenia metod ochrony danych w aplikacji?

A. System ochrony aplikacji
B. Koncepcja interfejsu użytkownika
C. Harmonogram zarządzania zadaniami
D. Opis architektury klient-serwer
Plan zarządzania zadaniami koncentruje się na harmonogramie i podziale pracy, ale nie odnosi się do ochrony danych. Opis architektury klient-serwer dotyczy modelu komunikacji między aplikacją a serwerem, ale nie precyzuje mechanizmów zabezpieczeń. Projekt interfejsu użytkownika jest kluczowy dla doświadczeń użytkowników, ale nie obejmuje bezpośrednich mechanizmów ochrony danych i aplikacji, które są uwzględniane w specyfikacji systemu zabezpieczeń.

Pytanie 8

Czym jest ochrona własności intelektualnej?

A. Zestaw przepisów dotyczących ochrony prywatności
B. Rejestr plików przechowywanych w chmurze
C. Zbiór informacji osobowych
D. Koncepcja prawa zabezpieczającego twórczość i innowacje
Własność intelektualna to zbiór praw chroniących twórczość i wynalazki, obejmujący patenty, prawa autorskie, znaki towarowe i wzory przemysłowe. Własność intelektualna pozwala twórcom na zarabianie na swoich dziełach oraz kontrolowanie, kto i w jaki sposób może z nich korzystać. W wielu krajach naruszenie praw własności intelektualnej wiąże się z poważnymi konsekwencjami prawnymi. Dla przedsiębiorstw i innowatorów ochrona własności intelektualnej jest kluczowa dla zabezpieczenia ich inwestycji oraz rozwijania nowych technologii.

Pytanie 9

W języku C++, zakładając, że przedstawiony fragment kodu poprawnie się skompiluje i zostanie wykonany, to zmiennej liczba przypisana zostanie wartość:

int liczba = rand() % 1000;
A. dowolna pseudolosowa z przedziału typu int
B. rzeczywista podzielna przez 1000
C. równa 1000
D. pseudolosowa nie większa niż 999
Linia kodu int liczba = rand() % 1000; w języku C++ używa funkcji rand() do generowania liczby pseudolosowej. Funkcja ta zwraca liczbę całkowitą z zakresu od 0 do RAND_MAX zdefiniowanego w standardowej bibliotece C++. Obliczenie rand() % 1000 wykonuje operację modulo na wygenerowanej liczbie, co oznacza, że wynik zawsze będzie liczbą z zakresu od 0 do 999. Jest to powszechna technika używana do ograniczenia zakresu wartości zwracanych przez funkcję rand() do konkretnego przedziału. Takie podejście jest często wykorzystywane do generowania pseudolosowych wartości całkowitych w określonym zakresie, co jest przydatne w wielu zastosowaniach, od prostych programów testowych po bardziej złożone aplikacje symulacyjne. Należy pamiętać, że funkcja rand() generuje liczby pseudolosowe, co oznacza, że sekwencja liczb będzie się powtarzać przy każdym uruchomieniu programu, chyba że zostanie zainicjowana za pomocą funkcji srand() z unikalnym ziarnem. Jest to zgodne z dobrymi praktykami, aby zapewnić różnorodność w generowanych liczbach pseudolosowych, zwłaszcza w kontekście testowania i symulacji komputerowych.

Pytanie 10

Co to jest debouncing w JavaScript?

A. Proces optymalizacji kodu JavaScript podczas kompilacji
B. Mechanizm zarządzania pamięcią dla zmiennych globalnych
C. Technika ograniczająca częstotliwość wywoływania funkcji poprzez opóźnienie jej wykonania
D. Metoda usuwania zduplikowanych zdarzeń w kodzie
Debouncing to technika programistyczna stosowana w JavaScript, która ma na celu ograniczenie częstotliwości wywoływania funkcji poprzez wprowadzenie opóźnienia w jej wykonaniu. Zazwyczaj jest wykorzystywana w kontekście zdarzeń, takich jak przewijanie, zmiana rozmiaru okna czy wprowadzanie danych do formularzy. Przykładowo, przy użyciu debouncingu w funkcji, która wykonuje zapytanie do serwera podczas pisania w polu tekstowym, można ustawić opóźnienie, które uniemożliwi wielokrotne wywołanie funkcji przed upływem określonego czasu. Taki zabieg pozwala na zredukowanie liczby niepotrzebnych zapytań, co z kolei zmniejsza obciążenie serwera i poprawia wydajność aplikacji. W praktyce implementacja debouncingu często korzysta z techniki setTimeout, gdzie po każdym wywołaniu funkcji z resetowaniem timera czeka się na ostatnie wywołanie przed wykonaniem funkcji. Dobrym przykładem jest sytuacja, gdy użytkownik wpisuje tekst w polu wyszukiwania: zamiast wysyłać zapytanie za każdym razem, gdy zmienia się jego zawartość, można ustawić debouncing na 300 milisekund, co pozwala na wysłanie zapytania tylko po zakończeniu pisania, gdy użytkownik przestaje wprowadzać dane.

Pytanie 11

Którą konwencję nazewnictwa najczęściej stosuje się w JavaScript?

A. PascalCase
B. snake_case
C. camelCase
D. kebab-case
CamelCase to konwencja nazewnictwa, która jest powszechnie stosowana w JavaScript, szczególnie w kontekście definiowania zmiennych i funkcji. W tej metodzie, każde nowe słowo zaczyna się dużą literą, co czyni tekst bardziej czytelnym. Przykładami mogą być zmienne takie jak `userName` czy `getUserInfo`, gdzie pierwsza część jest zapisana małymi literami, a każde kolejne słowo zaczyna się od dużej litery. Stosowanie camelCase jest zgodne z przyjętymi standardami i dobrymi praktykami w Javascript, gdzie wskazano, że zmienne i funkcje powinny być nazwane w sposób, który jasno określa ich przeznaczenie. Dzięki temu, kod staje się bardziej zrozumiały i łatwiejszy do utrzymania. Warto również zauważyć, że wiele z popularnych bibliotek i frameworków JavaScript, takich jak React czy Angular, również korzysta z tej konwencji, co sprawia, że jest to umiejętność niezbędna dla każdego programisty JavaScript. Dobrą praktyką jest również przestrzeganie tej konwencji w nazwach klas i obiektów, co further enhances readability and maintainability of the code.

Pytanie 12

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

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

Pytanie 13

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

A. 257
B. 26
C. 6890
D. 431
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 14

Co oznacza operator '===' w JavaScript?

A. Porównanie wartości i typów
B. Przypisanie wartości
C. Konkatenacja stringów
D. Porównanie wartości
Operator '===' w JavaScript jest używany do porównania wartości oraz ich typów. To znaczy, że aby dwa elementy uznano za równe, muszą mieć zarówno tę samą wartość, jak i ten sam typ. Przykładowo, porównanie liczby 5 i stringa '5' zwróci false, ponieważ różnią się typem. Używanie '===' jest zalecane w dobrych praktykach programistycznych, ponieważ eliminuje niejednoznaczności związane z równością luźną (operator '=='), która może prowadzić do nieprzewidywalnych wyników. Na przykład, '5' == 5 zwróci true, co może być mylące. Dlatego w sytuacjach, gdzie zależy nam na ścisłym porównaniu, powinno się zawsze stosować '===' dla jasności kodu i uniknięcia błędów. W kontekście profesjonalnego programowania, korzystanie z '===' zapewnia lepszą kontrolę typów danych, co jest kluczowe w większych projektach, gdzie błędy typów mogą prowadzić do poważnych problemów z debugowaniem i utrzymywaniem kodu.

Pytanie 15

Co to jest shadow DOM?

A. Mechanizm enkapsulacji kodu HTML, CSS i JavaScript w komponenty webowe
B. Technika stylizacji elementów w CSS przy użyciu cieni
C. Wirtualny DOM używany przez biblioteki jak React i Vue.js
D. Metoda renderowania grafiki 3D w przeglądarkach
Shadow DOM to technika pozwalająca na enkapsulację kodu HTML, CSS oraz JavaScript w komponentach webowych, co jest kluczowe w kontekście tworzenia aplikacji opartych na Web Components. Dzięki zastosowaniu Shadow DOM, elementy wewnętrzne komponentu są izolowane od reszty dokumentu, co eliminuje problemy z kolizjami nazw klas CSS oraz pozwala na tworzenie bardziej modularnych i wielokrotnego użytku elementów. Przykładem zastosowania Shadow DOM mogą być komponenty interfejsu użytkownika, takie jak przyciski czy karty, które zawierają własne style i logikę, nie wpływając na globalne style strony. To podejście jest wspierane przez standardy W3C i zalecane w projektach, gdzie skala i złożoność aplikacji wymaga wysokiej wydajności i organizacji kodu. Dobrze zaprojektowane komponenty z użyciem Shadow DOM mogą znacznie uprościć rozwój i utrzymanie aplikacji webowych, czyniąc je bardziej responsywnymi i dostosowanymi do różnych środowisk.

Pytanie 16

Który z wymienionych składników wchodzi w skład podstawowego wyposażenia środowiska IDE?

A. Kompilator, serwer webowy, system kontroli wersji
B. Edytor graficzny, przeglądarka kodu, narzędzia analityczne
C. Edytor tekstowy, przeglądarka internetowa, translator
D. Kompilator, edytor kodu, debugger
Kompilator, edytor kodu i debugger to podstawowe narzędzia, które stanowią fundament każdego środowiska IDE (Integrated Development Environment). Kompilator tłumaczy kod źródłowy na pliki wykonywalne, edytor kodu umożliwia tworzenie i modyfikowanie kodu, a debugger pomaga w analizowaniu i eliminowaniu błędów. Współdziałanie tych narzędzi pozwala programiście na pełny cykl tworzenia aplikacji – od pisania kodu, przez testowanie, aż po finalne wdrożenie. Dzięki integracji tych narzędzi w jednym środowisku, praca staje się bardziej efektywna i intuicyjna.

Pytanie 17

Zaprezentowany wykres ilustruje wyniki przeprowadzonych testów

Ilustracja do pytania
A. użyteczności
B. ochrony
C. funkcjonalności
D. wydajności
Wykres przedstawia czasy odpowiedzi strony internetowej co jest kluczowe w kontekście testów wydajnościowych. Testy wydajnościowe mają na celu zmierzenie jak system radzi sobie pod określonym obciążeniem i jak szybko potrafi odpowiedzieć na zapytania użytkowników. Tego typu analiza pomaga zidentyfikować potencjalne wąskie gardła w infrastrukturze IT. Przykładowo jeżeli czasy odpowiedzi DNS lub połączenia są zbyt długie może to wskazywać na potrzebę optymalizacji serwerów DNS lub infrastruktury sieciowej. Testy te są nieodłącznym elementem zapewnienia jakości oprogramowania a ich prawidłowe wykonanie wpływa na doświadczenia użytkowników końcowych. Dobra praktyka w branży IT zakłada regularne przeprowadzanie testów wydajnościowych w celu monitorowania stabilności systemu w warunkach zbliżonych do rzeczywistych. Warto również zauważyć że narzędzia takie jak JMeter czy LoadRunner są powszechnie używane do przeprowadzania takich testów co umożliwia symulację różnorodnych scenariuszy obciążenia i analizę wyników w czasie rzeczywistym.

Pytanie 18

Która technologia służy do tworzenia responsywnych stron internetowych?

A. REST API
B. WebSockets
C. Media Queries w CSS
D. Local Storage
Media Queries w CSS to technika, która pozwala na tworzenie responsywnych stron internetowych poprzez dostosowywanie stylów do różnych rozmiarów ekranów i urządzeń. Dzięki zastosowaniu reguł media queries, projektanci mogą definiować, jak elementy na stronie mają się zachowywać w zależności od szerokości ekranu, orientacji urządzenia czy jego rozdzielczości. Na przykład, można ustawić większe marginesy na dużych ekranach desktopowych, a na mniejszych urządzeniach mobilnych zredukować je, aby lepiej wykorzystać ograniczoną przestrzeń. Stosując media queries, można również zmieniać rozmiary czcionek, układ kolumn czy widoczność niektórych elementów, co jest kluczowe dla optymalizacji użytkowania na różnych platformach. Jest to częścią podejścia mobile-first, które stało się standardem w nowoczesnym web designie. Warto również zaznaczyć, że korzystanie z media queries wspiera dostępność i użyteczność stron internetowych, co jest zgodne z dobrymi praktykami branżowymi.

Pytanie 19

Jakie ma znaczenie operator "==" w języku C++?

A. Zwiększenie wartości zmiennej o 1
B. Negacja logiczna
C. Porównanie dwóch wartości
D. Przypisanie wartości do zmiennej
Operator `==` w języku C++ oraz w wielu innych językach programowania, takich jak Java, Python czy JavaScript, jest używany do porównywania dwóch wartości. Jeśli wartości są równe, zwracana jest wartość logiczna `true`, w przeciwnym razie `false`. Operator ten jest niezbędny w instrukcjach warunkowych i pętlach, umożliwiając programowi podejmowanie decyzji na podstawie porównań. Przykładem użycia jest `if (a == b)`, co oznacza: jeśli zmienna `a` jest równa zmiennej `b`, wykonaj określony blok kodu.

Pytanie 20

Wskaź kod, który spowoduje wyświetlenie okna dialogowego przedstawionego na ilustracji. Dla uproszczenia kodu, zrezygnowano z atrybutów znaczników

Ilustracja do pytania
A. kod 1
B. kod 4
C. kod 3
D. kod 2
Odpowiedź, którą wybrałeś, to kod 2, i nie ma co do tego wątpliwości. Dobrze, że zauważyłeś wszystkie elementy, które były w oknie dialogowym. W tym kodzie masz TextBox na górze, który pozwala na wpisanie tekstu. Dwa CheckBoxy po lewej stronie to te typowe pola wyboru, które też były widoczne. Po prawej stronie masz trzy RadioButtony, które tworzą grupę przycisków - to jest właśnie to, co powinno być. Na dole widoczny jest przycisk Button z napisem Test, co też jest zgodne z obrazkiem. Takie rozmieszczenie to klucz do stworzenia dobrego interfejsu. Wiesz, w praktyce w wielu aplikacjach używa się właśnie tych elementów do prostych formularzy. Jeżeli rozumiesz, jak te komponenty działają i jak je ze sobą łączyć, to naprawdę dobrze ci to pójdzie w przyszłości w tworzeniu ładnych i funkcjonalnych interfejsów.

Pytanie 21

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

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

Pytanie 22

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

A. AES
B. MD5
C. DES
D. RSA
MD5 to przykład klasycznej funkcji skrótu, czyli właśnie tej funkcji, która generuje z dowolnie długych danych wejściowych stałej długości skrót (hash). Funkcje haszujące są szeroko stosowane w informatyce, szczególnie tam, gdzie potrzebna jest szybka weryfikacja integralności danych albo przechowywanie haseł w bazie danych w sposób bezpieczny (chociaż MD5 dziś już nie poleca się do haseł przez znane luki bezpieczeństwa – lepsze są SHA-256 czy bcrypt). To, co wyróżnia funkcje skrótu jak MD5, to ich jednokierunkowość: znając wynik, praktycznie nie jesteśmy w stanie odtworzyć oryginalnych danych wejściowych, a nawet minimalnie różniące się dane dają zupełnie inne hashe. Przykład praktyczny? Sprawdzenie sumy kontrolnej pliku po pobraniu z internetu – porównujemy hash MD5 z podanym na stronie wydawcy i mamy pewność, że plik nie został podmieniony. W praktyce branżowej, zgodnie z normami bezpieczeństwa jak np. ISO/IEC 27001, funkcje haszujące są podstawą wielu procesów kryptograficznych. Moim zdaniem, znajomość takich algorytmów jak MD5, nawet jeśli już nie jest zalecany w nowych systemach, to podstawa do zrozumienia ogólnego działania funkcji skrótu i różnicy między nimi a szyfrowaniem. Często spotykałem się z myleniem tych pojęć, więc warto to dobrze rozumieć.

Pytanie 23

Jakie są różnice między konstruktorem a zwykłą metodą w klasie?

A. Konstruktor zawsze nosi tę samą nazwę co klasa i nie zwraca wartości
B. Konstruktor powinien zwracać jakąś wartość
C. Konstruktor można wywołać bez konieczności tworzenia obiektu
D. Konstruktor jest uruchamiany jedynie przez destruktor
Konstruktor różni się od zwykłych metod klasy tym, że nosi taką samą nazwę jak klasa i nie zwraca żadnej wartości, nawet `void`. Konstruktor jest wywoływany automatycznie podczas tworzenia obiektu i nie można go wywołać ręcznie jak zwykłą metodę. Jego zadaniem jest inicjalizacja pól obiektu i przygotowanie go do działania. Przykład w C++: `class Samochod { public: Samochod() { marka = "Ford"; } }`. W przeciwieństwie do innych metod konstruktor nie wymaga deklaracji typu zwracanego, co jest jedną z jego najbardziej charakterystycznych cech.

Pytanie 24

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. realizowane przez zespół testerów zatrudnionych przez firmę Google
C. przeprowadzane przez grupę docelowych użytkowników aplikacji
D. podzielone na testy funkcjonalne, wydajnościowe oraz skalowalności
Pierwsza z niepoprawnych odpowiedzi wskazuje na to, że testy Beta są wykonywane przez grupę zatrudnionych testerów z firmy Google. Jest to błędne założenie, ponieważ testy Beta są w rzeczywistości przeprowadzane przez rzeczywistych użytkowników, którzy nie są profesjonalnymi testerami. Użytkownicy ci mogą być entuzjastami technologii, a ich opinie są wartościowe, ponieważ odzwierciedlają rzeczywiste doświadczenia i oczekiwania rynku. Kolejna niepoprawna odpowiedź sugeruje, że testy Beta są podzielone na testy funkcjonalne, wydajnościowe i skalowalności. Choć te kategorie testów są istotne w cyklu życia oprogramowania, testy Beta koncentrują się głównie na ogólnym doświadczeniu użytkownika i funkcjonalności aplikacji w praktyce. Ostatnia niepoprawna odpowiedź wskazuje, że testy Beta są przeprowadzane w oparciu o dokument z przypadkami testowymi. W rzeczywistości, testy Beta są bardziej elastyczne i opierają się na rzeczywistych interakcjach użytkowników z aplikacją, co oznacza, że nie są one sztywno zdefiniowane przez dokumentację, a raczej na podstawie ich naturalnego użytkowania. Wszelkie założenia dotyczące formalnych przypadków testowych są więc mylące w kontekście testów Beta.

Pytanie 25

Co to jest Continuous Integration (CI)?

A. Protokół komunikacji między różnymi częściami aplikacji
B. Technika tworzenia aplikacji mobilnych w sposób przyrostowy
C. Praktyka automatycznego integrowania kodu w repozytorium wspólnym wraz z testami
D. Metoda ciągłego monitorowania wydajności aplikacji w produkcji
Continuous Integration (CI) to praktyka, która ma na celu automatyzację procesu integrowania kodu w repozytorium wspólnym. Główną ideą CI jest to, aby programiści regularnie dodawali swoje zmiany do głównej gałęzi kodu, co pozwala na bieżące testowanie aplikacji. Dzięki temu można szybko wykrywać i naprawiać błędy, zanim staną się one poważnym problemem. Typowym przykładem zastosowania CI jest użycie narzędzi takich jak Jenkins, GitLab CI czy Travis CI, które automatycznie uruchamiają zestaw testów po każdym wprowadzeniu zmian. Takie podejście nie tylko poprawia jakość kodu, ale również przyspiesza cykl wydania oprogramowania, co jest zgodne z najlepszymi praktykami w branży. Warto również zauważyć, że CI jest często częścią szerszego podejścia do DevOps, które integruje rozwój i operacje, aby zwiększyć efektywność całego procesu wytwarzania oprogramowania.

Pytanie 26

Jakie jest źródło błędu w podanym kodzie przez programistę?

class Dokument {
    public string nazwa;
    protected string autor;
}
// .... w kodzie funkcji main
Dokument doc = new Dokument();
Console.WriteLine(doc.autor);
A. Brak konstruktora w definicji klasy.
B. Argumenty konstruktora powinny być przekazane podczas inicjalizacji obiektu.
C. Pole autor jest niedostępne z tego poziomu.
D. Inicjalizacja obiektu została błędnie zapisana.
Brak konstruktora w definicji klasy nie jest błędem – jeśli konstruktor nie zostanie jawnie zdefiniowany, kompilator wygeneruje domyślny konstruktor bez parametrów. Błędna inicjalizacja obiektu lub brak argumentów w wywołaniu konstruktora mogą prowadzić do błędów kompilacji, ale nie mają związku z dostępem do prywatnych pól klasy. Problem polega na naruszeniu zasad dostępu do pól prywatnych, co jest rozwiązane poprzez odpowiednie mechanizmy dostępowe i stosowanie konwencji programistycznych, takich jak wzorzec projektowy getter-setter.

Pytanie 27

Jakie środowisko deweloperskie jest najczęściej wykorzystywane do budowy aplikacji na platformę Android?

A. PyCharm
B. Android Studio
C. XCode
D. Visual Studio
Android Studio to oficjalne środowisko programistyczne (IDE) do tworzenia aplikacji na system Android. Zostało opracowane przez Google i zapewnia pełne wsparcie dla języków takich jak Java, Kotlin oraz C++. Android Studio oferuje narzędzia do projektowania interfejsu użytkownika (UI), emulatory urządzeń, a także debugger i profiler, które pozwalają na testowanie i optymalizację aplikacji. IDE to jest zintegrowane z Android SDK, co ułatwia dostęp do API systemu Android oraz narzędzi takich jak ADB (Android Debug Bridge). Android Studio to kluczowe narzędzie dla deweloperów mobilnych, umożliwiające szybkie wdrażanie aplikacji na różne urządzenia oraz publikację w Google Play Store.

Pytanie 28

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

A. robak
B. rootkit
C. keylogger
D. wirus
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 29

Która z metod zarządzania projektami stawia na przejrzystość oraz wizualizację bieżących zadań?

A. Kanban
B. Agile
C. Scrum
D. Waterfall
Scrum to metoda iteracyjna, która koncentruje się na sprintach i dostarczaniu działającego produktu w krótkich cyklach, ale nie skupia się na wizualizacji pracy na poziomie takim jak Kanban. Agile to ogólna filozofia zarządzania projektami, która obejmuje różne metodyki (w tym Scrum i Kanban), ale nie koncentruje się wyłącznie na wizualizacji. Waterfall to model sekwencyjny, gdzie prace realizowane są etapami, a transparentność nie jest kluczowym elementem tego podejścia, ponieważ każda faza musi zostać zakończona przed rozpoczęciem kolejnej.

Pytanie 30

Jaką wartość zwróci funkcja napisana w języku C++, jeżeli jej argumentem wejściowym jest tablica stworzona w następujący sposób:

int tablica[6] = {3,4,2,4,10,0};

int fun1(int tab[]) {
    int wynik = 0;

    for(int i = 0; i < 6; i++)
        wynik += tab[i];
    return wynik;
}
A. 10
B. 20
C. 0
D. 23
Rozwiązując takie zadania, warto nauczyć się dokładnie patrzeć na strukturę kodu. Funkcja fun1 przyjmuje tablicę intów i sumuje jej elementy. Tu pętla for przechodzi po wszystkich sześciu indeksach – od 0 do 5. Gdy podmienisz na liczby z zadania: 3, 4, 2, 4, 10 oraz 0 – po prostu dodajesz te wartości do siebie. Suma wychodzi 23. Czyli wynik funkcji to właśnie 23. To taki bardzo typowy przykład sumowania elementów tablicy – nie tylko na lekcjach, ale praktycznie wszędzie, np. jak liczysz sumę zamówień w sklepie internetowym albo punkty gracza w grze. Jeśli chodzi o dobre praktyki w C++, to warto wiedzieć, że lepiej przekazywać tablicę z dodatkowym parametrem długości, żeby nie robić magicznych liczb jak to '6' w pętli – można się wtedy łatwo pomylić przy zmianie rozmiaru. Moim zdaniem dobrze jest od razu przyswoić sobie nawyk wykorzystywania std::vector zamiast „gołych” tablic, bo są bezpieczniejsze i elastyczniejsze. To już taki krok w stronę kodu produkcyjnego. Ale podsumowując – jeśli widzisz tak napisany kod, to zawsze patrz, ile razy pętla się wykona i jakie są wartości w tablicy. Tylko tyle i aż tyle. W praktyce ta umiejętność przekłada się na szybkie debugowanie i pisanie niezawodnych programów.

Pytanie 31

Jakie są różnice między typem łańcuchowym a typem znakowym?

A. Typ łańcuchowy obsługuje liczby całkowite, a znakowy liczby zmiennoprzecinkowe
B. Typ znakowy przechowuje pojedyncze znaki, a łańcuchowy ciągi znaków
C. Typ łańcuchowy przechowuje pojedyncze znaki, a znakowy długie ciągi znaków
D. Typ znakowy przechowuje dane logiczne, a łańcuchowy tekst
Typ znakowy (char) przechowuje pojedyncze znaki, natomiast typ łańcuchowy (string) przechowuje ciągi znaków. Różnica ta ma kluczowe znaczenie w programowaniu, ponieważ typ 'char' jest używany do operacji na pojedynczych literach, cyfrze lub symbolu, podczas gdy 'string' umożliwia przechowywanie i manipulowanie całymi wyrazami lub zdaniami. W wielu językach 'string' to bardziej złożona struktura danych, która zawiera tablicę znaków (array of characters), co pozwala na efektywną pracę z tekstem i budowanie interaktywnych aplikacji.

Pytanie 32

Do form komunikacji werbalnej zalicza się

A. mówienie
B. gestykulacja
C. wyraz twarzy
D. pozycja ciała
Mówienie to podstawowa forma komunikacji werbalnej – bez tego ciężko byłoby przekazać bardziej złożone treści, polecenia czy po prostu podzielić się informacjami w jasny i jednoznaczny sposób. Właśnie dlatego w większości branż technicznych, niezależnie czy rozmawiamy o pracy na budowie, czy w biurze projektowym, umiejętność jasnego i zrozumiałego mówienia jest często kluczowa. W praktyce komunikacja werbalna opiera się na słowach, które przekazujemy ustnie. Moim zdaniem najważniejsze jest to, że pozwala uniknąć nieporozumień i usprawnia współpracę w zespole – szczególnie gdy pracujemy przy dużych projektach, gdzie każdy detal ma znaczenie. W codziennych sytuacjach, takich jak prowadzenie spotkań, omawianie problemów technicznych czy instruowanie nowych pracowników, mówienie okazuje się nieocenione. Dodatkowo, standardy komunikacji interpersonalnej podkreślają, że skuteczny przekaz werbalny wymaga nie tylko odpowiedniego doboru słów, ale też umiejętności dostosowania tonu głosu i tempa mówienia do sytuacji. Warto też pamiętać, że mowa ludzka jest najdokładniejszym narzędziem do przekazywania informacji, bo daje możliwość dopytania, wyjaśnienia i natychmiastowej korekty, czego raczej nie da się osiągnąć tylko poprzez gesty czy mimikę. Z mojego doświadczenia wynika, że inwestowanie w rozwój umiejętności werbalnych zwraca się bardzo szybko w pracy technika czy specjalisty.

Pytanie 33

Jakie są kluczowe etapy realizacji projektu programistycznego?

A. Analiza, implementacja, testowanie, aktualizacja
B. Planowanie, analiza, implementacja, wdrożenie
C. Planowanie, projektowanie, debugowanie, konserwacja
D. Projektowanie, testowanie, aktualizacja, implementacja
Wybrałeś poprawną sekwencję etapów realizacji projektu programistycznego – to naprawdę ma kluczowe znaczenie w praktyce. Planowanie jest absolutnym fundamentem, bo pozwala zdefiniować cele, wymagania i zakres projektu. Bez porządnego planu łatwo się pogubić już na starcie, a potem robi się tylko drożej i trudniej. Następnie analiza – tutaj wchodzi się głębiej w temat: zbiera się szczegółowe wymagania, analizuje ryzyka i szuka ewentualnych problemów, które mogą pojawić się później. Implementacja to etap, gdzie programiści faktycznie piszą kod, ale – i to warto podkreślić – bez wcześniejszego solidnego planowania i analizy, ten etap bardzo często kończy się chaosem i ciągłymi poprawkami. Wdrożenie oznacza przekazanie gotowego produktu użytkownikom czy klientowi, często połączone z testami akceptacyjnymi i dokumentacją. Takie podejście jest zgodne z klasycznymi metodologiami typu waterfall, ale też w metodykach zwinnych te fazy się pojawiają, choć czasem są bardziej rozmyte – moim zdaniem, nawet w agile trzeba mieć minimum planowania i analizy, żeby nie robić rzeczy na ślepo. W prawdziwych projektach to jest właśnie ten główny szkielet pracy, do którego wszystko się sprowadza – znam sporo przykładów z branży, gdzie pominięcie choćby jednego z tych kroków kończyło się katastrofą. Dobrze jest mieć ten schemat w głowie, bo pomaga zarówno na etapie małych aplikacji, jak i dużych, wieloosobowych przedsięwzięć. Warto też pamiętać, że każdemu z tych etapów towarzyszą różne narzędzia i techniki – np. przy planowaniu często robi się diagramy Gantta, w analizie korzysta się z UML, a podczas wdrożenia dobrze mieć plan migracji i dokumentację użytkownika. Tak po prostu robi się to dobrze w świecie IT.

Pytanie 34

Jakie są różnice pomiędzy środowiskiem RAD a klasycznym IDE w kontekście aplikacji webowych?

A. RAD funkcjonuje tylko w systemach Windows
B. RAD umożliwia szybsze prototypowanie i rozwój aplikacji dzięki narzędziom wizualnym
C. RAD koncentruje się wyłącznie na budowie frontendu aplikacji
D. RAD nie wspiera żadnych języków backendowych
Rapid Application Development (RAD) to metodologia, która koncentruje się na szybkim prototypowaniu i iteracyjnym tworzeniu aplikacji. Dzięki narzędziom wizualnym RAD umożliwia programistom i projektantom szybkie budowanie interfejsów użytkownika oraz testowanie funkcjonalności aplikacji na wczesnym etapie rozwoju. RAD skraca czas potrzebny na dostarczenie gotowego produktu, co czyni go idealnym rozwiązaniem w dynamicznie zmieniających się projektach webowych. Narzędzia RAD umożliwiają także automatyczne generowanie kodu, co znacznie przyspiesza proces programowania.

Pytanie 35

Która z operacji logicznych zwróci wartość "true", gdy obie zmienne są sobie równe?

A. x || y
B. x == y
C. x && y
D. x != y
Operator `==` w języku C++ i wielu innych językach programowania (np. Python, Java, JavaScript) służy do porównywania dwóch wartości. Zwraca `true`, jeśli obie wartości są sobie równe, oraz `false`, jeśli są różne. Przykład: `if (x == y)` sprawdza, czy zmienna `x` jest równa zmiennej `y`. Operator ten jest kluczowy w instrukcjach warunkowych oraz pętlach, gdzie konieczne jest porównywanie wartości w celu podejmowania decyzji na podstawie wyniku tego porównania.

Pytanie 36

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

A. Przycisk (Button)
B. API REST
C. Strona HTML
D. Routing
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 37

Które z wymienionych pól klasy można zainicjalizować przed stworzeniem obiektu?

A. Publiczne pole
B. Prywatne pole
C. Chronione pole
D. Static pole
Pole statyczne można zainicjować przed utworzeniem obiektu klasy, ponieważ należy ono do samej klasy, a nie do jej instancji. Statyczne pola są inicjalizowane tylko raz, w momencie pierwszego użycia klasy lub jej statycznych metod. Dzięki temu można przechowywać dane wspólne dla wszystkich obiektów danej klasy, co jest kluczowe w optymalizacji pamięci i kodu. Przykładem może być licznik instancji klasy, który zwiększa swoją wartość za każdym razem, gdy tworzony jest nowy obiekt.

Pytanie 38

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

A. 50 Mbps
B. 500 Mbps
C. 400 Mbps
D. 40 Mbps
Przepustowość sieci to jeden z najważniejszych parametrów, który określa, jak szybko możemy przesyłać dane pomiędzy urządzeniami w danej infrastrukturze. W najprostszych słowach jest to ilość informacji, jaka może zostać przesłana w jednostce czasu, zazwyczaj wyrażana w bitach na sekundę (bps – bits per second). W praktyce często spotykamy skróty takie jak kbps, Mbps czy Gbps, oznaczające kolejno tysiące, miliony i miliardy bitów przesyłanych w ciągu sekundy. Aby poprawnie obliczyć przepustowość, musimy więc znać ilość przesyłanych danych oraz czas, w jakim ta transmisja się odbywa. W naszym przypadku mamy do czynienia z przesyłaniem 500 MB danych w ciągu 10 sekund. Pierwszym krokiem jest przeliczenie megabajtów (MB) na megabity (Mb), ponieważ przepustowość zawsze wyraża się w bitach. Warto przypomnieć, że 1 bajt to 8 bitów, dlatego 500 MB należy pomnożyć przez 8. W wyniku otrzymujemy 4000 megabitów (Mb). Kiedy już mamy dane w odpowiedniej jednostce, możemy przejść do drugiego kroku, czyli obliczenia przepustowości. Dzielimy 4000 megabitów przez 10 sekund, co daje 400 megabitów na sekundę (400 Mb/s). Wynik ten można również zapisać jako 400 Mbps, ponieważ obie formy zapisu oznaczają dokładnie to samo – megabity na sekundę. Ostatecznie można więc stwierdzić, że sieć, która przesyła 500 MB danych w 10 sekund, ma przepustowość 400 Mbps. To całkiem wysoki wynik, świadczący o bardzo dobrej jakości połączenia, typowej dla nowoczesnych sieci światłowodowych lub infrastruktury o dużej przepustowości. Warto też dodać, że przepustowość to nie to samo, co prędkość internetu widoczna w testach online – rzeczywista prędkość może być mniejsza z powodu opóźnień, strat pakietów czy ograniczeń sprzętowych. Mimo to, obliczenia te dobrze ilustrują, jak przeliczać jednostki i w prosty sposób określać, jak wydajna jest dana sieć.

Pytanie 39

Które z wymienionych stanowi przykład zagrożenia fizycznego w miejscu pracy?

A. Brak ergonomicznych miejsc pracy
B. Promieniowanie UV
C. Nieodpowiednie relacje w zespole
D. Obciążenie psychiczne
Przeciążenie psychiczne jest zagrożeniem psychospołecznym, a nie fizycznym – dotyczy zdrowia psychicznego i samopoczucia pracownika. Złe relacje w zespole są również zagrożeniem psychospołecznym, prowadzącym do konfliktów i obniżenia efektywności pracy. Brak ergonomicznych stanowisk pracy to zagrożenie ergonomiczne, które może prowadzić do problemów zdrowotnych, takich jak bóle pleców czy nadgarstków, ale nie jest klasyfikowane jako zagrożenie fizyczne. Zagrożenia fizyczne dotyczą głównie czynników środowiskowych wpływających bezpośrednio na ciało pracownika.

Pytanie 40

Przedstawione w filmie działania wykorzystują narzędzie

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