Wyniki egzaminu

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

Egzamin zdany!

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

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

Jakie jest najważniejsze właściwość algorytmów szyfrowania symetrycznego?

A. Szyfrowanie wyłącznie tekstowych plików
B. Zastosowanie odmiennych kluczy do szyfrowania i deszyfrowania
C. Funkcjonowanie bez użycia klucza
D. Zastosowanie identycznego klucza do szyfrowania oraz deszyfrowania
Algorytmy szyfrowania symetrycznego to takie, które używają tego samego klucza do szyfrowania i deszyfrowania danych. To jedna z najstarszych metod i, co ważne, bardzo często stosowanych, bo działa dość szybko i nie wymaga wielkich zasobów. Przykłady, które na pewno słyszałeś, to AES i DES. Symetryki są super w komunikacji sieciowej, przy przechowywaniu danych, a także w różnych protokołach bezpieczeństwa. Fajnie, że są szybkie, ale z drugiej strony trzeba pamiętać o tym, żeby klucz był bezpiecznie przechowywany, bo to może stanowić nie lada problem.

Pytanie 2

Jakie znaczenie ma określenie "klasa zaprzyjaźniona" w kontekście programowania obiektowego?

A. Klasa, która nie ma możliwości zawierania metod statycznych
B. Klasa, w której wszystkie komponenty są publiczne
C. Klasa, która może być dziedziczona przez inne klasy
D. Klasa, która ma dostęp do prywatnych i chronionych elementów innej klasy
Klasa zaprzyjaźniona (ang. 'friend class') to klasa, która ma dostęp do prywatnych i chronionych składowych innej klasy, dzięki specjalnej deklaracji 'friend' wewnątrz tej klasy. Jest to kluczowe narzędzie w programowaniu obiektowym, które umożliwia ściślejszą współpracę między klasami, jednocześnie zapewniając hermetyzację kodu w miejscach, gdzie jest to wymagane. Używanie klas zaprzyjaźnionych umożliwia bardziej efektywne zarządzanie zależnościami między klasami, co jest istotne w dużych projektach programistycznych. Klasy zaprzyjaźnione są często stosowane w bibliotekach standardowych i frameworkach, pozwalając na eleganckie rozwiązania problemów związanych z ukrywaniem implementacji i udostępnianiem tylko niezbędnych fragmentów kodu innym komponentom systemu.

Pytanie 3

W klasie o nazwie samochod przypisano atrybuty: marka, rocznik, parametry[]. Atrybuty te powinny zostać zdefiniowane jako

A. metody
B. funkcje
C. pola
D. interfejsy
Wydaje mi się, że często początkujący mają problem z rozróżnieniem między polami, metodami a funkcjami, szczególnie że w niektórych językach te pojęcia się trochę mieszają. Funkcje i metody służą do wykonywania operacji – czyli do działania, modyfikowania czegoś, wyliczania, a nie do przechowywania danych. Jeśli próbujesz zrobić z ‘marka’ czy ‘rocznik’ funkcję lub metodę, tracisz całą strukturę danych, bo te wartości powinny być częścią obiektu – czyli być przechowywane jako pola. Interfejsy to zupełnie inna bajka – one opisują, co klasa powinna potrafić (czyli jakie metody ma mieć), ale same nie przechowują żadnych danych. To tak jakbyś powiedział, że samochód jest instrukcją obsługi, a nie fizycznym przedmiotem z konkretnymi atrybutami. Typowym błędem jest też mylenie pojęcia 'parametry' jako argumentów funkcji – tutaj chodzi o właściwości opisujące obiekt, więc nie pasuje to do funkcji ani metod. Dopiero po zrozumieniu, że pola są miejscem przechowywania stanu obiektu, można dobrze zaprojektować klasę oddającą realny obiekt z rzeczywistości. W praktyce, złe przypisanie atrybutów do funkcji czy interfejsów skutkuje chaosem w kodzie, trudnościami w utrzymaniu aplikacji oraz problemami z rozwojem projektu. Pola są po prostu fundamentem do budowania logiki obiektowej i każda próba ich zastąpienia innymi mechanizmami rodzi niepotrzebne komplikacje.

Pytanie 4

Jakie kwestie związane z percepcją są uwzględnione w rekomendacjach standardu WCAG 2.0?

A. zapewnienia odpowiedniego czasu na zapoznanie się i przetworzenie informacji
B. prezentacji elementów interfejsu użytkownika
C. jasności i dokładności w dostarczonych treściach na stronie
D. umożliwienia interakcji między elementami użytkownika za pomocą klawiatury
Odpowiedzi odnoszące się do zapewnienia odpowiedniego czasu na zapoznanie się z informacjami, umożliwienia interakcji poprzez klawiaturę czy jasności i dokładności treści są ważne w kontekście dostępności stron, ale nie dotyczą bezpośrednio percepcji według standardu WCAG 2.0. Często zdarza się, że osoby uczące się mylą pojęcia percepcji z innymi zasadami WCAG, na przykład zrozumiałością (understandable) czy funkcjonalnością (operable). Percepcja w WCAG skupia się na tym, jak treści są postrzegane przez zmysły – głównie wzrok i słuch, ale czasem też dotyk, gdy mowa np. o wyświetlaczach brajlowskich. Zapewnienie odpowiedniego czasu i interakcji klawiaturą to typowe wymagania dla użytkowników z ograniczeniami motorycznymi, i chociaż są one bardzo istotne, to WCAG klasyfikuje je w innych kategoriach niż percepcja. Jasność i dokładność treści to cecha istotna dla zrozumiałości, jednak nie gwarantuje, że użytkownik w ogóle tę treść zauważy lub rozpozna – do tego potrzebna jest właśnie prawidłowa prezentacja elementów interfejsu. Tu najczęściej pojawia się błąd myślowy: zakłada się, że jak coś jest napisane jasno, to każdy to zobaczy i zrozumie, ale wielu użytkowników ma problemy z odbiorem samych wizualnych aspektów strony. WCAG 2.0 podkreśla, żeby nie polegać tylko na jednym kanale percepcji, np. kolorze, dźwięku czy obrazie. Dopiero dbałość o prezentację elementów interfejsu – kontrast, czytelność, alternatywy tekstowe – sprawia, że strona jest dostępna percepcyjnie. Warto zapamiętać, że kategorie WCAG są celowo podzielone właśnie w ten sposób, aby każda istotna kwestia była rozpatrywana osobno i nie mieszana z innymi.

