Wyniki egzaminu

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

Egzamin zdany!

Wynik: 25/40 punktów (62,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

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

1 terabajt (TB) to ile gigabajtów (GB)?

A. 512
B. 1024
C. 1000
D. 2048
No to fajnie, że trafiłeś w temat! 1 terabajt (TB) to 1024 gigabajty (GB), co wynika z systemu binarnego, który w IT jest najczęściej używany. Trochę technicznie mówiąc, 1 TB to tak naprawdę 2^40 bajtów, co daje nam ogromną liczbę – dokładnie 1 099 511 627 776 bajtów. Jak podzielisz to przez 1 073 741 824 bajtów, które to są 1 GB, to wyjdzie 1024 GB. Warto wiedzieć, że w świecie komputerów i systemów operacyjnych operujemy głównie na tym systemie binarnym. Ale uwaga, bo producenci dysków często podają pojemności w systemie dziesiętnym, i wtedy 1 TB to jakby 1 000 GB. To może wprowadzać zamieszanie, więc dobrze jest sprawdzać specyfikacje i mieć to na uwadze, żeby nie było nieporozumień. Większość systemów, jak Windows czy Linux, działa w tym binarnym, więc warto to znać, gdyż to ułatwia pracę zarówno użytkownikom, jak i fachowcom z branży IT.

Pytanie 3

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

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

Pytanie 4

Jednym z elementów, które mają zostać zaimplementowane w aplikacji, jest możliwość cofnięcia ostatnich działań do 20 operacji wstecz (undo). Struktura danych, która jest odpowiednia do tego celu i pozwala na dostęp tylko do ostatnio dodanego elementu, to:

A. tablica
B. stos
C. kolejka
D. drzewo
Kolejka to struktura danych działająca na zasadzie FIFO (First In, First Out), co oznacza, że pierwszy dodany element jest pierwszym, który zostaje usunięty. Tego rodzaju organizacja danych nie nadaje się do implementacji funkcji cofania, ponieważ nie umożliwia łatwego dostępu do ostatnich operacji. W kontekście aplikacji umożliwiającej cofnięcie działań, kolejka nie zaspokaja potrzeb użytkownika, gdyż nie pozwala na usunięcie najnowszej operacji. Drzewo, jako bardziej złożona struktura, jest używane głównie do organizacji danych w hierarchicznej formie. Chociaż drzewa mogą być skuteczne w wyszukiwaniu i porządkowaniu danych, nie są odpowiednie do realizacji funkcji cofania ostatnich operacji, ponieważ nie oferują prostego dostępu do ostatnio dodanych elementów. Wreszcie, tablica jest statyczną strukturą danych, która przechowuje elementy w sekwencyjnej kolejności. Mimo że można by używać tablicy do przechowywania operacji, ich ograniczenia dotyczące rozmiaru i elastyczności sprawiają, że są mniej efektywne w porównaniu do stosu w kontekście cofania operacji. W związku z tym, ani kolejka, ani drzewo, ani tablica nie są odpowiednimi wyborami dla funkcjonalności cofania w aplikacji, co czyni stos jedynym logicznym rozwiązaniem.

Pytanie 5

Który z wymienionych dokumentów jest najczęściej stosowany w zarządzaniu pracą zespołu Scrum?

A. Product backlog
B. Lista zasobów ludzkich
C. Specyfikacja techniczna
D. Diagram Gantta
Diagram Gantta jest fajnym narzędziem do pokazywania harmonogramu, ale nie ma go w zarządzaniu backlogiem. Specyfikacja techniczna to co innego – tam są szczegóły implementacyjne, a nie priorytety funkcji. Lista zasobów ludzkich to temat o zarządzaniu personelem, a nie o zadaniach i priorytetach w Scrumie. Więc tu bardziej musisz uważać na to, co do czego pasuje.

Pytanie 6

Ile kilobajtów (KB) znajduje się w jednym megabajcie (MB)?

A. 10
B. 1024
C. 1000
D. 100
Odpowiedzi, które wskazują na wartości 10, 100 i 1000 kilobajtów jako równowartość 1 megabajta, są błędne z perspektywy standardów komputerowych. Wartość 10 KB jest zdecydowanie zbyt mała, aby mogła odpowiadać wielkości 1 MB, which is a fundamental misunderstanding of data measurement. Tego rodzaju konwersja wprowadza w błąd, ponieważ nie uwzględnia potęg liczby 2, które są kluczowe w kontekście binarnego systemu liczenia. Z kolei 100 KB również nie jest właściwe, ponieważ jest to zaledwie 1/10 megabajta, co jest dalekie od rzeczywistej konwersji. Ponadto, traktowanie 1000 KB jako równowartości 1 MB jest nawiązaniem do systemu dziesiętnego, który jest używany przez niektóre branże, ale nie jest to standardowe podejście w obliczeniach komputerowych. Z technicznego punktu widzenia, przyjęcie, że 1 MB to 1000 KB, może prowadzić do błędnych obliczeń oraz problemów z zarządzaniem danymi w systemach operacyjnych, które stosują binarny system pomiaru pamięci. Dlatego kluczowe jest, aby zrozumieć różnice między tymi systemami, aby uniknąć nieporozumień w zakresie pojemności danych.

Pytanie 7

Z podanej definicji pola licznik można wywnioskować, iż

class MojaKlasa
{
    private static int licznik;
    ...
A. bieżąca wartość pola jest wspólna dla wszystkich instancji klasy i nie może być zmieniana
B. bieżąca wartość pola jest wspólna dla wszystkich instancji klasy
C. pole jest związane z określoną instancją klasy i jego wartość jest unikalna tylko dla tej instancji
D. pole nie może być zmieniane w kodzie klasy
Warto się chwilę zatrzymać i przeanalizować, skąd biorą się błędne przekonania dotyczące pól statycznych. Bardzo częstym nieporozumieniem jest utożsamianie słowa static z czymś „niezmiennym” albo uniemożliwiającym modyfikacje. Tymczasem static oznacza tyle, że pole nie jest związane z pojedynczym obiektem, tylko z całą klasą – czyli wszystkie obiekty tej klasy dzielą jedną, wspólną wartość licznik. To nie jest tak, że static czyni pole stałym – żeby pole było niezmienne, potrzeba słowa kluczowego final (w Javie), a tutaj go ewidentnie nie ma. Często osoby początkujące mylą static z final i stąd pojawia się przekonanie, że pole nie może być modyfikowane – co nie jest prawdą. Równie błędne jest zakładanie, że każde pole, które nie jest static, jest automatycznie unikalne per instancja. Gdybyśmy usunęli static z definicji licznik, wtedy rzeczywiście każda instancja MojaKlasa miałaby swoją własną wersję tej zmiennej, ale w tym przypadku wszystkie obiekty współdzielą tę samą wartość. Jeszcze inny błąd to przekonanie, że pole prywatne (private) nie może być zmieniane w kodzie klasy – w rzeczywistości private ogranicza dostęp do pola tylko do wnętrza klasy, ale metody tej klasy mają pełne prawo je modyfikować. Tak więc, patrząc z perspektywy dobrych praktyk programistycznych i samej składni, static to po prostu cecha, która decyduje o zakresie współdzielenia pola pomiędzy instancjami, a nie o jego niezmienności czy widoczności na zewnątrz. Moim zdaniem kluczowe jest wyciągnięcie z tego wniosku, że static to współdzielenie, a nie blokada zmian – i na tym polega istota poprawnej odpowiedzi w tym pytaniu.

Pytanie 8

Zaprezentowany wykres ilustruje wyniki przeprowadzonych testów

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

Pytanie 9

Który z poniższych składników NIE jest konieczny do stworzenia klasy w C++?

A. Deklaracja atrybutów klasy
B. Definicja destruktora
C. Definicja funkcji członkowskich klasy
D. Zastosowanie słowa kluczowego class
Do utworzenia klasy w C++ nie jest wymagana definicja destruktora. Destruktor to specjalna metoda klasy, która jest wywoływana automatycznie w momencie zniszczenia obiektu, ale jego obecność jest opcjonalna. Klasy, które nie operują bezpośrednio na zasobach zewnętrznych, takich jak dynamiczna pamięć lub pliki, często nie potrzebują destruktora, ponieważ domyślny destruktor generowany przez kompilator jest wystarczający. Aby utworzyć klasę, wystarczy deklaracja pól i metod oraz użycie słowa kluczowego 'class'. To sprawia, że C++ pozwala na szybkie definiowanie prostych klas, które można później rozwijać w miarę potrzeby.

Pytanie 10

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. Wartość właściwości value grupy radio przechowuje tekst etykiety dla każdego radio-button
B. Właściwość labelPosition może przyjmować jedną z dwóch opcji
C. Przyciski radio-button są organizowane w elemencie o nazwie <radio-group>
D. Etykieta (label) może być umieszczona wyłącznie po przycisku radio-button
Często się zdarza, że osoby pracujące z radio-buttonami skupiają się na nazwie elementu grupującego albo mieszają pojęcia związane z etykietami i wartościami. No właśnie – typowy błąd to przekonanie, że grupa radio to <radio-group>, podczas gdy np. w Angular Material używa się <mat-radio-group>. Standardy webowe nie definiują takiego elementu jak <radio-group>, to raczej wynalazek niektórych bibliotek. Kolejna kwestia to mechanizm value w grupie radio. On nie przechowuje tekstów etykiet, tylko wartość wybranego przycisku, czyli to, co deweloper przypisał do konkretnego radio-buttona (np. id, liczbę albo string techniczny). Gdyby wartość była powiązana z tekstem etykiety, trudno byłoby obsłużyć przypadki, gdy etykieta i wartość mają się różnić (a to się zdarza bardzo często, chociażby przy tłumaczeniach). Z mojego doświadczenia wynika, że zamieszanie powstaje też wokół samej etykiety – niektórzy sądzą, że label w radiobuttonach zawsze znajduje się po prawej stronie. W rzeczywistości dobre biblioteki dają wybór właśnie poprzez labelPosition – możemy bezproblemowo wyrenderować label z dowolnej strony guzika, wystarczy jeden parametr. Zresztą, to nie tylko kwestia wygody, ale też dostępności i zgodności ze standardami WCAG. Podsumowując: warto rozumieć fundamentalne różnice między etykietą, wartością i sposobem grupowania, bo to eliminuje wiele nieporozumień, które potem skutkują błędami zarówno w kodzie, jak i w interfejsie użytkownika.

Pytanie 11

Jaką rolę odgrywa interpreter w kontekście programowania?

A. Generuje plik wykonywalny dla systemu operacyjnego
B. Przekłada kod źródłowy na język maszynowy w trakcie działania programu
C. Łączy kod źródłowy z zewnętrznymi bibliotekami
D. Zoptymalizowuje wydajność aplikacji w środowisku produkcyjnym
Interpreter tłumaczy kod źródłowy na język maszynowy instrukcja po instrukcji, co oznacza, że każda linia kodu jest analizowana i wykonywana na bieżąco. Dzięki temu programy interpretowane, takie jak te w Pythonie, Ruby czy JavaScript, mogą być szybko testowane i uruchamiane bez konieczności wcześniejszej kompilacji. Interpretacja pozwala na elastyczność w procesie rozwoju, ponieważ zmiany w kodzie są widoczne natychmiast po zapisaniu pliku. To czyni interpreter idealnym narzędziem do prototypowania i budowania aplikacji w dynamicznych środowiskach.

Pytanie 12

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

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

Pytanie 13

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

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

Pytanie 14

Środowiskiem dedykowanym do tworzenia aplikacji mobilnych dla urządzeń Apple i wykorzystującym do tego celu różne języki programowania w tym Java i Objective C jest

A. NetBeans
B. XCode
C. React Native
D. Android Studio
XCode to środowisko, które faktycznie jest fundamentem tworzenia aplikacji na urządzenia Apple, czyli iPhone’y, iPady czy nawet MacBooki. Apple od lat inwestuje w rozwój XCode i właśnie tam programiści mogą budować zarówno aplikacje natywne, jak i np. gry – i to z wykorzystaniem różnych języków, takich jak Objective-C i Swift. Co ciekawe, dawniej używano też Objective-C prawie wyłącznie, ale od kilku lat Apple promuje Swift, bo jest nowocześniejszy i dużo przyjemniej się w nim pisze. Moim zdaniem XCode to taki niezbędnik – bez niego praktycznie nie da się pisać porządnych aplikacji na iOS czy macOS. Samo środowisko jest zintegrowane ze wszystkimi narzędziami Apple: symulatorem urządzeń, Interface Builderem do projektowania graficznego oraz narzędziami do debugowania i testowania. Z mojego doświadczenia, jak ktoś zaczyna przygodę z aplikacjami mobilnymi dla Apple, to właśnie XCode jest pierwszym programem, z którym spędzi dużo czasu. I trochę ułatwia życie, bo automatycznie konfiguruje projekty pod standardy Apple, nie trzeba nic ręcznie ustawiać. To też świetne miejsce do nauki, bo dokumentacja jest wprost wbudowana w środowisko. Co ważne, XCode jest wymagany, żeby wrzucić gotową aplikację do App Store – tak jest po prostu zrobiony ekosystem Apple i żadna alternatywa nie daje tyle integracji i wsparcia dla natywnych rozwiązań Apple.

Pytanie 15

Zaproponowany fragment kodu w języku Java wypełnia tablicę elementami:

int[] tablica = new int [10];
int j = 2;

for (int i = 0; i < 10; i++) {
    tablica[i] = j;
    j += 2;
}
A. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
B. 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
C. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
D. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Ten fragment kodu w języku Java rzeczywiście tworzy tablicę o 10 elementach i wypełnia ją kolejnymi liczbami parzystymi, zaczynając od 2. Wynika to bezpośrednio z działania pętli for oraz zmiennej j, która startuje z wartością 2 i w każdym przebiegu pętli jest zwiększana o 2. Dzięki temu do każdej komórki tablicy trafia kolejna liczba parzysta: 2, 4, 6, 8 itd., aż do 20. Takie rozwiązanie jest bardzo często spotykane przy algorytmach, które generują lub przetwarzają sekwencje liczb wg określonego wzorca czy postępu arytmetycznego. Co ciekawe, ten schemat można łatwo modyfikować, np. zmieniając wartość początkową lub krok, żeby tablica wypełniała się liczbami nieparzystymi albo dowolnym innym ciągiem. W profesjonalnych projektach, gdy mamy do czynienia z większymi zbiorami danych, lepiej korzystać z metod typu Arrays.fill() lub streamów, jednak zrozumienie takiej manualnej pętli jest fundamentem nauki programowania. Z mojego doświadczenia, taki kod najlepiej obrazuje, jak działa indeksowanie tablic i inkrementacja wartości. Warto przećwiczyć podobne zadania, żeby utrwalić sobie podstawowe operacje na strukturach danych, bo potem przy bardziej złożonych algorytmach wszystko staje się prostsze. Takie rzeczy są wręcz codziennością w pracy programisty – czy to podczas inicjalizowania danych testowych, czy podczas przygotowywania danych wejściowych do algorytmów.

Pytanie 16

W jakiej sytuacji wykorzystanie stosu będzie korzystniejsze niż lista podczas projektowania zestawu danych?

A. Gdy kolejność przetwarzania danych jest odwrócona (LIFO)
B. Gdy dane muszą być uporządkowane
C. Gdy chcemy usunąć element z końca
D. Gdy ważne jest szybkie znajdowanie elementów
Lista umożliwia liniowy dostęp do elementów i pozwala na dodawanie/usuwanie elementów w dowolnym miejscu, ale nie działa na zasadzie LIFO – dostęp do ostatniego elementu nie jest tak szybki jak w stosie. Kolejka działa zgodnie z zasadą FIFO (First In First Out), co oznacza, że elementy są przetwarzane w kolejności ich dodania, co jest odwrotnością stosu. Tablica dwuwymiarowa to struktura służąca do przechowywania danych w formie macierzy, umożliwiająca indeksowany dostęp, ale nie wspiera bezpośrednio operacji LIFO ani FIFO.

Pytanie 17

Które z poniższych nie jest rodzajem bazy danych?

A. Routing Database
B. Grafowa baza danych
C. Dokumentowa baza danych
D. Relacyjna baza danych
Routing Database to termin, który nie odnosi się do konkretnego rodzaju bazy danych w tradycyjnym sensie, jak to ma miejsce w przypadku relacyjnych, grafowych czy dokumentowych baz danych. Relacyjne bazy danych organizują dane w tabelach oraz umożliwiają wykonywanie złożonych zapytań przy użyciu języka SQL, co jest standardem branżowym. Grafowe bazy danych, z kolei, są zoptymalizowane do przechowywania i przetwarzania danych o relacjach, co sprawia, że są idealne do zastosowań w obszarze analizy sieci społecznych czy systemów rekomendacyjnych. Dokumentowe bazy danych przechowują dane w formie dokumentów, co ułatwia ich przechowywanie i przetwarzanie, szczególnie w kontekście aplikacji webowych i mobilnych. Routing Database nie jest typowym przykładem bazy danych w tym sensie, ponieważ odnosi się do mechanizmów zarządzania ruchem w sieciach komputerowych, co nie jest związane z obiegiem danych w stylu relacyjnym lub NoSQL. Zrozumienie tych różnic jest kluczowe dla właściwego wyboru technologii bazodanowej w zależności od potrzeb aplikacji.

Pytanie 18

Przedstawione w filmie działania wykorzystują narzędzie

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

Pytanie 19

Jaką właściwość ma sieć synchroniczna?

A. Przekazywanie danych zachodzi w sposób niesystematyczny
B. Nie jest konieczna synchronizacja zegarów
C. Gwarantuje większą elastyczność w przesyłaniu danych
D. Transmisja danych odbywa się w wyznaczonych interwałach czasowych
Przesyłanie danych w sieciach synchronicznych nigdy nie odbywa się w sposób nieciągły, ponieważ kluczowym elementem ich działania jest stała synchronizacja. W sieciach synchronicznych każda jednostka czasowa ma przypisaną konkretną rolę i czas na przesyłanie danych, co wyklucza możliwość nieciągłości w transmisji. Ponadto, sieci synchroniczne wymagają synchronizacji zegarów, co jest przeciwieństwem twierdzenia, że nie jest to konieczne. Synchronizacja zegarów jest niezbędna, aby wszystkie urządzenia działały w harmonii, co pozwala na uniknięcie kolizji danych i zapewnia ich integralność. Ostatnim błędnym założeniem jest stwierdzenie, że sieć synchroniczna zapewnia większą elastyczność w przesyłaniu danych. W rzeczywistości, sztywność harmonogramu transmisji w sieciach synchronicznych ogranicza elastyczność, ponieważ każde urządzenie ma przypisany określony czas na przesyłanie danych, co może być niewystarczające w przypadku nagłych wzrostów zapotrzebowania na przepustowość. W tym kontekście sieci asynchroniczne są znacznie bardziej elastyczne, ponieważ umożliwiają przesyłanie danych w dowolnym czasie, w zależności od aktualnych potrzeb.

Pytanie 20

Jakie jest podstawowe działanie w ochronie miejsca zdarzenia?

A. Zastosowanie sterylnych materiałów opatrunkowych
B. Usunięcie niebezpiecznych przedmiotów z otoczenia
C. Zagwarantowanie stabilności ciała rannego
D. Zagwarantowanie odpowiedniego oświetlenia
Z mojego doświadczenia, usunięcie niebezpiecznych rzeczy z miejsca, gdzie doszło do wypadku, to naprawdę kluczowa sprawa. Dzięki temu zmniejszamy szanse na dodatkowe obrażenia i możemy lepiej pomóc poszkodowanemu, nie narażając siebie na ryzyko. Na przykład, warto odsunąć ostre narzędzia, wyłączyć działające maszyny czy podnieść ciężkie przedmioty, które mogłyby kogoś zranić. Takie działania są istotne w każdej sytuacji, czy to wypadek na drodze, czy w pracy.

Pytanie 21

Który z wymienionych frameworków jest charakterystyczny dla aplikacji komputerowych pisanych w C#?

A. WPF (Windows Presentation Foundation)
B. React
C. Qt
D. Spring
WPF (Windows Presentation Foundation) to framework firmy Microsoft, który jest powszechnie wykorzystywany do tworzenia aplikacji desktopowych w języku C#. WPF pozwala na projektowanie zaawansowanych interfejsów użytkownika (UI) z wykorzystaniem XAML (Extensible Application Markup Language), co umożliwia oddzielenie logiki aplikacji od warstwy prezentacyjnej. WPF wspiera grafikę wektorową, animacje oraz różne efekty wizualne, co czyni go idealnym narzędziem do budowy nowoczesnych, estetycznych aplikacji dla systemu Windows. Integracja z .NET i Visual Studio umożliwia szybkie tworzenie aplikacji oraz korzystanie z bogatych bibliotek i gotowych komponentów UI. WPF jest szczególnie ceniony za elastyczność, obsługę danych i możliwość tworzenia aplikacji responsywnych.

Pytanie 22

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

A. keylogger
B. robak
C. wirus
D. rootkit
Czasem łatwo się pogubić w terminologii dotyczącej malware, bo wirusy, keyloggery czy robaki pojawiają się w mediach tak często, że wszystko wydaje się jednym wielkim zagrożeniem. Wirus komputerowy to program, który potrafi się samoreplikować i infekować pliki, ale nie chodzi tu o uzyskiwanie uprawnień administracyjnych samych w sobie. Jego głównym celem zazwyczaj jest rozprzestrzenianie się i ewentualnie niszczenie danych, raczej nie jest zaprojektowany do ukrywania się na poziomie jądra systemu czy przejmowania kontroli nad systemem operacyjnym. Keylogger z kolei to narzędzie do przechwytywania klawiszy – świetne do wykradania haseł czy innych poufnych informacji, ale sam keylogger nie daje przywilejów administratora, raczej działa w tle jako zwykły program. Robak natomiast to kolejna ciekawa kategoria – potrafi się rozprzestrzeniać po sieci bez potrzeby ingerencji użytkownika, ale jego głównym zadaniem jest infekowanie kolejnych maszyn, a nie uzyskiwanie wysokich uprawnień czy ukrywanie się głęboko w systemie. W praktyce wiele osób wrzuca te terminy do jednego worka „złośliwe oprogramowanie”, ale każde z nich ma inny mechanizm działania i inne miejsce w strategii ataku. Największym błędem jest myślenie, że każdy malware od razu daje pełny dostęp do komputera – w rzeczywistości tylko nieliczne, jak rootkity, są zbudowane właśnie po to, żeby przejąć i ukryć się na poziomie systemu operacyjnego, często modyfikując nawet sterowniki czy jądro. To jest powód, dla którego standardowe narzędzia bezpieczeństwa mogą je przegapić. Moim zdaniem warto na spokojnie przejrzeć różnice między rodzajami malware, bo to podstawa, żeby dobrze zrozumieć jak się bronić – a przy okazji nie dać się złapać na branżowe uproszczenia.

Pytanie 23

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

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

Pytanie 24

Jaki kod może być związany z treścią wygenerowaną w trakcie działania programu Java?

Exception in thread "main" java.lang.ArithmeticException: / by zero
A. x = x % y;
B. x = tablica[6];
C. if (x > y) ...
D. x = 0;
Pojawienie się komunikatu Exception in thread "main" java.lang.ArithmeticException: / by zero jest jednoznacznie powiązane z próbą wykonania operacji dzielenia lub modulo przez zero. Tymczasem nie każda operacja na liczbach czy tablicach w Javie prowadzi do takiego wyjątku. Przypisanie wartości do zmiennej, jak x = 0;, jest zupełnie bezpieczne i nie generuje żadnego wyjątku – to po prostu podstawowa operacja inicjalizacji. Podobnie konstrukcja warunkowa typu if (x > y) … sama w sobie nie wykonuje żadnych operacji arytmetycznych, a jedynie porównuje wartości. Tego rodzaju instrukcja nie może wygenerować ArithmeticException, bo nie ma tu dzielenia ani reszty z dzielenia. Często jednak intuicyjnie myli się wyjątki arytmetyczne z błędami związanymi z dostępem do elementów tablicy. Na przykład zapis x = tablica[6]; może prowadzić do IndexOutOfBoundsException, jeśli tablica ma mniej niż 7 elementów, ale to zupełnie inny typ błędu – dotyczy zakresu tablicy, a nie arytmetyki. Z mojego doświadczenia wynika, że taki błąd logiczny pojawia się, gdy programiści nie rozróżniają rodzajów wyjątków lub nie zapoznają się dokładnie z komunikatami błędów. Branżowym standardem jest zawsze analizować dokładnie stack trace błędów i rozróżniać, które operacje mogą generować jakie wyjątki, bo to pozwala lepiej projektować logikę obsługi błędów w aplikacjach. W Javie ArithmeticException to sygnał, że coś poszło nie tak z działaniem matematycznym, a nie z dostępem do pamięci czy porównywaniem wartości. Warto więc poświęcić chwilę na zrozumienie tego rozróżnienia – to się później bardzo opłaca w praktyce.

Pytanie 25

Który z poniższych formatów plików jest używany do konfiguracji projektów Node.js?

A. settings.ini
B. package.json
C. config.xml
D. node.config
Wybór innych formatów plików, takich jak 'config.xml', 'settings.ini' czy 'node.config', wskazuje na pewne nieporozumienia związane z funkcjonowaniem projektów Node.js. 'config.xml' jest formatem często stosowanym w aplikacjach mobilnych, zwłaszcza tych opartych na platformie Apache Cordova, i nie ma zastosowania w kontekście Node.js. Z kolei 'settings.ini' to typowy plik konfiguracyjny stosowany w wielu aplikacjach, ale nie jest on specyficzny dla Node.js i nie spełnia roli, jaką pełni 'package.json'. Plik 'node.config', mimo że sugeruje powiązanie z Node.js, nie jest standardowym formatem i nie jest używany w praktyce. Zrozumienie, że 'package.json' pełni centralną rolę w ekosystemie Node.js, jest kluczowe dla efektywnego zarządzania projektami oraz ich zależnościami. Ignorowanie tego faktu może prowadzić do problemów w zarządzaniu bibliotekami oraz ich wersjami, co jest istotne dla stabilności i bezpieczeństwa aplikacji. W praktyce, brak znajomości 'package.json' może skutkować trudnościami w implementacji nowych funkcjonalności czy aktualizacji istniejącego kodu.

Pytanie 26

Jakie oznaczenie posiada norma krajowa w Polsce?

A. PN
B. ISO
C. IEC
D. EN
Polska Norma, czyli PN, to taki nasz krajowy znak, który mówi, jakie powinny być standardy jakości i techniczne dla różnych produktów i usług w Polsce. Normy PN są dostosowane do tego, czego potrzebujemy na rynku, ale często są oparte na międzynarodowych normach, takich jak ISO czy europejskich EN. Choć wdrażanie tych norm jest dobrowolne, to w wielu branżach ich przestrzeganie jest wręcz konieczne, jeśli chcemy zdobyć odpowiednie certyfikaty jakości. Warto je znać, bo dzięki nim możemy czuć się bezpieczniej, a jakość produktów staje się lepsza. To też wspiera rozwój nowych technologii w Polsce.

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. Klasa2 stanowi klasę bazową
B. Klasa1 jest dzieckiem Klasy2
C. Klasa2 dziedziczy od Klasa1
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

Które z wymienionych praw autorskich nie wygasa po pewnym czasie?

A. Prawa pokrewne
B. Licencje wolnego oprogramowania
C. Autorskie prawa osobiste
D. Autorskie prawa majątkowe
Autorskie prawa osobiste to rodzaj praw autorskich, które nie wygasają po upływie określonego czasu i są bezterminowe. Obejmują one prawo do autorstwa, oznaczania dzieła swoim nazwiskiem oraz sprzeciwiania się wszelkim zmianom, które mogłyby naruszać reputację twórcy. Prawa osobiste są niezbywalne, co oznacza, że nie można ich przenieść na inną osobę ani sprzedać. Nawet po śmierci twórcy, prawo do ochrony integralności jego dzieła jest respektowane. W praktyce oznacza to, że choć prawa majątkowe mogą wygasnąć (np. po 70 latach od śmierci autora), prawo do bycia uznanym za twórcę trwa wiecznie.

Pytanie 29

Jakiego typu testy są stosowane do sprawdzania funkcjonalności prototypu interfejsu?

A. Testy obciążeniowe
B. Testy zgodności
C. Testy interfejsu
D. Testy efektywnościowe
Testy wydajnościowe są przeznaczone do analizy szybkości działania aplikacji, mierzenia czasu odpowiedzi oraz identyfikowania potencjalnych wąskich gardeł w kodzie lub serwerze, ale nie dotyczą graficznego interfejsu. Testy zgodności skupiają się na weryfikacji, czy aplikacja spełnia normy prawne, techniczne i branżowe, jednak nie analizują działania interfejsu użytkownika. Testy obciążeniowe badają, jak aplikacja radzi sobie z dużą liczbą użytkowników lub intensywnym przetwarzaniem danych, co jest istotne dla wydajności, ale nie dla weryfikacji funkcji prototypu interfejsu.

Pytanie 30

Jakie narzędzie wspiera tworzenie aplikacji desktopowych?

A. WPF
B. Angular
C. Xamarin
D. Symfony
WPF, czyli Windows Presentation Foundation, to narzędzie, które zdecydowanie kojarzy się z aplikacjami desktopowymi na platformie Windows. Pozwala budować nowoczesne, bogate graficznie interfejsy użytkownika, wykorzystując deklaracyjny język XAML oraz logikę programistyczną w C#. Moim zdaniem WPF to nadal bardzo solidny wybór, jeśli chcemy robić rozbudowane aplikacje okienkowe, które muszą korzystać z możliwości systemu operacyjnego, takich jak obsługa plików, drukowanie czy integracja z innymi aplikacjami Windows. Co ciekawe, wielu dużych graczy rynkowych wciąż używa WPF w swoich rozwiązaniach – choćby aplikacje biurowe, narzędzia branżowe do projektowania graficznego, systemy zarządzania produkcją czy rozbudowane panele administracyjne. Osobiście doceniam fakt, że WPF pozwala stosować wzorzec MVVM, co w realnych projektach pomaga utrzymać kod w porządku i łatwo zarządzać złożonymi aplikacjami. No i jeszcze jedno – dzięki bogatej bazie komponentów oraz możliwości stylizacji, z WPF można wycisnąć naprawdę ciekawe UI. Warto też wiedzieć, że choć pojawiły się nowsze technologie (jak WinUI czy .NET MAUI), to w praktyce WPF jest nadal szeroko wspierany i rozwijany. Jeśli ktoś chce zacząć z aplikacjami desktopowymi na Windows, to moim zdaniem WPF to po prostu dobry start.

Pytanie 31

Podejście obiektowe w rozwiązywaniu problemów obejmuje między innymi:

A. pola, metody, rekurencję oraz kwerendy
B. zmienne, procedury oraz funkcje
C. wyzwalacze i polimorfizm
D. klasy, obiekty oraz hermetyzację
Podejście obiektowe, zwane też programowaniem obiektowym (OOP), naprawdę opiera się na takich pojęciach jak klasy, obiekty i hermetyzacja. Klasa to taki szablon, z którego tworzy się obiekty – czyli konkretne instancje tej klasy działające w pamięci komputera. Hermetyzacja polega na tym, że ukrywamy szczegóły implementacji i wystawiamy na zewnątrz tylko niezbędne interfejsy. Moim zdaniem to jest jeden z najważniejszych aspektów OOP, bo pozwala nam lepiej zarządzać złożonością dużych systemów. Przykładowo, w językach takich jak Java czy C#, klasa samochód może mieć prywatne pola (np. numer VIN), a dostęp do nich uzyskujemy tylko przez określone publiczne metody (gettery i settery). To bardzo pomaga, gdy w zespole kilka osób pracuje nad tym samym kodem – nie trzeba wiedzieć wszystkiego o wnętrzu klasy, by z niej korzystać. W praktyce, modelowanie problemów za pomocą obiektów i klas pozwala odwzorować realne byty z rzeczywistego świata w oprogramowaniu. Standardy branżowe, jak SOLID czy zasada pojedynczej odpowiedzialności, podkreślają konieczność stosowania hermetyzacji, bo to przekłada się na elastyczność i łatwość utrzymania kodu. Z mojego doświadczenia, jeśli dobrze opanujesz te podstawy OOP, dużo szybciej zrozumiesz bardziej zaawansowane koncepty, jak dziedziczenie czy polimorfizm. To naprawdę solidny fundament, z którego korzysta praktycznie każdy nowoczesny język programowania.

Pytanie 32

Jakie aspekty powinny być brane pod uwagę przy tworzeniu struktury danych dla aplikacji?

A. Tylko wymagania sprzętowe
B. Tylko typ języka programowania
C. Nie ma związku pomiędzy strukturą danych a efektywnością aplikacji
D. Złożoność obróbki danych oraz ich efektywną organizację
Złożoność przetwarzania danych i ich optymalna organizacja to kluczowe elementy podczas projektowania struktury danych dla aplikacji. Dobrze zaprojektowana struktura danych wpływa na wydajność aplikacji, redukuje czas dostępu do informacji oraz minimalizuje zużycie zasobów. Optymalizacja algorytmów oraz wybór odpowiednich struktur danych, takich jak listy, drzewa czy tablice hashujące, ma bezpośredni wpływ na szybkość działania aplikacji.

Pytanie 33

Cytat zaprezentowany powyżej dotyczy metodyki RAD. Co oznacza ten skrót w języku polskim?

... (RAD) .... is a general term for adaptive software development approaches, and the name for James Martin's method of rapid development. In general, RAD approaches to software development put less emphasis on planning and more emphasis on an adaptive process. Prototypes are often used in addition to or sometimes even instead of design specifications.
Źródło: https://en.wikipedia.org/wiki Dostęp: 25.03.2021
A. środowisko błyskawicznego programowania
B. środowisko do tworzenia aplikacji
C. szybki rozwój aplikacji
D. zintegrowane środowisko deweloperskie
Wybór niepoprawnych odpowiedzi wynika z nieporozumienia dotyczącego znaczenia skrótu RAD. Pierwsza błędna odpowiedź środowisko rozwijania aplikacji nie odpowiada sednu metodyki RAD ponieważ odnosi się bardziej do ogólnego pojęcia platformy lub środowiska gdzie aplikacje są tworzone a nie do szybkiego procesu rozwoju. Nie oddaje to istoty metodyki która skupia się na skróceniu czasu cyklu życia aplikacji poprzez szybkie prototypowanie i wprowadzenie iteracyjnych zmian. Następnie środowisko szybkiego programowania również jest mylące ponieważ sugeruje zastosowanie narzędzi lub technologii które jedynie wspierają szybkie pisanie kodu a nie całego procesu projektowania testowania i wprowadzania do użytkowania. Zintegrowane środowisko programistyczne to termin odnoszący się do oprogramowania takiego jak IDE które oferuje narzędzia wspierające programistów w pisaniu testowaniu i debugowaniu kodu ale nie jest bezpośrednio związane z filozofią i technikami RAD. Typowym błędem myślowym jest skupienie się na pojedynczych etapach rozwoju oprogramowania a nie na całym procesie który metoda RAD opisuje jako całość łączącą szybkie tworzenie prototypów elastyczność i intensywną współpracę z klientem. Ważne jest zrozumienie że RAD to podejście systemowe mające na celu przyspieszenie dostarczania wartości klientom co nie jest osiągane przez samo szybkie kodowanie czy używanie zintegrowanych narzędzi programistycznych ale przez całościowe podejście do procesu tworzenia oprogramowania

Pytanie 34

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

A. Ilość linii kodu programu
B. Metoda alokacji pamięci dla danych
C. Typ zastosowanego kompilatora
D. Narzędzia do analizy błędów
Sposób alokacji pamięci dla danych to kluczowy element projektowania zestawów danych, ponieważ wpływa na wydajność i efektywność programu. Dynamiczna alokacja pamięci pozwala na tworzenie struktur, których rozmiar jest zmienny i dostosowuje się w trakcie działania aplikacji. Dzięki temu programiści mogą optymalnie zarządzać zasobami systemowymi, unikając marnowania pamięci lub jej niedoboru. Wybór odpowiedniej metody alokacji, np. stosowanie wskaźników, dynamicznych tablic lub struktur danych takich jak lista czy mapa, pozwala na budowanie bardziej skalowalnych i elastycznych aplikacji.

Pytanie 35

Zaprezentowany diagram ilustruje wyniki przeprowadzonych testów:

Informacje o stronie
Wyświetlenie po1.431 si
Pobieranie2.815 si
Całkowity czas wczytania4.395 si
Czas powtórnego wczytania1.609 si
Ilość przekierowań (wpisanego adresu)1i
Ilość żądań145i
Łącznie przesłane6.71 MBi
Pomijane przy powtórnym ładowaniu6.47 MB (96%)i
Rozmiar rzeczywisty8.29 MBi
A. funkcjonalności
B. wydajnościowych
C. ochrony
D. użytecznoś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 36

Do czego służy operator spread (...) w JavaScript?

A. Do konwersji liczby na string
B. Do sprawdzania typu danych
C. Do rozwinięcia tablicy lub obiektu na poszczególne elementy
D. Do łączenia dwóch różnych typów danych
Operator spread (...) w JavaScript jest niezwykle użytecznym narzędziem, które pozwala na łatwe rozwijanie tablic i obiektów do ich poszczególnych elementów lub właściwości. Umożliwia to na przykład przekazywanie elementów tablicy jako argumentów do funkcji lub łączenie wielu obiektów w jeden. Przykładowo, jeśli mamy tablicę `const arr = [1, 2, 3];` to używając operatora spread, możemy przekazać te elementy do funkcji tak: `Math.max(...arr)`, co zwróci 3. Dodatkowo, operator ten jest często używany przy tworzeniu nowych obiektów na podstawie istniejących. Na przykład, mając obiekt `const obj = { a: 1, b: 2 };`, możemy stworzyć nowy obiekt z dodatkową właściwością: `const newObj = { ...obj, c: 3 };` co da `newObj = { a: 1, b: 2, c: 3 };`. Operator spread jest zgodny z ES6 i stał się standardem w praktykach programistycznych, ułatwiając pisanie czystszych i bardziej elastycznych kodów. Warto go stosować, aby poprawić czytelność i efektywność swojego kodu.

Pytanie 37

Które z wymienionych działań, które są częścią procesu kreowania prostej galerii zdjęć w formie aplikacji mobilnej, powinno być realizowane przez zespół?

A. Stworzenie dokumentacji kodu aplikacji
B. Przygotowanie testu jednostkowego dla funkcji przegladajZdjecia()
C. Wdrożenie funkcji dodajZdjecie()
D. Przygotowanie i konfiguracja repozytorium dla projektu
Pozostałe odpowiedzi są zadaniami, które w większości przypadków mogą być realizowane indywidualnie, co czyni je zadaniami jednostkowymi. Implementacja funkcji dodajZdjecie() dotyczy konkretnego aspektu programistycznego, który może być wykonany przez jednego dewelopera. Wymaga ona znajomości języka programowania oraz logiki potrzebnej do dodawania zdjęć do galerii, co zazwyczaj nie wymaga współpracy z innymi członkami zespołu. Przygotowanie i skonfigurowanie repozytorium dla projektu natomiast to techniczny proces, który również najczęściej realizuje jedna osoba, odpowiedzialna za ustawienie środowiska pracy. Tworzenie testu jednostkowego dla funkcji przegladajZdjecia() to kolejny krok, który można wykonać samodzielnie, koncentrując się na testowaniu konkretnej funkcji w izolacji, bez potrzeby angażowania innych programistów. W przypadku tych zadań, choć mogą one być częścią większego projektu, to ich realizacja nie wymaga współpracy zespołowej, co sprawia, że nie są to zadania zespołowe.

Pytanie 38

Jaką nazwę kontrolki powinno się umieścić w początkowej linii kodu, w miejscu <???, aby została ona wyświetlona w podany sposób?

Ilustracja do pytania
A. RatinoBar
B. Switch
C. SeekBar
D. Spinner
Switch to kontrolka używana w Androidzie do stworzenia elementu interfejsu użytkownika, który pozwala użytkownikowi przełączać się między dwoma stanami. Domyślnie stany te są identyfikowane jako włączone i wyłączone, co jest szczególnie przydatne w przypadku funkcji wymagających prostego wyboru binarnego, jak na przykład włączanie lub wyłączanie ustawień. Kod XML użyty w pytaniu zawiera atrybuty android:textOff i android:textOn, które są typowe dla klasy Switch i pozwalają zdefiniować tekst, jaki ma być wyświetlany w stanie wyłączonym i włączonym. W praktyce Switch jest często stosowany w aplikacjach mobilnych do kontroli ustawień użytkownika, co pozwala na łatwą i intuicyjną obsługę. Dobrymi praktykami jest używanie Switch w kontekście jednoznacznego wyboru, aby nie wprowadzać użytkownika w błąd. Warto również zadbać o dostępność i odpowiednie etykietowanie kontrolki, co zapewnia jej zrozumiałość dla wszystkich użytkowników.

Pytanie 39

Jedną z zasad standardu WCAG 2.0 jest

A. używanie jednego, odpowiednio dużego rozmiaru czcionki
B. ograniczanie treści na stronie przez rezygnację z używania alternatywnych tekstów dla obrazów i filmów
C. unikanie przedstawiania informacji w formie uproszczonej
D. stosowanie różnych palet kolorystycznych, w tym o wysokim kontraście
Standard WCAG 2.0 opiera się na czterech głównych zasadach: postrzegalność, funkcjonalność, zrozumiałość i solidność. Wiele osób źle interpretuje te zalecenia, myśląc, że wystarczy uprościć treść albo ograniczyć jej ilość, by strona była dostępna. To nie jest prawda – dostępność to nie minimalizm, tylko umożliwienie korzystania z treści każdemu, bez względu na ograniczenia. Na przykład rezygnacja z alternatywnych tekstów dla obrazów i filmów to bardzo poważny błąd – alt teksty są wręcz podstawą dostępności, pozwalają osobom niewidomym korzystać z czytników ekranu. Często też spotykam się z przekonaniem, że wystarczy używać jednego, dużego rozmiaru czcionki, żeby wszystko było czytelne – ale przecież każdy użytkownik ma inne potrzeby, a strony powinny pozwalać na skalowanie tekstu. Trzymanie się jednego rozmiaru wręcz utrudnia życie osobom, które chcą powiększyć sobie tekst według uznania. Również unikanie przedstawiania informacji w sposób uproszczony nie ma nic wspólnego z WCAG – wręcz przeciwnie, prosty, przejrzysty język jest zalecany, żeby jak najwięcej osób rozumiało przekaz. W praktyce najczęściej powtarzany błąd myślowy to przekonanie, że dostępność to coś dodatkowego, co psuje wygląd strony, a tymczasem dobre praktyki pokazują, że można mieć i funkcjonalność, i estetykę, i pełną dostępność. Z mojego punktu widzenia warto patrzeć na WCAG jako na przewodnik ku lepszemu projektowaniu, a nie zbiór ograniczeń. Właśnie dzięki stosowaniu różnych palet kolorystycznych z wysokim kontrastem podnosimy komfort i użyteczność strony dla wszystkich, a nie tylko niektórych użytkowników.

Pytanie 40

Jakie składniki są kluczowe w dynamicznym formularzu logowania?

A. Tabela w bazie danych
B. Pola tekstowe do wprowadzania danych użytkownika
C. Plik graficzny
D. Nagłówek HTTP
Nagłówek HTTP nie jest elementem interaktywnym dla użytkownika i służy do przesyłania danych między klientem a serwerem. Pliki graficzne mogą być elementem wizualnym formularza, ale same w sobie nie umożliwiają wprowadzania danych. Tabele w bazie danych przechowują dane po stronie serwera i nie są bezpośrednim elementem formularza logowania – odgrywają one rolę na poziomie backendu, a nie interfejsu użytkownika.