Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest:

A. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
B. informowanie obiektów o modyfikacji stanu innych obiektów
C. monitorowanie działań użytkownika oraz generowanie wyjątków
D. dostosowanie interfejsu użytkownika do różnych kategorii użytkowników
Często można się pomylić, próbując „wymyślić” jakąś funkcjonalność, którą może realizować wzorzec Obserwator w aplikacji webowej. Jednak nie każda aktywność związana ze zmianami w systemie czy komunikacją między komponentami to domena właśnie tego wzorca. Z mojego doświadczenia, widzę że wiele osób myli obserwatora z mechanizmami monitorującymi zachowanie użytkownika, jak narzędzia do śledzenia kliknięć czy generowania wyjątków w reakcji na nietypowe akcje – tymczasem Obserwator nie służy do analityki lub obsługi logiki wyjątków. To raczej narzędzie do powiadamiania powiązanych obiektów o zmianach, które zachodzą w jednym z nich. Spotkałem się także z opinią, że wzorzec ten zarządza funkcjami synchronicznymi. W praktyce nie ma on nic wspólnego z zarządzaniem synchronicznością czy asynchronicznością kodu – sam jest neutralny względem tych aspektów. Synchroniczność lub asynchroniczność zależy raczej od implementacji (np. Promises, async/await, event loop), a nie od samego wzorca Obserwator. Jeszcze inny częsty błąd to utożsamianie tego wzorca z mechanizmami dostosowującymi interfejs użytkownika do różnych profili użytkowników. To już bardziej domena wzorców strategii, kompozycji lub nawet prostych warunków w kodzie. W skrócie: Obserwator to taki „kurier”, który informuje zainteresowanych, gdy coś się zmienia – i tylko tyle. Jak dla mnie, zrozumienie tej granicy pomaga uniknąć niepotrzebnych komplikacji w projektowaniu architektury aplikacji webowych.

Pytanie 2

Zapisany fragment w C# wskazuje na definicję klasy Car, która:

public class Car: Vehicle {     ...   }
A. używa prywatnych pól klasy Vehicle
B. stanowi klasę bazową (nie dziedziczy po żadnej klasie)
C. dziedziczy po Vehicle
D. jest powiązana z klasą Vehicle
W przedstawionym kodzie w języku C# mamy definicję klasy Car, która dziedziczy po klasie Vehicle. Dziedziczenie to fundamentalny mechanizm programowania obiektowego, pozwalający jednej klasie przejąć właściwości i metody innej klasy. W praktyce oznacza to, że klasa Car automatycznie zyskuje dostęp do metod i właściwości publicznych oraz chronionych klasy Vehicle, co umożliwia ponowne użycie kodu i zwiększa jego przejrzystość. Dziedziczenie jest kluczowe w projektowaniu skalowalnych systemów, gdzie umożliwia tworzenie bardziej specyficznych klas na podstawie klas ogólnych, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Przykładowo, jeżeli klasa Vehicle zawiera metody takie jak Start() i Stop(), klasa Car może je wykorzystać bez konieczności ponownego definiowania. Dobre praktyki w programowaniu obiektowym zalecają wykorzystywanie dziedziczenia do tworzenia hierarchii klas, które logicznie odwzorowują relacje „jest-a” pomiędzy obiektami w systemie. Ważne jest też unikanie zbyt głębokiego dziedziczenia, co może prowadzić do skomplikowanego i trudnego w utrzymaniu kodu. Zrozumienie dziedziczenia jest kluczowe dla efektywnego wykorzystania wzorców projektowych, takich jak wzorzec projektowy Adapter czy Dekorator.

Pytanie 3

W języku Python, jak nazywa się funkcja, która jest wykonywana automatycznie, gdy obiekt jest niszczony?

A. __repr__
B. __del__
C. __str__
D. __init__
W Pythonie funkcja <code>__del__</code> to metoda destruktora, która jest wywoływana, gdy obiekt jest niszczony. Jest to część procesu zarządzania pamięcią, gdzie interpreter Pythona automatycznie usuwa obiekty, które nie są już potrzebne, aby zwolnić pamięć. <code>__del__</code> pozwala na wykonanie dodatkowych czynności przed ostatecznym usunięciem obiektu, takich jak zamknięcie plików czy połączeń sieciowych. Warto jednak pamiętać, że użycie <code>__del__</code> nie jest zalecane do zarządzania zasobami, ponieważ może prowadzić do trudnych do zdiagnozowania błędów, szczególnie gdy obiekty są usuwane w nieprzewidywalnym momencie. Zamiast tego, lepiej jest używać menedżerów kontekstu (z instrukcją <code>with</code>), które zapewniają bardziej kontrolowane i bezpieczne zwalnianie zasobów. Przykładowo, otwierając plik za pomocą <code>with open('plik.txt', 'r') as f:</code>, masz pewność, że plik zostanie zamknięty poprawnie po zakończeniu bloku kodu, niezależnie od tego, czy wystąpił błąd.

Pytanie 4

Jakie z wymienionych narzędzi jest szeroko stosowane do debugowania aplikacji internetowych?

A. Blender
B. Git
C. Postman
D. Chrome DevTools
Chrome DevTools to potężne narzędzie wbudowane w przeglądarkę Google Chrome, które umożliwia debugowanie aplikacji webowych. Umożliwia ono analizowanie struktury DOM, monitorowanie sieci, profilowanie wydajności oraz inspekcję kodu JavaScript. Chrome DevTools pozwala na śledzenie błędów w czasie rzeczywistym, edytowanie stylów CSS oraz modyfikowanie HTML bezpośrednio w przeglądarce, co znacznie przyspiesza proces rozwoju i testowania aplikacji webowych.

Pytanie 5

Która z poniższych metod tablicowych w JavaScript nie modyfikuje oryginalnej tablicy?

