Wyniki egzaminu

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

Egzamin zdany!

Wynik: 24/40 punktów (60,0%)

Wymagane minimum: 20 punktów (50%)

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

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

console.log(typeof null);
console.log(typeof undefined);
console.log(typeof []);
console.log(typeof NaN);
A. null, undefined, object, NaN
B. null, undefined, array, number
C. object, undefined, object, number
D. object, undefined, array, number
Typowe błędy związane z błędnymi odpowiedziami wynikają często z mylnych koncepcji dotyczących typów danych w JavaScript. Warto zauważyć, że odpowiedź sugerująca, że null jest typem 'null' nie jest zgodna z rzeczywistością. Null nie jest odrębnym typem, lecz jest klasyfikowany jako obiekt, co jest wynikają z tego, że w JavaScript wszystko jest obiektowe z wyjątkiem prostych typów. Również opinia, że NaN powinien być uznawany za typ 'NaN' jest myląca. NaN jest specjalnym przypadkiem liczby, co można zobaczyć przy użyciu typeof. Tablica z kolei nie ma własnego typu w JavaScript, jest traktowana jako obiekt. To jest powód, dla którego typeof zwraca 'object' dla tablic. Niezrozumienie tych zasad prowadzi do błędnych konkluzji i może wpływać na jakość kodu. W praktyce powinno się zawsze stosować typeof do sprawdzania typów zmiennych, co zapewnia lepszą kontrolę nad danymi i eliminuje potencjalne błędy podczas wykonywania operacji na różnych typach. Warto zwracać uwagę na te aspekty, ponieważ wpływają one na wydajność i stabilność aplikacji.

Pytanie 2

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

A. Przekłada kod źródłowy na język maszynowy w trakcie działania programu
B. Łączy kod źródłowy z zewnętrznymi bibliotekami
C. Zoptymalizowuje wydajność aplikacji w środowisku produkcyjnym
D. Generuje plik wykonywalny dla systemu operacyjnego
Tworzenie pliku wykonywalnego jest cechą kompilatora, który generuje gotowy program działający niezależnie od kodu źródłowego. Łączenie kodu z bibliotekami zewnętrznymi to zadanie linkera, który przygotowuje aplikację do uruchomienia, a nie interpretera. Optymalizacja działania aplikacji w środowisku produkcyjnym to rola profilerów i narzędzi do monitorowania wydajności, a nie interpretera, który nie ingeruje w działanie programu po jego uruchomieniu.

Pytanie 3

Kod funkcji "wykonaj()" przedstawiony poniżej weryfikuje, czy

bool wykonaj(int argument)
{
    int T[] = {4, 15, -2, 9, 202};
    for(int i=0; i<5; i++) {
        if(T[i] == argument)
            return true;
    }
    return false;
}
A. w tablicy liczb całkowitych znajdują się jedynie wartości 4, 15, -2, 9, 202
B. przekazany argument mieści się w zakresie od 0 do 4
C. wszystkie elementy w tablicy są równe wartości przekazanego argumentu
D. konkretny element (argument) jest obecny w tablicy liczb całkowitych
Funkcja wykonaj() została napisana tak, by sprawdzić, czy przekazany do niej argument znajduje się w konkretnej tablicy liczb całkowitych. To bardzo typowy sposób wyszukiwania wartości w niewielkich zbiorach – pętla przechodzi przez każdy element tablicy i jeśli napotka element równy argumentowi, natychmiast zwraca true. To klasyczna implementacja tzw. liniowego wyszukiwania (linear search), co moim zdaniem jest często spotykane w zadaniach rekrutacyjnych albo przy szybkim prototypowaniu. W praktyce, jeśli tablica byłaby większa albo wymagania dotyczące wydajności byłyby bardziej rygorystyczne, lepiej jest korzystać z innych struktur danych, np. std::set czy std::unordered_set, gdzie operacja wyszukiwania jest zazwyczaj szybsza. Ale tutaj – dla kilku liczb – ta metoda wystarcza i jest czytelna. Warto zauważyć, że taki kod pozwala na szybkie sprawdzenie obecności dowolnego elementu w małej kolekcji i nie wymaga jej sortowania. Z mojego doświadczenia, rozumienie tego mechanizmu pomaga potem w nauce bardziej zaawansowanych algorytmów przeszukiwania i ogólnie usprawnia myślenie algorytmiczne. W codziennej pracy programisty znajomość takich podstaw bardzo się przydaje, bo często trzeba „na szybko” sprawdzić, czy coś znajduje się w tablicy lub liście. Warto też pamiętać, żeby nie nadużywać takich rozwiązań przy dużych ilościach danych – wtedy zaczynają się schody z wydajnością. Ale podsumowując, ta odpowiedź dokładnie opisuje, co robi ten kod – po prostu sprawdza, czy argument jest obecny w zbiorze liczb.

Pytanie 4

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

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

Które z wymienionych stanowi przykład struktury dziedziczenia?

A. Klasa Pojazd ma dziedziczenie od klasy Samochód
B. Klasa Pojazd nie dziedziczy z żadnej klasy
C. Klasa Samochód ma dziedziczenie od klasy Pojazd
D. Klasa Samochód i Pojazd nie są ze sobą powiązane
Hierarchia dziedziczenia to struktura klas, w której klasa pochodna dziedziczy właściwości i metody klasy bazowej. Klasa 'Samochód' dziedzicząca po klasie 'Pojazd' jest przykładem prawidłowej hierarchii dziedziczenia – klasa 'Samochód' rozszerza klasę 'Pojazd', dziedzicząc ogólne właściwości pojazdu, takie jak prędkość czy typ silnika. Dziedziczenie umożliwia rozszerzanie istniejącej funkcjonalności bez konieczności przepisywania tego samego kodu, co jest jednym z fundamentów programowania obiektowego.

Pytanie 6

Jakie znaczenie ma termin "przesłanianie metody" w kontekście programowania obiektowego?

