Wyniki egzaminu

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

Egzamin zdany!

Wynik: 26/40 punktów (65,0%)

Wymagane minimum: 20 punktów (50%)

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

Jaki numer telefonu należy wybrać, aby skontaktować się z pogotowiem ratunkowym w Polsce?

A. 112
B. 998
C. 997
D. 113
Numer 112 to tzw. europejski numer alarmowy, który działa nie tylko w Polsce, ale i w całej Unii Europejskiej oraz kilku innych krajach. Z mojego doświadczenia wynika, że warto nawykowo korzystać właśnie z tego numeru, bo jest on uniwersalny i obsługiwany przez wszystkie sieci – zarówno stacjonarne, jak i komórkowe. W praktyce, dzwoniąc pod 112, łączymy się z centralą, która przekieruje nas do odpowiednich służb (pogotowie ratunkowe, policja, straż pożarna), w zależności od sytuacji. To ogromne ułatwienie, szczególnie gdy jesteśmy zestresowani albo w nieznanym miejscu. Moim zdaniem to też ważny aspekt, że osoby z zagranicy mogą łatwo uzyskać pomoc, bo 112 jest rozpoznawalny praktycznie wszędzie w Europie. Zgodnie z przepisami unijnymi, ten numer powinien być promowany jako podstawowy do wzywania pomocy w nagłych przypadkach – stąd jego obecność nawet na automatach telefonicznych czy instrukcjach bezpieczeństwa w zakładach pracy, szkołach, komunikacji miejskiej. Dodatkowo, jeśli nie wiemy, którą dokładnie służbę wezwać, operator 112 pomoże nam to ustalić i połączy z odpowiednim dyspozytorem. Osobiście uważam, że zapamiętanie tego numeru to podstawa, bo można uratować komuś życie – nawet przez przypadek, będąc świadkiem jakiegoś wypadku czy innego zdarzenia. Warto pamiętać, że 112 działa również, gdy telefon nie ma karty SIM (chociaż nie wszędzie to się sprawdza w praktyce, to z mojego rozeznania wynika, że w Polsce powinno zadziałać).

Pytanie 2

Który z wymienionych typów testów najlepiej ocenia odporność aplikacji na intensywne obciążenie?

A. Testy obciążeniowe
B. Testy funkcjonalne
C. Testy bezpieczeństwa
D. Testy zgodności
Testy obciążeniowe to rodzaj testów, które sprawdzają, jak aplikacja radzi sobie z dużym ruchem użytkowników lub przetwarzaniem dużych ilości danych. Celem testów obciążeniowych jest wykrycie potencjalnych wąskich gardeł, identyfikacja problemów z wydajnością oraz określenie maksymalnej przepustowości aplikacji. Testy te są kluczowe dla aplikacji o wysokim natężeniu ruchu, takich jak sklepy internetowe czy systemy bankowe, gdzie stabilność pod obciążeniem jest krytyczna dla sukcesu.

Pytanie 3

Która z poniższych nie jest cechą architektury mikroserwisów?

A. Wspólna baza danych dla wszystkich usług
B. Autonomia zespołów rozwijających poszczególne usługi
C. Odporność na awarie pojedynczych komponentów
D. Niezależne wdrażanie poszczególnych usług
Architektura mikroserwisów opiera się na praktykach, które umożliwiają wzrost skalowalności, elastyczności oraz odporności systemu. Wspólna baza danych dla wszystkich usług, będąca jedną z zaproponowanych odpowiedzi, jest sprzeczna z tymi fundamentalnymi zasadami. Utrzymywanie centralnej bazy danych prowadzi do sytuacji, gdzie zmiany w jednym mikroserwisie mogą mieć niepożądane konsekwencje dla innych, co z kolei zmniejsza niezależność każdej usługi. W mikroserwisach kluczowe jest, aby każda usługa miała swoje własne źródło danych, co pozwala na decoupling, czyli luźne powiązanie między komponentami. Ponadto, w architekturze mikroserwisów, każda usługa powinna być w stanie działać i być wdrażana niezależnie, co jest niemożliwe w przypadku korzystania z jednej bazy danych, ponieważ wszelkie zmiany wymagałyby zsynchronizowanego podejścia. Kolejnym aspektem jest odporność na awarie, która również ulega osłabieniu w przypadku wspólnej bazy danych. Jeśli baza danych ulegnie awarii, wszystkie usługi korzystające z niej są jednocześnie dotknięte problemem, co jest sprzeczne z koncepcją mikroserwisów, gdzie pojedyncze komponenty powinny być zdolne do działania niezależnie. Wreszcie, autonomia zespołów jest również podważana przez wspólną bazę danych, ponieważ zespoły nie mogą pracować równolegle nad swoimi usługami, a zmiany są wymuszone przez współzależności. Dlatego stosowanie wspólnej bazy danych jest jednym z najczęstszych błędów, który może prowadzić do problemów w projektowaniu i zarządzaniu architekturą mikroserwisów.

Pytanie 4

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

A. Metoda alokacji pamięci dla danych
B. Ilość linii kodu programu
C. Narzędzia do analizy błędów
D. Typ zastosowanego kompilatora
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 5

W środowisku do tworzenia aplikacji, gdzie przedstawiono menu, aby usunąć wszystkie pliki tymczasowe oraz wyniki projektu, należy wybrać opcję