A. sort()
B. push()
C. splice()
D. map()
Wybór metod, które modyfikują oryginalną tablicę w JavaScript, może prowadzić do nieporozumień, szczególnie dla osób rozpoczynających przygodę z tym językiem programowania. Metody takie jak splice(), sort() czy push() wprowadzają zmiany w oryginalnych danych, co może skutkować niezamierzonymi efektami ubocznymi. Na przykład, splice() jest używane do usuwania lub dodawania elementów w tablicy, co bezpośrednio zmienia jej strukturę. Z kolei sort() zmienia kolejność elementów w tablicy na podstawie kryteriów porównania, co może prowadzić do utraty dotychczasowego porządku, jeśli oryginalna tablica jest nadal potrzebna w jej pierwotnej formie. Push() natomiast dodaje nowe elementy na końcu tablicy, co zwiększa jej długość oraz może wpłynąć na logikę aplikacji, jeżeli elementy są wykorzystywane w innych częściach kodu. Te metody mogą prowadzić do typowych błędów myślowych, takich jak założenie, że operacje na danych są statyczne i nie wpływają na ich oryginalne formy. Dlatego w praktyce programistycznej, szczególnie w większych i bardziej złożonych projektach, istotne jest, aby być świadomym, jakie metody wpływają na oryginalne dane, aby uniknąć przypadkowych błędów oraz nieprzewidzianych konsekwencji. Używanie funkcji, które nie zmieniają oryginalnej tablicy, takich jak map(), cieszy się dużą popularnością i jest zgodne z najlepszymi praktykami w programowaniu funkcyjnym.

Pytanie 6

Wykorzystanie typu DECIMAL w MySQL wymaga wcześniejszego określenia długości (liczby cyfr) przed oraz po przecinku. Jak należy to zapisać?

A. łańcuchowy
B. stałoprzecinkowy
C. zmiennoprzecinkowy
D. logiczny
Typ łańcuchowy w MySQL odnosi się do przechowywania danych tekstowych, takich jak VARCHAR czy CHAR, które są używane do przechowywania łańcuchów znaków. W przeciwieństwie do typu DECIMAL, nie ma on zastosowania do reprezentacji wartości numerycznych, co sprawia, że nie nadaje się do obliczeń matematycznych wymagających precyzji. Typ zmiennoprzecinkowy (FLOAT, DOUBLE) z kolei jest używany do przechowywania liczb, które mogą obejmować wartości z przecinkiem dziesiętnym, ale mogą cierpieć na problemy z precyzją, ponieważ są reprezentowane w formie binarnej. Ze względu na sposób przechowywania, liczby zmiennoprzecinkowe mogą prowadzić do niezamierzonych błędów zaokrągleń, co czyni je mniej odpowiednimi w kontekście finansowym. Typ logiczny (BOOLEAN) ma na celu przechowywanie wartości prawda/fałsz i nie jest dostosowany do przechowywania wartości liczbowych. Podsumowując, wszystkie trzy wymienione typy są nieodpowiednie do przechowywania liczb dziesiętnych z określoną precyzją, co stanowi kluczową cechę typu DECIMAL, który oferuje większą kontrolę nad dokładnością obliczeń.

Pytanie 7

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

A. obsługa przycisku ekranu dotykowego
B. kod XML
C. kod Java
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 8

Który z poniższych opisów najlepiej definiuje kompilator?

A. Narzędzie do analizy kodu w czasie rzeczywistym
B. Program łączący dynamiczne biblioteki z kodem źródłowym
C. Narzędzie przekształcające kod źródłowy na plik wykonywalny
D. System monitorujący zmiany w kodzie źródłowym
Kompilator to narzędzie, które przekształca kod źródłowy napisany w języku programowania na plik wykonywalny (binarny), który może być uruchomiony bez potrzeby ponownej kompilacji. Proces ten obejmuje kilka etapów, takich jak analiza leksykalna, analiza składniowa, optymalizacja kodu oraz generowanie kodu maszynowego. Kompilator jest nieodzownym elementem w językach takich jak C, C++ czy Java. Generowany plik wykonywalny może działać szybciej niż kod interpretowany, ponieważ nie wymaga tłumaczenia w czasie rzeczywistym.

Pytanie 9

Które narzędzie służy do zarządzania zależnościami w projekcie JavaScript?

A. npm
B. postman
C. git
D. docker
Git, Docker i Postman to narzędzia, które są niezwykle przydatne w procesie tworzenia oprogramowania, ale pełnią zupełnie inne funkcje niż npm. Git to system kontroli wersji, który umożliwia śledzenie zmian w kodzie oraz współpracę zespołową. Chociaż jest kluczowy w zarządzaniu projektami, nie ma zastosowania w zarządzaniu zależnościami, co jest głównym celem npm. Docker to z kolei platforma do tworzenia, uruchamiania i zarządzania aplikacjami w kontenerach, co pozwala na łatwe przenoszenie i uruchamianie aplikacji w różnych środowiskach, ale również nie dotyczy bezpośrednio zarządzania paczkami JavaScript. Postman jest narzędziem do testowania interfejsów API, co także nie ma związku z instalowaniem i śledzeniem zależności w projektach. Typowym błędem jest mylenie funkcji tych narzędzi, co może prowadzić do nieefektywnego zarządzania projektem. Na przykład, jeśli projektant zdecyduje się nie korzystać z npm, może to prowadzić do problemów z zarządzaniem wersjami zewnętrznych bibliotek, co w konsekwencji może skutkować błędami w działaniu aplikacji. Dlatego ważne jest, aby zrozumieć, że każde z tych narzędzi ma swoje unikalne zastosowanie i są one komplementarne, a nie zamienne.

Pytanie 10

Który z wymienionych wzorców projektowych jest najbardziej odpowiedni do uproszczenia interfejsu złożonego systemu?

A. Fasada (Facade)
B. Kompozyt (Composite)
C. Singleton (Singleton)
D. Metoda szablonowa (Template method)
Wzorzec Kompozyt (Composite) umożliwia traktowanie pojedynczych obiektów i ich grup w jednakowy sposób, co ułatwia zarządzanie hierarchicznymi strukturami. Metoda szablonowa (Template Method) definiuje szkielet algorytmu w klasie bazowej, pozwalając podklasom na dostosowanie poszczególnych kroków. Singleton to wzorzec zapewniający istnienie tylko jednej instancji klasy, co jest użyteczne w zarządzaniu zasobami systemowymi, ale nie służy do upraszczania interfejsu do złożonego systemu.