Pytanie 5

Jakiego typu funkcja jest tworzona poza klasą, ale ma dostęp do jej prywatnych i chronionych elementów?

A. Destruktor
B. Metoda statyczna
C. Funkcja zaprzyjaźniona
D. Konstruktor
Funkcja zaprzyjaźniona to specjalny typ funkcji, który jest deklarowany jako 'friend' w ciele klasy, co pozwala jej na dostęp do prywatnych i chronionych składowych tej klasy. Chociaż funkcja zaprzyjaźniona jest definiowana poza klasą, może operować na jej wewnętrznych danych, co czyni ją bardzo użytecznym narzędziem w programowaniu obiektowym. Tego rodzaju funkcje są często wykorzystywane w przypadkach, gdy konieczne jest współdziałanie dwóch klas lub funkcji narzędziowych, które muszą manipulować danymi wewnętrznymi klasy, ale nie powinny być jej metodami członkowskimi. Dzięki funkcjom zaprzyjaźnionym można zapewnić elastyczność w dostępie do danych przy jednoczesnym zachowaniu hermetyzacji klasy. Przykładem może być przeciążenie operatorów, np. operator +, który musi mieć dostęp do prywatnych składowych obu operandów.

Pytanie 6

Co zostanie wypisane w konsoli po wykonaniu poniższego kodu?

let i = 0;
while (i < 5) {
  i++;
  if (i === 3) continue;
  console.log(i);
}
A. 1, 2, 4, 5
B. 0, 1, 2, 4, 5
C. 1, 2, 3, 4, 5
D. 0, 1, 2, 3, 4
W przypadku pozostałych odpowiedzi można zauważyć, że wynikają z nieporozumień dotyczących działania pętli oraz instrukcji sterującej continue. W odpowiedzi sugerującej, że w konsoli zostaną wypisane liczby 0, 1, 2, 4, 5, występuje założenie, że wartość początkowa zmiennej i (czyli 0) również zostanie wypisana, co jest nieprawdziwe. Zmienna i jest zwiększana przed jej wypisaniem, więc jej początkowa wartość nie zostaje uwzględniona. W kolejnej opcji, gdzie podano 1, 2, 3, 4, 5, zauważyć można, że liczba 3 została wypisana, co jest sprzeczne z logiką zastosowaną w kodzie, ponieważ w momencie, gdy i równa się 3, instrukcja continue przerywa bieżącą iterację pętli, pomijając kod wypisujący. Również myśląc o odpowiedzi, która sugeruje, że w konsoli pojawią się liczby 1, 2, 3, 4, 5, można zauważyć, że pominięcie wartości 3 jest kluczowym momentem, który prowadzi do błędnego wniosku. Widać tutaj typowe błędy myślowe, polegające na nieprzemyślanej interpretacji pętli oraz działania instrukcji warunkowych. Aby poprawnie zrozumieć, jak działają pętle i instrukcje w JavaScript, warto poświęcić czas na eksperymentowanie z kodem oraz jego analizowanie, aby dostrzec, jakie konsekwencje mają poszczególne komendy i jakie wartości zmiennych są faktycznie wypisywane.

Pytanie 7

Jakie elementy powinny być ujęte w dokumentacji programu?

A. Opis funkcji, klas i zmiennych w kodzie
B. Szczegóły dotyczące konfiguracji serwera
C. Strategia marketingowa aplikacji
D. Zestawienie błędów zidentyfikowanych w trakcie testów
Opis funkcji, klas i zmiennych w kodzie to kluczowy element dokumentacji programu. Tego rodzaju dokumentacja pozwala na lepsze zrozumienie struktury aplikacji, jej logiki biznesowej oraz wzajemnych zależności pomiędzy poszczególnymi komponentami. Dokumentacja techniczna obejmuje szczegółowe informacje na temat implementacji, interfejsów API, schematów baz danych oraz sposobów integracji z innymi systemami. Dzięki niej programiści mogą szybciej wdrażać się w projekt, a błędy i niejasności są minimalizowane. Kompleksowa dokumentacja zawiera także przykłady użycia poszczególnych funkcji, co dodatkowo ułatwia rozwój i rozbudowę aplikacji. W dobrze prowadzonym projekcie dokumentacja kodu jest na bieżąco aktualizowana, co zwiększa jego przejrzystość i wspiera proces refaktoryzacji.

Pytanie 8

Która technologia jest używana do tworzenia animacji na stronach internetowych?

A. HTTP Headers
B. CSS Animations
C. XML Schema
D. SQL Queries
CSS Animations to technologia, która umożliwia tworzenie zaawansowanych efektów animacyjnych na stronach internetowych, bez konieczności użycia JavaScriptu. Dzięki CSS Animations, projektanci mogą definiować kluczowe klatki (keyframes), które określają stany stylów w określonym czasie. Przykładem praktycznego zastosowania może być animacja przycisku, który zmienia kolor i rozmiar po najechaniu na niego myszką. Tego rodzaju animacje są wspierane przez wszystkie nowoczesne przeglądarki i są zgodne z W3C, co czyni je standardem w branży. Dobrze zaprojektowane animacje poprawiają doświadczenia użytkowników, ułatwiając im interakcję z elementami strony. Warto również wspomnieć, że użycie CSS do animacji jest bardziej efektywne pod względem wydajności, ponieważ procesor graficzny (GPU) może lepiej obsługiwać animacje niż tradycyjne metody, takie jak JavaScript. W kontekście projektowania responsywnego, CSS Animations pozwala na płynniejsze i bardziej estetyczne przejścia między różnymi stanami interfejsu, co jest kluczowe dla utrzymania zaangażowania użytkowników.