Ilustracja do pytania
A. Clean Solution
B. Batch Build
C. Run Code Analysis on Solution
D. Build Solution
Opcja „Clean Solution” to dokładnie to, czego używa się w Visual Studio lub innych środowiskach IDE, gdy chce się pozbyć wszystkich plików tymczasowych oraz wyników kompilacji powiązanych z bieżącym projektem lub rozwiązaniem. To bardzo praktyczna funkcja – zwłaszcza wtedy, gdy mamy problemy ze zbudowaniem projektu po wprowadzeniu wielu zmian lub gdy różne konfiguracje builda zaczynają się mieszać. Clean Solution usuwa wszystkie foldery bin i obj, co pozwala rozpocząć proces kompilacji od zera, eliminując potencjalne konflikty wynikające ze starych plików. Moim zdaniem warto korzystać z tej opcji regularnie, szczególnie w większych projektach czy zespołach, gdzie często zmieniają się zależności. W branży IT, według dobrych praktyk, „czyszczenie” rozwiązania przed puszczeniem pełnego builda pomaga zredukować liczbę nieprzewidzianych błędów kompilacji. Dla mnie to trochę taki techniczny reset – zanim zaczniesz szukać błędów w kodzie, upewnij się, że budujesz wszystko na świeżo. Zresztą, w dokumentacji Microsoftu też znajdziesz zalecenia, by właśnie Clean Solution stosować do rozwiązywania problemów z nieaktualnymi artefaktami builda. Bez tej funkcji czasem trudno dojść, czemu kompilator się buntuje.

Pytanie 6

Co to jest GraphQL?

A. Język zapytań do API oraz środowisko wykonawcze do obsługi tych zapytań
B. System zarządzania bazami grafowymi
C. Biblioteka do tworzenia grafów i diagramów w aplikacjach webowych
D. Format danych podobny do JSON używany w komunikacji między aplikacjami
Wybór odpowiedzi, która sugeruje, że GraphQL jest biblioteką do tworzenia grafów i diagramów w aplikacjach webowych, jest mylący, ponieważ nie uwzględnia fundamentalnych cech i funkcji tego narzędzia. GraphQL nie jest narzędziem graficznym, lecz technologią służącą do efektywnego zarządzania zapytaniami w API. Odpowiedź wskazująca na system zarządzania bazami grafowymi również nie odzwierciedla rzeczywistości, ponieważ GraphQL nie jest systemem bazodanowym, lecz interfejsem do komunikacji z różnymi źródłami danych, które mogą być zrealizowane przy użyciu różnych baz danych, w tym relacyjnych, NoSQL czy grafowych. Ponadto, w przypadku odpowiedzi sugerującej, że GraphQL to format danych podobny do JSON, należy podkreślić, że choć GraphQL używa JSON do przesyłania danych, jego istotą jest definicja zapytań oraz struktura danych, a nie tylko ich format. Często mylone to jest z protokołami komunikacyjnymi, takimi jak REST, które również mogą wykorzystywać JSON, ale nie oferują takiej elastyczności w zakresie kształtowania odpowiedzi, jaką zapewnia GraphQL. Takie nieporozumienia mogą prowadzić do niewłaściwego zrozumienia architektury aplikacji oraz potencjalnych ograniczeń w wydajności i użyteczności implementacji API.

Pytanie 7

Który z języków programowania jest powszechnie stosowany do tworzenia interfejsów użytkownika przy użyciu XAML?

A. C#
B. Java
C. Objective-C
D. C++
C++ jest często używany do tworzenia aplikacji desktopowych, ale w przypadku interfejsów użytkownika XAML jest bardziej związany z C#. Java jest językiem wykorzystywanym głównie do tworzenia aplikacji na Androida oraz aplikacji webowych i backendowych, ale nie jest typowo używany do programowania interfejsów w XAML. Objective-C to starszy język programowania dla systemów Apple i nie jest związany z XAML, który jest specyficzny dla technologii Microsoftu.

Pytanie 8

Przedstawione w filmie działania wykorzystują narzędzie

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

Pytanie 9

Sposób deklaracji Klasa2 wskazuje, że

W C++ i C#:
class Klasa2 : Klasa1
W Java:
class Klasa2 extends Klasa1
W Python:
class Klasa2(Klasa1):
A. Klasa1 jest dzieckiem Klasy2
B. Klasa2 dziedziczy od Klasa1
C. Klasa2 stanowi klasę bazową
D. Klasa1 dziedziczy od Klasa2
Twierdzenie, że Klasa1 dziedziczy po Klasa2, jest błędne – dziedziczenie w językach takich jak C++, Java czy Python odbywa się tylko w jednym kierunku, od klasy bazowej do klasy pochodnej. Klasa1 nie może być potomkiem Klasa2, jeśli w deklaracji wskazano odwrotnie. Deklaracja, że Klasa2 jest klasą bazową, byłaby prawdziwa tylko w przypadku, gdyby Klasa1 faktycznie dziedziczyła po Klasa2, co nie wynika z przedstawionego kodu. Dziedziczenie jest relacją jednoznaczną i kierunkową, co oznacza, że błędne zrozumienie tej koncepcji może prowadzić do poważnych problemów architektonicznych w projekcie.

Pytanie 10

Jakie metody umożliwiają przesyłanie danych z serwera do aplikacji front-end?

A. biblioteki jQuery
B. metody POST
C. formatu JSON
D. protokołem SSH
Jest taka sprawa z jQuery – chociaż to super narzędzie do manipulacji DOM i pracy z asynchronicznymi żądaniami HTTP, to jednak nie jest formatem danych. Tak, jQuery świetnie działa z AJAX-em, ale nie definiuje, jak dane powinny być przesyłane. Jak już używasz jQuery do przesyłania danych, to potrzebujesz formatu, na przykład JSON. Dlatego ta odpowiedź jest niepoprawna. Metoda POST umożliwia przesyłanie danych do serwera w protokole HTTP, ale sama w sobie nie mówi, w jakim formacie te dane będą przesyłane. Można używać różnych formatów, w tym JSON, ale sama metoda POST to za mało. A SSH, czyli Secure Shell, to protokół do bezpiecznego logowania i zdalnego zarządzania systemami, a nie do przesyłania danych między aplikacjami webowymi a serwerem. Dlatego tu też mamy błąd. Wszystkie te technologie są ważne, ale nie mówią o przesyłaniu danych w kontekście front-endu tak, jak robi to JSON.

Pytanie 11

Jakie środowisko deweloperskie jest powszechnie wykorzystywane do produkcji aplikacji webowych w języku Java?