Pytanie 11

Jakie informacje mogą być zapisywane w cookies przeglądarki?

A. Kod źródłowy aplikacji internetowej
B. Prywatne dane użytkownika, na przykład hasła
C. Preferencje użytkownika, takie jak język lub styl strony
D. Dane przechowywane w systemie baz danych
Preferencje użytkownika, takie jak język strony, motyw kolorystyczny lub preferencje dotyczące układu, są typowymi danymi przechowywanymi w ciasteczkach przeglądarki. Mechanizm ciasteczek pozwala na personalizację doświadczenia użytkownika i jest szeroko stosowany w aplikacjach webowych w celu dostosowania interfejsu do indywidualnych potrzeb. Cookies umożliwiają także zapamiętywanie sesji użytkownika, co pozwala uniknąć konieczności wielokrotnego logowania. Informacje te są przechowywane lokalnie w przeglądarce użytkownika i mogą być odczytywane przez aplikację podczas każdej wizyty. Stosowanie ciasteczek zgodnie z przepisami, takimi jak RODO (GDPR), wymaga informowania użytkownika o ich przeznaczeniu oraz uzyskiwania jego zgody na ich przechowywanie, co zapewnia transparentność i zgodność z prawem.

Pytanie 12

Jakie jest oznaczenie normy międzynarodowej?

A. EN
B. ISO
C. CE
D. PN
ISO (International Organization for Standardization) to międzynarodowa organizacja zajmująca się opracowywaniem i wdrażaniem standardów technicznych. Oznaczenie ISO wskazuje, że produkt lub usługa spełnia międzynarodowe normy jakości i bezpieczeństwa, co ułatwia handel oraz współpracę na arenie międzynarodowej. Normy ISO obejmują szeroki zakres dziedzin, takich jak zarządzanie jakością (ISO 9001), zarządzanie środowiskowe (ISO 14001) czy bezpieczeństwo informacji (ISO 27001). Certyfikacja ISO buduje zaufanie klientów i zwiększa konkurencyjność firmy na rynku globalnym.

Pytanie 13

Ergonomiczną oraz właściwą pozycję do pracy przy komputerze zapewni fotel, którego

A. oparcie wspiera lordozę w dolnym odcinku pleców
B. podłokietniki znajdują się 20 cm poniżej blatu
C. oparcie w rejonie szyi jest nachylone do przodu o 40ᵒ
D. podłokietniki są 30 cm powyżej blatu
Niepoprawne odpowiedzi dotyczące ergonomii krzesła przy komputerze zawierają różne nieprawidłowości, które mogą prowadzić do dyskomfortu oraz problemów zdrowotnych. Odpowiedź, w której podłokietniki są 20 cm niżej niż blat, jest niewłaściwa, ponieważ tak duża odległość może zmuszać ramiona do unikania naturalnej pozycji, co prowadzi do napięcia mięśni i bólu karku. Podłokietniki powinny wspierać ramiona w sposób, który pozwala na relaksację ich mięśni. Z kolei odpowiedź, w której podłokietniki są 30 cm wyżej niż blat, również jest niepożądana, ponieważ wywołuje nadmierne napięcie w przedramionach oraz barkach. Takie ustawienie może skutkować przewlekłymi dolegliwościami, jak zespół cieśni nadgarstka. Oparcie w odcinku szyi pochylone do przodu o 40 stopni jest również niekorzystne, gdyż wymusza nienaturalną pozycję głowy, co może prowadzić do dolegliwości takich jak bóle głowy oraz problemy z szyją. Właściwe ustawienie oparcia krzesła jest kluczowe dla utrzymania ergonomicznej postawy, co powinno być zgodne z zaleceniami ergonomii i normami, aby zapewnić długoterminowy komfort pracy przy komputerze.

Pytanie 14

Jaką liczbę warstw zawiera model TCP/IP?

A. 2
B. 5
C. 7
D. 4
Model TCP/IP, znany również jako Internet Protocol Suite, składa się z czterech warstw: warstwy aplikacji, warstwy transportowej, warstwy internetowej oraz warstwy dostępu do sieci. Warstwa aplikacji zajmuje się interakcjami z użytkownikami oraz aplikacjami, implementując protokoły takie jak HTTP, FTP, SMTP. Warstwa transportowa zapewnia komunikację między aplikacjami, w tym protokoły TCP i UDP, które różnią się pod względem niezawodności i kontroli przepływu. Warstwa internetowa, reprezentowana głównie przez protokół IP, odpowiada za adresowanie i trasowanie pakietów danych w sieci. Ostatnia warstwa, warstwa dostępu do sieci, obejmuje protokoły odpowiedzialne za fizyczne przesyłanie danych przez różne media, jak Ethernet czy Wi-Fi. Zrozumienie tych warstw jest kluczowe dla projektowania i implementacji rozwiązań sieciowych, a także dla analizy standardów, takich jak RFC 791 dla IPv4 oraz RFC 2460 dla IPv6, które definiują zasady działania protokołów w warstwie internetowej.

Pytanie 15

Kiedy w programie występuje problem z działaniem, a programista musi zweryfikować wartości znajdujące się w zmiennych w momencie działania aplikacji, to w tym celu należy zastosować

A. debugger
B. wirtualną maszynę
C. analizator składni
D. interpreter
W praktyce programistycznej bardzo łatwo pomylić narzędzia służące do różnych celów, zwłaszcza gdy ktoś dopiero zaczyna swoją przygodę z kodowaniem. Analizator składni to narzędzie wykorzystywane głównie przez kompilatory i interpretery do sprawdzania poprawności gramatycznej kodu źródłowego – pozwala wyłapać błędy na etapie pisania programu, ale nie daje możliwości sprawdzenia, co dokładnie dzieje się „w środku” działającej aplikacji. Stosowanie analizatora składni nie pomoże więc zweryfikować dynamicznych wartości zmiennych w trakcie działania programu. Wirtualna maszyna natomiast to środowisko uruchomieniowe, które umożliwia wykonywanie kodu niezależnie od konkretnej platformy sprzętowej czy systemu operacyjnego (przykład to JVM dla Javy). Chociaż często daje ona pewne narzędzia diagnostyczne, to jej głównym zadaniem nie jest debugowanie kodu ani szczegółowy podgląd zmiennych w czasie rzeczywistym. Interpreter z kolei wykonuje kod linia po linii, ale nie oferuje sam z siebie rozbudowanych opcji diagnostycznych i śledzenia zmiennych, chyba że jest rozbudowany o dodatkowe narzędzia debugujące. Często spotykanym błędem jest mylenie funkcji interpretera czy środowiska uruchomieniowego z narzędziami do debugowania – to nie to samo. Moim zdaniem, żeby skutecznie tropić błędy, trzeba właśnie sięgnąć po debugger, bo to on daje te precyzyjne narzędzia kontroli i podglądu, bez których analiza działania programu „na żywo” byłaby bardzo niewygodna. Warto pamiętać, że dobre praktyki programistyczne zawsze zalecają korzystanie ze specjalistycznych narzędzi do debugowania, bo to po prostu najbardziej efektywna ścieżka szukania błędów.