A. Zastosowanie tej samej nazwy metody w klasie bazowej i pochodnej, ale z inną implementacją w klasie pochodnej
B. Przenoszenie metod z jednej klasy do drugiej
C. Tworzenie nowej metody w klasie bazowej
D. Zmiana metody prywatnej na metodę publiczną
Definiowanie nowej metody w klasie bazowej to zwykła deklaracja metody i nie jest to przesłanianie. Zamiana metody prywatnej na publiczną to zmiana modyfikatora dostępu, a nie przesłanianie. Kopiowanie metod z jednej klasy do innej nie jest związane z przesłanianiem – kopiowanie kodu narusza zasadę DRY (Don't Repeat Yourself) i jest rzadko stosowane w dobrze zaprojektowanych aplikacjach obiektowych.

Pytanie 7

Co należy do zadań interpretera?

A. sprawdzanie składni całego programu przed jego uruchomieniem
B. wykonanie skryptu instrukcja po instrukcji
C. przekładanie kodu na kod maszynowy
D. ulepszanie większej części kodu, aby przyspieszyć jego wykonanie
Interpreter to taki program, który odczytuje kod źródłowy i wykonuje go krok po kroku, instrukcja po instrukcji, bez wcześniejszego tłumaczenia całości na kod maszynowy. W praktyce oznacza to, że interpreter analizuje każdą linię lub blok kodu i natychmiast realizuje odpowiadające im działania na komputerze. Przykładem są języki takie jak Python czy JavaScript – tam właśnie interpreter gra główną rolę. Umożliwia to szybkie testowanie i prototypowanie, bo nie trzeba czekać na kompilację całego programu, wystarczy wpisać polecenie i od razu widzimy efekt. Moim zdaniem to genialne rozwiązanie zwłaszcza do nauki programowania czy pisania prostych skryptów systemowych, gdzie liczy się szybka informacja zwrotna. Warto wiedzieć, że interpreter nie generuje pliku wykonywalnego na stałe – każdy raz trzeba uruchomić kod za jego pośrednictwem. W branży często używa się interpreterów do automatyzacji zadań, analizy danych czy tworzenia narzędzi do testów. Z własnego doświadczenia wiem, że interpreter pozwala łatwo wyłapać błędy logiczne na bieżąco, chociażby w konsoli Pythona. To świetne narzędzie, gdy chcemy eksperymentować z kodem, bo nic nie stoi na przeszkodzie, żeby szybko coś zmodyfikować i od razu zobaczyć rezultat. Trzeba tylko pamiętać, że takie podejście czasem może być wolniejsze niż wykonanie kodu skompilowanego, ale w wielu zadaniach wygoda i elastyczność przeważają nad wydajnością.

Pytanie 8

Który z wymienionych algorytmów najczęściej wykorzystuje rekurencję?

A. Sortowanie przez wstawianie
B. Sortowanie bąbelkowe
C. Wyszukiwanie liniowe
D. Obliczanie liczb Fibonacciego
Algorytmy obliczania liczb Fibonacciego są jednym z najbardziej klasycznych przykładów rekurencji. Algorytm ten polega na wywoływaniu funkcji, która sama odwołuje się do siebie, aby obliczyć kolejne liczby w sekwencji. Rekurencyjna natura obliczeń Fibonacciego sprawia, że algorytm jest prosty i intuicyjny w implementacji, choć może być mniej wydajny niż wersje iteracyjne. Rekurencja jest szeroko stosowana w problemach matematycznych i algorytmicznych, gdzie rozwiązanie większego problemu można uzyskać poprzez rozwiązywanie mniejszych, podobnych podproblemów.

Pytanie 9

Jakie znaczenie ma deklaracja zmiennej w programowaniu?

A. Określenie typu oraz nazwy zmiennej w kodzie programu
B. Zarezerwowanie miejsca w pamięci dla wyników operacji arytmetycznych
C. Przypisanie zmiennej wartości domyślnej
D. Stworzenie nowej wartości w bazie danych
Deklaracja zmiennej to podstawowy krok w programowaniu, który polega na określeniu typu oraz nazwy zmiennej, zanim zostanie do niej przypisana wartość. W językach takich jak C++, Java, czy C# deklaracja wygląda na przykład tak: `int liczba;`. Określenie typu zmiennej pozwala kompilatorowi lub interpreterowi zarezerwować odpowiednią ilość pamięci oraz kontrolować, jakie operacje mogą być na niej wykonywane. Deklaracja zmiennej zwiększa czytelność kodu, umożliwia wykrywanie błędów na wczesnym etapie kompilacji i jest kluczowa w zarządzaniu zasobami aplikacji.

Pytanie 10

Które narzędzie służy do tworzenia makiet interfejsu użytkownika (UI mockups)?

A. Jenkins
B. Postman
C. Figma
D. Webpack
Jenkins, Postman i Webpack to narzędzia o zupełnie innym przeznaczeniu, co prowadzi do mylnych wniosków na temat ich zastosowań w kontekście tworzenia makiet interfejsu użytkownika. Jenkins jest narzędziem do ciągłej integracji i dostarczania oprogramowania, które automatyzuje procesy budowania, testowania i wdrażania aplikacji. Jego rolą jest wspieranie deweloperów w efektywnym zarządzaniu kodem źródłowym i zapewnieniu, że każda zmiana wprowadzona w kodzie nie wprowadza błędów. Z kolei Postman to narzędzie przeznaczone do testowania API, które umożliwia wysyłanie zapytań, analizowanie odpowiedzi oraz dokumentowanie interfejsów API, co jest kluczowe w kontekście integracji usług, ale nie ma związku z tworzeniem wizualnych makiet UI. Webpack jest narzędziem do bundlowania modułów JavaScript i zasobów, umożliwiającym optymalizację aplikacji webowych. Jego głównym celem jest zarządzanie złożonością aplikacji front-end, co jest istotne, ale nie ma zastosowania w kontekście projektowania interfejsów użytkownika. Typowym błędem myślowym jest mylenie narzędzi do prototypowania z narzędziami do zarządzania procesem wytwarzania oprogramowania. Zrozumienie, jakie narzędzia są odpowiednie do konkretnych zadań, jest kluczowe dla efektywnej pracy w zespole projektowym.

Pytanie 11

W aplikacji mobilnej, aby określić warianty grafiki w zależności od wielkości ekranu, należy (uwaga: odpowiedzi wariantowe dla dwóch systemów - sugerować się systemem omawianym na zajęciach)

A. iOS: utworzyć katalogi hdpi, lhpi, xhpi i dodać do nich grafiki. Android: utworzyć katalogi 32x32, 64x64, 96x96 i dodać do nich grafiki
B. iOS: dodać do nazw sufiksy oznaczające rozdzielczość, np. 32ppi. Android: umieścić grafikę w odpowiednich katalogach: 32ppi, 64ppi, 96ppi
C. iOS: dodać do nazw sufiksy #2x, #3x. Android: dodać do nazw sufiks rozdzielczości: -32x32, -64x64, -96x96
D. iOS: dodać do nazw plików sufiksy @2x, @3x. Android: umieścić grafikę w odpowiednich folderach drawable: -hdpi, -xhpi, xxhdpi
Lepiej nie używać oznaczeń w stylu 32ppi czy 64ppi, bo to nie pasuje do żadnej z tych platform. To bardziej pasuje do druku, a nie aplikacji mobilnych. Foldery 32x32 czy 64x64 też nie mają sensu w kontekście Androida czy iOS. Jak stworzysz foldery o nazwach lhpi czy 32x32 to może być problem z wyświetlaniem grafiki na różnych urządzeniach. Z mojego doświadczenia, lepiej trzymać się ustalonych standardów, żeby uniknąć błędów.

Pytanie 12

Który element HTML5 służy do wyświetlania zawartości video?

A. &lt;video&gt;
B. &lt;play&gt;
C. &lt;media&gt;
D. &lt;film&gt;
Odpowiedzi takie jak <media>, <film> czy <play> są nieprawidłowe, ponieważ nie istnieją jako standardowe elementy HTML5. <media> to dość szerokie pojęcie i nie odnosi się bezpośrednio do konkretnego tagu w HTML. W kontekście HTML5, nie ma elementu <media>, który mógłby służyć w sposób analogiczny do <video>. Z kolei <film> oraz <play> nie mają żadnego uznania w standardach HTML i nie pełnią roli w kontekście osadzania multimediów. Często błędne rozumienie tych terminów wynika z nieprzemyślanej analizy dostępnych możliwości HTML. Na przykład, <film> kojarzy się z filmami, ale w rzeczywistości nie ma takiego tagu, co może prowadzić do frustracji developerów. Podobnie <play> jest bardziej funkcją lub akcją, a nie elementem HTML. Współczesne standardy webowe jasno definiują, że do obsługi treści wideo należy używać elementu <video>, co jest zgodne z normami W3C. Ignorując te zasady, twórcy stron mogą napotkać problemy z kompatybilnością oraz wydajnością ich aplikacji. Warto zawsze opierać się na sprawdzonych dokumentacjach oraz standardach, aby unikać takich błędów i móc tworzyć wysokiej jakości produkty internetowe.

Pytanie 13

Który framework jest powszechnie wykorzystywany do tworzenia aplikacji internetowych w języku Python?

A. Django
B. Angular
C. React.js
D. ASP.NET Core
Django to framework stworzony specjalnie do budowy aplikacji webowych w języku Python. Jest jednym z najbardziej popularnych i zaawansowanych frameworków typu full-stack, który oferuje szeroki wachlarz narzędzi umożliwiających szybkie i efektywne tworzenie aplikacji internetowych. Django pozwala na tworzenie aplikacji zgodnych z zasadą DRY (Don't Repeat Yourself), co oznacza minimalizację powtarzalnego kodu. Posiada wbudowany panel administracyjny, system ORM (Object-Relational Mapping) oraz zabezpieczenia przed atakami CSRF i XSS. Dzięki Django programiści mogą skupić się na rozwijaniu logiki biznesowej, a nie na konfiguracji podstawowych funkcji aplikacji, co znacznie skraca czas wdrożenia gotowego produktu.

Pytanie 14

Zmienna o typie logicznym może mieć następujące wartości:

A. true, false
B. 1, -1
C. 0 oraz każda liczba całkowita
D. trzy dowolne liczby naturalne
Typ logiczny (boolean) może przyjąć jedynie dwie wartości: true (prawda) i false (fałsz). Jest to fundamentalna zasada w programowaniu, ponieważ zmienne logiczne są podstawą operacji warunkowych, pętli oraz sterowania przepływem programu. W językach takich jak C++, Java, Python i wielu innych, wartości logiczne pozwalają na budowanie złożonych struktur decyzyjnych. Dzięki nim programista może precyzyjnie kontrolować, które fragmenty kodu zostaną wykonane, co jest kluczowe w implementacji algorytmów oraz walidacji danych.

Pytanie 15

Jaka będzie wartość zmiennej x po wykonaniu poniższego kodu?

let x = 0;
for (let i = 0; i < 10; i++) {
  if (i % 2 === 0) continue;
  x += i;
}
A. 20
B. 30
C. 25
D. 45
Wartość zmiennej x po wykonaniu podanego kodu wynosi 25, co jest wynikiem sumy wszystkich nieparzystych liczb od 0 do 9. W pętli for iterujemy od 0 do 9, a dla każdej wartości i sprawdzamy, czy jest parzysta. Jeżeli i jest parzyste, używamy instrukcji continue, co oznacza, że ten krok pętli jest pomijany i przechodzimy do następnej iteracji. W praktyce oznacza to, że wartości takie jak 0, 2, 4, 6, 8 nigdy nie zostaną dodane do zmiennej x. Zostaną natomiast dodane wartości nieparzyste: 1, 3, 5, 7, 9. Ich suma wynosi 1 + 3 + 5 + 7 + 9 = 25. Takie podejście jest typowe w programowaniu, gdyż pozwala na efektywne pomijanie niepotrzebnych wartości, co zwiększa wydajność kodu. Używanie operatora modulo (%) do sprawdzania parzystości jest powszechną praktyką. Tego typu konstrukcje możemy znaleźć w różnych zastosowaniach, na przykład w algorytmach sortujących czy w przetwarzaniu danych, gdzie istotne jest operowanie tylko na wybranych elementach.

Pytanie 16

Jakie z wymienionych działań jest fundamentalne w modelu kaskadowym?

A. Równoległe prowadzenie wielu etapów projektu
B. Zakończenie jednej fazy przed rozpoczęciem następnej
C. Iteracyjne wprowadzanie modyfikacji na każdym poziomie
D. Przeprowadzanie testów systemu po zakończeniu każdej fazy
Równoległa realizacja kilku faz to cecha modelu przyrostowego lub iteracyjnego, który pozwala na pracę nad różnymi etapami jednocześnie. Iteracyjne wprowadzanie zmian to charakterystyczna cecha Agile, gdzie projekt rozwijany jest stopniowo. Testowanie po każdej fazie jest istotnym elementem w różnych metodykach, ale sam proces testowania nie definiuje modelu kaskadowego – tutaj testowanie odbywa się dopiero po zakończeniu implementacji całego systemu.

Pytanie 17

Jakie z przedstawionych rozwiązań może pomóc w unikaniu porażeń prądem w biurze?

A. Wykorzystanie foteli o ergonomicznym kształcie
B. Kontrolowanie jakości powietrza
C. Stosowanie monitorów LCD
D. Systematyczne sprawdzanie instalacji elektrycznych
Regularne testowanie instalacji elektrycznych to podstawowy sposób zapobiegania porażeniom prądem w pracy biurowej. Testy te pozwalają wykryć uszkodzenia, przeciążenia i inne usterki, które mogą stanowić zagrożenie dla pracowników. Prawidłowo przeprowadzane przeglądy techniczne obejmują sprawdzanie stanu przewodów, gniazdek oraz urządzeń elektrycznych. Regularne kontrole zgodne z normami BHP oraz przepisami dotyczącymi instalacji elektrycznych są obowiązkowe i mają kluczowe znaczenie dla bezpieczeństwa pracy. Pamiętaj, że zaniedbanie testów elektrycznych może prowadzić do poważnych wypadków, takich jak pożary lub porażenia prądem.

Pytanie 18

Aplikacje webowe stworzone z użyciem frameworka Angular lub biblioteki React, działające na standardowych portach, można uruchomić na lokalnym serwerze, wpisując w przeglądarkę

A. localhost:8080 (React) lub localhost:8000 (Angular)
B. localhost:3000 (React) lub localhost:4200 (Angular)
C. localhost:5001 (React) lub localhost:8080 (Angular)
D. localhost:8000 (React) lub localhost:49887 (Angular)
W branży webowej bardzo łatwo się pogubić z numeracją portów, szczególnie kiedy pracuje się na różnych frameworkach i narzędziach. Częstym błędem jest założenie, że React i Angular korzystają z jakichś uniwersalnych albo zamiennych portów, ale w rzeczywistości te frameworki mają swoje domyślne ustawienia, które są szeroko przyjęte. Przykładowo, React – głównie dzięki create-react-app – zazwyczaj startuje na porcie 3000. Angular natomiast, kiedy uruchamiasz ng serve, domyślnie pojawia się na porcie 4200. Błędne wybranie portu 8000 czy 8080 może wynikać z przyzwyczajeń z pracy z serwerami backendowymi, gdzie te porty rzeczywiście są popularne (np. Pythonowy SimpleHTTPServer czy serwery Node.js, które często startuje się na 8080). Jednak w środowisku front-endu, szczególnie przy pracy z Reactem czy Angularem, te porty są raczej rzadkością, chyba że ktoś zmieni konfigurację ręcznie. Port 49887 czy 5001 to już kompletnie przypadkowe wartości – takich numerów nie spotyka się w domyślnych ustawieniach żadnego z tych narzędzi i ich wybór byłby naprawdę nietypowy. Zdarza się, że ktoś zapamięta porty z innych technologii albo środowisk i potem próbuje je stosować przy frameworkach front-endowych – to jest taki typowy błąd myślowy. Warto też pamiętać, że wpisanie niewłaściwego portu w przeglądarce po prostu nie uruchomi aplikacji, co może prowadzić do niepotrzebnej frustracji. Kluczowe jest więc, żeby znać te standardowe adresy: React na 3000, Angular na 4200. Taka wiedza oszczędza sporo czasu i pozwala uniknąć nieporozumień podczas pracy zespołowej. W sumie, jak dla mnie, dobrze jest zawsze na początku sprawdzić w dokumentacji narzędzia, na jakim porcie ono działa domyślnie – to niby drobiazg, a potrafi ułatwić życie.

Pytanie 19

Programista tworzy system zarządzania buforem drukowania dokumentów. Najnowsze zlecenie drukowania dodawane jest na koniec kolejki, a najstarsze z nich są przekazywane do drukarki. Jaką strukturę danych najłatwiej zastosować w tej sytuacji?

A. Sterta
B. FIFO
C. LIFO
D. Stos
Stos (LIFO - Last In, First Out) działa odwrotnie – najnowsze zadanie jest przetwarzane jako pierwsze, co nie odpowiada kolejności drukowania. Sterta to inna struktura danych używana głównie do dynamicznej alokacji pamięci, a nie do zarządzania kolejkami zadań. LIFO nie nadaje się do implementacji kolejki wydruku, ponieważ najstarsze zadania mogą pozostawać nieprzetworzone, co prowadzi do nieefektywności i dezorganizacji procesów drukowania.

Pytanie 20

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

A. 1000
B. 2048
C. 1024
D. 512
Odpowiedzi 1000, 2048 i 512 są błędne z różnych powodów. Zaczynając od 1000 – często spotykana w reklamach, zwłaszcza w kontekście dysków twardych, odnosi się do systemu dziesiętnego, gdzie 1 TB to 1 000 GB. Ale w informatyce to tak nie działa, bo 1 TB to 1024 GB, co może nieco mylić. Odpowiedź 2048 to też nie to, bo tu mamy do czynienia z pomyleniem jednostek – 2048 wynika z 2^11 i nie pasuje do terabajtów i gigabajtów. Na koniec, 512, to w ogóle nie gra, bo 512 MB to tylko 0,5 GB, co w porównaniu do 1 TB jest po prostu za małe. Dlatego warto ogarnąć te różnice między systemami binarnym i dziesiętnym, żeby dobrze wiedzieć, jak przeliczać jednostki pamięci.

Pytanie 21

Zaprezentowane oznaczenie praw Creative Commons umożliwia bezpłatne wykorzystywanie utworu

Ilustracja do pytania
A. w celach komercyjnych
B. pod warunkiem zachowania go w pierwotnej formie
C. w celu dokonywania zmian lub remiksowania
D. pod warunkiem udostępnienia go na takiej samej licencji
Odpowiedź dotycząca możliwości zmiany lub remiksowania utworu jest prawidłowa w kontekście oznaczeń Creative Commons takich jak CC BY lub CC BY-NC. Licencje te umożliwiają korzystanie z utworu w sposób zmieniony czy remiksowany pod warunkiem spełnienia określonych wymogów. CC BY wymaga jedynie przypisania autorstwa, co daje twórcom dużą elastyczność w adaptacji i modyfikacji dzieła, co znajduje zastosowanie w projektach edukacyjnych, artystycznych czy badawczych. Działania takie mogą obejmować tworzenie adaptacji, tłumaczeń, mashupów czy nowych kreatywnych form bazujących na oryginale. CC BY-NC natomiast ogranicza użycie komercyjne, ale nadal zezwala na modyfikacje w niekomercyjnych kontekstach. Remiksowanie muzyki, tworzenie nowych wersji wideo czy projektów graficznych są popularnymi praktykami w społeczności twórców, co promuje innowacje i rozwój kultury open source. Ważne jest, aby użytkownicy byli świadomi warunków licencji i poprawnie przypisywali autorstwo, co nie tylko spełnia wymogi prawne, ale również wspiera etos współpracy i uczciwości w społeczności twórczej. Zaangażowanie w twórczość w oparciu o licencje Creative Commons przyczynia się do propagowania wiedzy i kultury oraz wspiera zrównoważony rozwój społeczności twórczych.

Pytanie 22

Zastosowanie typu DECIMAL języka SQL wymaga wcześniejszego zdefiniowania długości (liczby cyfr) przed przecinkiem oraz długości cyfr po przecinku. Jest to zapis:

A. logicznym
B. zmiennoprzecinkowy
C. stałoprzecinkowy
D. łańcuchowym
Poprawnie – typ DECIMAL w SQL to typ stałoprzecinkowy. Oznacza to, że już przy definicji kolumny musisz podać dwie wartości: całkowitą liczbę cyfr (PRECISION) oraz liczbę cyfr po przecinku (SCALE), np. DECIMAL(10,2). W praktyce oznacza to, że możesz przechowywać liczby z maksymalnie 10 cyframi, z czego 2 są po przecinku, czyli zakres jest kontrolowany i przewidywalny. Moim zdaniem to jest kluczowa cecha: stała dokładność i brak „pływania” wyniku. W relacyjnych bazach danych DECIMAL jest używany wszędzie tam, gdzie pieniądze, kursy walut, stawki VAT, ilości w magazynie itp. – wszędzie, gdzie liczy się precyzja i nie można sobie pozwolić na błędy zaokrągleń typowe dla typów zmiennoprzecinkowych (FLOAT, DOUBLE). Standard SQL właśnie dla takich zastosowań przewiduje typy numeryczne dokładne (exact numeric types), do których należy DECIMAL/NUMERIC. Dobre praktyki branżowe mówią wprost: kwoty finansowe trzymaj w DECIMAL, a nie w FLOAT. Warto też wiedzieć, że DECIMAL jest przechowywany w sposób „cyfrowy”, a nie binarny jak float, więc operacje arytmetyczne dają wyniki dokładne w zadanej skali. To bardzo ułatwia raportowanie, księgowość, rozliczenia między systemami. W wielu firmach spotkasz standardy projektowe w stylu: „wszystkie kwoty w systemie mają typ DECIMAL(18,2)” albo podobny. Taki zapis daje spójność danych, przewidywalne zużycie miejsca w bazie i mniejsze ryzyko błędów biznesowych. W skrócie: DECIMAL = stałoprzecinkowy, z góry określona liczba cyfr i powtarzalne wyniki obliczeń, co w systemach produkcyjnych jest bardzo ważne.

Pytanie 23

Jakie narzędzie jest używane do automatyzacji testów interfejsu użytkownika aplikacji webowych?

A. Slack
B. JIRA
C. Trello
D. Selenium
Pozostałe odpowiedzi, takie jak JIRA, Slack i Trello, nie są narzędziami przeznaczonymi do automatyzacji testów interfejsu użytkownika. JIRA to popularne narzędzie do zarządzania projektami, które często wykorzystuje się do śledzenia błędów i planowania zadań w zespołach programistycznych. Jest ono nieocenione w kontekście zarządzania cyklem życia aplikacji i usprawniania komunikacji w zespole, ale nie służy do automatyzacji testów. Slack natomiast to narzędzie do komunikacji zespołowej, które umożliwia szybką wymianę informacji i współpracę w czasie rzeczywistym. Choć może być używane do powiadomień o wynikach testów, nie jest narzędziem do ich automatyzacji. Trello, z kolei, to aplikacja do zarządzania projektami, która pomaga w organizacji zadań i pracy zespołowej za pomocą tablic i kart. Choć może wspomagać procesy zarządzania testami poprzez wizualizację postępów, nie jest narzędziem testowym samym w sobie. Często zdarza się, że osoby nowe w branży mylą narzędzia wspomagające zarządzanie projektami z narzędziami do testowania, co może prowadzić do nieporozumień. Warto więc zrozumieć ich różne zastosowania, by skutecznie wykorzystać każde z nich według ich przeznaczenia.

Pytanie 24

Co to jest WebSockets?

A. Biblioteka JavaScript do manipulacji danymi JSON
B. Metoda zabezpieczania połączeń HTTP
C. Protokół komunikacyjny zapewniający dwukierunkową komunikację między przeglądarką a serwerem
D. Format zapisu danych w bazach NoSQL
WebSockets to protokół komunikacyjny, który umożliwia dwukierunkową, pełnodupleksową komunikację między klientem a serwerem. To oznacza, że zarówno przeglądarka, jak i serwer mogą wysyłać dane w dowolnym momencie, co znacząco różni się od tradycyjnego modelu HTTP, gdzie klient inicjuje każde połączenie. Przykładem zastosowania WebSockets jest aplikacja czatu w czasie rzeczywistym, gdzie użytkownicy mogą widzieć wiadomości natychmiastowo, bez potrzeby odświeżania strony. Dodatkowo, WebSockets zmniejszają opóźnienia w komunikacji, co jest kluczowe w aplikacjach wymagających szybkiej interakcji, takich jak gry online czy platformy do handlu. Warto zaznaczyć, że WebSockets są zdefiniowane w standardzie IETF jako RFC 6455, a ich wykorzystanie powinno być zgodne z najlepszymi praktykami w zakresie bezpieczeństwa, takimi jak użycie protokołu wSecure WebSockets (wss://) do zapewnienia bezpieczeństwa przesyłanych danych.

Pytanie 25

Zalecenia standardu WCAG 2.0 dotyczące percepcji koncentrują się na

A. umożliwieniu interakcji między komponentami użytkownika za pomocą klawiatury
B. zrozumieniu i wiarygodności prezentowanych treści na stronie
C. prezentacji elementów interfejsu użytkownika
D. zapewnieniu odpowiedniej ilości czasu na przeczytanie i zrozumienie treści
Pierwsza z niepoprawnych odpowiedzi odnosi się do zrozumienia i rzetelności w dostarczonych treściach na stronie, co jest ważnym aspektem, ale nie dotyczy bezpośrednio percepcji komponentów interfejsu użytkownika. Zrozumienie treści jest związane z czytelnością tekstu oraz jego strukturalną formą, co nie jest bezpośrednio związane z interfejsem. Kolejna niepoprawna odpowiedź, dotycząca zapewnienia wystarczającej ilości czasu na przeczytanie i przetworzenie treści, odnosi się bardziej do zasad dostępności dotyczących czasu, które są istotne dla użytkowników z różnymi zdolnościami przetwarzania informacji, ale nie dotyczą samej percepcji komponentów interfejsu. Ostatnia odpowiedź, dotycząca zapewnienia interakcji pomiędzy komponentami użytkownika przy użyciu klawiatury, również nie odnosi się bezpośrednio do percepcji, a bardziej do interakcji użytkownika z systemem. Choć interakcja jest istotna, kluczowe jest zrozumienie, że percepcja skupia się na sposobie, w jaki użytkownicy dostrzegają i interpretują te komponenty, a nie na ich interakcji. Dlatego też, te odpowiedzi, choć dotyczą ważnych kwestii dostępności, nie są zgodne z istotą pytania.

Pytanie 26

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

A. kifoza
B. zespół cieśni kanału nadgarstka
C. zespół suchego oka
D. dyskopatia
Zespół cieśni kanału nadgarstka to jedna z najczęstszych chorób zawodowych wśród osób pracujących przy komputerze, zwłaszcza programistów czy grafików. Objawia się on bólem, drętwieniem oraz czasem nawet zaburzeniami czucia w obrębie pierwszych trzech palców ręki – dokładnie tak, jak opisano w pytaniu. Dzieje się tak dlatego, że nerw pośrodkowy, który przebiega przez wąski kanał w nadgarstku, jest uciskany na skutek długotrwałego powtarzania tych samych ruchów albo nieprawidłowego ułożenia dłoni na myszce czy klawiaturze. Moim zdaniem temat jest mega ważny, bo wiele osób bagatelizuje drobne drętwienia, a potem kończy się to nawet koniecznością zabiegu! W praktyce najlepiej stosować ergonomiczną klawiaturę i myszkę, robić krótkie przerwy co godzinę i ćwiczyć rozluźnianie nadgarstków. W branży IT coraz częściej zwraca się uwagę na profilaktykę tych schorzeń – nawet firmy zapewniają konsultacje z fizjoterapeutą, a niektórzy znajomi mają specjalne podkładki pod nadgarstki. No i jeszcze jedno – ignorowanie objawów może prowadzić do trwałego uszkodzenia nerwu, więc naprawdę warto od razu reagować na pierwsze sygnały. W literaturze branżowej (np. w wytycznych BHP dla programistów) podkreśla się, że ergonomiczne miejsce pracy i właściwe nawyki to klucz, żeby nie nabawić się tej przypadłości. Z mojego doświadczenia, nawet zmiana kąta nachylenia klawiatury potrafi zrobić dużą różnicę.

Pytanie 27

Jakie narzędzie wspiera tworzenie aplikacji desktopowych?

A. WPF
B. Symfony
C. Xamarin
D. Angular
Wybierając narzędzia do tworzenia aplikacji desktopowych, bardzo łatwo pomylić rozwiązania webowe albo multiplatformowe z natywnymi frameworkami dla komputerów stacjonarnych. Chyba najczęstsze nieporozumienie dotyczy Angulara i Symfony – oba te narzędzia służą przede wszystkim do budowy aplikacji webowych, czyli takich, które działają w przeglądarce. Angular to framework JavaScriptowy (a właściwie TypeScriptowy), który pozwala tworzyć rozbudowane interfejsy użytkownika, lecz jego środowisko pracy to internet, nie typowy desktop. Symfony natomiast jest frameworkiem PHP przeznaczonym do budowy solidnych aplikacji serwerowych, backendowych, i choć czasem da się tworzyć coś na wzór aplikacji desktopowej z użyciem Electron czy innych pośrednich technologii, to jednak nie jest to ich naturalne środowisko. Xamarin z kolei bywa mylący, bo umożliwia tworzenie aplikacji mobilnych (Android, iOS), a także w pewnym stopniu desktopowych, zwłaszcza w kontekście Xamarin.Forms – jednak w praktyce jego główne zastosowanie to świat urządzeń mobilnych i aplikacje cross-platformowe. Wielu początkujących sądzi, że skoro Xamarin pozwala pisać w C#, to automatycznie nadaje się do każdego rodzaju aplikacji, ale to nie do końca prawda – do natywnych aplikacji desktopowych przeznaczone są inne rozwiązania, takie jak właśnie WPF. Moim zdaniem najczęstszy błąd polega na utożsamianiu „nowoczesnych frameworków” z uniwersalnością – tymczasem, żeby wybrać właściwe narzędzie, trzeba dobrze rozumieć, do jakiego środowiska jest ono zaprojektowane. W praktyce, jeśli chodzi o desktop na Windows, to WPF pozostaje jednym z kluczowych wyborów, podczas gdy reszta wymienionych technologii skupia się zupełnie na innych platformach i przypadkach użycia.

Pytanie 28

Które z wymienionych stwierdzeń najtrafniej charakteryzuje klasę dziedziczącą?

A. Klasa, która nie może posiadać konstruktorów ani destruktorów
B. Klasa, która umożliwia wielokrotne dziedziczenie pól prywatnych
C. Klasa, która dzieli swoje pola z klasami zaprzyjaźnionymi
D. Klasa, która wykorzystuje pola i metody innej klasy bez ich ponownej definicji
Dziedziczenie w programowaniu obiektowym pozwala na tworzenie nowych klas na podstawie istniejących. Klasa dziedziczona (klasa pochodna) automatycznie uzyskuje dostęp do publicznych i chronionych pól oraz metod klasy bazowej, co eliminuje potrzebę ich ponownego definiowania. Dzięki dziedziczeniu można rozszerzać funkcjonalność istniejących klas, co prowadzi do bardziej efektywnego i modułowego kodu. Przykładem może być klasa 'Pojazd', po której dziedziczy klasa 'Samochód', zachowując wszystkie właściwości pojazdu i dodając specyficzne dla samochodu metody lub pola.

Pytanie 29

Który z protokołów w modelu TCP/IP odpowiada za pewne przesyłanie danych?

A. HTTP
B. IP
C. TCP
D. UDP
Protokół TCP (Transmission Control Protocol) jest kluczowym elementem modelu TCP/IP, odpowiedzialnym za zapewnienie niezawodnego i uporządkowanego przesyłania danych między urządzeniami w sieci. TCP działa na poziomie transportu i gwarantuje, że dane są dostarczane w odpowiedniej kolejności oraz bez błędów. Protokół ten wykorzystuje mechanizmy takie jak kontrola przepływu, retransmisja utraconych pakietów oraz potwierdzenia odbioru, co czyni go idealnym do aplikacji wymagających wysokiej niezawodności, takich jak przesyłanie plików czy komunikacja w sieciach WWW. Na przykład, gdy przeglądarka internetowa pobiera stronę, TCP segmentuje dane na mniejsze pakiety, które są następnie przesyłane do użytkownika, a każdy z nich jest potwierdzany przez odbiorcę. Jeśli pakiet nie zostanie potwierdzony w określonym czasie, TCP automatycznie go retransmituje. Protokół ten jest zgodny z standardami RFC 793 oraz RFC 1122, które definiują jego działanie oraz zasady dotyczące niezawodnego przesyłania danych w sieciach komputerowych.

Pytanie 30

Które z poniższych nie jest frameworkiem do testowania w JavaScript?

A. Express
B. Mocha
C. Jest
D. Jasmine
Express jest popularnym frameworkiem do budowania aplikacji webowych na platformie Node.js, a nie narzędziem do testowania. Jego głównym celem jest ułatwienie tworzenia serwerów HTTP oraz zarządzanie routingiem i middleware w aplikacjach. W praktyce, Express pozwala na szybkie i efektywne tworzenie API, co jest kluczowe w nowoczesnym rozwoju aplikacji. W kontekście testowania aplikacji, mogą być stosowane inne frameworki, takie jak Mocha, Jest czy Jasmine, które oferują funkcjonalności dedykowane do pisania i uruchamiania testów. Dobrą praktyką jest oddzielanie logiki testowej od logiki aplikacji, co osiąga się przy użyciu odpowiednich narzędzi, takich jak wspomniane frameworki testowe. Zrozumienie różnicy między serwerowymi frameworkami, jak Express, a frameworkami do testowania, jest istotne dla każdego programisty, aby efektywnie dobierać narzędzia do pracy.

Pytanie 31

Na schemacie widoczny jest fragment diagramu blokowego pewnego algorytmu. Ile razy zostanie zweryfikowany warunek n<7?

Ilustracja do pytania
A. 7
B. 8
C. 5
D. 6
Wartość 8 pokazuje, że chyba źle zrozumiałeś, jak działa liczba iteracji. Pojawiły się dodatkowe porównania, które nie powinny się zdarzyć w pętli. A wynik 5 może być przez to, że pętla zakończyła się za szybko, albo myślałeś, że zmienna zaczyna się z innej wartości. Z kolei 7 to już za dużo iteracji, co nie pasuje do standardowego działania pętli warunkowej.

Pytanie 32

Co to jest dokumentacja instruktażowa programu?

A. Instrukcją opisującą, jak używać funkcji programu
B. Kolekcją testów jednostkowych oraz ich wyników
C. Zbiorem szczegółów technicznych dotyczących kodu źródłowego
D. Dokumentem przedstawiającym plany rozwoju oprogramowania
Instrukcja wyjaśniająca, jak korzystać z funkcji programu, to podstawowy element dokumentacji pomocy programu. Tego rodzaju dokumentacja jest skierowana do użytkowników końcowych i zawiera opisy interfejsu, funkcji oraz dostępnych narzędzi. Instrukcja użytkownika może obejmować zrzuty ekranu, filmy instruktażowe oraz FAQ (często zadawane pytania), co ułatwia szybkie wdrożenie w obsługę aplikacji. Celem dokumentacji pomocy jest nie tylko wyjaśnienie podstawowych funkcji programu, ale także zwiększenie komfortu użytkownika i minimalizacja problemów związanych z obsługą oprogramowania. Przejrzysta i dobrze napisana instrukcja wpływa na pozytywne doświadczenia użytkowników, redukując liczbę zgłoszeń do działu wsparcia technicznego.

Pytanie 33

Jaki komponent środowiska IDE jest niezbędny do tworzenia aplikacji webowych?

A. Emulator urządzeń mobilnych
B. Narzędzie do tworzenia grafiki
C. Debugger, edytor kodu, integracja z systemem kontroli wersji
D. Zarządzanie bazami danych
Debugger, edytor kodu oraz integracja z systemem kontroli wersji to kluczowe elementy środowiska IDE, które umożliwiają efektywną pracę nad aplikacjami webowymi. Debugger pozwala na wykrywanie i naprawianie błędów w czasie rzeczywistym, edytor kodu umożliwia szybkie pisanie i modyfikowanie kodu, a integracja z systemem kontroli wersji (np. Git) pozwala śledzić zmiany i współpracować w zespołach programistycznych. Te narzędzia stanowią podstawę pracy każdego dewelopera webowego.

Pytanie 34

Zaproponowany fragment kodu w Android Studio realizuje metodę nasłuchującą do obsługi wydarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. zmiany w polu tekstowym
B. naciśnięcia przycisku
C. zmiany stanu kontrolki Switch
D. wybór daty
Metoda OnClickListener, to coś, co na pewno warto znać, gdy pracujesz z aplikacjami na Androida. Gdy użytkownik klika przycisk, wywoływana jest metoda onClick. I tu możesz zrobić różne rzeczy, jak na przykład przejść do innego ekranu, zapisać dane albo uruchomić jakąś akcję w tle. To jest dobry przykład wzorca projektowego zwanego Delegacja, który pomaga oddzielić to, co widzisz w interfejsie, od tego, co dzieje się w aplikacji. Dzięki temu łatwiej zarządzać kodem i wprowadzać zmiany. Fajnie jest, gdy logikę umieszczasz w osobnych metodach, bo wtedy testowanie całej aplikacji staje się prostsze. Przykłady? Możesz na przykład użyć OnClickListenera, żeby zrobić logowanie po kliknięciu przycisku lub wysłać formularz. Pamiętaj też, żeby unikać ciężkich operacji w metodzie onClick, żeby aplikacja działała płynnie.

Pytanie 35

Wskaż odpowiedź, która używa parafrazowania jako metodę aktywnego słuchania, gdy klient mówi: "Interesuje mnie aplikacja, która działa szybko, niezależnie od tego, czy korzysta z niej kilku czy tysiąc użytkowników"?

A. Dlaczego Pani potrzebuje takiej aplikacji?
B. Czuję pewne wątpliwości w Pani głosie. Czy mogę zadać kilka pytań?
C. Jeśli dobrze zrozumiałam, chodzi o aplikację, która efektywnie obsługuje różne obciążenia
D. Ilu użytkowników planuje z niej skorzystać?
Inne odpowiedzi nie wykorzystują parafrazowania tak, jak powinny, co psuje komunikację. Pierwsza odpowiedź 'Dlaczego Pani szuka takiej aplikacji?' zamiast nawiązania do tego, co mówił klient, w ogóle zmienia temat rozmowy. Klient może poczuć się wtedy niezrozumiany. Zamiast skupić się na jego potrzebach, konsultant pyta o motywację, co nie jest teraz najważniejsze. Druga odpowiedź, 'Ilu dokładnie użytkowników będzie z niej korzystać?' pyta o liczbę użytkowników, ale to nie odnosi się do kluczowej kwestii dotyczącej wydajności aplikacji. Takie pytanie może wprowadzić zamieszanie i skupić rozmowę na detalach, które klient nie uważa za ważne. Odpowiedź 'Wyczuwam niepewność w Pani głosie. Proszę pozwolić mi zadać kilka pytań' też jest nietrafiona, bo zamiast słuchać i parafrazować, sugeruje, że konsultant sam nie jest pewny, co może wprowadzać dodatkowe wątpliwości. Jeśli nie rozumiemy potrzeb klienta, to możemy stracić jego zainteresowanie i zaufanie, a to jest kluczowe w sprzedaży.

Pytanie 36

W jakiej fazie cyklu życia projektu informatycznego następuje integracja oraz testowanie wszystkich modułów systemu?

A. Etap planowania
B. Faza wdrożenia
C. Faza analizy
D. Etap implementacji
Planowanie to faza początkowa, w której określane są cele projektu, harmonogram i zasoby, ale nie jest to etap integracji systemu. Analiza skupia się na zbieraniu wymagań i definiowaniu specyfikacji technicznej, ale nie obejmuje łączenia modułów ani testowania gotowego produktu. Wdrożenie to końcowy etap cyklu życia projektu, który następuje po pełnej integracji i testowaniu – polega na uruchomieniu systemu w środowisku produkcyjnym i udostępnieniu go użytkownikom końcowym.

Pytanie 37

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

A. push()
B. splice()
C. map()
D. sort()
Metoda map() w JavaScript jest funkcją tablicową, która tworzy nową tablicę na podstawie wyników wywołania funkcji podanej jako argument dla każdego elementu oryginalnej tablicy. Kluczowym aspektem tej metody jest to, że nie modyfikuje oryginalnej tablicy, co czyni ją bezpiecznym narzędziem do transformacji danych. Zastosowanie map() jest szczególnie przydatne w sytuacjach, gdy chcemy przekształcić dane, ale zachować oryginał, na przykład w przypadku przetwarzania wyników z API lub operacji na danych wejściowych od użytkownika. Standardowe praktyki zalecają używanie map() w programowaniu funkcyjnym, co pozwala na bardziej deklaratywne podejście do manipulacji danymi. Przykład zastosowania: mając tablicę liczb, możemy użyć map() do stworzenia nowej tablicy, która zawiera tylko ich kwadraty: const numbers = [1, 2, 3]; const squares = numbers.map(num => num * num); W ten sposób oryginalna tablica numbers pozostaje nietknięta, co jest kluczowe w wielu aplikacjach, w których zachowanie stanu jest istotne.

Pytanie 38

Jakie narzędzie najlepiej wykorzystać do testowania API REST?

A. Postman
B. Git
C. Jasmine
D. Selenium
Postman to jedno z najpopularniejszych narzędzi do testowania API REST, które oferuje wiele funkcji ułatwiających pracę z interfejsami programistycznymi. Jego intuicyjny interfejs użytkownika pozwala na łatwe wysyłanie zapytań HTTP, takich jak GET, POST, PUT, DELETE, co jest kluczowe w testowaniu API. Dzięki wsparciu dla kolekcji zapytań, użytkownicy mogą organizować i grupować swoje testy, co ułatwia zarządzanie projektem i iteracyjne testowanie. Ponadto, Postman umożliwia automatyzację testów poprzez skrypty testowe, które można uruchomić po wykonaniu zapytania, co pozwala na szybką weryfikację odpowiedzi API i ich zgodności z oczekiwaniami. Narzędzie wspiera także integracje z CI/CD, co czyni je idealnym dla zespołów pracujących w metodykach Agile. Postman jest zgodny z najlepszymi praktykami branżowymi, takimi jak RESTful API design, co czyni go niezbędnym w każdym projekcie wykorzystującym API.

Pytanie 39

Jaki jest główny cel normalizacji baz danych?

A. Eliminacja redundancji danych i zapewnienie integralności danych
B. Zmniejszenie rozmiaru bazy danych kosztem integralności
C. Przyśpieszenie zapytań kosztem zwiększenia redundancji
D. Zwiększenie liczby tabel w celu lepszej organizacji danych
Głównym celem normalizacji baz danych jest eliminacja redundancji danych oraz zapewnienie ich integralności. Proces ten polega na przekształceniu danych w taki sposób, aby zminimalizować powielanie informacji, co przekłada się na oszczędność miejsca oraz poprawę wydajności bazy. Normalizacja wyodrębnia dane w sposób, który pozwala na ich logiczne i spójne uporządkowanie, co ułatwia aktualizację oraz usuwanie danych bez ryzyka wprowadzenia niezgodności. Przykładem praktycznego zastosowania normalizacji jest system zarządzania danymi klientów, gdzie informacje o klientach, zamówieniach i produktach są przechowywane w odrębnych tabelach. Dzięki temu można łatwo wprowadzać zmiany w danych klientów, bez wpływu na dane zamówień czy produktów. W branży baz danych, standardy takie jak ACID (Atomicity, Consistency, Isolation, Durability) i zasady dotyczące normalizacji, jak pierwsza, druga czy trzecia forma normalna, stanowią fundamenty dobrych praktyk projektowania baz danych. Zastosowanie tych zasad wpływa na zwiększenie efektywności operacji CRUD (Create, Read, Update, Delete) i zapewnia integralność danych w dłuższym okresie.

Pytanie 40

Do zadań widoku w architekturze MVVM (Model-View-ViewModel) należy

A. zarządzanie logiką aplikacji - obejmuje wdrażanie algorytmów
B. przekazywanie danych do widoku oraz wymiana informacji z modelem
C. obsługa interakcji użytkownika, stworzenie UI
D. przechowywanie ściągniętych i przetworzonych informacji
W architekturze MVVM widok pełni bardzo specyficzną rolę i to jest właśnie to, co odróżnia ją od innych popularnych podejść – na przykład MVC. Widok w MVVM powinien być odpowiedzialny głównie za prezentację danych i obsługę interakcji użytkownika, czyli właśnie to, na czym skupia się poprawna odpowiedź. Moim zdaniem, praktyka pokazuje, że warto traktować widok jako „wyświetlacz” i „słuchacza”, który reaguje na działania użytkownika, takie jak kliknięcia, wpisywanie tekstu czy wybór z menu. Nie ma tu miejsca na żadną logikę biznesową – to już zadanie ViewModelu oraz Modelu. Typowe przykłady? W aplikacji desktopowej na WPF widok to XAML z prostymi eventami. W aplikacji mobilnej – layouty i fragmenty obsługujące zdarzenia UI. Dobrym zwyczajem jest też korzystanie z mechanizmów data binding, dzięki czemu widok automatycznie aktualizuje się, gdy zmienią się dane w ViewModelu. Jest to zgodne z dobrymi praktykami, bo pozwala zachować wysoką czytelność i testowalność kodu oraz oddziela warstwę prezentacji od logiki. Branża bardzo mocno trzyma się tu zasady Single Responsibility – widok powinien odpowiadać tylko za prezentację i reakcje na zdarzenia, całą resztę zostawiając ViewModelowi. Warto też pamiętać, że jeśli w widoku ląduje choćby fragment logiki biznesowej, to potem ciężko takie coś testować czy rozwijać. Z mojego doświadczenia najlepiej sprawdza się podejście, gdzie do widoku nie piszemy ani linijki kodu, która nie jest związana z UI.