Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Co to jest algorytm QuickSort?

A. Algorytm wyszukiwania binarnego w posortowanej tablicy
B. Technika przeszukiwania grafu wszerz
C. Wydajny algorytm sortowania oparty na strategii 'dziel i zwyciężaj'
D. Metoda kompresji danych bez strat
Algorytm QuickSort to jeden z najbardziej popularnych i efektywnych algorytmów sortowania, który opiera się na strategii 'dziel i zwyciężaj'. W praktyce działa w ten sposób, że wybiera element zwany pivotem (osią) i dzieli zbiór na dwie części: jeden z elementami mniejszymi od pivota, a drugi z elementami większymi. Następnie rekurencyjnie sortuje te podzbiory. QuickSort jest niezwykle szybki i wydajny, zwłaszcza dla dużych zbiorów danych, a jego średnia złożoność czasowa wynosi O(n log n). Używa się go w wielu aplikacjach, gdzie istotne jest szybkie przetwarzanie danych, takich jak sortowanie list w aplikacjach webowych czy organizacja danych w bazach. Warto jednak pamiętać, że w najgorszym przypadku, gdy pivot jest źle wybierany, złożoność może wynosić O(n^2), co występuje na przykład w przypadku już posortowanej tablicy. W kontekście praktycznym, dobre praktyki obejmują dobór odpowiedniej metody wyboru pivota, co może znacznie poprawić wydajność algorytmu.

Pytanie 2

Który z wymienionych elementów UI w aplikacjach mobilnych jest odpowiedzialny za przechodzenie pomiędzy ekranami?

A. Pasek narzędziowy
B. Navigation Drawer
C. ListView
D. Przycisk
Przycisk (Button) jest podstawowym elementem interfejsu użytkownika, ale nie spełnia funkcji nawigacyjnej na poziomie strukturalnym – jego zastosowanie ogranicza się do wywoływania pojedynczych akcji po kliknięciu. ListView to komponent wyświetlający listę elementów, ale nie odpowiada za nawigację pomiędzy ekranami aplikacji, a jedynie za prezentację danych. Pasek narzędziowy (Toolbar) to element, który zwykle znajduje się na górze ekranu i umożliwia dostęp do opcji takich jak wyszukiwanie lub ustawienia, ale nie pełni funkcji bocznego menu nawigacyjnego, jak Navigation Drawer.

Pytanie 3

Który z języków programowania jest najczęściej wykorzystywany do budowania aplikacji internetowych po stronie serwera?

A. CSS
B. JavaScript
C. PHP
D. HTML
PHP to jeden z najczęściej używanych języków programowania do tworzenia aplikacji webowych po stronie serwera. Jest to język skryptowy, który umożliwia dynamiczne generowanie treści stron internetowych, zarządzanie sesjami użytkowników, obsługę formularzy oraz integrację z bazami danych. PHP napędza popularne systemy zarządzania treścią (CMS), takie jak WordPress, Joomla czy Drupal. Dzięki swojej prostocie, szerokiemu wsparciu społeczności oraz dużej liczbie gotowych bibliotek i frameworków (np. Laravel), PHP pozostaje jednym z czołowych języków backendowych. PHP pozwala również na szybkie wdrażanie aplikacji i jest kompatybilny z wieloma serwerami WWW, co czyni go uniwersalnym wyborem w budowie aplikacji webowych.

Pytanie 4

Co to jest kontener Docker?

A. Graficzny interfejs do zarządzania kodem aplikacji webowych
B. Lekka, samodzielna jednostka oprogramowania, która zawiera wszystko, co aplikacja potrzebuje do uruchomienia
C. System zarządzania bazami danych NoSQL
D. Narzędzie do automatycznego testowania interfejsów użytkownika
Kontener Docker to lekka, samodzielna jednostka oprogramowania, która zawiera wszystko, co aplikacja potrzebuje do uruchomienia: kod, biblioteki, zmienne środowiskowe oraz inne zależności. Dzięki wykorzystaniu technologii wirtualizacji na poziomie systemu operacyjnego, kontenery są bardziej efektywne i oszczędne w użyciu zasobów w porównaniu do tradycyjnych maszyn wirtualnych. Przykładem zastosowania kontenerów Docker jest rozwój aplikacji webowych, gdzie różne mikroserwisy mogą być uruchamiane w osobnych kontenerach, co pozwala na łatwe skalowanie oraz zarządzanie nimi. W praktyce, kontenery umożliwiają programistom szybkie uruchamianie środowisk testowych i produkcyjnych, a także ułatwiają ciągłą integrację i ciągłe wdrażanie (CI/CD), co jest zgodne z najlepszymi praktykami DevOps. W kontekście zarządzania infrastrukturą, kontenery zapewniają spójność środowiska, eliminując problemy związane z "działa na moim komputerze".

Pytanie 5

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

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

Pytanie 6

Które z wymienionych oznaczeń wskazuje na liniową złożoność algorytmu?

A. O(n²)
B. O(n)
C. O(1)
D. O(log n)
O(1) oznacza stałą złożoność czasową, co oznacza, że algorytm wykonuje tę samą liczbę operacji niezależnie od rozmiaru danych wejściowych – jest to typowe dla operacji na haszmapach lub tablicach asocjacyjnych. O(n²) oznacza kwadratową złożoność algorytmu, gdzie liczba operacji rośnie proporcjonalnie do kwadratu liczby elementów – jest to charakterystyczne dla algorytmów takich jak Bubble Sort czy Insertion Sort. O(log n) wskazuje na logarytmiczną złożoność i jest typowe dla algorytmów wyszukiwania binarnego (Binary Search) i niektórych algorytmów operujących na drzewach.

Pytanie 7

Jakie są główne cechy architektury klient-serwer?