Pytanie 16

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

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

Pytanie 17

Jakie jest przeznaczenie polecenia "git merge"?

A. Do usuwania zmian w repozytorium
B. Do łączenia zmian z różnych gałęzi
C. Do zakładania nowego repozytorium
D. Do pobierania aktualizacji zdalnego repozytorium
Wiele osób na początku nauki Gita myli różne polecenia, bo brzmią podobnie albo wydają się robić coś bliskiego. "git merge" często bywa mylone z poleceniami typu "git pull" czy "git clone", które mają jednak zupełnie inne zastosowanie. Pobieranie aktualizacji ze zdalnego repozytorium to domena "git pull" – to polecenie automatycznie pobiera nowe commity i próbuje je od razu zintegrować z lokalną gałęzią, często zresztą używając w tle właśnie "merge". Ale samo "git merge" nie ściąga niczego z internetu, ono tylko łączy zmiany już obecne w lokalnych gałęziach. Z kolei tworzenie nowego repozytorium to zadanie "git init"; to zupełnie inny etap pracy, bo dotyczy rozpoczęcia projektu, a nie zarządzania jego rozwojem. Usuwanie zmian w repozytorium – tutaj najczęściej używa się "git reset" czy "git revert", zależnie od tego czy chcemy cofnąć zmiany lokalnie czy naprawić coś w historii. Merge natomiast nie służy do usuwania ani cofania, tylko do scalania zmian – to kluczowe, żeby nie pomylić tych narzędzi, bo można przez to nieźle namieszać w kodzie. Moim zdaniem, głównym błędem jest założenie, że wszystkie polecenia związane z aktualizacją kodu robią to samo, podczas gdy w Git każde z nich ma bardzo konkretne zadanie i konsekwencje. Dla dobrych praktyk w zespole ważne jest, żeby rozumieć subtelne różnice między tymi operacjami. Praktyka pokazuje, że błędne użycie "merge" – jak również zamiana go z "pull" albo "reset" – potrafi prowadzić do chaosu w historii projektu. Warto zatem dobrze opanować przeznaczenie każdego z poleceń przed rozpoczęciem pracy nad większym projektem.

Pytanie 18

Programista pragnie wybrać algorytm, który najszybciej przetwarza dane w jego aplikacji. Na podstawie złożoności obliczeniowej przedstawionej w tabeli, należy wskazać algorytm numer

Algorytm 1O(n²)
Algorytm 2O(n!)
Algorytm 3O(n³)
Algorytm 4O(n)
Algorytm 5O(n²)
A. 3
B. 4
C. 1 lub 5
D. 2 lub 3
Wybierając algorytm o najniższej złożoności obliczeniowej, zawsze warto patrzeć na oznaczenia w notacji dużego O. O(n) oznacza, że czas wykonywania algorytmu rośnie liniowo wraz z rozmiarem danych wejściowych. To zdecydowanie najlepszy wynik z dostępnych, szczególnie jeśli porównać do O(n²), O(n³) albo już totalnie niepraktycznego przy większych n: O(n!). Dlatego Algorytm 4, który ma złożoność O(n), to najrozsądniejszy wybór, jeśli zależy nam na szybkości działania programu. Z mojego doświadczenia, właśnie takie algorytmy są wykorzystywane np. do przetwarzania dużych zbiorów danych w aplikacjach webowych albo w sytuacjach, gdzie liczy się czas odpowiedzi dla użytkownika końcowego. W branży IT, jeśli tylko można zejść poniżej złożoności kwadratowej – raczej zawsze warto to zrobić. Oczywiście, sama złożoność to nie wszystko – czasem prostszy, liniowy algorytm może mieć duże stałe ukryte w implementacji, ale w praktyce O(n) to standard optymalny. Warto też pamiętać, że w rekrutacjach często padają pytania o takie porównania złożoności, bo to podstawowa wiedza każdego programisty. Takie podejście pozwala budować skalowalne systemy, które nie „duszą się” przy większej ilości danych. Moim zdaniem, to jedna z tych rzeczy, które naprawdę się przydają w codziennej pracy.

Pytanie 19

Liczba A4 w zapisie heksadecymalnym ma odpowiadający jej zapis binarny

A. 10100100
B. 10100010
C. 1010100
D. 1011100
Zapisanie liczby A4 z systemu szesnastkowego (heksadecymalnego) do systemu binarnego to podstawowa umiejętność przy pracy z systemami cyfrowymi. W praktyce każda cyfra heksadecymalna odpowiada dokładnie czterem cyfrom binarnym, co wynika bezpośrednio z faktu, że 16=2^4. Gdy rozbijamy A4 na dwie części, mamy literę A (co oznacza 10 w dziesiętnym) oraz cyfrę 4. Zamieniamy więc A na binarny: 1010, a 4 – 0100. Sklejamy razem i dostajemy 10100100 – to jest właśnie prawidłowa odpowiedź. W rzeczywistych projektach, np. podczas programowania mikrokontrolerów, przy analizie adresów pamięci czy pracy z danymi w protokołach sieciowych, umiejętność szybkiej zamiany szesnastkowych wartości na binarne (i odwrotnie) jest totalnie niezbędna. Moim zdaniem zapamiętanie tych konwersji bardzo przyspiesza debugowanie kodu czy analizę rejestrów sprzętowych. To też podstawa przy pracy z narzędziami typu oscyloskop cyfrowy lub analizator stanów logicznych, gdzie często wartości wyświetlane są w jednym systemie, a dokumentacja posługuje się innym. Branża IT i elektronika wręcz żyją tymi zamianami – nie ma co się oszukiwać, im szybciej to opanujesz, tym mniej błędów popełnisz przy konfiguracji sprzętu czy pisaniu sterowników.