A. PyCharm
B. XCode
C. Eclipse
D. Android Studio
Eclipse to jedno z najpopularniejszych środowisk programistycznych (IDE) wykorzystywanych do tworzenia aplikacji webowych w języku Java. Jest to potężne narzędzie, które wspiera zarówno tworzenie aplikacji desktopowych, jak i rozbudowanych systemów backendowych. Eclipse oferuje wiele wtyczek i rozszerzeń umożliwiających integrację z narzędziami do zarządzania bazami danych, serwerami aplikacji oraz systemami kontroli wersji. Dzięki temu programiści mogą efektywnie budować i testować aplikacje webowe napisane w Javie.

Pytanie 12

Jaka jest złożoność obliczeniowa poniższego algorytmu?

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            array[i][j][k] = i + j + k;
        }
    }
}
A. O(n)
B. O(n³)
C. O(n log n)
D. O(n²)
Złożoność obliczeniowa algorytmu to kluczowy aspekt, który decyduje o jego efektywności, a odpowiedzi takie jak O(n²), O(n log n) czy O(n) wynikają z powszechnych nieporozumień. Odpowiedź O(n²) może pojawić się, gdy ktoś myśli jedynie o największej pętli, nie uwzględniając pełnej hierarchii zagnieżdżonych pętli. Jednakże, w tym przypadku mamy do czynienia z trzema niezależnymi pętlami, a każda z nich przechodzi przez n iteracji, co prowadzi do O(n³). Z kolei O(n log n) jest typowe dla algorytmów sortujących, takich jak sortowanie szybkie czy sortowanie przez scalanie, lecz nie ma zastosowania w kontekście zagnieżdżonych pętli, które wykonują prostą operację przypisania. Odpowiedź O(n) wskazuje na liniową złożoność, co jest błędne w przypadku dwóch lub więcej wymiarów. Takie myślenie często prowadzi do błędnych ocen złożoności algorytmu, zwłaszcza, gdy nie uwzględnia się wszystkich aspektów zagnieżdżenia pętli. Ważne jest, aby przy analizowaniu złożoności obliczeniowej, zawsze uwzględniać wszystkie zagnieżdżone elementy, by uzyskać dokładny obraz wydajności algorytmu.

Pytanie 13

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

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

Pytanie 14

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

A. Klasa, która umożliwia wielokrotne dziedziczenie pól prywatnych
B. Klasa, która dzieli swoje pola z klasami zaprzyjaźnionymi
C. Klasa, która nie może posiadać konstruktorów ani destruktorów
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 15

Jaka jest składnia komentarza jednoliniowego w języku Python?

A. //
B. #
C. !
D. ""
Komentarz jednoliniowy w Pythonie zaczynamy od znaku hash, czyli #. To jest taki uniwersalny sposób na szybkie dodanie uwagi lub wyjaśnienia bez wpływu na działanie kodu. Moim zdaniem to bardzo praktyczne – wystarczy po prostu wpisać # i reszta linii jest ignorowana przez interpreter. W dużych projektach często spotyka się krótkie komentarze obok wyrażeń, np. x += 1 # inkrementacja liczby porządkowej. Co ciekawe, Python nie posiada stricte blokowych komentarzy, jak niektóre inne języki (np. /* ... */ w C lub Java), więc hashe naprawdę często się stosuje. To niesamowicie pomaga przy czytelności kodu, szczególnie gdy wracamy do własnych plików po kilku tygodniach albo pracujemy w zespole. PEP 8, czyli oficjalny przewodnik stylu Pythona, zaleca wręcz regularne używanie komentarzy do wyjaśniania „dlaczego” coś robimy, nie tylko „co” robimy. Dobrze napisany komentarz może skrócić czas szukania błędów albo tłumaczenia rozwiązań innym. Z mojego doświadczenia, warto pilnować, by komentarze nie były przestarzałe – łatwo zapomnieć o ich aktualizacji po zmianach w kodzie. Jeśli kiedyś napotkasz kod bez #, a z innymi znakami, to od razu czerwona lampka: to raczej nie jest Python.

Pytanie 16

Który z poniższych elementów jest częścią architektury PWA (Progressive Web App)?

A. Service Worker
B. Virtual Machine
C. DOM Renderer
D. Media Encoder
Wybór innych odpowiedzi może wynikać z nieporozumienia dotyczącego terminologii i funkcji różnych komponentów w architekturze aplikacji webowych. DOM Renderer, który jest odpowiedzialny za renderowanie struktury dokumentu HTML w przeglądarkach, nie ma bezpośredniego związku z architekturą PWA. Jego zadaniem jest prezentacja treści, ale nie wpływa na funkcjonalności offline czy zarządzanie zasobami. W kontekście PWA, kluczowe są aspekty zapewniające dostępność i wydajność aplikacji, a DOM Renderer nie odnosi się do tych wymagań. Virtual Machine, często kojarzona z technologiami takimi jak Java czy JavaScript (np. V8 w Google Chrome), jest odpowiedzialna za wykonywanie kodu, ale nie pełni roli w architekturze PWA, ponieważ nie zarządza ani nie optymalizuje interakcji sieciowych. Ostatni element, Media Encoder, to narzędzie do kodowania multimediów, które również nie ma zastosowania w kontekście PWA. Typowe błędy polegają na myleniu komponentów odpowiedzialnych za renderowanie i wykonywanie kodu z tymi, które mają na celu poprawę doświadczenia użytkownika w aplikacjach webowych. Zrozumienie roli Service Workera jest kluczowe dla efektywnego projektowania aplikacji, które zapewniają użytkownikom lepsze doświadczenie, szczególnie w warunkach ograniczonej dostępności sieci.

Pytanie 17

Która z poniższych technologii służy do tworzenia interaktywnych aplikacji webowych bez przeładowania strony?