A. Serwer pełni rolę pasywnego odbiorcy danych od klientów
B. Komunikacja odbywa się bezpośrednio między urządzeniami klienckimi
C. Każdy klient funkcjonuje niezależnie od pozostałych
D. Dane są przechowywane i przetwarzane na serwerze, a klient wysyła żądania i odbiera odpowiedzi
Architektura klient-serwer to model, w którym dane są przechowywane i przetwarzane na serwerze, a klient wysyła żądania i odbiera odpowiedzi. Model ten umożliwia centralizację zasobów, co prowadzi do łatwiejszego zarządzania aplikacjami i zwiększonego bezpieczeństwa. Klient-serwer jest podstawą działania aplikacji webowych, usług sieciowych oraz baz danych. Dzięki temu architektura ta umożliwia wielu użytkownikom jednoczesny dostęp do tych samych danych, co czyni ją wydajnym rozwiązaniem dla rozproszonych systemów informatycznych. Serwery mogą obsługiwać różne rodzaje klientów, takie jak przeglądarki, aplikacje mobilne czy urządzenia IoT, co sprawia, że jest to wszechstronny model stosowany w wielu branżach.

Pytanie 8

Jak wygląda kod uzupełnienia do dwóch dla liczby -5 w formacie binarnym przy użyciu 8 bitów?

A. 10000101
B. 11111011
C. 11111101
D. 00000101
Aby obliczyć kod uzupełnieniowy do dwóch dla liczby -5 w zapisie binarnym na 8 bitach, należy najpierw przedstawić liczbę 5 w postaci binarnej, co daje 00000101. Zgodnie z zasadą uzupełnienia do dwóch, aby uzyskać reprezentację liczby ujemnej, najpierw inwertujemy wszystkie bity tej liczby. Inwersja 00000101 prowadzi do 11111010. Następnie dodajemy 1 do wyniku inwersji: 11111010 + 1 = 11111011. Ostatecznie, kod uzupełnieniowy do dwóch dla -5 na 8 bitach to 11111011. Ta metoda jest powszechnie stosowana w systemach komputerowych i umożliwia efektywne operacje arytmetyczne na liczbach całkowitych, w tym na liczbach ujemnych, co jest kluczowe w kontekście programowania i projektowania systemów. Warto zaznaczyć, że standardy takie jak IEEE 754 definiują zasady reprezentacji liczb zmiennoprzecinkowych, ale w przypadku liczb całkowitych, kod uzupełnieniowy do dwóch pozostaje standardem w większości architektur komputerowych.

Pytanie 9

Który z poniższych aspektów najdokładniej określa cel realizacji projektu?

A. Ocena postępów w czasie realizacji projektu
B. Określenie problemu i metody jego rozwiązania
C. Zidentyfikowanie technologii, które mogą być zastosowane
D. Stworzenie harmonogramu działań
Określenie problemu i sposobu jego rozwiązania to fundamentalny cel każdego projektu. Bez jasno zdefiniowanego problemu i sprecyzowanej metody jego rozwiązania, projekt może stać się chaotyczny i nieefektywny. Precyzyjna analiza problemu pozwala na wyznaczenie celów, które prowadzą do stworzenia wartościowego produktu lub usługi. Dzięki temu zespół może skupić się na kluczowych zadaniach i efektywnie zarządzać zasobami. Określenie problemu to pierwszy krok w metodykach Agile i Waterfall, który warunkuje sukces całego przedsięwzięcia.

Pytanie 10

Jakie jest podstawowe zadanie wykorzystania frameworka Node.js w aplikacjach internetowych?

A. Budowanie aplikacji mobilnych
B. Weryfikacja API
C. Zarządzanie aplikacjami serwerowymi i realizacja przetwarzania asynchronicznego
D. Kreowanie graficznego interfejsu użytkownika
Aplikacje mobilne to raczej domena takich narzędzi jak Android Studio czy React Native, które są zaprojektowane do tworzenia aplikacji na smartfony. Projektowanie interfejsów użytkownika raczej robimy w Adobe XD, Sketch czy Figma, a nie w Node.js, bo to nie do końca jego zadanie. Testowanie API to już inna bajka i zazwyczaj korzysta się z Postmana, a Node.js to bardziej środowisko do uruchamiania kodu, a nie do testów.

Pytanie 11

Co będzie wynikiem wykonania poniższego kodu w języku C#?

string text = "hello world";
var result = string.Join("", text.Split(' ').Select(s => char.ToUpper(s[0]) + s.Substring(1)));
Console.WriteLine(result);
A. HELLO WORLD
B. Hello World
C. HelloWorld
D. helloworld
Wynikiem wykonania kodu nie jest 'HELLO WORLD', a przyczyna tego nieporozumienia tkwi w sposobie przetwarzania tekstu. Warto zauważyć, że kod nie wykonuje prostej konwersji wszystkich liter na wielkie, jak sugeruje ta odpowiedź. Zamiast tego, każda pierwsza litera każdego słowa jest zmieniana na wielką, a pozostałe litery pozostają w oryginalnym stanie, co w przypadku 'hello world' daje wyrażenie 'Hello World'. To zrozumienie jest kluczowe w programowaniu, ponieważ często błędnie zakładamy, że transformacje na tekstach działają w sposób jednorodny. Inną niepoprawną odpowiedzią jest 'helloworld', która również pomija konwersję pierwszych liter na wielkie, co jest kluczowym aspektem działania kodu. Warto rozważyć, że przy pracy z tekstami w C# istotne są szczegóły, takie jak wielkość liter, a dobre praktyki programistyczne wymagają zrozumienia, jak funkcje manipulujące tekstem działają. Niepoprawne odpowiedzi często wynikają z niezrozumienia schematu, jakim jest łączenie, a nie tylko konwersji liter. Użytkownicy powinni zawsze testować swoje założenia poprzez praktyczne próby w kodowaniu, aby unikać takich nieporozumień.

Pytanie 12

Co to jest Docker?