Pytanie 20

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

A. Do zarządzania bazami danych
B. Do projektowania graficznego interfejsu użytkownika
C. Do optymalizacji działania aplikacji
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 21

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

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

Pytanie 22

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

A. Metoda statyczna
B. Konstruktor
C. Destruktor
D. Funkcja zaprzyjaźniona
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 23

Jakie są różnice między testami funkcjonalnymi a niefunkcjonalnymi?

A. Testy funkcjonalne koncentrują się na interfejsie, a niefunkcjonalne na backendzie aplikacji
B. Testy funkcjonalne są realizowane tylko przez końcowych użytkowników, natomiast niefunkcjonalne przez programistów
C. Testy funkcjonalne oceniają wydajność aplikacji, podczas gdy niefunkcjonalne weryfikują poprawność kodu
D. Testy funkcjonalne oceniają zgodność działania aplikacji z założeniami, a niefunkcjonalne analizują aspekty wydajności, bezpieczeństwa i użyteczności
Twierdzenie, że testy funkcjonalne sprawdzają wydajność aplikacji, a niefunkcjonalne poprawność kodu, jest błędne – testy funkcjonalne dotyczą zgodności aplikacji z wymaganiami, natomiast wydajność jest domeną testów niefunkcjonalnych. Testy funkcjonalne nie są przeprowadzane wyłącznie przez użytkowników końcowych – najczęściej są realizowane przez zespoły QA i testerów manualnych lub automatycznych. Podział testów na interfejsowe i backendowe nie jest synonimem podziału na testy funkcjonalne i niefunkcjonalne – oba typy mogą dotyczyć zarówno interfejsu, jak i zaplecza aplikacji.

Pytanie 24

Wskaż poprawny komentarz jednoliniowy, który można dodać w linii 3 w miejscu znaków zapytania, aby był zgodny ze składnią i opisywał operację przeprowadzaną w tej linii?

string[] langs = {"C++", "C#", "Java", "Python"};
foreach (string i in langs) {
    Console.WriteLine(i);    ???
}
A. # wyświetlenie elementu tablicy
B. // wypełnienie elementu tablicy
C. // wyświetlenie elementu tablicy
D. # wypełnienie elementu tablicy
Odpowiedź // wyswietlenie elementu tablicy jest poprawna, ponieważ komentarze jednoliniowe w języku C# rozpoczynają się od dwóch ukośników: //. W tym przypadku linia Console.WriteLine(i); odpowiedzialna jest za wyświetlenie elementu tablicy na konsoli. Komentarz ten poprawnie opisuje, co robi dana linia kodu, co jest dobrą praktyką w programowaniu, ponieważ ułatwia zrozumienie funkcji kodu innym programistom lub nawet nam samym w przyszłości. Komentarze są szczególnie przydatne, gdy kod jest skomplikowany i wymaga wyjaśnień. Warto zawsze stosować komentarze, by opisywały one istotne fragmenty kodu, co znacząco zwiększa jego czytelność i utrzymywalność. Praktyka dodawania takich opisów jest zgodna z zasadami czystego kodu, które promują czytelność i zrozumiałość. Dzięki takim komentarzom osoby przeglądające kod mogą szybko zorientować się, jakie funkcje pełnią poszczególne jego fragmenty, co usprawnia proces debugowania i dalszego rozwoju oprogramowania.

Pytanie 25

Diagram Gantta, który został zaprezentowany, odnosi się do projektu IT. Przyjmując, że każdy członek zespołu posiada odpowiednie kompetencje do realizacji każdego z zadań, a każde zadanie może być przypisane tylko jednej osobie, która poświęca na nie pełen dzień pracy, to minimalna liczba osób w zespole wynosi

Ilustracja do pytania
A. 1 osobę
B. 2 osoby
C. 5 osób
D. 4 osoby
Diagram Gantta to narzędzie wizualne używane do planowania i zarządzania projektami. Pokazuje harmonogram zadań w czasie. Na przedstawionym diagramie mamy pięć zadań projektowych: Projekt aplikacji Grafika Strona WWW Aplikacja front-end i Aplikacja back-end. Aby określić minimalną liczbę osób potrzebnych do realizacji projektu należy zidentyfikować które zadania mogą być realizowane równocześnie. Z diagramu wynika że w pierwszym tygodniu (1.02 - 7.02) realizowane są zadania Projekt aplikacji i Grafika które wymagają dwóch osób. W kolejnych tygodniach zadania są ułożone tak by unikać nakładania się co oznacza że w każdej kolejnej fazie projektu można kontynuować prace przydzielając jedną osobę do każdego zadania. Dlatego minimalna liczba osób wymagana do realizacji tego projektu to dwie. Taki sposób planowania jest zgodny z zasadami efektywnego zarządzania zasobami w projektach informatycznych co pozwala na optymalne wykorzystanie czasu i umiejętności zespołu. Zastosowanie metody diagramu Gantta jest powszechną praktyką w branży IT pozwalającą na lepsze zobrazowanie zależności i potrzeb kadrowych w projektach.

Pytanie 26

Jak w CSS definiuje się element, który ma reagować na najechanie kursorem?