A. HTML5
B. AJAX
C. CSS3
D. SQL
AJAX, czyli Asynchronous JavaScript and XML, to technologia umożliwiająca tworzenie interaktywnych aplikacji webowych bez konieczności przeładowywania całej strony. Dzięki AJAX, możliwe jest asynchroniczne przesyłanie danych pomiędzy klientem a serwerem, co pozwala na dynamiczne aktualizowanie treści na stronie bez interakcji użytkownika w postaci odświeżania. Przykładem wykorzystania AJAX może być formularz kontaktowy, który po wysłaniu nie przeładowuje całej strony, ale zamiast tego zaktualizowuje tylko wybraną sekcję, informując użytkownika o sukcesie lub błędzie. AJAX jest wykorzystywany w wielu nowoczesnych aplikacjach webowych, takich jak Gmail czy Facebook, gdzie interaktywność i szybkość są kluczowe. W kontekście standardów, AJAX najlepiej współpracuje z technologiami takimi jak RESTful API oraz JSON, co optymalizuje wymianę danych. Przy implementacji AJAX ważne jest również przestrzeganie zasad związanych z wydajnością i bezpieczeństwem, takich jak unikanie ataków XSS oraz odpowiednie zarządzanie sesjami użytkowników.

Pytanie 18

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

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

Pytanie 19

Jakie jest zastosowanie metody fetch() w JavaScript?

A. Sortowanie kolekcji obiektów
B. Filtrowanie elementów tablicy
C. Manipulacja elementami DOM
D. Pobieranie zasobów z sieci asynchronicznie
Metoda fetch() w JavaScript jest kluczowym narzędziem do asynchronicznego pobierania zasobów z sieci. Umożliwia ona wykonywanie zapytań HTTP do serwerów w sposób, który nie blokuje głównego wątku aplikacji, co jest istotne w kontekście zapewnienia płynności działania aplikacji webowych. Użycie fetch() pozwala na pobieranie różnych typów danych, takich jak JSON, tekst, czy pliki binarne. Przykład zastosowania fetch() może wyglądać następująco: fetch('https://api.example.com/data') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => console.log(data)); W tym przykładzie, po nawiązaniu połączenia z API, sprawdzamy, czy odpowiedź jest poprawna, a następnie przetwarzamy dane w formacie JSON. Ponadto, fetch() wspiera nowoczesne praktyki, takie jak obsługa promes (Promises) oraz async/await, co upraszcza kod i poprawia jego czytelność. Użycie tej metody jest zgodne z aktualnymi standardami webowymi, co czyni ją preferowanym rozwiązaniem w nowoczesnym programowaniu JavaScript.

Pytanie 20

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

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

Pytanie 21

Pierwszym krokiem w procesie tworzenia aplikacji jest

A. stworzenie przypadków testowych
B. opracowanie architektury systemu
C. wybór zestawu typów i zmiennych dla aplikacji
D. analiza wymagań klienta
Analiza wymagań klienta to taki trochę fundament całego procesu tworzenia aplikacji. Bez niej ciężko ruszyć dalej, bo nie wiadomo, co właściwie trzeba zbudować i jakie cele ma spełniać projekt. Z mojego doświadczenia wynika, że rozmowy z klientem potrafią odkryć wiele niewypowiedzianych oczekiwań – czasem nawet takie, o których sam klient nie pomyślał, ale są kluczowe dla sukcesu produktu. Bez szczegółowego zrozumienia, czego dokładnie potrzebuje użytkownik końcowy, łatwo wpaść w pułapkę budowania funkcjonalności na ślepo lub tworzenia rozwiązań, które nikomu się nie przydadzą. W branży IT mówi się, że im lepsza analiza na starcie, tym mniej poprawek i niespodzianek później w trakcie realizacji. Standardy takie jak IEEE 830 czy metodyki typu Agile i Scrum mocno podkreślają rolę rozmów z klientem oraz dokumentowania wymagań, zanim przejdzie się dalej. Praktycznie każda większa firma najpierw zbiera wymagania – czy to poprzez warsztaty, wywiady, czy analizę procesów biznesowych. Takie podejście pozwala lepiej zaplanować zakres projektu, oszacować koszty i ustalić priorytety. Bez tego nawet najlepsza architektura czy testy nie uratują projektu przed nieporozumieniami i opóźnieniami.

Pytanie 22

Która z poniższych nie jest zasadą czystego kodu (clean code)?

A. Samodokumentujący się kod
B. Jedna odpowiedzialność funkcji
C. Maksymalna złożoność funkcji
D. Konsekwentne nazewnictwo
Maksymalna złożoność funkcji to pojęcie, które odnosi się do zasady, że funkcje powinny być jak najmniej złożone, aby były zrozumiałe i łatwe w utrzymaniu. Czysty kod promuje ideę, że każda funkcja powinna mieć jasno określoną odpowiedzialność, co w praktyce oznacza ograniczenie jej złożoności. Przykładem może być rozdzielenie złożonej logiki biznesowej na kilka prostszych funkcji, co ułatwia ich testowanie i ponowne wykorzystanie. Warto zwrócić uwagę, że zgodnie z zasadą KISS (Keep It Simple, Stupid) dąży się do prostoty w projektowaniu kodu, co nie tylko zwiększa jego czytelność, ale także minimalizuje ryzyko błędów. Dobrze napisany kod powinien być również samodokumentujący się, co oznacza, że jego struktura i nazwy zmiennych powinny jasno wskazywać na ich funkcjonalność. Przestrzeganie zasady maksymalnej złożoności funkcji jest kluczowe w kontekście długoterminowego utrzymania aplikacji, ponieważ zmniejsza koszty związane z modyfikacjami oraz poprawkami.

Pytanie 23

Która z poniższych nie jest poprawną metodą HTTP?