A. Platforma do tworzenia, wdrażania i uruchamiania aplikacji w kontenerach
B. System zarządzania bazami danych NoSQL
C. Narzędzie do testowania wydajności aplikacji webowych
D. Framework do tworzenia aplikacji mobilnych
Rozważając inne odpowiedzi, warto zauważyć, że system zarządzania bazami danych NoSQL nie ma związku z konteneryzacją, jaką oferuje Docker. NoSQL to kategoria baz danych, które nie stosują tradycyjnych relacyjnych modeli danych, co czyni je odpowiednimi do pracy z dużymi zbiorami danych i aplikacjami wymagającymi elastyczności w strukturach danych. To podejście jest zupełnie różne od idei kontenerów, gdzie celem jest uruchomienie aplikacji oraz ich środowiska w standaryzowany sposób, niezależnie od infrastruktury. W kontekście tworzenia aplikacji mobilnych, frameworki takie jak React Native czy Flutter są dedykowane do tego celu, ale nie mają nic wspólnego z zarządzaniem aplikacjami w kontenerach, co jest kluczowe w przypadku Dockera. Narzędzia do testowania wydajności aplikacji webowych, takie jak JMeter czy Gatling, koncentrują się na analizie i optymalizacji wydajności stron internetowych oraz aplikacji, co również nie koresponduje z funkcjonalnością Dockera. Problemy z interpretacją tych zagadnień mogą wynikać z mylenia ról, jakie pełnią różne technologie w cyklu życia oprogramowania. Chociaż wszystkie wymienione podejścia są ważne w dziedzinie inżynierii oprogramowania, tylko Docker służy do efektywnej konteneryzacji aplikacji, co jest kluczowe dla nowoczesnych praktyk DevOps i rozwoju aplikacji w zmieniającym się środowisku technologicznym.

Pytanie 13

Który z frameworków bazuje na budowaniu komponentów przy użyciu języka JavaScript?

A. ASP.NET Core
B. Django
C. Node.js
D. React.js
React.js to popularna biblioteka JavaScript, która opiera się na komponencie jako podstawowym elemencie budowy interfejsu użytkownika. Framework ten umożliwia tworzenie dynamicznych i interaktywnych aplikacji webowych, które cechują się wysoką wydajnością. Dzięki wykorzystaniu komponentów, programiści mogą wielokrotnie wykorzystywać te same elementy interfejsu, co znacznie upraszcza zarządzanie kodem i poprawia jego czytelność. React jest szeroko stosowany w budowie Single Page Applications (SPA) i wspiera technologię Virtual DOM, co minimalizuje liczbę operacji na rzeczywistym DOM i zwiększa szybkość renderowania stron. React jest szczególnie polecany do tworzenia nowoczesnych aplikacji webowych o dynamicznych interfejsach, co czyni go jednym z liderów na rynku frontendowym.

Pytanie 14

Jaką instrukcję należy wykorzystać do poprawnej deklaracji zmiennej typu string w C++?

A. int name = "Jan"
B. float name = "Jan"
C. string name = "Jan"
D. bool name = "Jan"
Ta deklaracja 'string name = "Jan"' to naprawdę dobry sposób na zdefiniowanie zmiennej łańcuchowej w C++. Wiesz, 'string' to typ danych, 'name' to nazwa tej zmiennej, a 'Jan' to wartość, która jest jej przypisana. Typ 'string' jest częścią biblioteki <string> i daje nam wiele możliwości, gdy pracujemy z tekstem. Możemy łączyć, porównywać i modyfikować różne łańcuchy znaków bez większego problemu. To jest mega ważne w aplikacjach, które mają do czynienia z danymi tekstowymi, interfejsami użytkownika czy analizą danych, które wprowadzamy.

Pytanie 15

Przeprowadzając analizę kodu interfejsu graficznego napisanego w języku XAML, można zauważyć, że:

<StackLayout Orientation="Vertical">
  <Label Text="Fotograf" />
  <Image Source="obraz.jpg" Aspect="AspectFill" />
  <StackLayout Orientation="Horizontal">
    <Button Text="Like" />
    <Button Text="Share" />
  </StackLayout>
  <Label Text="Fotka z moich wakacji" />
</StackLayout>
A. obraz znajduje się po lewej stronie, a pozostałe elementy po prawej
B. przyciski są ustawione poziomo obok siebie
C. elementy: tekst, obraz, przycisk Like, przycisk Share, tekst są ułożone jeden pod drugim
D. tekst "Fotograf" znajduje się po prawej stronie obrazu
W analizowanym kodzie XAML widzimy, że element <StackLayout> z atrybutem Orientation="Horizontal" zawiera przyciski <Button> z tekstami "Like" i "Share". W XAML, stosując stack layout z orientacją poziomą, elementy w nim zawarte są umieszczane obok siebie w rzędzie. To sprawia, że przyciski "Like" i "Share" są widoczne na interfejsie użytkownika ułożone poziomo, zgodnie z tym, co jest opisane w poprawnej odpowiedzi. Użycie StackLayout z orientacją poziomą to często spotykana praktyka w projektowaniu interfejsów, gdy chcemy zorganizować elementy w rzędzie, na przykład przyciski na pasku narzędzi. Zrozumienie tego mechanizmu jest istotne, ponieważ pozwala na efektywne zarządzanie przestrzenią w aplikacjach mobilnych i webowych, gdzie dostępne miejsce może być ograniczone. Praktyczne zastosowanie takiego układu można zobaczyć na przykład w projektowaniu formularzy, gdzie grupujemy elementy w logiczny sposób, ułatwiając użytkownikowi interakcję z aplikacją. Dobre praktyki w projektowaniu interfejsów użytkownika zalecają, aby układ elementów był intuicyjny i zgodny z oczekiwaniami użytkowników, co StackLayout z orientacją poziomą doskonale realizuje w wielu przypadkach.

Pytanie 16

Jaki jest podstawowy okres ochrony autorskich praw majątkowych w krajach Unii Europejskiej?

A. 75 lat od daty powstania utworu
B. Bezterminowo
C. 70 lat od zgonu autora
D. 50 lat od chwili pierwszej publikacji utworu
Okres 50 lat od pierwszej publikacji utworu odnosi się zazwyczaj do praw pokrewnych, takich jak ochrona nagrań dźwiękowych lub filmowych. Ochrona przez 75 lat od powstania utworu nie jest standardem w UE, choć niektóre kraje mogą mieć takie przepisy w odniesieniu do specyficznych typów dzieł. Bezterminowa ochrona dotyczy wyłącznie autorskich praw osobistych, a nie majątkowych, które zawsze wygasają po określonym czasie.

Pytanie 17

Co to jest destructuring assignment w JavaScript?