Pytanie 9

Jaki jest kluczowy zamysł wzorca "Kompozyt" (Composite)?

A. Umożliwienie klientom obsługi obiektów oraz ich zbiorów w spójny sposób
B. Danie możliwości dynamicznej zmiany zachowania obiektu
C. Stworzenie jednej klasy do zarządzania wieloma obiektami tego samego rodzaju
D. Określenie interfejsu komunikacji pomiędzy składnikami systemu
Zarządzanie wieloma obiektami tego samego typu to cecha wzorca Fabryka (Factory) lub Builder, a nie Kompozyt. Definiowanie interfejsu komunikacji między komponentami systemu to rola wzorca Mediator, który organizuje interakcje między różnymi obiektami. Umożliwienie dynamicznej zmiany zachowania obiektu jest domeną wzorca Strategia (Strategy) lub Dekorator (Decorator), które oferują elastyczność w zakresie modyfikacji zachowania podczas działania programu.

Pytanie 10

Jakie działanie powinno się wykonać w pierwszym kroku, oceniając stan osoby poszkodowanej?

A. Wezwać ambulans
B. Rozpocząć resuscytację krążeniowo-oddechową
C. Zadbać o własne bezpieczeństwo
D. Sprawdzić, czy występuje krwawienie
Właśnie o to chodzi — zadbanie o własne bezpieczeństwo jako pierwszy krok to fundament całej pierwszej pomocy i temat, który się często przecenia, a moim zdaniem jest kluczowy. Chodzi o to, że nawet najlepsze chęci nie mają sensu, jeśli ratujący sam staje się kolejną ofiarą. W praktyce oznacza to, że zanim podejdziesz do poszkodowanego, musisz się zastanowić, czy miejsce wypadku jest bezpieczne. Przykładowo na drodze – trzeba rozejrzeć się, czy nie nadjeżdżają inne samochody, zabezpieczyć teren (trójkąt ostrzegawczy, kamizelka odblaskowa). W przypadku porażenia prądem – odłączyć źródło napięcia. To wcale nie są banały; tego uczą na wszystkich kursach BLS (Basic Life Support) i w zasadzie każda książka ratownicza stawia to na pierwszym miejscu. Często się o tym zapomina, bo emocje biorą górę. Prawda jest taka, że każda akcja ratunkowa zaczyna się od sekundy refleksji: czy ja tu jestem bezpieczny? Dopiero później można oceniać stan poszkodowanego i dalej działać. W sumie jak się o tym pomyśli, to takie myślenie ratuje zdrowie nie tylko nam, ale i tym, którym chcemy pomóc — bo nie zwiększamy liczby poszkodowanych. Niektórym wydaje się, że od razu trzeba robić masaż serca czy wołać karetkę, ale bez oceny zagrożenia można narobić sobie i innym więcej problemów. Takie są realia pracy w terenie, nie tylko w teorii.

Pytanie 11

Jakie działanie związane z klasą abstrakcyjną jest niedozwolone?

A. Określenie metody wirtualnej
B. Definiowanie pól publicznych
C. Rozszerzanie tej klasy
D. Utworzenie instancji tej klasy
Deklaracja pól publicznych w klasie abstrakcyjnej jest całkowicie dozwolona i może być używana do udostępniania danych w klasach pochodnych. Wprowadzenie pól publicznych w klasie abstrakcyjnej pozwala na określenie podstawowych atrybutów, które będą współdzielone przez wszystkie klasy dziedziczące. Może to być przydatne w kontekście encapsulacji i zarządzania danymi w aplikacjach. Deklaracja metody wirtualnej również jest prawidłowa, gdyż klasy abstrakcyjne mogą zawierać metody, które są zdefiniowane jako wirtualne, co umożliwia ich nadpisywanie w klasach pochodnych. Dzięki temu, programiści mogą budować bardziej elastyczne i modułowe aplikacje. Dziedziczenie po klasie abstrakcyjnej jest podstawowym stosowaniem tego typu klas, gdyż pozwala na tworzenie hierarchii, w której klasy pochodne muszą implementować abstrakcyjne metody zdefiniowane w klasie bazowej. Dziedziczenie wspiera ponadto zasady programowania obiektowego, takie jak ponowne wykorzystanie kodu i polimorfizm, co czyni je kluczowym elementem nowoczesnego programowania.

Pytanie 12

Jakie jest zastosowanie języka XAML przy tworzeniu aplikacji desktopowych?

A. Do zarządzania bazami danych
B. Do optymalizacji działania aplikacji
C. Do projektowania graficznego interfejsu użytkownika
D. Do obsługi zdarzeń klawiatury
XAML (Extensible Application Markup Language) to język znaczników wykorzystywany w technologii WPF (Windows Presentation Foundation) oraz UWP (Universal Windows Platform) do projektowania graficznego interfejsu użytkownika (GUI). XAML pozwala na definiowanie układów, przycisków, etykiet oraz innych elementów interaktywnych w aplikacjach desktopowych. Dzięki XAML, projektowanie interfejsu jest intuicyjne, a kod interfejsu jest oddzielony od logiki aplikacji, co sprzyja przejrzystości projektu. XAML wspiera animacje, style i szablony, co umożliwia budowę nowoczesnych, dynamicznych aplikacji. Jego elastyczność i możliwość współpracy z C# sprawiają, że XAML jest niezastąpiony w środowisku Windows.

Pytanie 13

Który z poniższych przykładów stanowi aplikację mobilną wykorzystującą bazę danych?