A. POST
B. GET
C. SEARCH
D. DELETE
Odpowiedź SEARCH jest prawidłowa, ponieważ metoda ta nie jest uznawana za standardową metodę HTTP określoną w dokumentach specyfikacji HTTP. W protokole HTTP, który jest podstawą komunikacji w Internecie, istnieje zestaw standardowych metod, takich jak GET, POST i DELETE. GET służy do pobierania zasobów z serwera, POST do wysyłania danych na serwer, a DELETE do usuwania zasobów. Metoda SEARCH nie znajduje się w dokumentacji IETF dotyczącej HTTP, co oznacza, że nie jest zdefiniowana ani szeroko stosowana w praktyce. Warto zwrócić uwagę na to, że standardowe metody HTTP są kluczowe w projektowaniu API oraz architekturze aplikacji webowych, ponieważ zapewniają one spójność i przewidywalność w interakcji z serwerami. Znajomość tych metod jest niezbędna dla programistów pracujących z RESTful API, gdzie poprawne użycie metod HTTP ma kluczowe znaczenie dla efektywności i bezpieczeństwa aplikacji.

Pytanie 24

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

A. Specyfikacja techniczna
B. Lista zasobów ludzkich
C. Diagram Gantta
D. Product backlog
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 25

Testy mające na celu identyfikację błędów w interfejsach między modułami bądź systemami nazywane są testami

A. jednostkowymi
B. integracyjnymi
C. wydajnościowymi
D. bezpieczeństwa
Testy integracyjne mają na celu wykrycie błędów w interfejsach i połączeniach między modułami lub systemami. Głównym celem tych testów jest sprawdzenie, czy różne komponenty aplikacji współpracują ze sobą zgodnie z oczekiwaniami. Testy integracyjne są przeprowadzane po testach jednostkowych, ale przed testami systemowymi. W praktyce testy te obejmują scenariusze, w których kilka modułów wymienia dane lub współdziała w ramach wspólnego procesu. Integracja jest kluczowa dla zapewnienia, że cały system działa jako spójna całość, co minimalizuje ryzyko błędów na etapie produkcji i poprawia jakość końcowego produktu. Przykładem może być test komunikacji między modułem autoryzacji użytkowników a modułem płatności w aplikacji e-commerce.

Pytanie 26

Jakie jest rozwiązanie dla dodawania binarnego liczb 1011 oraz 110?

A. 10001
B. 10101
C. 11101
D. 11001
Dodawanie binarne to podstawowa operacja w systemie liczbowym, który używa tylko dwóch cyfr: 0 i 1. W przypadku dodawania liczb binarnych, proces ten przypomina dodawanie w systemie dziesiętnym, jednak z pewnymi różnicami ze względu na ograniczony zestaw cyfr. Gdy dodajemy liczby 1011 i 110, należy ustawić je w kolumnach, podobnie jak w dodawaniu dziesiętnym. Zaczynamy od najmniej znaczącej cyfry. W pierwszej kolumnie mamy 1 + 0, co daje 1. W drugiej kolumnie mamy 1 + 1, co daje 0, ale musimy przenieść 1 do następnej kolumny (przeniesienie jest kluczowym elementem w dodawaniu binarnym). W trzeciej kolumnie dodajemy 1 (przeniesienie) + 0 + 1, co daje 0 i przenosimy 1 do następnej kolumny. W czwartej kolumnie dodajemy przeniesienie 1 + 1 (z liczby 1011), co daje 10 w systemie binarnym, co oznacza 0 i przeniesienie 1. Końcowym wynikiem dodawania daje 10001 w systemie binarnym. To podejście jest zgodne z zasadami arytmetyki binarnej, które są fundamentem działania komputerów i systemów cyfrowych, w których operacje na danych są realizowane w systemie binarnym.

Pytanie 27

Termin ryzyko zawodowe odnosi się do

A. efektów zagrożeń wypadkowych, jakie występują w miejscu zatrudnienia
B. ciężkości skutków niepożądanych zdarzeń związanych z pracą
C. zagrożenia wypadkowego, które może wystąpić w miejscu pracy
D. prawdopodobieństwa, że zdarzenia niepożądane związane z pracą spowodują straty, w szczególności negatywne skutki zdrowotne dla pracowników
Pojęcie ryzyka zawodowego w branży BHP jest dość precyzyjnie zdefiniowane i, moim zdaniem, bardzo praktyczne. Chodzi tu właśnie o prawdopodobieństwo, że w wyniku zdarzeń niepożądanych w pracy pojawią się straty – najczęściej w postaci szkód zdrowotnych u pracowników, ale czasem też finansowych czy środowiskowych. To nie tylko sam fakt istnienia zagrożenia, ale ocena, czy i jak bardzo ono może się zaktualizować. W praktyce, np. w branży budowlanej czy energetycznej, ocena ryzyka zawodowego to podstawa organizacji bezpiecznej pracy. W Polsce normy PN-N-18002 i wytyczne Głównego Inspektoratu Pracy jasno mówią, że trzeba analizować zarówno prawdopodobieństwo wystąpienia zagrożenia, jak i potencjalne skutki. Co ciekawe, dla różnych zawodów i stanowisk ocena tego ryzyka może wyglądać zupełnie inaczej – czasem to analiza prostych czynności, czasem złożony audyt. Najlepsze firmy nie ograniczają się do szacowania samego zagrożenia, ale regularnie aktualizują ocenę ryzyka, szkolą pracowników i wdrażają środki zapobiegawcze. Moim zdaniem bez rzetelnej oceny ryzyka nie da się realnie podnieść bezpieczeństwa pracy – to taki fundament wszystkich dalszych działań. Warto zwracać uwagę, że ryzyko zawodowe zawsze wynika z kombinacji zagrożenia i prawdopodobieństwa, a nie tylko z obecności niebezpieczeństwa czy dotychczasowych wypadków.

Pytanie 28

Jakie rozwiązanie jest najbardziej odpowiednie przy projektowaniu aplikacji, która ma funkcjonować na różnych systemach operacyjnych?