A. Metoda usuwania nieużywanych zmiennych z kodu
B. Składnia pozwalająca na rozpakowanie wartości z tablic lub obiektów do oddzielnych zmiennych
C. Proces konwersji typów danych w JavaScript
D. Technika optymalizacji kodu przez kompilator
Odpowiedzi, które wybierasz, mogą prowadzić do mylnych interpretacji dotyczących możliwości i funkcji JavaScript. Na przykład, sugestia, że destructuring assignment to metoda usuwania nieużywanych zmiennych, jest nieprawdziwa. Technika destructuring nie zajmuje się usuwaniem zmiennych, lecz ich rozpakowywaniem. Usuwanie zmiennych, które nie są używane, jest związane z zarządzaniem pamięcią i optymalizacją kodu, co jest zupełnie inną koncepcją. Ponadto, konwersja typów danych w JavaScript to proces, który dotyczy zmiany jednego typu danych na inny, a nie ma bezpośredniego związku z destrukturyzacją. Zrozumienie różnic pomiędzy tymi pojęciami jest kluczowe, aby nie wprowadzać w błąd podczas nauki JavaScript. Destructuring assignment jest także odzwierciedleniem nowoczesnych praktyk programowania, które skupiają się na zwięzłości i czytelności kodu. Uznawanie go za technikę optymalizacji kodu przez kompilator również jest mylne, ponieważ optymalizacja kodu to proces, który nie ma bezpośredniego związku z destrukturyzacją. Takie nieprecyzyjne zrozumienie może prowadzić do późniejszych problemów z implementacją kodu oraz jego utrzymywaniem.

Pytanie 18

Podaj przykład incydentu w miejscu pracy?

A. złe samopoczucie spowodowane przewlekłą chorobą zatrudnionego, które wystąpiło w biurze
B. kontuzja stawu skokowego, która zdarzyła się w trakcie bezpośredniej drogi do miejsca zatrudnienia
C. oparzenie dłoni, które miało miejsce podczas nieobowiązkowego szkolenia w czasie prywatnym pracownika
D. złamanie nogi w trakcie urlopu wypoczynkowego przyznanego przez pracodawcę
To właśnie sytuacja, gdy ktoś doznał kontuzji stawu skokowego podczas bezpośredniej drogi do pracy, jest klasycznym przykładem incydentu związanego z pracą, a konkretnie tzw. wypadku w drodze do pracy. Zgodnie z przepisami BHP oraz praktyką ubezpieczeniową, za incydent w miejscu pracy uznaje się nie tylko zdarzenia mające miejsce na terenie zakładu, ale także te występujące w drodze do lub z pracy – oczywiście pod warunkiem, że droga była bezpośrednia i nieprzerwana, bez załatwiania spraw prywatnych po drodze. Moim zdaniem ta kwestia jest często niedoceniana przez pracowników – wielu z nas zapomina, że wypadek w drodze do pracy daje podobne uprawnienia jak wypadek w zakładzie pracy, oczywiście po spełnieniu określonych wymogów formalnych, np. zgłoszenie incydentu pracodawcy, udokumentowanie miejsca i czasu zdarzenia. W praktyce wielu pracodawców i pracowników nie do końca rozumie, jakie sytuacje faktycznie podlegają pod te przepisy. Na przykład, jeśli ktoś skręcił nogę idąc prosto z domu do pracy i nie zatrzymywał się po drodze, to ten incydent kwalifikuje się jako wypadek w drodze do pracy. Warto znać te zasady, żeby nie przegapić swoich praw. Branżowe standardy, takie jak wytyczne PIP i ubezpieczycieli, jasno wskazują na obowiązek rejestrowania i analizowania takich zdarzeń, bo z punktu widzenia bezpieczeństwa pracy każde takie zdarzenie jest sygnałem do poprawy szeroko rozumianych warunków pracy, nawet jeśli zdarzy się poza samym biurem czy halą.

Pytanie 19

W jaki sposób można załadować tylko komponent z biblioteki React?

A. import [ Component ] from 'react'
B. import { Component } from 'react'
C. import React.Component from 'react'
D. import Component from 'react'
Użycie składni import { Component } from 'react' to zdecydowanie najczęściej spotykany i najbardziej rekomendowany sposób importowania tylko wybranego komponentu z biblioteki React. To tzw. import nazwany, czyli dokładnie wskazujesz, który kawałek kodu chcesz wyciągnąć z całego modułu. W praktyce, jest to bardzo czytelne i pozwala na jasne zarządzanie zależnościami w pliku. Moim zdaniem ma to ogromne znaczenie w większych projektach, bo łatwo potem znaleźć, które elementy są faktycznie wykorzystywane w danym pliku. Co ważne, taka technika importowania jest w pełni zgodna ze standardami ES6, właściwie każdy nowoczesny projekt front-endowy na tym bazuje. Przykład praktyczny: jeśli chcesz stworzyć klasowy komponent React, wystarczy napisać import { Component } from 'react', a potem class MyClass extends Component {...}. Jest to nieco bardziej eleganckie niż importowanie całego obiektu React (np. import React from 'react'), zwłaszcza jeśli nie potrzebujesz całej funkcjonalności. Dodatkowo, takie rozwiązanie może wpływać pozytywnie na bundlowanie kodu, bo nie ściągasz do projektu niepotrzebnych fragmentów biblioteki. Swoją drogą, coraz częściej widać, że programiści skupiają się na minimalizowaniu importów i czytelności kodu – właśnie przez wybór takich rozwiązań.

Pytanie 20

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

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

Pytanie 21

Jakie z następujących skutków może wystąpić w przypadku naruszenia prawa autorskiego?

A. Unieważnienie umowy licencyjnej użytkownika końcowego
B. Obowiązek zamieszczenia publicznych przeprosin
C. Nałożenie grzywny lub kary więzienia
D. Zakaz korzystania z oprogramowania open-source
Naruszenie prawa autorskiego może skutkować nałożeniem grzywny lub karą więzienia. W zależności od skali naruszenia oraz obowiązujących przepisów, osoba odpowiedzialna za naruszenie może zostać pociągnięta do odpowiedzialności karnej lub cywilnej. Kary mogą obejmować nie tylko grzywny finansowe, ale także konieczność wypłaty odszkodowań na rzecz twórcy lub właściciela praw autorskich. W niektórych przypadkach naruszenie praw autorskich na dużą skalę może prowadzić do kary pozbawienia wolności, co podkreśla wagę przestrzegania przepisów o ochronie własności intelektualnej.

Pytanie 22

Która biblioteka JavaScript jest najczęściej używana do tworzenia testowalnych funkcji asynchronicznych?