A. Aplikacja wyświetlająca lokalny czas
B. Aplikacja kalkulator
C. Aplikacja gromadząca listę kontaktów użytkownika
D. Aplikacja do robienia zdjęć
Aplikacja przechowująca listę kontaktów użytkownika korzysta z bazy danych do przechowywania, odczytywania i zarządzania danymi. Tego typu aplikacje mobilne muszą efektywnie zarządzać dużą ilością danych i zapewniać ich szybki dostęp. Bazy danych, takie jak SQLite czy Firebase, są szeroko stosowane w aplikacjach mobilnych, umożliwiając przechowywanie kontaktów, wiadomości, notatek i innych informacji użytkownika. Dzięki bazom danych możliwe jest także synchronizowanie danych pomiędzy urządzeniami i przechowywanie ich w chmurze.

Pytanie 14

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

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

Pytanie 15

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

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

Pytanie 16

Jakie składniki powinien mieć plan projektu?

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

Pytanie 17

Co to jest shadow DOM?

A. Metoda renderowania grafiki 3D w przeglądarkach
B. Technika stylizacji elementów w CSS przy użyciu cieni
C. Mechanizm enkapsulacji kodu HTML, CSS i JavaScript w komponenty webowe
D. Wirtualny DOM używany przez biblioteki jak React i Vue.js
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 18

Który element HTML5 służy do osadzania wideo na stronie?

A. &lt;player&gt;
B. &lt;media&gt;
C. &lt;video&gt;
D. &lt;movie&gt;
Element HTML5 &lt;video&gt; jest standardowym tagiem służącym do osadzania wideo na stronach internetowych. Umożliwia on integrację multimediów w sposób, który jest zgodny z aktualnymi standardami sieciowymi. W porównaniu do starszych metod, które wymagały użycia zewnętrznych wtyczek, takich jak Flash, &lt;video&gt; pozwala na bezproblemowe odtwarzanie wideo w przeglądarkach nowej generacji, co zwiększa bezpieczeństwo i wydajność. Element ten oferuje wiele atrybutów, takich jak controls, autoplay, loop, preload, oraz width i height, które pozwalają na dostosowanie odtwarzacza do potrzeb użytkownika. Na przykład, używając atrybutu controls, można dodać przyciski odtwarzania, zatrzymywania lub regulacji głośności, co poprawia interaktywność i użyteczność. Dodatkowo, aby zapewnić dostępność treści wideo, warto stosować atrybuty takie jak &lt;track&gt;, który umożliwia dodawanie napisów, co jest szczególnie ważne dla osób z niepełnosprawnościami słuchowymi. Używanie &lt;video&gt; w projektach webowych to najlepsza praktyka, która wspiera rozwój dostępnych i przyjaznych dla użytkownika doświadczeń wizualnych.

Pytanie 19

Fragment kodu w języku JavaScript to

let modulo = (x, y) => x % y;
A. Definicja funkcji strzałkowej
B. Prototyp metody klasy
C. Prototyp interfejsu
D. Definicja zmiennej typu tablicowego
Ten fragment kodu w JavaScript to klasyczny przykład funkcji strzałkowej, czyli tzw. arrow function. To funkcja zdefiniowana w bardzo nowoczesny, oszczędny sposób, który pojawił się wraz z ES6 (ECMAScript 2015). Taki zapis pozwala na szybkie tworzenie prostych funkcji anonimowych, bez potrzeby używania słowa kluczowego 'function'. Ma to ogromne znaczenie np. przy pracy z wyrażeniami funkcyjnymi, callbackami albo wszędzie tam, gdzie liczy się zwięzłość kodu. Samo 'let modulo = (x, y) => x % y;' oznacza, że tworzymy zmienną 'modulo', która przechowuje funkcję przyjmującą dwa argumenty i od razu zwracającą resztę z dzielenia x przez y. Co ciekawe, funkcje strzałkowe różnią się od tradycyjnych tym, że nie mają własnego kontekstu this (dziedziczą go z otoczenia). To jest bardzo przydatne np. przy pracy w metodach klas lub obiektach, gdzie nie chcemy nieoczekiwanej zmiany kontekstu. Moim zdaniem warto nawykowo korzystać z tej składni, bo kod robi się dużo czytelniejszy i łatwiejszy w utrzymaniu. W różnych frameworkach (np. React) funkcje strzałkowe są wręcz codziennością – definiuje się tak np. proste event handlery czy filtry. No i jeszcze jedno: taka funkcja jest idealna, gdy chcemy przekazać logikę w jednym krótkim wyrażeniu bez robienia bałaganu w kodzie.

Pytanie 20

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ą wykorzystywane tylko w funkcjach statycznych
C. Pola, które są tylko prywatne
D. Pola, które są wspólne dla wszystkich klas pochodnych
Pola specyficzne dla jednej klasy pochodnej nie powinny znajdować się w klasie bazowej, ponieważ zwiększałoby to złożoność i naruszało zasadę separacji odpowiedzialności. Prywatne pola są ukryte i nie są dziedziczone przez klasy pochodne – są dostępne wyłącznie w ramach klasy, w której zostały zdefiniowane. Pola używane wyłącznie w metodach statycznych nie muszą znajdować się w klasie bazowej, ponieważ są to elementy niezależne od instancji klasy i są przypisane do samej klasy, a nie jej obiektów.

Pytanie 21

Jakie aspekty powinny być brane pod uwagę przy tworzeniu zestawów danych?

A. Narzędzia do analizy błędów
B. Ilość linii kodu programu
C. Metoda alokacji pamięci dla danych
D. Typ zastosowanego kompilatora
Długość kodu programu wpływa na czytelność i utrzymanie, ale nie jest kluczowym czynnikiem przy projektowaniu zestawów danych. Kompilator decyduje o tym, jak kod jest przekształcany w kod maszynowy, ale nie ma bezpośredniego wpływu na strukturę danych. Narzędzia do debugowania są istotne w procesie testowania i wykrywania błędów, ale nie odgrywają kluczowej roli w początkowej fazie projektowania zestawów danych. Kluczowe jest odpowiednie zaplanowanie struktury danych i sposobu ich przechowywania, co decyduje o efektywności aplikacji.

Pytanie 22