A. :click
B. :mouse
C. :over
D. :hover
Odpowiedź :hover jest poprawna, ponieważ w CSS pseudo-klasa :hover jest używana do definiowania stylów elementu, gdy kursor myszy znajduje się nad tym elementem. Jest to niezwykle przydatne w tworzeniu interaktywnych stron internetowych, ponieważ umożliwia twórcom zwiększenie responsywności elementów, takich jak przyciski, linki czy obrazy. Przykładowo, można zastosować :hover do zmiany koloru tła przycisku, co wskazuje użytkownikom, że dany element jest aktywny i gotowy do interakcji. Zastosowanie tej pseudo-klasy nie tylko poprawia estetykę strony, ale również zwiększa jej użyteczność oraz dostępność, co jest zgodne z dobrymi praktykami w projektowaniu UI/UX. Należy pamiętać, że :hover działa tylko w przeglądarkach obsługujących CSS, a efekty związane z tą pseudo-klasą są natychmiastowe, co sprawia, że są one bardzo efektywne w zastosowaniu. Warto również zaznaczyć, że w przypadku urządzeń dotykowych, takich jak smartfony, reakcja na najechanie może być symulowana poprzez dotknięcie ekranu, co sprawia, że ta technika jest uniwersalna.

Pytanie 27

W sekcji, która odpowiada za obsługę wyjątku wygenerowanego przez aplikację, należy to zdefiniować

A. try
B. finally
C. catch
D. throw
Sekcja catch jest dokładnie tą częścią bloku obsługi wyjątków, która przechwytuje wyjątki wygenerowane w sekcji try. Moim zdaniem to podstawowa rzecz, którą musi znać każdy programista, bo obsługa wyjątków to codzienność, zwłaszcza jak pracuje się z zewnętrznymi bibliotekami czy systemami operacyjnymi. W praktyce catch pozwala nam napisać kod, który zareaguje na konkretne typy błędów, np. wyświetli komunikat użytkownikowi albo zapisze log do pliku. Warto też pamiętać o dobrych praktykach – nie łap wszystkich wyjątków jednym ogólnym catch, bo łatwo wtedy ukryć poważniejsze błędy. Lepiej tworzyć osobne sekcje catch dla różnych typów wyjątków. Przykład z życia: kiedy czytasz plik z dysku, może wystąpić FileNotFoundException lub IOException – można wtedy każdy z tych przypadków obsłużyć osobno. Standardy programowania, zwłaszcza w językach takich jak Java czy C#, wyraźnie zalecają stosowanie catch do obsługi określonych i przewidywalnych wyjątków, a nie do łapania wszystkiego na ślepo. Fajnie też podkreślić, że w niektórych językach catch może przyjmować różne formy, np. except w Pythonie, ale logika pozostaje podobna. Cały blok try-catch sprawia, że program jest bardziej odporny na nieoczekiwane sytuacje – dla mnie to podstawa solidnego kodu.

Pytanie 28

Jaki typ złośliwego oprogramowania funkcjonuje w tle, zbierając dane o wprowadzanych hasłach?

A. Keylogger
B. Adware
C. Trojan
D. Spyware
Keylogger to takie złośliwe oprogramowanie, które działa w tle i rejestruje wszystkie naciśnięcia klawiszy. To naprawdę niebezpieczne, bo może przechwytywać hasła i inne ważne dane osobowe. Keyloggery mogą się dostawać na komputer na różne sposoby, na przykład przez zainfekowane pliki, złośliwe reklamy albo w ramach innych niebezpiecznych programów. Przykładami takich keyloggerów są Spyrix czy Perfect Keylogger, które mogą monitorować, co robisz na komputerze. Z punktu widzenia bezpieczeństwa, standardy takie jak ISO/IEC 27001 mówią, jak ważna jest ochrona informacji. Dlatego tak istotne jest, żeby użytkownicy mieli świadomość zagrożeń, jakie niosą keyloggery i używali dobrego oprogramowania antywirusowego, żeby chronić swoje urządzenia i dane.

Pytanie 29

Która z właściwości przycisków typu Radio-button opisanych w przedstawionym fragmencie dokumentacji jest poprawna?

Radio-button label

... The label can be positioned before or after the radio-button by setting the labelPosition property to 'before' or 'after'.

Radio groups

Radio-buttons should typically be placed inside of an <mat-radio-group> unless the DOM structure would make that impossible ... The radio-group has a value property that reflects the currently selected radio-button inside of the group.

Źródło: https://material.angular.io/components/radio/overview

A. Właściwość labelPosition może przyjmować jedną z dwóch opcji
B. Przyciski radio-button są organizowane w elemencie o nazwie <radio-group>
C. Etykieta (label) może być umieszczona wyłącznie po przycisku radio-button
D. Wartość właściwości value grupy radio przechowuje tekst etykiety dla każdego radio-button
Właściwość labelPosition w przyciskach typu radio-button, szczególnie w popularnych bibliotekach jak Angular Material, naprawdę potrafi ułatwić życie programiście. Jej działanie sprowadza się do tego, że pozwala określić, czy etykieta powinna być wyświetlana przed, czy po elemencie radio. Można ustawić tę właściwość na 'before' albo 'after'. Nie brzmi skomplikowanie, ale znaczenie praktyczne jest ogromne – czasem projekt graficzny wymaga, by tekst pojawił się z lewej strony guzika, a czasem z prawej. Dobre praktyki UX też to uwzględniają, bo zgodność z oczekiwaniami użytkownika poprawia czytelność formularzy. Moim zdaniem, jeśli budujesz interfejs dla internautów z różnych środowisk kulturowych (np. z językiem pisanym od prawej do lewej), ta opcja jest wręcz niezbędna. Warto też pamiętać, że takie ustawienie można łatwo nadpisywać na poziomie pojedynczego przycisku, co daje dużą elastyczność. W większości poważnych frameworków webowych, np. Angularze, ta właściwość jest dokumentowana jako podstawowa, bo daje deweloperowi kontrolę bez grzebania w CSS-ach. Sam nie raz korzystałem z labelPosition, szczególnie w korporacyjnych projektach, gdzie musiałem spełniać szczegółowe wymagania projektantów – dzięki temu oszczędza się czas i nerwy.

Pytanie 30

Jakie funkcje realizuje polecenie "git clone"?