A. Axios
B. Underscore.js
C. D3.js
D. Moment.js
Moment.js, D3.js i Underscore.js to biblioteki, które pełnią zupełnie inne funkcje w porównaniu do Axios. Moment.js jest używany głównie do manipulacji datami i czasem, co jest niezwykle przydatne w kontekście tworzenia aplikacji, które wymagają zaawansowanej obsługi dat i stref czasowych. Z drugiej strony, D3.js to potężne narzędzie do wizualizacji danych, pozwalające na tworzenie skomplikowanych wykresów i diagramów w przeglądarkach. Jego zastosowanie w asynchronicznym programowaniu jest ograniczone, ponieważ koncentruje się na prezentacji danych, a nie na ich pozyskiwaniu czy przetwarzaniu. Underscore.js jest z kolei biblioteką, która dostarcza funkcje pomocnicze do programowania funkcyjnego, ułatwiając pracę z kolekcjami danych, ale nie ma bezpośredniego związku z asynchronicznymi żądaniami HTTP. Typowym błędem może być mylenie funkcji każdej z tych bibliotek. Często programiści mogą pomyśleć, że każda z tych bibliotek wspiera asynchroniczność, jednak to Axios w tej dziedzinie jest liderem. Warto zwrócić uwagę, że wybór odpowiedniego narzędzia do konkretnego zadania jest kluczowy w programowaniu, a zrozumienie funkcji każdej biblioteki pozwala na efektywniejsze rozwiązywanie problemów.

Pytanie 23

Jakie są cechy testów interfejsu?

A. Weryfikują zgodność aplikacji z przepisami prawnymi
B. Sprawdzają prawidłowość pracy elementów graficznych oraz interakcji użytkownika z aplikacją
C. Analizują wydajność aplikacji w czasie rzeczywistym
D. Ulepszają kod aplikacji
Testy interfejsu, znane też jako testy GUI (Graphical User Interface), są niesamowicie istotne w codziennej pracy programisty, zwłaszcza jeśli chodzi o aplikacje z graficznym interfejsem użytkownika. Ich głównym celem jest sprawdzanie, czy wszystkie elementy graficzne, takie jak przyciski, pola tekstowe czy menu działają zgodnie z założeniami oraz czy użytkownik może wchodzić z nimi w interakcję w przewidywany sposób. W praktyce zdarza się, że najwięcej błędów wychodzi właśnie na tym etapie – na przykład, kliknięcie w przycisk nie wywołuje żadnej akcji, albo okna dialogowe są nieczytelne. Moim zdaniem regularne wykonywanie takich testów (często automatycznych przy użyciu narzędzi typu Selenium, Cypress czy Playwright) pozwala wykrywać drobne usterki zanim trafią do rąk klienta, co jest zgodne z dobrymi praktykami Continuous Integration. Często też testy te są weryfikowane pod kątem responsywności, dostępności (WCAG) czy kompatybilności z różnymi przeglądarkami. Z mojego doświadczenia to właśnie testy interfejsu najbardziej pomagają w budowaniu pozytywnych doświadczeń użytkowników, bo pomagają wychwycić nieintuicyjne zachowania aplikacji, które ciężko zauważyć samym kodem. Warto więc o nich pamiętać, bo nawet najlepsza logika aplikacji nie obroni się, gdy UI nie działa poprawnie.

Pytanie 24

Algorytmy, które są wykorzystywane do rozwiązywania problemów przybliżonych lub takich, które nie mogą być opisane za pomocą algorytmu dokładnego, na przykład w prognozowaniu pogody czy identyfikacji nowych wirusów komputerowych, to algorytmy.

A. liniowe
B. heurystyczne
C. iteracyjne
D. rekurencyjne
Algorytmy heurystyczne są metodami rozwiązywania problemów, które są stosowane w sytuacjach, gdy nie ma jednoznacznego algorytmu dokładnego lub gdy problem jest zbyt skomplikowany, aby można go było rozwiązać w rozsądnym czasie. Przykłady zastosowań algorytmów heurystycznych obejmują przewidywanie pogody, gdzie różne modele atmosferyczne mogą być łączone w celu uzyskania lepszej prognozy, oraz rozpoznawanie nowych wirusów komputerowych, gdzie algorytmy heurystyczne pozwalają na identyfikację wzorców i anomalii w zachowaniu oprogramowania. Algorytmy te różnią się od tradycyjnych algorytmów liniowych, które działają na podstawie z góry określonych kroków oraz algorytmów rekurencyjnych, które polegają na rozwiązywaniu problemu poprzez dzielenie go na mniejsze podproblemy. Heurystyki są bardziej elastyczne, ponieważ pozwalają na zastosowanie intuicji i doświadczenia w procesie rozwiązywania. W praktyce algorytmy heurystyczne często łączą różne podejścia, aby uzyskać wyniki, które są wystarczająco dobre w krótkim czasie, co czyni je idealnymi do zastosowania w dynamicznie zmieniających się dziedzinach, takich jak analiza danych i sztuczna inteligencja.

Pytanie 25

Co to jest lazy loading w kontekście aplikacji webowych?

A. Narzędzie do testowania wydajności ładowania strony
B. Strategia optymalizacji, która opóźnia ładowanie zasobów do momentu, gdy są faktycznie potrzebne
C. Metoda kompresji obrazów na stronach internetowych
D. Technika przechowywania danych w pamięci podręcznej przeglądarki
Lazy loading to technika optymalizacji wydajności, która polega na opóźnieniu ładowania zasobów, takich jak obrazy, filmy czy skrypty, do momentu, gdy są one rzeczywiście potrzebne. Dzięki temu zwiększa się szybkość ładowania strony, co jest szczególnie ważne w kontekście doświadczeń użytkowników i SEO. Przykładem zastosowania lazy loading może być strona z długą listą produktów, gdzie obrazy dla produktów znajdujących się poza ekranem są ładowane dopiero, gdy użytkownik przewinie stronę w dół. Praktyka ta nie tylko poprawia czas reakcji strony, lecz także redukuje zużycie pasma, co jest korzystne dla użytkowników na urządzeniach mobilnych. Stosując lazy loading, warto pamiętać o dobrych praktykach, takich jak użycie odpowiednich bibliotek JavaScript, które wspierają tę technikę, oraz zapewnienie odpowiednich fallbacków dla starszych przeglądarek. Wprowadzenie lazy loading jest zgodne z zaleceniami optymalizacji wydajności publikowanymi przez Google, które podkreślają znaczenie ładowania tylko niezbędnych zasobów i poprawę UX.