Który z wymienionych składników jest charakterystyczny dla środowiska IDE przeznaczonego do tworzenia aplikacji mobilnych?

A. Narzędzia do analizy danych, serwer webowy, przeglądarka internetowa
B. Kompilator, debugger, emulator urządzenia mobilnego
C. Edytor graficzny, narzędzia analityczne, klient FTP
D. Edytor tekstowy, przeglądarka internetowa, system kontroli wersji
Kompilator, debugger i emulator urządzenia mobilnego to podstawowe narzędzia w każdym środowisku IDE przeznaczonym do tworzenia aplikacji mobilnych. Kompilator jest odpowiedzialny za przekształcenie kodu źródłowego na plik wykonywalny, co pozwala na uruchomienie aplikacji na urządzeniu. Debugger umożliwia wykrywanie i eliminowanie błędów, co jest kluczowe dla prawidłowego działania aplikacji. Emulator pozwala na symulowanie działania aplikacji na różnych urządzeniach i systemach, co ułatwia testowanie bez potrzeby fizycznego dostępu do wielu modeli telefonów czy tabletów. Taki zestaw narzędzi jest standardem w Android Studio, XCode oraz Visual Studio, co umożliwia pełen cykl tworzenia aplikacji mobilnych – od kodowania, przez testowanie, aż po wdrażanie.

Pytanie 23

W jaki sposób definiuje się konstruktor kopiujący w ramach klasy?

A. Inicjuje obiekt klasy na podstawie klasy dziedziczącej
B. Tworzy nowy obiekt jako wierną kopię innego obiektu
C. Generuje nowy obiekt i usuwa wcześniejszy
D. Generuje nowy obiekt klasy bez przypisywania wartości
Konstruktor kopiujący to specjalny typ konstruktora, który tworzy nowy obiekt będący dokładną kopią innego obiektu tej samej klasy. Jest to niezwykle przydatne, gdy chcemy zduplikować istniejący obiekt, zachowując jego stan i wartości wszystkich składowych. Konstruktor kopiujący przyjmuje jako argument referencję do obiektu tej samej klasy, co pozwala na kopiowanie zarówno podstawowych typów danych, jak i dynamicznie alokowanych zasobów. Jego zastosowanie jest kluczowe w sytuacjach, gdy musimy pracować z obiektami dynamicznymi lub kopiować obiekty zarządzające wskaźnikami, aby uniknąć problemów związanych z wielokrotnym zwalnianiem tej samej pamięci.

Pytanie 24

Wykorzystując React.js oraz Angular, stworzono funkcjonalnie równoważne kody źródłowe. Aby móc w metodzie handleSubmit pokazać zawartość kontrolki input w miejscu oznaczonym ???, należy odwołać się do atrybutu o nazwie:
React.js:

nazwa1 = React.createRef();
handleSubmit = e => {
    console.log(this.???.current.value);
}
...
<form onSubmit={this.handleSubmit}>
    <input ref={this.nazwa1} name="nazwa2" id="nazwa3" for="nazwa4" />
Angular:
<form #f="ngForm" (ngSubmit) = "handleSubmit(f)">
    <input ngModel name="nazwa1" id="nazwa2" class="nazwa3" for="nazwa4" >
...
handleSubmit(f) {
    console.log(f.value.???);
}
A. nazwa1
B. nazwa4
C. nazwa3
D. nazwa2
To właśnie nazwa1 jest właściwym atrybutem, do którego trzeba się odwołać, żeby wyciągnąć wartość inputa zarówno w React, jak i w Angularze. W React, kiedy chcemy pobrać wartość z inputa przez refa, to przekazujemy ref={this.nazwa1}, a potem w handleSubmit robimy this.nazwa1.current.value. To po prostu dokładnie ta sama nazwa, którą przypisałeś do refa, nie ma tu żadnej magii. W Angularze z kolei input posiada ngModel oraz name="nazwa1" – i to name jest kluczowe, bo obiekt f.value generowany przez ngForm zawiera wszystkie pola po kluczach odpowiadających atrybutom name. Dzięki temu możesz potem użyć f.value.nazwa1 i dostajesz wartość inputa. W praktyce zawsze warto pilnować, żeby atrybut name był sensowny i jednoznaczny, bo to na nim opierają się frameworki przy serializacji danych formularza i obsłudze ich stanu. Moim zdaniem to jest jedna z bardziej praktycznych umiejętności przy pracy z dynamicznymi formularzami – jeśli ktoś nie dba o spójność nazw atrybutów name, to łatwo o błędy, które są potem trudne do wykrycia. Warto jeszcze pamiętać, że atrybuty typu id, class czy for mają zupełnie inne zastosowanie – służą do stylowania, powiązań z labelkami, itd. Name natomiast to podstawa logicznej obsługi wartości pól formularza. Często spotykam się z sytuacjami, że ktoś próbuje pobierać dane po id czy class, ale to nie jest zgodne z dobrymi praktykami – dla czytelności kodu i łatwości refaktoryzacji o wiele lepiej korzystać z name. Takie rozwiązania są też zalecane w oficjalnej dokumentacji zarówno React, jak i Angulara.

Pytanie 25

Który z poniższych kodów realizuje przedstawiony fragment algorytmu?