A. Łączy dwa branche w repozytorium
B. Usuwa zdalne repozytorium
C. Tworzy lokalną kopię już istniejącego repozytorium
D. Rejestruje zmiany w historii repozytorium
Polecenie "git clone" to w zasadzie jedna z pierwszych rzeczy, które poznaje się na początku pracy z Gitem. Służy ono do skopiowania całego istniejącego repozytorium – czyli pobiera zarówno wszystkie pliki, jak i całą historię commitów. To jest ogromnie przydatne, bo nie tylko masz najnowszy kod, ale od razu całą historię zmian, branche, tagi i inne rzeczy. Standardowo używa się tego polecenia, kiedy chcesz zacząć pracę nad projektem, który jest już na jakimś zdalnym serwerze (np. Githubie albo GitLabie). W praktyce wygląda to tak, że podajesz adres repozytorium, wpisujesz "git clone https://adres.repo.git" i po kilku chwilach masz pełną kopię projektu u siebie na dysku. Co ciekawe, narzędzie od razu ustawia Ci zdalne połączenie do pierwotnego repozytorium jako "origin", więc potem możesz spokojnie wykonywać polecenia typu git fetch, git pull czy git push. Moim zdaniem to super wygodne, bo cała struktura repozytorium, nawet z podfolderami czy nietypowymi ustawieniami, zostaje zachowana. Warto pamiętać, że git clone to nie tylko kopiowanie plików – to pobieranie całej bazy danych Git, więc masz możliwość cofania się w historii czy przeglądania wszystkich commitów lokalnie i offline. Z mojego doświadczenia: często nowi użytkownicy nie doceniają jeszcze, jak ważne jest to, żeby zawsze pracować na pełnej kopii, a nie wycinku repo. To podstawa bezpiecznej i efektywnej pracy zespołowej.

Pytanie 31

Wskaż typy numeryczne o stałej precyzji

A. int, short, long
B. bool char, string
C. float, double
D. long long, long double
Typy numeryczne o stałej precyzji (czyli tzw. typy całkowite) to na przykład int, short, long – dokładnie te, które wskazałeś. Działają one trochę jak liczniki – przechowują liczby całkowite w określonym zakresie, bez przecinka. Moim zdaniem to podstawa, jeśli chodzi o reprezentowanie wartości typu liczba sztuk, indeks, identyfikator – wszędzie tam, gdzie nie potrzebujemy części ułamkowej. Ich precyzja wynika z tego, że są zdefiniowane w standardzie (np. w C++ czy Javie) jako liczby całkowite reprezentowane przez określoną liczbę bitów. Dla przykładu, 32-bitowy int zawsze pomieści wartości od -2 147 483 648 do 2 147 483 647 i każdy bit jest tu ważny. W praktyce, programując mikrokontrolery albo systemy wbudowane, właściwy wybór typu o stałej precyzji potrafi decydować o stabilności i wydajności całego programu. Warto też wiedzieć, że typy te – int, short, long – nie mają błędu zaokrągleń, co często zdarza się przy operacjach na liczbach zmiennoprzecinkowych. No i jeszcze takie małe spostrzeżenie: dobrym zwyczajem jest wybieranie najmniejszego typu całkowitego, który pokryje wymagany zakres, żeby zoptymalizować zużycie pamięci. Takie podejście mocno się przydaje, zwłaszcza jak się pracuje nad większym projektem, gdzie każda optymalizacja jest na wagę złota.

Pytanie 32

Jaki jest zasadniczy cel ataku phishingowego?

A. Uniemożliwienie dostępu do usług internetowych
B. Kradzież haseł z pamięci operacyjnej urządzenia
C. Zbieranie danych osobowych za pomocą podszywających się stron lub wiadomości
D. Zakłócanie pracy sieci przez nadmiarowe zapytania
Głównym celem ataku phishingowego jest przejęcie danych osobowych ofiary, co realizowane jest poprzez wykorzystanie fałszywych stron internetowych lub wiadomości. Atakujący tworzą atrakcyjne i wiarygodne kopie legalnych stron, często podszywając się pod znane instytucje bankowe, portale społecznościowe czy serwisy e-commerce. Użytkownik, nieświadomy zagrożenia, wprowadza swoje dane logowania, numery kart kredytowych lub inne wrażliwe informacje, które trafiają w ręce cyberprzestępców. Aby ułatwić ten proces, phisherzy często wykorzystują techniki inżynierii społecznej, takie jak fałszywe powiadomienia o konieczności weryfikacji konta. Przykłady skutecznych ataków phishingowych obejmują kampanie wysyłania e-maili, które informują użytkowników o rzekomych problemach z kontem, kierując ich na podszyte strony. Standardy bezpieczeństwa, takie jak DMARC, SPF i DKIM, są kluczowe dla ochrony przed tego rodzaju atakami, jednak ich brak lub niewłaściwe wdrożenie zwiększa podatność na phishing.

Pytanie 33

Jaką kategorię własności intelektualnej reprezentują znaki towarowe?

A. Własność przemysłowa
B. Prawa pokrewne
C. Autorskie prawa majątkowe
D. Dobra niematerialne
Znaki towarowe należą do kategorii własności przemysłowej. Ochrona znaków towarowych pozwala firmom na zabezpieczenie ich brandingu, logotypów oraz nazw produktów przed nieuprawnionym wykorzystaniem przez konkurencję. Rejestracja znaku towarowego daje właścicielowi prawo do wyłącznego używania go w celach komercyjnych i przeciwdziałania naruszeniom. Własność przemysłowa obejmuje także patenty, wzory przemysłowe i oznaczenia geograficzne, stanowiąc kluczowy element strategii ochrony marki oraz wartości firmy na rynku międzynarodowym.

Pytanie 34

Aby wykorzystać framework Django, należy pisać w języku