Pytanie 26

Jaki będzie wynik działania poniższego kodu JavaScript?

function foo() { console.log(a); var a = 1; console.log(a); } foo();
A. undefined, 1
B. undefined, undefined
C. 1, 1
D. ReferenceError, 1
Wynikiem działania tego kodu nie może być 'ReferenceError, 1', ponieważ w sytuacji, gdy zmienna 'a' została zadeklarowana za pomocą 'var', nie może wystąpić błąd referencyjny związany z odwołaniem się do niej przed jej przypisaniem. Wartość zmiennej 'a' przed jej przypisaniem to 'undefined', a nie 'ReferenceError', co jest typowym nieporozumieniem w kontekście hoisting. W przypadku zmiennych zadeklarowanych za pomocą 'let' lub 'const', rzeczywiście moglibyśmy napotkać 'ReferenceError', gdyż te zmienne mają tzw. „temporal dead zone” przed ich zadeklarowaniem. Wynik 'undefined, undefined' również nie jest poprawny, ponieważ po pierwszym 'console.log' zmienna 'a' jest jeszcze niezainicjalizowana i wyświetli 'undefined', ale drugie 'console.log' z pewnością wyświetli wartość '1', po przypisaniu. Odpowiedź '1, 1' jest również błędna, ponieważ pierwsze logowanie 'a' przed przypisaniem z pewnością da 'undefined'. Ważne jest zrozumienie zasad hoisting oraz jak różne typy deklaracji zmiennych wpływają na ich zakres i inicjalizację, aby unikać nieporozumień w przyszłości.

Pytanie 27

Na jakim etapie cyklu życia projektu tworzony jest szczegółowy opis wymagań funkcjonalnych oraz niefunkcjonalnych?

A. Wdrożenie
B. Analiza
C. Planowanie
D. Weryfikacja
Etap analizy to kluczowy moment w cyklu życia projektu, gdy powstaje szczegółowy opis wymagań funkcjonalnych i niefunkcjonalnych. W praktyce, właśnie wtedy zbierane są wszelkie informacje od interesariuszy – klient opowiada, czego oczekuje, a zespół projektowy zadaje mnóstwo pytań, by naprawdę zrozumieć potrzeby. Moim zdaniem to najważniejsza faza, bo jeśli coś pójdzie nie tak na tym etapie, to cała reszta projektu może się sypnąć. Analiza wymagań to nie tylko spisanie kilku zdań – tu trzeba dokładnie określić, co system ma robić (czyli funkcjonalności, np. użytkownik może dodać produkt do koszyka), oraz jakie ma mieć cechy pozafunkcjonalne, jak wydajność czy bezpieczeństwo. Dobre praktyki, jak np. BABOK czy normy ISO/IEC 29148, podkreślają, że precyzyjna analiza wymagań pozwala uniknąć kosztownych poprawek na późniejszych etapach. W rzeczywistych projektach IT korzysta się często z narzędzi typu diagramy przypadków użycia, user stories albo specyfikacje wymagań – wszystko po to, żeby nie było niejasności. Uczciwie powiem, że im więcej czasu i uwagi poświęci się na analizę, tym mniej niespodzianek pojawi się dalej. Warto to mieć na uwadze.

Pytanie 28

Programista może wykorzystać framework Angular do realizacji aplikacji:

A. na komputerze
B. rodzaju back-end
C. rodzaju front-end
D. mobilnej
Angular to świetne narzędzie do tworzenia aplikacji front-endowych. Chodzi o to, że odpowiada za to, co widzi użytkownik i jak może z tym interagować. Dzięki Angular możemy budować dynamiczne i responsywne aplikacje webowe. Z tego co widzę, używamy tam komponentów, modułów i rzeczy typu dwukierunkowe wiązanie danych, co naprawdę ułatwia życie. Bez wątpienia, Angular jest jednym z najpopularniejszych frameworków do robienia interfejsów użytkownika, co tylko potwierdza jego efektywność.

Pytanie 29

W standardzie dokumentacji testów oprogramowania IEEE 829-1998 opisany jest dokument, który zawiera dane o tym, jakie przypadki testowe były wykorzystane, przez kogo i czy zakończyły się sukcesem. Co to jest?

A. Dziennik Testów
B. Specyfikacja Procedury Testowej
C. Plan Testów
D. Raport Podsumowujący Testy
Pojęcie dokumentacji testowej według IEEE 829-1998 jest bardzo precyzyjne, ale często właśnie myli się niektóre pojęcia. Plan Testów to taki ogólny, strategiczny dokument – mówi, co, kiedy i jak będziemy testować, jakie są założenia, jakie środowisko i narzędzia, ale nie przechowuje szczegółowych informacji o tym, które przypadki były faktycznie realizowane danego dnia przez daną osobę. Trochę jak plan meczu przed rozgrywką, a nie jego protokół. Z kolei Specyfikacja Procedury Testowej to szczegółowy opis kroków, jakie należy wykonać, żeby przeprowadzić dany test – taki „przepis na testowanie”, który daje testerowi konkretną instrukcję działania. Ona nie zbiera jednak danych o tym, kto wykonał, kiedy i z jakim skutkiem – raczej mówi „jak” niż „kto/co/kiedy”. Raport Podsumowujący Testy natomiast to taki końcowy dokument na podsumowanie całego cyklu testowego – zestawia wyniki, ilość znalezionych defektów, procent pokrycia, rekomendacje dotyczące dalszych działań; nie zawiera jednak szczegółowych wpisów o przebiegu pojedynczych przypadków. Typowym nieporozumieniem jest myślenie, że to właśnie raport podsumowujący będzie zawierał „wszystko”, ale on służy bardziej do ogólnego przeglądu i prezentacji wyników, a nie do śledzenia przebiegu każdego testu z osobna. Często też błędnie utożsamia się Specyfikację Procedury z rzeczywistym wykonaniem – a przecież można mieć procedurę, której wcale nie wykonano lub wykonano ją tylko częściowo. To właśnie Dziennik Testów jest tym bieżącym zapisem z pola bitwy, gdzie widać realny przebieg procesu testowego, kto się czym zajmował, czy pojawiły się jakieś nieprzewidziane sytuacje. W praktyce brak tego dziennika często prowadzi do chaosu i problemów z rozliczalnością – a przecież to klucz do profesjonalnego testowania, zgodnie z branżowymi standardami.