Ilustracja do pytania
A. Kod 4
B. Kod 3
C. Kod 2
D. Kod 1
Zdarza się, że pozornie zbliżone konstrukcje programistyczne mogą wprowadzić w błąd przy interpretacji algorytmów blokowych. Spójrzmy na przedstawione odpowiedzi. Kod 1 wykorzystuje pojedynczy warunek if, przez co operacja przypisania y = a + b zachodzi tylko raz, jeśli warunek jest spełniony, i na tym się kończy – nie ma tu powtarzania, a przecież schemat blokowy wyraźnie wskazuje na wielokrotne wykonywanie działania tak długo, jak długo y jest różne od 100. Podobnie Kod 4 – to właściwie taki sam przypadek z inną kolejnością, ale nadal nie ma tu powtarzania akcji, czyli pętli. Kod 2 wydaje się być blisko idei pętli, bo mamy konstrukcję do...while, ale niestety warunek pętli jest odwrócony: while (y == 100). W efekcie kod wykona instrukcję tylko wtedy, gdy y na początku równa się 100, co jest sprzeczne z logiką schematu – a chodzi przecież o kontynuację dla y różnego od 100. Częstym błędem jest tutaj nieuwzględnienie różnicy między pętlami z warunkiem wejścia (while) a wyjścia (do...while). W praktyce, w środowiskach rzeczywistych, takie drobne pomyłki mogą prowadzić do poważnych problemów, np. pętla w ogóle się nie wykona, mimo że powinna realizować określoną akcję wielokrotnie. Moim zdaniem, warto w takich przypadkach po prostu rozrysować sobie przebieg działania krok po kroku – to pomaga uniknąć typowych pułapek myślowych. Kluczowe jest rozumienie, że kod odpowiadający schematowi blokowemu z warunkiem powtarzania powinien zawsze wykorzystywać pętlę z poprawnie sformułowanym warunkiem powtarzania – właśnie tak, jak w Kodzie 3.

Pytanie 26

Jak przedstawia się liczba dziesiętna 255 w systemie szesnastkowym?

A. 100
B. FF
C. EF
D. FE
Liczba dziesiętna 255 jest reprezentowana w systemie szesnastkowym jako FF. Aby zrozumieć, dlaczego tak jest, należy przyjrzeć się procesowi konwersji z systemu dziesiętnego na szesnastkowy. System dziesiętny oparty jest na podstawie 10, co oznacza, że używa dziesięciu cyfr od 0 do 9. W systemie szesnastkowym, który ma podstawę 16, używane są cyfry od 0 do 9 oraz litery od A do F, gdzie A odpowiada 10, B - 11, C - 12, D - 13, E - 14, a F - 15. Aby przeliczyć 255 na system szesnastkowy, dzielimy tę liczbę przez 16. Pierwsza operacja daje nam 15 jako wynik całkowity oraz 15 jako resztę, co w systemie szesnastkowym jest reprezentowane literą F. Dalsze dzielenie 15 przez 16 daje wynik 0 oraz resztę 15, co również jest reprezentowane jako F. Zatem, zapisując reszty w odwrotnej kolejności, otrzymujemy FF. Taki zapis jest używany w różnych standardach, takich jak HTML i CSS, gdzie kolory są przedstawiane w formacie szesnastkowym. Przykładem może być kolor czerwony, którego zapis to #FF0000, co oznacza maksymalną wartość czerwonego składnika i zera dla niebieskiego oraz zielonego. Warto znać te konwersje, zwłaszcza w programowaniu i projektowaniu stron internetowych, gdzie często pracuje się z wartościami szesnastkowymi.

Pytanie 27

Sposób deklaracji Klasa2 wskazuje, że

W C++ i C#:
class Klasa2 : Klasa1
W Java:
class Klasa2 extends Klasa1
W Python:
class Klasa2(Klasa1):
A. Klasa1 jest dzieckiem Klasy2
B. Klasa2 dziedziczy od Klasa1
C. Klasa2 stanowi klasę bazową
D. Klasa1 dziedziczy od Klasa2
Deklaracja Klasa2 jako klasy dziedziczącej po Klasa1 oznacza, że Klasa2 przejmuje wszystkie publiczne i chronione (protected) pola oraz metody klasy bazowej (Klasa1). Dziedziczenie to jeden z filarów programowania obiektowego, który umożliwia ponowne wykorzystanie kodu i rozszerzanie funkcjonalności istniejących klas. Dzięki temu Klasa2 może nie tylko korzystać z metod Klasa1, ale także nadpisywać je, co jest kluczowe dla implementacji polimorfizmu. Dziedziczenie pozwala na budowanie hierarchii klas, co prowadzi do lepszego zarządzania kodem i ułatwia jego skalowalność. Przykładem może być klasa Pojazd, z której dziedziczy klasa Samochod, rozszerzając jej funkcjonalność o dodatkowe cechy i metody specyficzne dla samochodów.

Pytanie 28

Co to jest wzorzec projektowy Singleton?

A. Wzorzec zapewniający istnienie tylko jednej instancji klasy w całej aplikacji
B. Metoda zabezpieczania aplikacji przed atakami typu SQL Injection
C. Technika optymalizacji kodu poprzez minimalizację liczby obiektów
D. Wzorzec do zarządzania komunikacją między komponentami aplikacji
Wzorzec projektowy Singleton to jeden z fundamentalnych wzorców, który zapewnia, że w trakcie działania aplikacji istnieje tylko jedna instancja danej klasy. Przydaje się to w sytuacjach, gdy musimy zarządzać zasobami, które nie powinny być wielokrotnie instancjonowane, na przykład połączenia z bazą danych czy logika globalnych ustawień. Implementacja tego wzorca zakłada zastosowanie prywatnego konstruktora oraz metody statycznej, która odpowiada za utworzenie instancji. Przykładem zastosowania Singletona mogą być klasy zarządzające konfiguracją aplikacji, gdzie zmiana w jednym miejscu może wpłynąć na cały system. Często jest on krytykowany za to, że wprowadza globalny stan, co może prowadzić do trudności w testowaniu i zarządzaniu stanem aplikacji. Dlatego ważne jest, aby stosować go świadomie i tam, gdzie rzeczywiście przynosi korzyści, zgodnie z najlepszymi praktykami inżynieryjnymi.

Pytanie 29

Która metoda cyklu życia komponentu w React.js jest wywoływana tuż po zamontowaniu komponentu w DOM?