A. Python
B. Java
C. C#
D. JavaScript
Framework Django został zaprojektowany specjalnie dla języka Python i z tego powodu wszystkie projekty, aplikacje czy rozszerzenia w Django realizuje się właśnie w tym języku. To nie jest przypadek – Python od lat cieszy się ogromną popularnością w branży webowej, między innymi dzięki swojej czytelności i elastyczności. Moim zdaniem to właśnie ta prostota składni Pythona sprawia, że tak łatwo zacząć nawet większe projekty – nie trzeba tracić czasu na walkę z zawiłościami języka. W praktyce programiści korzystający z Django piszą zarówno widoki, modele, jak i całą logikę aplikacji w Pythonie, wykorzystując przy tym liczne biblioteki i narzędzia tego ekosystemu. Django jest zgodny z filozofią DRY (Don’t Repeat Yourself), co oznacza, że kod w Pythonie staje się bardzo zwięzły i przejrzysty. Często można spotkać się z opinią, że nauka Django to świetny sposób na wejście w świat programowania webowego – sam się z tym zgadzam. Warto wiedzieć, że ogromna społeczność Pythona i Django oferuje mnóstwo wsparcia, dokumentacji oraz gotowych rozwiązań, co na co dzień ułatwia pracę. Tylko w Pythonie zbudujesz pełnoprawną aplikację w Django, bo framework ten nie wspiera innych języków – to się po prostu nie uda, nawet jeśli ktoś próbuje kombinować z integracjami. Widać to choćby po oficjalnych tutorialach i dokumentacji – wszystko, od konfiguracji po deployment, opiera się na pythonowych narzędziach.

Pytanie 35

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

A. Content Definition Notation - notacja do definiowania treści w aplikacjach
B. Compressed Data Node - węzeł kompresji danych w architekturze mikrousług
C. Cross Domain Navigation - metoda nawigacji między domenami w aplikacjach webowych
D. Content Delivery Network - sieć rozproszona geograficznie, służąca do dostarczania treści
W kontekście aplikacji webowych błędne skróty i pojęcia często prowadzą do nieporozumień dotyczących architektury i technologii. Cross Domain Navigation, chociaż istotne w kontekście bezpieczeństwa i wymiany danych między różnymi domenami, nie jest związane z dostarczaniem treści. Metoda ta dotyczy głównie sposobów nawigacji w aplikacjach, które mogą wymagać zarządzania różnymi politykami CORS (Cross-Origin Resource Sharing), ale nie definiuje sposobów optymalizacji dostarczania treści. Compressed Data Node to termin, który sugeruje węzeł odpowiedzialny za kompresję danych w architekturze mikrousług, ale nie wiąże się z geograficznie rozproszonym dostarczaniem treści, co jest kluczowym aspektem działania CDN. Content Definition Notation to z kolei nieznany termin w literaturze dotyczącej technologii webowej, nie mający powszechnie uznawanej definicji w branży. Błędem myślowym byłoby utożsamianie tych terminów z sieciami dostarczania treści, ponieważ każde z nich ma swoją specyfikę i zastosowanie. W kontekście aplikacji internetowych kluczowe jest zrozumienie, że CDN ma na celu poprawę szybkości i efektywności dostarczania treści, co jest niezrównanie bardziej złożonym i istotnym zagadnieniem niż tylko nawigacja czy kompresja danych. Praktyki związane z sieciami CDN są dobrze udokumentowane i należy je stosować zgodnie z najlepszymi standardami branżowymi, aby zapewnić wysoką jakość usług dla użytkowników.

Pytanie 36

Jakie informacje przedstawia diagram Gantta?

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

Pytanie 37

Czym jest klasa w programowaniu obiektowym?

A. typ danych
B. zmienna
C. instrukcja
D. wskaźnik
Bardzo często spotykam się z tym, że klasa w OOP bywa mylona z innymi pojęciami, które brzmią znajomo, ale mają zupełnie inne zastosowanie i sens. Zacznijmy od zmiennej – to po prostu miejsce w pamięci, które przechowuje jakąś wartość, np. liczbę czy napis. Zmienna sama w sobie nie posiada żadnych zachowań, nie można do niej przypisać metod czy właściwości – to tylko pojemnik na dane, nie szablon czy definicja czegoś większego. Klasa natomiast służy do tworzenia zmiennych-typu obiekt, ale nie jest zmienną jako taką. W przypadku wskaźnika sprawa jest trochę bardziej podchwytliwa, bo w językach takich jak C++ rzeczywiście często operujemy wskaźnikami do obiektów lub klas. Jednak wskaźnik to zwyczajnie adres w pamięci, który wskazuje na jakąś zmienną, obiekt czy nawet funkcję. Klasa nie jest adresem, tylko strukturą opisującą, jak mają wyglądać i się zachowywać obiekty. Instrukcja natomiast to najmniejszy element programu wykonujący konkretne polecenie, np. przypisanie wartości czy wywołanie funkcji – nie ma żadnych cech typowych dla klasy, nie jest typem danych i nie opisuje żadnej struktury. Z mojego doświadczenia wynika, że problem z rozróżnieniem tych pojęć często bierze się z nauki „na pamięć” bez zrozumienia, na czym polega modelowanie obiektów w praktyce. W programowaniu obiektowym klasa jest właśnie typem danych, ale takim, który pozwala na zdefiniowanie zarówno przechowywanych danych, jak i operacji na nich, co jest jednym z głównych powodów jej wprowadzenia do języków takich jak Java, Python czy C#. To dzięki klasom możemy tworzyć kod wielokrotnego użytku, budować hierarchie obiektów i korzystać z takich mechanizmów jak dziedziczenie czy polimorfizm. Dobre zrozumienie tej roli jest kluczowe, bo pozwala unikać powtarzalnego kodu i podnosi jakość projektowanych aplikacji – a o to przecież chodzi w profesjonalnym programowaniu.

Pytanie 38

Co to jest Docker?

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

Pytanie 39

Jakie narzędzie jest najbardziej odpowiednie do identyfikacji błędów w trakcie działania programu?

A. Linker
B. Kompilator
C. Debugger
D. Interpreter
Debugger to narzędzie przeznaczone do wyszukiwania błędów w czasie wykonywania programu. Pozwala na zatrzymywanie aplikacji w wybranych miejscach, analizowanie wartości zmiennych i śledzenie przepływu sterowania, co umożliwia szybkie wykrywanie błędów logicznych i błędów czasu wykonania. Debugger jest niezbędny w procesie rozwoju oprogramowania, ponieważ pomaga programistom w zrozumieniu, jak ich kod działa w rzeczywistości i jak różne warunki wpływają na jego funkcjonowanie.

Pytanie 40

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

A. Aplikacja do robienia zdjęć
B. Aplikacja kalkulator
C. Aplikacja gromadząca listę kontaktów użytkownika
D. Aplikacja wyświetlająca lokalny czas
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.