Pytanie 30

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

A. Nieodpowiednie relacje w zespole
B. Obciążenie psychiczne
C. Promieniowanie UV
D. Brak ergonomicznych miejsc pracy
Zagrożenia fizyczne w środowisku pracy obejmują czynniki, które mogą prowadzić do obrażeń ciała lub problemów zdrowotnych. Przykładem takiego zagrożenia jest promieniowanie UV, które może powodować oparzenia skóry, uszkodzenia oczu oraz zwiększać ryzyko nowotworów skóry. Ochrona przed promieniowaniem UV jest kluczowa w zawodach wymagających pracy na zewnątrz lub przy urządzeniach emitujących intensywne światło UV. Stosowanie odpowiednich środków ochrony, takich jak okulary przeciwsłoneczne z filtrem UV, odzież ochronna i kremy z filtrem, jest niezbędne do minimalizacji ryzyka. Pracodawcy są zobowiązani do wdrażania procedur bezpieczeństwa i zapewniania odpowiednich środków ochrony pracowników narażonych na działanie promieniowania UV.

Pytanie 31

Jakie z wymienionych narzędzi służy do testowania aplikacji?

A. Photoshop
B. Selenium
C. WordPress
D. Git
Selenium to potężne narzędzie do automatycznego testowania aplikacji webowych. Umożliwia ono symulowanie działań użytkownika na stronie internetowej, takich jak klikanie przycisków, wypełnianie formularzy czy nawigowanie po witrynie. Dzięki Selenium programiści mogą automatyzować testy funkcjonalne i regresyjne, co pozwala na szybkie wykrywanie błędów i sprawdzanie zgodności aplikacji z wymaganiami. Selenium obsługuje wiele języków programowania, takich jak Python, Java, C# czy JavaScript, co czyni je wszechstronnym narzędziem do testowania aplikacji webowych na różnych platformach i przeglądarkach. Jest to jedno z najważniejszych narzędzi w arsenale testerów oprogramowania i deweloperów dbających o jakość swoich produktów.

Pytanie 32

Programem służącym do monitorowania błędów oraz organizacji projektów jest:

A. Jira
B. Bugzilla
C. Git
D. Jasmine
Jira to narzędzie, które zdecydowanie wyróżnia się w kwestii zarządzania projektami programistycznymi oraz monitorowania błędów. Z mojego doświadczenia wynika, że praktycznie każda większa firma IT używa Jiry do śledzenia zgłoszeń, tzw. ticketów, które mogą dotyczyć zarówno zadań, jak i błędów do naprawienia. Co istotne, Jira pozwala na bardzo rozbudowaną konfigurację – można tworzyć workflow, automatyzować przypisania zadań, integrować ją z repozytoriami kodów (np. GitHub, Bitbucket), testami automatycznymi, a nawet narzędziami do continuous integration. Standardem branżowym jest prowadzenie rejestru błędów (bug tracker) i backlogu zadań właśnie w Jirze, bo wszystko odbywa się w jednym miejscu, a zespół ma przejrzysty widok postępów. Bardzo fajna jest opcja generowania raportów – łatwo można sprawdzić, ile błędów zostało naprawionych, ile czeka na poprawki czy jak poszczególni członkowie zespołu realizują swoje zadania. Jira jest też zgodna z metodykami Agile, np. Scrum czy Kanban, co dodatkowo ułatwia zarządzanie sprintami, planowanie i retrospektywy. Uważam, że znajomość tego narzędzia to podstawa dla każdego, kto myśli o pracy w branży IT na poważnie. Warto też wiedzieć, że Jira obsługuje zarówno małe zespoły, jak i międzynarodowe projekty, bo jest bardzo skalowalna i można ją dostosować praktycznie do każdego procesu.

Pytanie 33

Jakie jest przeznaczenie komentarzy w kodzie źródłowym programu?

A. Do definiowania zmiennych globalnych
B. Do uruchamiania kodu w trybie debugowania
C. Do dokumentowania działania kodu i ułatwienia jego zrozumienia
D. Do optymalizacji wydajności kodu
Komentarze w kodzie źródłowym programu pełnią kluczową rolę w dokumentowaniu działania aplikacji. Dzięki nim programiści mogą opisywać, co robią poszczególne fragmenty kodu, jakie funkcje realizują oraz jakie są zależności między modułami. Komentarze nie wpływają na działanie programu, ale znacząco ułatwiają pracę nad nim w przyszłości, zwłaszcza gdy projekt jest rozwijany przez wielu programistów lub po dłuższej przerwie. Komentarze poprawiają czytelność kodu, minimalizując ryzyko błędów wynikających z niejasności lub złej interpretacji działania aplikacji. W dobrze napisanym kodzie komentarze są używane strategicznie – opisują kluczowe algorytmy, niestandardowe rozwiązania oraz obszary wymagające szczególnej uwagi. Przejrzysty i dobrze udokumentowany kod to fundament skalowalnych i łatwych w utrzymaniu aplikacji.

Pytanie 34

Która z wymienionych topologii sieci wykazuje cechę, że wszystkie urządzenia są połączone jednym kablem?

A. Topologia pierścienia
B. Topologia magistrali
C. Topologia siatki
D. Topologia gwiazdy
Topologia gwiazdy, w przeciwieństwie do magistrali, charakteryzuje się tym, że wszystkie urządzenia są podłączone do centralnego urządzenia, zazwyczaj switcha lub koncentratora. W tej konfiguracji, jeżeli wystąpi awaria jednego z urządzeń, pozostałe nadal mogą funkcjonować, co czyni tę topologię bardziej niezawodną. Topologia pierścienia polega na połączeniu wszystkich urządzeń w formie zamkniętego pierścienia, gdzie dane przekazywane są z jednego urządzenia do drugiego w określonym kierunku. W tej topologii każda awaria jednego z urządzeń lub kabla powoduje zakłócenia w całej sieci, co czyni ją mniej odporną na błędy. Z kolei topologia siatki, w której każde urządzenie jest połączone z wieloma innymi, zapewnia najwyższy poziom redundancji i niezawodności, ponieważ nawet w przypadku awarii jednego lub kilku połączeń, dane mogą nadal być przesyłane przez inne dostępne trasy. W przeciwieństwie do magistrali, siatka wymaga znacznie większej ilości kabli i jest bardziej skomplikowana w konfiguracji i zarządzaniu, co zwiększa koszty implementacji. Każda z tych topologii ma swoje unikalne właściwości i zastosowania, co sprawia, że wybór odpowiedniej topologii zależy od specyficznych wymagań danego projektu sieciowego.