A. componentWillMount()
B. componentWillUnmount()
C. componentDidMount()
D. componentDidUpdate()
Odpowiedź 'componentDidMount()' jest poprawna, ponieważ jest to metoda cyklu życia komponentu w React, która jest wywoływana tuż po zamontowaniu komponentu w DOM. To oznacza, że w tym momencie komponent jest już dostępny w drzewie DOM i możemy bezpiecznie wykonywać operacje, które wymagają dostępu do elementów DOM. Przykładem zastosowania tej metody może być wykonywanie zapytań do API w celu pobrania danych, które następnie będą renderowane w komponencie. Dobrą praktyką jest umieszczanie logiki inicjalizacyjnej, takiej jak ustawienie stanu komponentu na podstawie danych z API, w tej metodzie, co pozwala na odpowiednie zarządzanie cyklem życia komponentu. Dodatkowo, 'componentDidMount()' jest także idealnym miejscem do dodawania subskrypcji do zewnętrznych źródeł danych, takich jak sockety lub WebSocket, co również wymaga, aby komponent był zamontowany. Warto pamiętać, że metody cyklu życia są kluczowym elementem architektury React i mają istotny wpływ na wydajność oraz czytelność kodu.

Pytanie 30

Jakie jest główne zadanie debuggera w środowisku programowania?

A. Kompilowanie kodu źródłowego
B. Generowanie plików wykonywalnych
C. Tworzenie kodu źródłowego
D. Analiza i usuwanie błędów w kodzie
Debugger to narzędzie programistyczne służące do analizy i usuwania błędów w kodzie źródłowym. Pozwala na krokowe wykonywanie programu, śledzenie wartości zmiennych i identyfikowanie miejsc, w których występują błędy logiczne lub składniowe. Debugger umożliwia zatrzymanie wykonania programu w dowolnym miejscu, ustawienie tzw. breakpointów (punktów przerwania) i monitorowanie przepływu sterowania. Dzięki temu programista może dokładnie przeanalizować, dlaczego program nie działa zgodnie z oczekiwaniami i szybko znaleźć przyczynę problemu. Debuggery są dostępne w większości zintegrowanych środowisk programistycznych (IDE), takich jak Visual Studio, PyCharm czy IntelliJ IDEA.

Pytanie 31

Zaprezentowany diagram ilustruje wyniki przeprowadzonych testów:

Ilustracja do pytania
A. wydajnościowych
B. ochrony
C. użyteczności
D. funkcjonalności
To właśnie są testy wydajnościowe – dokładnie takie parametry jak czasy ładowania, liczba żądań HTTP, rozmiar przesyłanych danych czy ilość przekierowań analizuje się w praktyce podczas oceny wydajności stron internetowych. Moim zdaniem ten typ testów jest absolutnie kluczowy w projektowaniu nowoczesnych aplikacji webowych, bo użytkownicy szybko rezygnują, jeśli strona się długo ładuje albo jest zbyt zasobożerna. W branży zwraca się obecnie ogromną uwagę na to, by strony były 'lekkie', szybkie i zoptymalizowane pod kątem przesyłu danych. Nawet Google premiuje szybkie serwisy w wynikach wyszukiwania, co niejeden programista już odczuł na własnej skórze. Testy wydajnościowe sprawdzają, jak aplikacja zachowuje się pod dużym obciążeniem i ile danych realnie pobierają użytkownicy. W praktyce polecam korzystać z narzędzi takich jak Google Lighthouse, WebPageTest czy nawet prosty DevTools w przeglądarce – pozwalają szybko wyłapać największe problemy z czasem ładowania. Warto też pamiętać, że optymalizacja wydajności to nie tylko lepsze wrażenia użytkownika, ale bardzo wymierne oszczędności na transferze i infrastrukturze. Dobry zwyczaj to cyklicznie monitorować te wskaźniki, nawet gdy wydaje się, że wszystko działa OK – bo sytuacja może się szybko zmienić po wdrożeniu nowych funkcjonalności lub zmianach w kodzie.

Pytanie 32

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

A. Nieodpowiednie relacje w zespole
B. Promieniowanie UV
C. Brak ergonomicznych miejsc pracy
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 33

W systemie RGB kolor Pale Green przedstawia się jako RGB(152, 251, 152). Jaki jest szesnastkowy kod tego koloru?

A. AO FE AO
B. 98FB98
C. 98 FE98
D. AO FB AO
Analizując odpowiedzi, które nie są poprawne, można zauważyć, że każda z nich zawiera błędy związane z konwersją wartości RGB do formatu szesnastkowego lub z nieprawidłowym układem cyfr. Przykładowo, pierwsza odpowiedź AO FB AO nie jest zgodna z formatem szesnastkowym, ponieważ zawiera litery, które nie odpowiadają wartościom RGB (0-255). Odpowiedź ta nie jest skonstruowana z poprawnych grup heksadecymalnych. Kolejna odpowiedź, 98 FE98, pomimo że wykorzystuje poprawne wartości, nie odpowiada pełnej reprezentacji koloru, ponieważ brakuje w niej wartości niebieskiej, co prowadzi do niepełnej i błędnej reprezentacji kolorystycznej. Trzecia odpowiedź AO FE AO również błądzi w tej samej kwestii, co pierwsza, wskazując na komponenty, które nie istnieją w dozwolonym zakresie dla kolorów RGB. W kontekście projektowania i standardów webowych, takie błędy mogą prowadzić do nieprawidłowego wyświetlania kolorów w różnych przeglądarkach oraz na różnych urządzeniach. Dlatego tak istotne jest, aby przy konwersji kolorów zachować poprawność techniczną oraz używać odpowiednich wartości w formacie szesnastkowym.

Pytanie 34

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

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

Pytanie 35

Jakie są różnice między procesem kompilacji a interpretacją kodu?