A. Opracowanie dedykowanego kodu dla każdej platformy
B. Wykorzystanie technik responsywnego projektowania interfejsu
C. Pełne dopasowanie aplikacji do systemu Windows
D. Koncentrowanie się wyłącznie na estetyce aplikacji
Wykorzystanie technik responsywnego projektowania interfejsu to obecnie jedno z najskuteczniejszych rozwiązań, jeśli chodzi o tworzenie aplikacji działających na różnych systemach operacyjnych. Moim zdaniem, to podejście daje największą elastyczność i wygodę zarówno dla użytkownika, jak i dla samego zespołu developerskiego. Responsywność nie sprowadza się tylko do zmiany rozmiaru okna, ale także do automatycznego dostosowania elementów interfejsu do różnych rozdzielczości, DPI czy nawet gestów obsługiwanych przez konkretne urządzenia. Dzięki temu aplikacja może wyglądać i działać spójnie niezależnie od tego, czy uruchamiana jest na Windowsie, MacOS, Linuksie czy nawet na mobilnych systemach operacyjnych. W praktyce często korzysta się z frameworków takich jak Flutter, React Native albo Electron, które już "z pudełka" oferują narzędzia do tworzenia responsywnych, wieloplatformowych aplikacji. Branżowe standardy, szczególnie te, które dotyczą UX/UI (na przykład wytyczne Material Design czy Human Interface Guidelines od Apple), mocno podkreślają wagę responsywności i uniwersalności rozwiązań. Co ciekawe, dobrze zaprojektowana responsywna aplikacja jest też łatwiejsza w utrzymaniu i rozwoju, bo zamiast kilku osobnych wersji kodu, mamy jedną, dobrze przemyślaną bazę. To oszczędza czas, zasoby i minimalizuje ryzyko powstawania błędów. Sam przećwiczyłem wiele takich przypadków i widać, że inżynieria oprogramowania idzie właśnie w stronę uniwersalnych, "adaptacyjnych" rozwiązań.

Pytanie 29

Metodyka zwinna (ang. agile) opiera się na

A. dekompozycji przedsięwzięcia na elementy, które są niezależnie projektowane, wytwarzane i testowane w krótkich iteracjach
B. podzieleniu projektu na kolejne etapy: planowanie, programowanie, testowanie, z ciągłym oszacowaniem ryzyka projektu
C. zaplanowaniu całej aplikacji na początku projektu i jej tworzeniu na przemian z testowaniem
D. przygotowaniu testów dla całego projektu, a następnie wprowadzaniu kolejnych jego fragmentów
Podejście kaskadowe (waterfall) zakłada podział projektu na kolejne etapy (projekt, programowanie, testy), ale nie dopuszcza powrotu do wcześniejszych faz, co czyni je mniej elastycznym niż agile. Projektowanie całej aplikacji na początku jest charakterystyczne dla tradycyjnych metodyk, takich jak V-model, ale nie odzwierciedla idei iteracyjnego rozwoju stosowanego w agile. Implementowanie testów po zakończeniu całości projektu ogranicza możliwość szybkiego reagowania na błędy i jest sprzeczne z filozofią agile, gdzie testy są integralną częścią każdego etapu iteracji.

Pytanie 30

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

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

Pytanie 31

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

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

Pytanie 32

Algorytm zaprezentowany w zadaniu można zrealizować w języku Java wykorzystując instrukcję

Ilustracja do pytania
A. switch
B. if
C. try
D. while
Pętla while w języku Java jest idealna do implementacji algorytmów, które wymagają wielokrotnego wykonywania bloku kodu dopóki określony warunek logiczny pozostaje prawdziwy. W przedstawionym schemacie blokowym widzimy iteracyjny proces, który zaczyna się od przypisania wartości 2 do zmiennej number, a następnie kontynuuje dodawanie 2 do tej zmiennej tak długo, jak długo jej wartość nie osiągnie 10. Struktura ta jest typowym przykładem problemu, który najlepiej rozwiązać za pomocą pętli while. Wyrażenie warunkowe number != 10 jest sprawdzane przed każdą iteracją pętli, co umożliwia zakończenie pętli w momencie, gdy warunek przestaje być prawdziwy. To podejście jest zgodne z dobrymi praktykami programistycznymi, które zalecają minimalizowanie niepotrzebnych obliczeń i zwiększanie czytelności kodu. Pętle while są często stosowane w sytuacjach, gdy liczba iteracji nie jest z góry znana i zależy od dynamicznie zmieniających się warunków, co czyni je wszechstronnym narzędziem w wielu aplikacjach, od przetwarzania danych po kontrolę przepływu w symulacjach komputerowych. Praktyczna znajomość pętli pozwala na efektywne rozwiązywanie problemów w złożonych projektach informatycznych.

Pytanie 33

Które z poniższych nie jest językiem programowania?

A. Python
B. Kotlin
C. Ruby
D. HTML
HTML (HyperText Markup Language) jest językiem znaczników, który służy do tworzenia struktury stron internetowych. Jest fundamentalnym elementem w budowie aplikacji webowych, ponieważ umożliwia definiowanie elementów takich jak nagłówki, akapity, obrazy, linki i wiele innych. HTML nie jest językiem programowania w sensie, w jakim są nimi Python, Ruby, czy Kotlin, ponieważ nie obsługuje logiki programowania, takiej jak zmienne, pętle czy warunki. Jego głównym celem jest struktura i prezentacja treści w przeglądarkach internetowych. HTML współpracuje z CSS (Cascading Style Sheets) do stylizacji oraz JavaScript do obsługi logiki i interakcji. Przykładowo, podczas tworzenia strony internetowej można użyć HTML do zbudowania struktury, CSS do nadania jej estetyki, a JavaScript do dodawania dynamicznych elementów, takich jak formularze czy interaktywne mapy. Dobrą praktyką jest również używanie semantycznego HTML, co poprawia dostępność oraz SEO, co jest szczególnie ważne w współczesnym internecie.

Pytanie 34

Który z poniższych problemów jest najczęściej rozwiązywany z zastosowaniem algorytmu rekurencyjnego?