Pytanie 35

Które stwierdzenie dotyczące interfejsu w Java jest prawdziwe?

A. W interfejsie można definiować implementacje metod statycznych
B. Interfejs może zawierać pola z dostępem protected
C. Interfejs może dziedziczyć po wielu klasach jednocześnie
D. Wszystkie metody w interfejsie są domyślnie publiczne i abstrakcyjne
Interfejsy w języku Java są fundamentalnym elementem programowania obiektowego, pozwalającym na definiowanie kontraktów, które muszą być implementowane przez klasy. Stwierdzenie, że wszystkie metody w interfejsie są domyślnie publiczne i abstrakcyjne, jest całkowicie zgodne z zasadami języka Java. Oznacza to, że nie trzeba jawnie deklarować tych modyfikatorów dostępu, ponieważ metody zdefiniowane w interfejsie są zawsze dostępne dla klas implementujących ten interfejs. To podejście promuje luźne powiązania między kodem oraz ułatwia testowanie i utrzymanie aplikacji. Przykładem praktycznym może być interfejs Comparable, który definiuje metodę compareTo. Klasy, które implementują ten interfejs, muszą dostarczyć konkretnej logiki porównywania obiektów, co pozwala na ujednolicenie sposobu, w jaki obiekty są porównywane w kolekcjach. Warto również zauważyć, że od Javy 8 interfejsy mogą zawierać metody domyślne z implementacją, ale nawet te metody są publiczne. Poprawne zrozumienie roli interfejsów jest kluczowe w projektowaniu systemów z zastosowaniem wzorców projektowych, takich jak MVC czy strategia.

Pytanie 36

Który z poniższych przykładów ilustruje deklarację złożonego typu w języku C++?

A. float ocena = 4.5;
B. class Student {};
C. bool status;
D. int wynik = 100;
Deklaracja `class Student {};` w języku C++ przedstawia przykład tworzenia typu złożonego w postaci klasy. Klasa to podstawowy element programowania obiektowego, który pozwala na łączenie danych (pól) i funkcji (metod) w jednej strukturze. Klasy umożliwiają modelowanie rzeczywistych obiektów i ich zachowań, co prowadzi do bardziej zorganizowanego i skalowalnego kodu. Klasy mogą być rozszerzane przez dziedziczenie, co jest kluczową zaletą programowania obiektowego.

Pytanie 37

Zaprezentowany diagram ilustruje wyniki przeprowadzonych testów:

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

Pytanie 38

Przedstawione w filmie działania wykorzystują narzędzie

A. kompilatora dla interfejsu graficznego
B. debuggera analizującego wykonujący kod
C. generatora GUI przekształcającego kod do języka XAML
D. generatora kodu java
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 39

Wskaż termin, który w języku angielskim odnosi się do "testów wydajnościowych"?

A. performance testing
B. unit testing
C. integration testing
D. security testing
Testy wydajnościowe, czyli performance testing, to coś, co naprawdę warto mieć na uwadze. Dzięki nim możemy sprawdzić, jak nasza aplikacja działa pod dużym obciążeniem i jak szybko odpowiada na różne żądania. Moim zdaniem, to kluczowy aspekt, zwłaszcza jeśli planujemy, żeby nasza aplikacja miała wielu użytkowników. W końcu, nikt nie lubi czekać, aż coś się załaduje!

Pytanie 40

Metoda przeszukiwania w uporządkowanych tablicach, która polega na podzieleniu tablicy na kilka części i wykonywaniu wyszukiwania liniowego tylko w tej części, gdzie może znajdować się poszukiwany element, w języku angielskim jest określana jako

A. Jump search
B. Exponential search
C. Ternary search
D. Binary search
Wydaje się, że wybór padł na inną metodę wyszukiwania niż jump search – spróbuję wyjaśnić, skąd mogły się wziąć takie wątpliwości. Exponential search rzeczywiście działa na posortowanych tablicach, ale jego główna idea to szybkie znajdowanie zakresu, w którym może się znajdować poszukiwany element, poprzez wykładnicze zwiększanie indeksu (czyli 1, 2, 4, 8 itd.), a dopiero później użycie binary search do finalnego wyszukiwania w wykrytym przedziale. To nie jest metoda z dzieleniem tablicy na kilka części i szukaniem liniowo po „bloku”. Ternary search z kolei jest spotykany głównie tam, gdzie szukamy ekstremum (minimum lub maksimum) funkcji unimodalnej, a nie konkretnego elementu w tablicy. Tutaj tablica jest dzielona na trzy części, ale to zupełnie inna idea niż jump search – chodzi o ciągłe zawężanie przedziału na podstawie wartości funkcji, a nie liniowe przeszukiwanie fragmentu tablicy. Binary search jest chyba najbardziej znaną metodą dla uporządkowanych tablic: dzieli zbiór na pół i eliminuje połowę elementów w każdej iteracji. Jednak tutaj nie ma podziału na „bloki” i nie wykonuje się wyszukiwania liniowego, tylko zawsze korzysta z bezpośrednich porównań środkowego elementu. Z mojego doświadczenia, najczęstszy błąd przy tego typu pytaniach to mylenie mechanizmów dzielenia tablicy i przyspieszania wyszukiwania – nie każda metoda, która coś „dzieli” albo „przeskakuje”, działa tak samo. W praktyce jump search jest czymś dość specyficznym i bardzo łatwo można go pomylić z innymi klasykami, zwłaszcza jeśli nie miało się okazji widzieć jego działania na żywo. Warto zapamiętać, że to właśnie ten algorytm łączy w sobie blokowe przeskoki i liniowe przeszukiwanie tylko wybranego fragmentu – i to go wyróżnia spośród pozostałych popularnych metod branżowych.