A. Kompilacja przekształca cały kod źródłowy przed jego wykonaniem, podczas gdy interpretacja tłumaczy kod na bieżąco
B. Kompilacja wymaga użycia debuggera, natomiast interpretacja tego nie potrzebuje
C. Kompilacja jest stosowana jedynie w programowaniu obiektowym
D. Interpretacja umożliwia tworzenie bibliotek dynamicznych, a kompilacja bibliotek statycznych
Kompilacja i interpretacja to dwa różne sposoby, żeby uruchomić kod. Kiedy kompilujesz, to cały kod jest zamieniany na język maszynowy przed uruchomieniem programu, a na końcu dostajesz plik, który można odpalić. Z kolei w interpretacji, kod jest analizowany i wykonywany linia po linii „na żywo”. Kompilacja jest bardziej typowa dla języków takich jak C czy C++, a interpretacja jest popularna w językach skryptowych jak Python czy JavaScript. Kompilacja daje większą wydajność, ale musisz poczekać, aż cały kod się skompiluje, a interpretacja pozwala na szybkie testowanie i łatwiejsze znajdowanie błędów.

Pytanie 36

Zajmując się pracą w zespole oraz dbając o jego efektywne funkcjonowanie, nie powinniśmy

A. wspierać się nawzajem
B. sumiennie i w ustalonym terminie realizować swoje zadania
C. skupiać się jedynie na własnych korzyściach
D. przyjmować odpowiedzialności za swoje decyzje
Dokładnie o to chodzi – skupianie się tylko na własnych korzyściach prawie zawsze działa na szkodę zespołu. W praktyce, gdy ktoś patrzy wyłącznie na siebie, najczęściej zaniedbuje współpracę, co prowadzi do napięć i spadku efektywności grupy. W zespole liczy się wspólny cel, a nie indywidualne interesy, bo to właśnie dzięki wzajemnemu wsparciu i otwartej komunikacji można osiągnąć lepsze wyniki. Z mojego doświadczenia wynika, że projekty, w których członkowie współpracowali i dzielili się odpowiedzialnością, szły sprawniej i bez zbędnych spięć. Profesjonalne standardy, np. metodyki Scrum czy Agile, akcentują wartość pracy zespołowej i transparentności – jeśli każdy ciągnie w swoją stronę, cały model współpracy się sypie. Warto pamiętać, że nawet najlepszy specjalista sam nie pociągnie projektu, jeśli nie będzie działał fair wobec innych. Najlepiej się sprawdza takie podejście, gdzie ludzie podchodzą do pracy z otwartością, potrafią poprosić o pomoc i wspólnie świętują sukcesy, a nie tylko skupiają się na własnych liczbach czy bonusach. To naprawdę widać w praktyce – zespoły, gdzie nie liczy się tylko własny interes, mają zwykle znacznie lepsze efekty i atmosferę pracy.

Pytanie 37

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 38

Jakie jest wyjście działania kompilatora?

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

Co to jest Redux?

A. System kontroli wersji dla projektów JavaScript
B. Biblioteka do zarządzania stanem aplikacji w JavaScript
C. Framework do tworzenia aplikacji mobilnych
D. Narzędzie do optymalizacji wydajności aplikacji React
Chociaż odpowiedzi związane z frameworkami do tworzenia aplikacji mobilnych, narzędziami do optymalizacji wydajności czy systemami kontroli wersji mogą być interesujące, nie są one związane z funkcją, jaką pełni Redux. Frameworki do tworzenia aplikacji mobilnych, takie jak React Native, pozwalają na rozwijanie aplikacji mobilnych z użyciem JavaScript, ale nie zarządzają one stanem aplikacji w sposób, w jaki robi to Redux. Optymalizacja wydajności aplikacji React nie jest bezpośrednią funkcją Redux; chociaż biblioteka ta może pośrednio przyczynić się do lepszej wydajności przez poprawne zarządzanie stanem, nie jest narzędziem służącym do optymalizacji. Z kolei systemy kontroli wersji, takie jak Git, służą do zarządzania historią zmian w kodzie źródłowym aplikacji, a nie do zarządzania stanem wykonawczej logiki aplikacji. Wybór niewłaściwego narzędzia wynika często z braku zrozumienia ich funkcji oraz zastosowania w procesie tworzenia aplikacji. Aby skutecznie zarządzać stanem w aplikacji, kluczowe jest zrozumienie różnic między tymi narzędziami oraz ich zastosowaniem w architekturze aplikacji, co jest fundamentalnym elementem współczesnego rozwijania oprogramowania.

Pytanie 40

Jakie zagrożenie związane z użytkowaniem cyberprzestrzeni ma wpływ na zdrowie fizyczne?

A. Depresja spowodowana cyberprzemocą
B. Rozpowszechnianie nieprawdziwych informacji
C. Problemy z kręgosłupem wynikające z długotrwałego siedzenia
D. Uzależnienie od gier komputerowych
Problemy z kręgosłupem wynikające z długotrwałego siedzenia to realne zagrożenie związane z użytkowaniem cyberprzestrzeni, które ewidentnie wpływa na zdrowie fizyczne. Dzisiaj, gdy większość naszej pracy, nauki czy rozrywki przenosi się do internetu, coraz częściej zapominamy o tym, że wielogodzinne siedzenie przed komputerem czy z telefonem w ręku odbija się na naszym ciele. Sam kiedyś miałem tak, że po kilku dniach intensywnej nauki online zaczęły mnie boleć plecy i kark. To typowy objaw, bo siedzenie w nieprawidłowej pozycji prowadzi do przeciążenia kręgosłupa, zwłaszcza w odcinku lędźwiowym i szyjnym. Branża IT już od lat podkreśla konieczność stosowania ergonomicznych stanowisk pracy – odpowiednie krzesło, wysokość monitora, przerwy co 45 minut. Standardy BHP bardzo mocno akcentują takie aspekty, zwłaszcza przy pracy zdalnej. Fajnie jest też stosować technikę 20-20-20, czyli co 20 minut patrzymy przez 20 sekund na coś oddalonego o 20 stóp, żeby dać odpocząć oczom i kręgosłupowi. Takie rzeczy naprawdę robią różnicę. Moim zdaniem, wielu ludzi lekceważy ten temat, a skutki siedzącego trybu życia mogą być odczuwalne już po kilku miesiącach. Warto więc od razu wyrobić sobie zdrowe nawyki – to inwestycja w siebie.