A. Wyszukiwanie binarne w uporządkowanej tablicy
B. Generowanie ciągu Fibonacciego
C. Obliczanie sumy elementów w tablicy
D. Sortowanie za pomocą metody QuickSort
Obliczanie sumy elementów tablicy jest zadaniem liniowym i najczęściej realizowane za pomocą prostych pętli iteracyjnych, co czyni rekurencję nieefektywnym wyborem dla tego problemu. Wyszukiwanie binarne w posortowanej tablicy można zaimplementować zarówno iteracyjnie, jak i rekurencyjnie, jednak bardziej efektywną metodą jest iteracja, ponieważ rekurencja może prowadzić do większego zużycia pamięci stosu. Sortowanie metodą QuickSort to przykład rekurencyjnego algorytmu, ale nie jest to klasyczny przykład tak intuicyjny jak Fibonacciego – QuickSort rozbija tablicę na mniejsze podzbiory i sortuje je niezależnie, co różni się od prostego obliczania ciągu liczb.

Pytanie 35

Jaki tekst zostanie wyświetlony po uruchomieniu jednego z poniższych fragmentów kodu?
Kod w React:

<h2>{2+2}</h2>
Kod w Angular:
<h2>{{2+2}}</h2>
A. {2+2}
B. {{2+2}}
C. {4}
D. 4
Wiele osób trafia na problem, bo te klamry i podwójne klamry wyglądają trochę tajemniczo, zwłaszcza przy pierwszym kontakcie z Reactem albo Angularem. Często pojawia się myślenie, że skoro w szablonie wpisano {2+2} albo {{2+2}}, to właśnie taki tekst zostanie wyświetlony na stronie, dosłownie z klamrami. W praktyce jednak i React (JSX), i Angular traktują klamry jako specjalną składnię do osadzania dynamicznych wartości z JavaScript — to nie jest zwykła dekoracja, tylko wyraźny sygnał dla silnika, że w tym miejscu należy wykonać kod i podstawić wynik. To powoduje, że nie wyświetli się ani „{2+2}”, ani „{{2+2}}”, tylko właśnie wynik tego wyrażenia. Co ciekawe, odpowiedź „{4}” też jest błędna, bo React i Angular nie wyświetlają już klamer w efekcie końcowym — klamry są tylko częścią składni, nie wyniku. Człowiek łatwo może się pomylić, bo w zwykłym HTML czegoś takiego nie ma i klamry są po prostu tekstem. Moim zdaniem często wynika to z niezrozumienia, jak działa tzw. data binding w frameworkach frontendowych. Warto wyrobić sobie nawyk myślenia o klamrach jako narzędziu do „wstrzykiwania” wartości, nie jako części tekstu. To też pokazuje, jak ważne jest czytanie dokumentacji — oficjalne materiały Reacta i Angulara bardzo wyraźnie podkreślają, że klamry służą do oceny JavaScriptu. Jeśli więc widzimy {2+2} w szablonie, przeglądarka zobaczy tylko „4”, bo wszystko, co w klamrach, jest oceniane przed wyświetleniem. Jeśli wpiszemy tam zmienną lub nawet funkcję, efekt będzie podobny — zawsze podstawiona zostanie końcowa wartość, a nie kod czy same klamry. Takie mechanizmy bardzo upraszczają pracę, bo pozwalają łatwo aktualizować widok w zależności od stanu aplikacji.

Pytanie 36

Jakie narzędzie jest wykorzystywane do zgłaszania błędów w projektach IT?

A. JIRA
B. Blender
C. Git
D. Photoshop
JIRA to jedno z najczęściej wykorzystywanych narzędzi do zarządzania projektami i raportowania błędów w projektach informatycznych. JIRA umożliwia śledzenie błędów, zarządzanie zadaniami oraz efektywne monitorowanie postępów prac nad projektem. Dzięki integracji z innymi narzędziami, takimi jak Confluence czy Bitbucket, JIRA stanowi kompleksowe rozwiązanie wspierające zespoły deweloperskie. Raportowanie błędów w JIRA pozwala na łatwe przypisywanie ich do odpowiednich członków zespołu, dodawanie załączników i komentarzy oraz monitorowanie statusu danego problemu, co usprawnia proces zarządzania jakością oprogramowania.

Pytanie 37

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

A. 40 Mbps
B. 50 Mbps
C. 400 Mbps
D. 500 Mbps
Na pierwszy rzut oka mogłoby się wydawać, że 50 Mbps to rozsądny wynik, ponieważ 500 MB w 10 sekund to duża ilość danych, ale jeśli przeliczymy jednostki poprawnie, szybko zauważymy błąd. Wynik 50 Mbps oznaczałby, że w ciągu 10 sekund przesyłamy jedynie 500 megabitów, czyli około 62,5 MB danych. To znacznie mniej niż 500 MB, więc taka przepustowość byłaby zdecydowanie zbyt mała, aby przesłać taką ilość danych w podanym czasie. Z kolei odpowiedź 500 Mbps sugeruje przepustowość większą niż w rzeczywistości. Gdyby sieć miała taką wydajność, to w ciągu 10 sekund przesłałaby aż 625 MB danych (500 Mb/s × 10 s = 5000 Mb = 625 MB), czyli więcej niż w zadaniu. Oznacza to, że taka prędkość byłaby zawyżona w stosunku do faktycznej wartości. Natomiast 40 Mbps jest niepoprawne, gdyż oznaczałoby możliwość przesłania jedynie 400 megabitów w 10 sekund, co odpowiada zaledwie 50 MB danych. To prawie dziesięć razy mniej niż rzeczywista ilość danych w zadaniu, więc sieć o takiej przepustowości nie byłaby w stanie wykonać transmisji w podanym czasie. Wszystkie te błędne odpowiedzi wynikają z nieprawidłowego przeliczenia jednostek lub braku uwzględnienia faktu, że bajty należy zamienić na bity przed obliczeniem przepustowości. Tylko wynik 400 Mbps jest zgodny z zasadami i poprawnym przeliczeniem danych.

Pytanie 38

Wskaż algorytm sortowania, który nie jest stabilny?

A. sortowanie szybkie
B. sortowanie bąbelkowe
C. sortowanie przez wstawianie
D. sortowanie przez zliczanie
Często podczas nauki algorytmów sortowania pojawia się zamieszanie na temat stabilności. Stabilność w sortowaniu oznacza, że elementy o tych samych kluczach nie zmieniają swojego wzajemnego położenia. W przypadku sortowania bąbelkowego, przez wstawianie i przez zliczanie – wszystkie te techniki są z natury stabilne, o ile ich standardowa implementacja nie została zmodyfikowana. To dość wygodne, bo gdy pracujemy z bardziej złożonymi danymi, np. obiektami z wieloma polami, stabilność pozwala zachować dodatkowe informacje przy kolejnych sortowaniach. Wielu jednak mylnie zakłada, że wszystkie szybkie algorytmy (jak Quick Sort) są stabilne, bo po prostu są bardziej zaawansowane. Niestety, to nie jest prawda – podstawowy Quick Sort nie zachowuje kolejności równych elementów i w praktyce może zamieszać nam w porządku danych. To jest błąd myślowy, który widzę często nawet u doświadczonych programistów. Sortowanie przez zliczanie (Counting Sort) jest stabilne, ponieważ dla każdego elementu dokładnie wiemy, na które miejsce ma trafić i w razie kolizji zawsze wybieramy ten, który był wcześniej. Podobnie klasyczne sortowanie bąbelkowe i przez wstawianie – oba algorytmy podczas przemieszczania elementów nie przestawiają tych samych wartości względem siebie. Moim zdaniem, właśnie ta stabilność jest często niedoceniana w codziennej pracy, a bywa naprawdę kluczowa przy pracy z danymi złożonymi. Warto zawsze, zanim wybierzemy algorytm sortowania, zastanowić się, czy zależy nam na tym, by zachować oryginalną kolejność dla równych wartości – wtedy zdecydowanie lepiej sięgnąć po stabilne podejście, zamiast używać np. Quick Sort. To nie jest tylko teoria, ale praktyczna wskazówka z życia programistycznego.

Pytanie 39

Wskaż rodzaj testów, które przeprowadza się podczas fazy tworzenia kodu źródłowego

A. testy wydajnościowe
B. testy jednostkowe
C. testy kompatybilności
D. testy wdrożeniowe
Testy jednostkowe to, moim zdaniem, absolutny fundament solidnego programowania. Są to niewielkie, automatyczne testy, które programista pisze zwykle równolegle z kodem albo nawet przed nim, jeśli stosuje się TDD (Test-Driven Development). Chodzi o to, żeby każda najmniejsza część programu – funkcja, metoda czy klasa – była dokładnie sprawdzona, czy zachowuje się zgodnie z założeniami już na etapie pisania kodu. W praktyce wygląda to tak: piszesz sobie funkcję, która np. liczy VAT, i od razu piszesz kilka testów, które sprawdzają, czy dla różnych wartości zwraca ona poprawne wyniki. Gdy coś się zmieni w kodzie, testy jednostkowe pozwalają od razu wychwycić, że coś zepsułeś (albo, oby nie, ktoś inny). Standardy branżowe, jak np. ISTQB czy wytyczne IEEE 829, bardzo mocno podkreślają wagę testów jednostkowych – bez nich zarządzanie jakością oprogramowania jest po prostu niemożliwe na dłuższą metę. W praktyce nawet proste projekty szybko bez nich zamieniają się w chaos. Co ciekawe, dobrze napisane testy jednostkowe ułatwiają refaktoryzację, bo masz pewność, że po zmianach wszystko działa jak należy. W mojej opinii, jeśli ktoś naprawdę poważnie myśli o pracy w branży IT, powinien umieć pisać testy jednostkowe z marszu.

Pytanie 40

Jednym z kroków publikacji aplikacji mobilnej w Google Play są testy Beta, które charakteryzują się tym, że są:

A. prowadzone w oparciu o dokument zawierający przypadki testowe
B. realizowane przez zespół zatrudnionych testerów z Google
C. podzielone na testy dotyczące funkcjonalności, wydajności i skalowalności
D. przeprowadzane przez grupę docelowych użytkowników aplikacji
Testy Beta w kontekście publikacji aplikacji na Google Play to bardzo istotny element całego procesu wydawniczego. Tak naprawdę chodzi tutaj o to, by oddać aplikację w ręce prawdziwych użytkowników, którzy potencjalnie będą z niej korzystać po premierze. To nie są testy laboratoryjne, gdzie wszystko jest przewidywalne i kontrolowane, tylko taki trochę poligon doświadczalny w rzeczywistym środowisku. Dzięki temu deweloperzy mogą wyłapać błędy, których nie dało się zauważyć podczas testów wewnętrznych czy automatycznych. Google umożliwia zaproszenie do testów Beta konkretnej grupy osób – czasem są to osoby z mailing listy, czasem aktywna społeczność, a czasem po prostu przypadkowi użytkownicy spełniający określone kryteria. Takie podejście jest zgodne z najlepszymi praktykami branżowymi, bo zapewnia bardziej realistyczny feedback. Moim zdaniem właśnie testy Beta ratują najwięcej aplikacji przed poważnymi wpadkami po oficjalnym wydaniu – użytkownicy zgłaszają nie tylko błędy, ale też własne pomysły i uwagi, które mogą zupełnie zmienić kierunek rozwoju produktu. To jest w sumie taka wersja MVP na etapie gotowego produktu, tylko że z dużo szerszą i bardziej zaangażowaną bazą testującą. Testy Beta są nieocenione, bo pozwalają zobaczyć aplikację oczami jej przyszłych użytkowników i szybko reagować na ich potrzeby, zanim pójdzie do szerokiej dystrybucji. Praktyka pokazuje, że pomijanie tego kroku to trochę proszenie się o złe oceny i negatywne recenzje już po premierze.