Wyniki egzaminu

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

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Co to jest garbage collection w programowaniu?

A. Technika optymalizacji algorytmów sortowania danych
B. Proces usuwania nieużywanych elementów z interfejsu użytkownika
C. Metoda kompresji danych w bazach SQL
D. Automatyczne zarządzanie pamięcią, które zwalnia pamięć zajmowaną przez nieużywane obiekty

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Garbage collection (GC) to kluczowy proces w wielu językach programowania, takich jak Java, C# czy Python, odpowiedzialny za automatyczne zarządzanie pamięcią. Dzięki mechanizmowi GC możliwe jest wykrywanie oraz zwalnianie pamięci zajmowanej przez obiekty, które nie są już używane w aplikacji. W praktyce oznacza to, że programista nie musi ręcznie zarządzać cyklem życia obiektów, co minimalizuje ryzyko wycieków pamięci i poprawia stabilność aplikacji. Mechanizm ten działa zazwyczaj w tle, analizując dostępność obiektów w pamięci oraz ich referencje. Przykładem zastosowania GC jest optymalizacja pamięci w aplikacjach serwerowych, gdzie długotrwałe działanie i efektywne zarządzanie zasobami są krytyczne. Użycie garbage collection zgodnie z dobrymi praktykami pozwala na pisanie bardziej przejrzystego i łatwiejszego w utrzymaniu kodu, co jest szczególnie ważne w projektach realizowanych w zespołach. Warto również wspomnieć, że różne implementacje GC (np. generacyjne kolekcje, inkrementalne zbieranie śmieci) mają różne podejścia do zarządzania pamięcią, co może wpływać na wydajność aplikacji.

Pytanie 2

Przedstawiony na filmie kod napisany w języku C++ nie kompiluje się. Co należy zmienić w tym kodzie, aby proces kompilacji wykonał się bez błędów?

A. naprawić błąd w funkcji sprawdz, który polega na braku nawiasów {} w pętli for
B. poprawnie zapisać warunek w instrukcji if w linii 11, np. sprawdz(x)==true
C. zadeklarować zmienną sprawdz przed jej wykorzystaniem w linii 11
D. dodać deklarację funkcji sprawdz przed funkcją main

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź jest trafna, bo w języku C++ kompilator musi wiedzieć o istnieniu funkcji zanim zostanie ona użyta w kodzie, np. w funkcji main. Bez wcześniejszej deklaracji, kompilator nie zna sygnatury funkcji i nie potrafi zweryfikować wywołania, co skutkuje błędem typu 'implicit declaration of function'. Deklaracja funkcji to taki sygnał informujący kompilator „hej, taka funkcja będzie i będzie przyjmować takie argumenty, a zwracać taki typ”. Praktycznie rzecz biorąc, przed funkcją main wystarczy wpisać np. 'bool sprawdz(int x);', żeby wszystko grało. To szczególnie ważne przy większych projektach czy pracy w zespołach, gdzie pliki nagłówkowe z deklaracjami funkcji są standardem. Pozwala to na lepszą czytelność i porządek w kodzie – kompilator wie, czego się spodziewać, a Ty unikasz dziwnych, trudnych do znalezienia błędów. Moim zdaniem taka organizacja kodu to podstawa, szczególnie jeśli kiedyś będziesz korzystać z bibliotek lub cudzych funkcji – deklaracje są wtedy wręcz obowiązkowe. To zasada, której trzyma się większość zespołów programistycznych i, szczerze mówiąc, sam kilka razy w młodości zapomniałem o deklaracji, przez co debugowanie trwało wieki. Warto od razu wyrobić sobie taki nawyk, bo to oszczędza sporo nerwów i czasu, a kod staje się solidniejszy i bardziej profesjonalny.

Pytanie 3

W jakiej okoliczności należy umieścić poszkodowanego w pozycji bezpiecznej?

A. Gdy poszkodowany jest świadomy, lecz ma uraz kończyny
B. Gdy poszkodowany jest nieprzytomny, ale oddycha
C. Gdy poszkodowany nie oddycha
D. Gdy poszkodowany cierpi na krwotok zewnętrzny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pozycja bezpieczna (czyli pozycja boczna ustalona) to jedno z kluczowych narzędzi w udzielaniu pierwszej pomocy. Stosuje się ją wtedy, gdy poszkodowany jest nieprzytomny, ale oddycha samodzielnie i nie ma podejrzenia urazu kręgosłupa. Chodzi przede wszystkim o zabezpieczenie dróg oddechowych przed ewentualnym zadławieniem np. przez ślinę, krew czy wymiociny. Niby proste, ale w praktyce często ludzie mają wątpliwości, czy powinni ruszać nieprzytomną osobę. Ja sam widziałem jak ktoś bał się tego zrobić, bo nie był pewny, czy to bezpieczne. Moim zdaniem lepiej tu działać niż zwlekać – oczywiście, jeśli nie podejrzewasz złamania kręgosłupa. Ważne jest, by pozycję bezpieczną stosować dopiero po sprawdzeniu oddechu – to naprawdę podstawa i tak uczą na wszystkich szkoleniach BLS według standardów Europejskiej Rady Resuscytacji. Przykład z życia: ktoś zasłabł na przystanku, jest nieprzytomny, ale oddycha. Przekręcasz go na bok, głowa odchylona, żeby język nie zablokował gardła – i masz spokój, dużo zmniejszone ryzyko uduszenia. Warto też pamiętać, że trzeba regularnie monitorować stan poszkodowanego, bo sytuacja może się pogorszyć, wtedy przechodzisz do resuscytacji. Pozycja bezpieczna to taki złoty środek kiedy nie musisz jeszcze reanimować, ale musisz chronić życie przez zabezpieczenie oddechu.

Pytanie 4

Zapis w języku C# przedstawia definicję klasy Car, która:

public class Car: Vehicle { ... }
A. odziedzicza po Vehicle
B. używa pól prywatnych klasy Vehicle
C. jest klasą podstawową (nie dziedziczy po innej klasie)
D. jest zaprzyjaźniona z klasą Vehicle

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Słusznie, zapis public class Car : Vehicle { ... } w języku C# oznacza, że klasa Car dziedziczy po klasie Vehicle. To jest tak zwane dziedziczenie, jeden z fundamentalnych mechanizmów programowania obiektowego. Dzięki temu Car odzyskuje wszystkie publiczne i chronione (protected) człony klasy Vehicle, a dodatkowo może wprowadzać własne składowe albo nadpisywać metody bazowe. Przykładowo, jeśli Vehicle ma metodę Start(), to Car również ją posiada, chyba że ją nadpisze słówkiem override. Moim zdaniem, znajomość dziedziczenia ułatwia projektowanie czytelnych oraz rozszerzalnych systemów, zwłaszcza w większych projektach. W praktyce — jeśli tworzysz aplikację zarządzającą różnymi pojazdami, to możesz mieć np. klasę Vehicle z uniwersalnymi funkcjami i kilka pochodnych (takich jak Car, Truck, Motorcycle), co pozwala trzymać wspólną logikę w jednym miejscu. Warto pamiętać, że w C# jest tylko dziedziczenie pojedyncze jeśli chodzi o klasy (w przeciwieństwie do niektórych innych języków). To też zgodne z SOLID, gdzie jedna klasa powinna mieć jasno określoną odpowiedzialność. Ja często spotykam się z tym podejściem w kodzie produkcyjnym – porządek w strukturze to podstawa, a dziedziczenie bardzo w tym pomaga.

Pytanie 5

Jakie sformułowanie najlepiej oddaje złożoność obliczeniową algorytmu quicksort?

A. jest większa niż O(n2)
B. jest zawsze mniejsza niż złożoność jakiegokolwiek innego algorytmu sortowania
C. jest różna w zależności od wyboru elementu dzielącego
D. jest większa niż złożoność sortowania bąbelkowego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Quicksort to jeden z najszybszych i najczęściej stosowanych algorytmów sortowania, ale jego złożoność obliczeniowa nie jest stała i zależy od wyboru elementu rozdzielającego (pivot). W najgorszym przypadku, gdy pivot wybierany jest niefortunnie (np. największy lub najmniejszy element), złożoność quicksort wynosi O(n²). W przypadku optymalnym (pivot dzieli zbiór na dwie równe części), złożoność to O(n log n). Algorytm ten działa w sposób rekurencyjny, dzieląc tablicę na mniejsze podzbiory, co czyni go bardzo efektywnym dla dużych zbiorów danych. W praktyce quicksort jest często szybszy niż sortowanie przez scalanie (merge sort) ze względu na mniejszą liczbę operacji przesuwania danych, mimo że oba algorytmy mają podobną średnią złożoność obliczeniową.

Pytanie 6

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

A. Zakończenie jednej fazy przed rozpoczęciem następnej
B. Przeprowadzanie testów systemu po zakończeniu każdej fazy
C. Iteracyjne wprowadzanie modyfikacji na każdym poziomie
D. Równoległe prowadzenie wielu etapów projektu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kończenie jednej fazy przed rozpoczęciem kolejnej to kluczowa cecha modelu kaskadowego (Waterfall). W tym podejściu projekt jest realizowany etapami – analiza, projektowanie, implementacja, testowanie i wdrożenie – bez możliwości powrotu do poprzednich faz. Dzięki temu model Waterfall jest przejrzysty i łatwy do zarządzania, szczególnie w projektach o stabilnych wymaganiach. Jednak jego ograniczeniem jest brak elastyczności, co może prowadzić do problemów, jeśli wymagania zmienią się w trakcie trwania projektu.

Pytanie 7

Co to jest kontener Docker?

A. Lekka, samodzielna jednostka oprogramowania, która zawiera wszystko, co aplikacja potrzebuje do uruchomienia
B. Graficzny interfejs do zarządzania kodem aplikacji webowych
C. Narzędzie do automatycznego testowania interfejsów użytkownika
D. System zarządzania bazami danych NoSQL

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 8

Która z wymienionych metod najlepiej chroni komputer przed złośliwym oprogramowaniem?

A. Stosowanie mocnych haseł
B. Właściwie zaktualizowany program antywirusowy
C. Unikanie używania publicznych sieci Wi-Fi
D. Cykliczne wykonywanie kopii zapasowych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Program antywirusowy to naprawdę istotna rzecz, jeśli chodzi o ochronę komputerów przed złośliwym oprogramowaniem. On w zasadzie non stop monitoruje nasz system i ma za zadanie wyłapywać różne wirusy, trojany, a nawet ransomware, co jest bardzo ważne. Pamiętaj, żeby regularnie aktualizować bazy wirusów, bo dzięki temu będziesz miał zabezpieczenie przed najnowszymi zagrożeniami. Warto też zauważyć, że wiele programów antywirusowych ma dodatkowe opcje, jak na przykład monitorowanie stron www, czy skanowanie e-maili i plików, które pobierasz. To wszystko razem daje lepszą ochronę.

Pytanie 9

Który z podanych terminów najlepiej odnosi się do składnika statycznego w klasie?

A. Pole lub metoda, która jest przypisana do klasy, a nie do jej instancji
B. Zmienna lokalna wewnątrz danej klasy
C. Funkcja, która wywołuje destruktor danej klasy
D. Metoda z dostępem ograniczonym tylko do tej samej klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Składnik statyczny klasy to pole lub metoda, która należy do klasy jako całości, a nie do konkretnego obiektu. Oznacza to, że istnieje tylko jedna kopia składnika statycznego współdzielona przez wszystkie obiekty tej klasy. Przykład w C++: `class Licznik { public: static int liczbaObiektow; }`. Zmienna `liczbaObiektow` przechowuje liczbę utworzonych instancji klasy i jest wspólna dla wszystkich obiektów. Składniki statyczne są często używane do implementacji liczników, zarządzania zasobami lub przechowywania danych globalnych w obrębie klasy.

Pytanie 10

Który z wymienionych poniżej wzorców projektowych można zakwalifikować jako wzorzec strukturalny?

A. Fabryka abstrakcyjna (Abstract Factory)
B. Metoda szablonowa (Template method)
C. Obserwator (Observer)
D. Fasada (Facade)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Fasada (Facade) to wzorzec projektowy, który jest przykładem wzorca strukturalnego. Umożliwia on tworzenie uproszczonego interfejsu dla bardziej złożonego systemu, integrując wiele podsystemów i dostarczając jednolity punkt dostępu. Strukturalne wzorce projektowe skupiają się na organizacji klas i obiektów, a Fasada doskonale wpisuje się w tę kategorię, redukując złożoność i zwiększając czytelność kodu. Wzorzec ten jest szeroko stosowany w architekturze aplikacji, gdzie występuje potrzeba uproszczenia dostępu do skomplikowanych bibliotek lub systemów wewnętrznych.

Pytanie 11

Wskaż poprawny pod względem składniowym kod dla formatu JSON, który jest używany do wymiany danych między backendem a frontendem aplikacji.

osoby: [
  {imię: 'Anna', wiek: '31' },
  {imię: 'Krzysztof', wiek: '25' }
]
"osoby": [
  {"imię": "Anna", "wiek": 31 },
  {"imię": "Krzysztof", "wiek": 25 }
]
Kod 1Kod 2
<osoby>
  <imie>Anna</imie>
  <wiek>31</wiek>
  <imie>Krzysztof</imie>
  <wiek>25</wiek>
</osoby>
struct osoby {
  imie: {Anna}, wiek:{31};
  imie: {Krzysztof}, wiek:{25}
};
Kod 3Kod 4
A. Kod3
B. Kod1
C. Kod4
D. Kod2

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod2 jest spoko, bo składnia jest w porządku dla JSON. Używasz odpowiednich znaków i struktur, więc wszystko gra. JSON to taki format do wymiany danych, który często wykorzystuje się w komunikacji między frontendem a backendem. Zgadza się ze standardem ECMA-404. Pamiętaj, że klucze i wartości tekstowe powinny być w podwójnych cudzysłowach, co widać w Kod2. Twój przykładowy kod pokazuje tablicę obiektów, gdzie każdy obiekt ma pary klucz-wartość, a przecinki i nawiasy klamrowe są na swoim miejscu. To naprawdę dobry sposób, bo ułatwia współpracę między różnymi elementami aplikacji. JSON ma ważne zastosowanie w AJAX, bo dzięki niemu możemy dynamicznie aktualizować treści na stronie bez jej przeładowania. To jest mega przydatne w nowoczesnych aplikacjach typu SPA, gdzie JSON odgrywa kluczową rolę w zarządzaniu stanem aplikacji i komunikacji.

Pytanie 12

Jakie ma znaczenie operator "==" w języku C++?

A. Porównanie dwóch wartości
B. Negacja logiczna
C. Zwiększenie wartości zmiennej o 1
D. Przypisanie wartości do zmiennej

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Operator `==` w języku C++ oraz w wielu innych językach programowania, takich jak Java, Python czy JavaScript, jest używany do porównywania dwóch wartości. Jeśli wartości są równe, zwracana jest wartość logiczna `true`, w przeciwnym razie `false`. Operator ten jest niezbędny w instrukcjach warunkowych i pętlach, umożliwiając programowi podejmowanie decyzji na podstawie porównań. Przykładem użycia jest `if (a == b)`, co oznacza: jeśli zmienna `a` jest równa zmiennej `b`, wykonaj określony blok kodu.

Pytanie 13

Co oznacza skrót CSRF w kontekście bezpieczeństwa aplikacji webowych?

A. Client-Side Rendering Framework
B. Cross-Site Response Filter
C. Cascading Style Rendering Form
D. Cross-Site Request Forgery

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CSRF, czyli Cross-Site Request Forgery, to typ ataku, który wykorzystuje zaufanie użytkownika do witryny internetowej. Atakujący może skłonić ofiarę do wysłania niezamierzonego żądania do innej witryny, na przykład za pomocą osadzonego linku w e-mailu lub w złośliwej stronie. W ten sposób można wykonać nieautoryzowane akcje, takie jak zmiana ustawień konta, przelewy finansowe czy inne działania, które powinny być chronione. Aby zabezpieczyć aplikacje przed tym rodzajem ataku, stosuje się różne techniki, takie jak tokeny CSRF, które są weryfikowane przy każdym żądaniu. W praktyce oznacza to, że aplikacja generuje unikalny token dla każdej sesji użytkownika, a ten token musi być dołączony do każdego żądania modyfikującego dane. Warto pamiętać o tym, że nie tylko same aplikacje, ale i przeglądarki muszą mieć odpowiednią konfigurację, aby skutecznie zapobiegać tego typu atakom, co jest zgodne z najlepszymi praktykami bezpieczeństwa w branży. Znajomość CSRF jest kluczowa dla każdego programisty czy specjalisty ds. bezpieczeństwa, ponieważ pozwala na skuteczne zabezpieczanie aplikacji webowych i chronienie danych użytkowników.

Pytanie 14

Jaki framework jest powszechnie wykorzystywany do rozwijania aplikacji desktopowych w języku C++?

A. WPF
B. Qt
C. Node.js
D. Flutter

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Qt to jeden z najczęściej używanych frameworków do tworzenia aplikacji desktopowych w języku C++. Dzięki Qt programiści mogą budować aplikacje wieloplatformowe (Windows, macOS, Linux) z jednolitym interfejsem użytkownika. Qt oferuje szeroką gamę narzędzi do tworzenia graficznych interfejsów użytkownika (GUI), obsługi baz danych, aplikacji sieciowych oraz animacji. Framework ten jest ceniony za wydajność, stabilność i możliwość pisania kodu raz, a następnie kompilowania go na różne platformy. Qt umożliwia również tworzenie aplikacji mobilnych i wbudowanych, co czyni go niezwykle uniwersalnym narzędziem dla programistów C++.

Pytanie 15

Co oznacza termin 'polimorfizm' w programowaniu obiektowym?

A. Ograniczenie do jednej formy dla obiektu
B. Dziedziczenie metod z klasy bazowej
C. Ustanowienie tylko jednego typu dla klasy
D. Zdolność do przyjmowania wielu form przez obiekt

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polimorfizm to jedno z fundamentalnych pojęć w programowaniu obiektowym, które pozwala na tworzenie elastycznych i skalowalnych aplikacji. Dzięki polimorfizmowi możemy pisać kod, który operuje na obiektach, nie znając ich dokładnego typu w momencie kompilacji. To bardzo przydatne, gdy mamy do czynienia z hierarchią klas, gdzie różne klasy dziedziczą po jednej bazowej. Praktycznym przykładem może być system, w którym mamy klasę bazową 'Zwierzę' i klasy pochodne, takie jak 'Pies' i 'Kot'. Dzięki polimorfizmowi możemy stworzyć funkcję, która przyjmuje parametr typu 'Zwierzę', a następnie wywołuje metodę, która jest specyficzna dla danej klasy pochodnej. To umożliwia nam pisanie bardziej ogólnego i mniej związanego z konkretnymi typami kodu. Polimorfizm pozwala również na wdrażanie wzorców projektowych, takich jak strategia czy fabryka, które zwiększają modularność i reużywalność kodu. Korzystanie z polimorfizmu jest zgodne z zasadami SOLID, szczególnie zasadą podstawienia Liskov, która mówi, że obiekty klasy bazowej mogą być zastępowane obiektami klasy pochodnej bez wpływu na poprawność działania programu.

Pytanie 16

Co oznacza pojęcie TDD w kontekście programowania?

A. Type Definition Document - dokumentacja typów danych w aplikacji
B. Task Deployment Diagram - schemat wdrażania zadań w projekcie
C. Technical Design Document - dokumentacja techniczna projektu
D. Test-Driven Development - praktyka pisania testów przed implementacją kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Test-Driven Development (TDD) to metodologia programowania, w której proces tworzenia kodu zaczyna się od pisania testów. TDD polega na cyklicznym podejściu do rozwoju oprogramowania, w którym najpierw definiujemy, jakie funkcjonalności będzie miał nasz kod, a następnie implementujemy tylko te elementy, które są niezbędne do przejścia wcześniej napisanych testów. Dzięki temu, deweloperzy mają możliwość natychmiastowego sprawdzenia poprawności swojego kodu, co sprzyja eliminacji błędów na wczesnym etapie. Przykład zastosowania TDD można zobaczyć w tworzeniu aplikacji webowych, gdzie programista pisze testy jednostkowe dla nowych funkcji, a następnie implementuje te funkcje, poprawiając kod tylko w przypadku, gdy testy nie przechodzą. Takie podejście pozwala na zwiększenie jakości oprogramowania oraz jego łatwiejszą refaktoryzację. Warto również zauważyć, że TDD jest zgodne z praktykami Agile i Continuous Integration, co pozwala na efektywniejsze zarządzanie projektem i dostosowywanie go do wymagań zmieniającego się rynku.

Pytanie 17

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

A. umożliwieniu interakcji między komponentami użytkownika za pomocą klawiatury
B. zapewnieniu odpowiedniej ilości czasu na przeczytanie i zrozumienie treści
C. prezentacji elementów interfejsu użytkownika
D. zrozumieniu i wiarygodności prezentowanych treści na stronie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Rekomendacje standardu WCAG 2.0 dotyczące percepcji koncentrują się na tym, jak użytkownicy postrzegają i interpretują treści na stronach internetowych, co obejmuje również komponenty interfejsu użytkownika. Standardy te nakładają obowiązek projektowania elementów interaktywnych w sposób, który umożliwia ich łatwe identyfikowanie i zrozumienie przez wszystkich użytkowników, w tym osoby z niepełnosprawnościami. Przykłady obejmują odpowiednie etykietowanie przycisków, stosowanie kontrastujących kolorów oraz zapewnienie wyraźnych granic dla interaktywnych elementów. Komponenty takie jak formularze, menu nawigacyjne czy przyciski akcji muszą być intuicyjnie zrozumiałe i łatwe w obsłudze. Odniesienia do standardów WCAG 2.0, szczególnie do wytycznych związanych z percepcją, podkreślają znaczenie dostosowania treści do różnych percepcyjnych sposobów odbioru, co jest kluczowe dla zapewnienia dostępności. Właściwe zastosowanie tych zasad sprzyja lepszej użyteczności, co przekłada się na pozytywne doświadczenia użytkowników.

Pytanie 18

Który z wymienionych mechanizmów umożliwia ograniczenie dostępu do wybranych sekcji aplikacji webowej?

A. System logowania i kontroli dostępu
B. Formularze dynamiczne
C. Mechanizm renderowania treści
D. Pliki CSS statyczne

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
System logowania i kontroli dostępu to kluczowy mechanizm, który pozwala na ograniczenie dostępu do niektórych części aplikacji webowej. Logowanie umożliwia uwierzytelnienie użytkowników i przypisanie im odpowiednich ról, co definiuje poziom dostępu do zasobów. Dzięki mechanizmom autoryzacji możliwe jest kontrolowanie, które funkcje lub sekcje aplikacji są dostępne dla poszczególnych użytkowników. Kontrola dostępu może być realizowana za pomocą tokenów JWT (JSON Web Token), sesji lub kluczy API, co zapewnia dodatkowe warstwy zabezpieczeń. Wdrożenie takich systemów jest nieodzowne w aplikacjach webowych oferujących różne poziomy funkcjonalności, takich jak panele administracyjne, portale użytkowników czy aplikacje bankowe. Odpowiednie zarządzanie uprawnieniami jest fundamentem bezpieczeństwa aplikacji.

Pytanie 19

Jaką technologię stosuje się do powiązania aplikacji internetowej z systemem baz danych?

A. HTTP
B. JavaScript
C. SQL
D. CSS

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
SQL, czyli język do zarządzania danymi, to mega ważna rzecz, jeśli chodzi o relacyjne bazy danych. Dzięki niemu można tworzyć, modyfikować, a nawet usuwać tabele. To taki most, który łączy aplikacje webowe z bazą danych. Dzięki SQL programiści mogą łatwo przechowywać i przetwarzać różne informacje na serwerze. Przykłady? Można generować listy produktów, ogarniać użytkowników czy analizować dane z transakcji. Właściwie bez SQL-a nie dałoby się zbudować solidnych aplikacji, na przykład tych, które działają na MySQL, PostgreSQL czy Microsoft SQL Server. Chociaż pewnie o tym wiesz, ale warto to zaznaczyć.

Pytanie 20

Jakie rezultaty pojawią się po uruchomieniu poniższego kodu napisanego w języku C++?

class KlasaBazowa {
    public:
        virtual void metoda() {
            cout << "Bazowa. ";
        }
};

class KlasaPochodna : public KlasaBazowa {
    public:
        void metoda() {
            cout << "Pochodna. ";
        }
};

int main() {
    KlasaBazowa *bazowa = new KlasaPochodna();
    KlasaPochodna *pochodna = new KlasaPochodna();

    bazowa->metoda();
    pochodna->metoda();
    return 0;
}
A. Bazowa. Pochodna.
B. Pochodna. Bazowa.
C. Pochodna. Pochodna.
D. Bazowa. Bazowa.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod wyświetla 'Pochodna. Pochodna.', co wskazuje, że metody klasy pochodnej przejęły kontrolę nad tymi z klasy bazowej. To fajny przykład polimorfizmu, jaki mamy w C++. Tutaj metoda w klasie pochodnej jest lepsza od metody w klasie bazowej. To, jakie wywołanie się wykona, zależy od konkretnego obiektu, a nie od tego, jaką metodę zdefiniowaliśmy w klasie bazowej.

Pytanie 21

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

Ilustracja do pytania
A. Batch Build
B. Build Solution
C. Clean Solution
D. Run Code Analysis on Solution

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 22

Co będzie wynikiem działania poniższego kodu SQL?

SELECT COUNT(*)
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
A. Średnia pensja wszystkich pracowników
B. Błąd składni SQL
C. Liczba pracowników z pensją powyżej średniej
D. Liczba pracowników z najwyższą pensją

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź, że wynik działania zapytania SQL to liczba pracowników z pensją powyżej średniej, jest całkowicie poprawna. Zapytanie to korzysta z funkcji agregującej COUNT(*), która zlicza liczbę rekordów spełniających określony warunek. W tym przypadku warunkiem jest, że pensja pracownika jest większa od średniej pensji wszystkich pracowników, którą obliczamy za pomocą wewnętrznego zapytania (subquery). Tego rodzaju operacje są powszechnie stosowane w analizie danych w bazach danych, gdzie często musimy wykonać porównania względem wartości agregatów, takich jak średnia, mediana czy suma. Przykładowo, w analizie wynagrodzeń w danej firmie, można użyć podobnych zapytań do oceny, jaki odsetek pracowników jest wynagradzanych powyżej średniej, co może być istotne z punktu widzenia polityki płacowej oraz budżetowania. Pamiętaj, że dobre praktyki w pracy z bazami danych obejmują optymalizację zapytań oraz unikanie niepotrzebnych obliczeń, co może wpłynąć na wydajność systemu.

Pytanie 23

Jakie są kluczowe etapy realizacji projektu programistycznego?

A. Planowanie, analiza, implementacja, wdrożenie
B. Analiza, implementacja, testowanie, aktualizacja
C. Projektowanie, testowanie, aktualizacja, implementacja
D. Planowanie, projektowanie, debugowanie, konserwacja

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrałeś poprawną sekwencję etapów realizacji projektu programistycznego – to naprawdę ma kluczowe znaczenie w praktyce. Planowanie jest absolutnym fundamentem, bo pozwala zdefiniować cele, wymagania i zakres projektu. Bez porządnego planu łatwo się pogubić już na starcie, a potem robi się tylko drożej i trudniej. Następnie analiza – tutaj wchodzi się głębiej w temat: zbiera się szczegółowe wymagania, analizuje ryzyka i szuka ewentualnych problemów, które mogą pojawić się później. Implementacja to etap, gdzie programiści faktycznie piszą kod, ale – i to warto podkreślić – bez wcześniejszego solidnego planowania i analizy, ten etap bardzo często kończy się chaosem i ciągłymi poprawkami. Wdrożenie oznacza przekazanie gotowego produktu użytkownikom czy klientowi, często połączone z testami akceptacyjnymi i dokumentacją. Takie podejście jest zgodne z klasycznymi metodologiami typu waterfall, ale też w metodykach zwinnych te fazy się pojawiają, choć czasem są bardziej rozmyte – moim zdaniem, nawet w agile trzeba mieć minimum planowania i analizy, żeby nie robić rzeczy na ślepo. W prawdziwych projektach to jest właśnie ten główny szkielet pracy, do którego wszystko się sprowadza – znam sporo przykładów z branży, gdzie pominięcie choćby jednego z tych kroków kończyło się katastrofą. Dobrze jest mieć ten schemat w głowie, bo pomaga zarówno na etapie małych aplikacji, jak i dużych, wieloosobowych przedsięwzięć. Warto też pamiętać, że każdemu z tych etapów towarzyszą różne narzędzia i techniki – np. przy planowaniu często robi się diagramy Gantta, w analizie korzysta się z UML, a podczas wdrożenia dobrze mieć plan migracji i dokumentację użytkownika. Tak po prostu robi się to dobrze w świecie IT.

Pytanie 24

Wzorzec projektowy "Metoda szablonowa" (Template method) stosuje się do:

A. organizowania obiektów w hierarchiczne struktury drzewiaste
B. centralizacji zarządzania wieloma instancjami obiektów
C. gromadzenia obiektów w jednorodnej kolekcji
D. określenia szkieletu algorytmu i pozostawienia szczegółów implementacji dla podklas

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy 'Metoda szablonowa' to naprawdę sprytna sprawa, szczególnie w programowaniu obiektowym. Ten wzorzec pozwala zdefiniować ogólną strukturę algorytmu w klasie bazowej, a szczegóły implementacji przekazać do podklas. Brzmi jak coś z teorii, ale w praktyce często się przydaje, bo daje kontrolę nad przepływem działania algorytmu, nie tracąc elastyczności. To taki kompromis: masz szkielet (np. metoda w klasie abstrakcyjnej), ale nie zamykasz drogi na własne pomysły w podklasach. Typowym przykładem może być system obsługi płatności: cała procedura (np. przetwarzanie zamówienia) jest ustalona, ale poszczególne kroki typu 'autoryzuj', 'zrealizuj' czy 'zatwierdź' można nadpisywać. Daje to porządek i spójność kodu, a przy okazji nie zamyka na zmiany. Moim zdaniem, jeśli w projekcie pojawia się powtarzalny schemat postępowania, który tylko w detalach się różni, to Metoda szablonowa jest jednym z najczystszych rozwiązań. Warto pamiętać, że to podejście zgodne z zasadą Hollywood: „Don’t call us, we’ll call you” – to szkielet decyduje, kiedy wywołać szczegóły. Wielu seniorów poleca ten wzorzec, bo upraszcza utrzymanie i rozwijanie kodu, a IDE typu IntelliJ czy Visual Studio świetnie ogarniają takie abstrakcyjne klasy. Szczerze – w wielu firmach to po prostu standard.

Pytanie 25

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

A. map()
B. push()
C. splice()
D. sort()

Brak odpowiedzi na to pytanie.

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

Pytanie 26

Który z wymienionych algorytmów sortujących posiada średnią złożoność obliczeniową równą O(n log n)?

A. Sortowanie szybkie (QuickSort)
B. Sortowanie bąbelkowe
C. Sortowanie przez wybór
D. Sortowanie przez wstawianie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
QuickSort to naprawdę jeden z najlepszych sposobów na sortowanie. W zasadzie chodzi o to, że dzielimy naszą tablicę na dwie części, z pomocą takiego specjalnego elementu, który nazywamy pivotem. W praktyce działa to tak, że mamy część mniejszą i większą od tego pivota, a potem każdą z tych części sortujemy jeszcze raz, tak jakbyśmy powtarzali cały proces. Myślę, że to działa super, szczególnie na dużych zbiorach danych, i dlatego QuickSort jest naprawdę popularny w różnych programach i aplikacjach.

Pytanie 27

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

A. DELETE
B. GET
C. SEARCH
D. POST

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 28

Jakie są różnice między kompilatorem a interpretem?

A. Interpreter konwertuje kod źródłowy na język maszynowy przed jego kompilacją
B. Kompilator przetwarza kod na język maszynowy w momencie jego wykonywania
C. Kompilator przekształca kod źródłowy na język maszynowy przed uruchomieniem aplikacji
D. Interpreter tworzy plik wykonywalny, który funkcjonuje niezależnie od otoczenia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kompilator zamienia kod źródłowy na język maszynowy zanim program się uruchomi. W efekcie dostajemy plik wykonywalny, taki jak .exe w Windowsie. To fajne, bo po skompilowaniu aplikacja działa samodzielnie i nie potrzeba jej tłumaczyć od nowa. Dzięki temu programy, które są skompilowane, są zazwyczaj dużo szybsze i lepiej zoptymalizowane niż te, które są interpretowane. Warto wiedzieć, że kompilatory są wykorzystywane w językach takich jak C, C++ czy Java. Kompilacja ma też tę zaletę, że można wykrywać błędy jeszcze przed uruchomieniem programu, co jest naprawdę przydatne.

Pytanie 29

Jakie zastosowanie ma język Swift w zakresie aplikacji mobilnych?

A. Do zarządzania bazami danych w aplikacjach mobilnych
B. Do tworzenia aplikacji na system Android
C. Do przeprowadzania testów aplikacji mobilnych
D. Do tworzenia aplikacji na system iOS

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Swift to język programowania stworzony przez Apple, który służy do tworzenia aplikacji na system iOS, macOS, watchOS i tvOS. Swift został zaprojektowany z myślą o nowoczesnym i bezpiecznym programowaniu, eliminując wiele typowych błędów spotykanych w Objective-C, takich jak null pointer exceptions. Dzięki swojej wydajności, przejrzystej składni i integracji z XCode, Swift stał się standardem w ekosystemie Apple. Język wspiera interaktywną platformę Playground, co umożliwia szybkie testowanie kodu, a także pełną integrację z narzędziami Apple, co czyni go niezbędnym narzędziem dla deweloperów aplikacji na iPhone'y i iPady.

Pytanie 30

Który z poniższych elementów HTML5 służy do rysowania grafiki?

A. &lt;svg&gt;
B. &lt;draw&gt;
C. &lt;graphic&gt;
D. &lt;canvas&gt;

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Element HTML5 &lt;canvas&gt; jest kluczowym narzędziem do rysowania grafiki w przeglądarkach internetowych. Umożliwia programistom tworzenie dwuwymiarowych i trójwymiarowych grafik w sposób dynamiczny, wykorzystując JavaScript. Przykładem zastosowania &lt;canvas&gt; jest tworzenie gier, animacji, wizualizacji danych oraz interaktywnych wykresów. Dzięki API dla elementu canvas, programiści mają możliwość rysowania kształtów, linii, tekstu oraz obrazów, co otwiera szerokie możliwości w zakresie projektowania interfejsów użytkownika. Warto również zwrócić uwagę na to, że stosowanie &lt;canvas&gt; zgodnie z najlepszymi praktykami programistycznymi, takimi jak efektywne zarządzanie pamięcią i optymalizacja renderowania, pozwala na osiąganie płynnych animacji i wysokiej jakości grafik. Co więcej, &lt;canvas&gt; jest wspierany przez wszystkie nowoczesne przeglądarki, co zapewnia dużą zgodność i dostępność.

Pytanie 31

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

A. Angular
B. Vue.js
C. React
D. Django

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Django to framework zaprojektowany do budowy aplikacji webowych w języku Python, a zatem nie jest związany z JavaScriptem. Jego głównym celem jest uproszczenie procesu tworzenia w pełni funkcjonalnych aplikacji, co osiąga poprzez zestaw gotowych komponentów, takich jak system zarządzania bazą danych, mechanizmy autoryzacji oraz łatwe zarządzanie szablonami. Przykładem zastosowania Django może być rozwój serwisów e-commerce, gdzie framework ten wspiera szybkie i bezpieczne tworzenie skomplikowanej logiki aplikacji oraz zapewnia możliwość łatwego skalowania. Użycie Django w projektach, w których istotne są bezpieczeństwo i szybkość developmentu, stało się standardem w branży. W kontekście rozwoju aplikacji webowych, znajomość różnych frameworków, w tym Django, jest kluczowa dla programistów, którzy chcą być elastyczni i efektywni w tworzeniu rozwiązań backendowych."

Pytanie 32

Jakie elementy powinny być uwzględnione w scenariuszu testów aplikacji?

A. Zestaw kroków do testowania, oczekiwanych rezultatów oraz warunków początkowych
B. Strategia wdrożenia aplikacji w środowisku produkcyjnym
C. Dokładne wytyczne dotyczące realizacji kodu
D. Dokumentacja techniczna oprogramowania

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Scenariusz testowy aplikacji powinien zawierać szczegółowy opis kroków testowych, oczekiwane wyniki oraz warunki wstępne, które muszą być spełnione przed rozpoczęciem testu. Scenariusz testowy to kluczowy dokument w procesie testowania oprogramowania, który pozwala na systematyczne i dokładne sprawdzenie, czy aplikacja działa zgodnie z oczekiwaniami. Uwzględnienie kroków testowych pozwala na replikację testów, a opis warunków wstępnych zapewnia, że test jest przeprowadzany w odpowiednim środowisku.

Pytanie 33

Przedstawiono funkcjonalnie równoważne fragmenty kodu aplikacji Angular oraz React.js.

Angular
submit(f) {
    console.log(f.value); 
}
<form #f="ngForm" (ngSubmit)="submit(f)">
    <input ngModel name="tytul" type="text" id="tytul">
    <button>Dodaj</button>
</form>
React
handleSubmit = e => {
    e.preventDefault();
    console.log('tytul: ' + e.currentTarget.tytul.value);
};
render() {
    return (
        <div>
            <form onSubmit={this.handleSubmit}>
                <input type="text" id="tytul" />
                <button>Dodaj</button>
            </form>
        </div>
    );
}
A. wyświetlanie w konsoli przeglądarki danych pobranych z pól formularza w czasie rzeczywistym, gdy użytkownik je wypełnia
B. obsługę zdarzenia przesłania formularza
C. funkcję, która zapisuje do zmiennych f lub e dane z pola <input> formularza
D. funkcję, która wypełnia dane w formularzu podczas jego inicjalizacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Oba fragmenty kodu, zarówno w Angularze jak i React.js, pokazują obsługę zdarzenia zatwierdzenia formularza. W Angularze zdarzenie submit jest obsługiwane poprzez przypisanie funkcji submit do atrybutu ngSubmit. Ta funkcja otrzymuje jako argument obiekt formularza, a następnie wypisuje jego wartość w konsoli za pomocą f.value. Jest to zgodne z dobrymi praktykami Angulara, gdzie korzysta się z dwukierunkowego wiązania danych i obiektu formularza do zarządzania danymi wejściowymi. W przypadku React.js funkcja handleSubmit jest przypisywana do zdarzenia onSubmit formularza. W tej funkcji nie tylko logujemy dane wejściowe, ale również używamy e.preventDefault(), aby zapobiec domyślnemu działaniu formularza, co jest standardową praktyką w React.js, gdzie zarządzamy stanem komponentów samodzielnie. W obu przypadkach kluczową czynnością jest reakcja na zdarzenie wysłania formularza, co pozwala na dalsze przetwarzanie danych wejściowych, walidację lub wysyłanie ich do serwera.

Pytanie 34

Wykorzystując jeden z dwóch zaprezentowanych sposobów inkrementacji w językach z rodziny C lub Java, można zauważyć, że
Zapis pierwszy:

b = a++;
Zapis drugi:
b = ++a;
A. Wartość zmiennej b będzie wyższa po użyciu drugiego zapisu w porównaniu do pierwszego.
B. Drugi zapis nie jest zgodny ze składnią, co doprowadzi do błędów kompilacji.
C. Tylko przy użyciu pierwszego zapisu zmienna a zostanie zwiększona o 1.
D. Bez względu na zastosowany sposób, w zmiennej b zawsze uzyskamy ten sam rezultat.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W językach programowania z rodziny C (w tym C++ i Java) istnieją dwie formy inkrementacji: preinkrementacja (++x) i postinkrementacja (x++). Preinkrementacja zwiększa wartość zmiennej przed jej użyciem w wyrażeniu, natomiast postinkrementacja zwiększa ją dopiero po zakończeniu aktualnej operacji. Oznacza to, że w przypadku postinkrementacji, wartość zmiennej przed zwiększeniem zostanie użyta w bieżącym wyrażeniu, a dopiero potem następuje jej zwiększenie o 1. Ta subtelna różnica ma istotne znaczenie, zwłaszcza w pętlach i wyrażeniach logicznych, gdzie każda iteracja wpływa na wynik. W praktyce preinkrementacja jest nieco bardziej efektywna, ponieważ nie wymaga przechowywania kopii pierwotnej wartości zmiennej, co przekłada się na minimalnie lepszą wydajność w niektórych przypadkach.

Pytanie 35

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

A. realizowane przez zespół testerów zatrudnionych przez firmę Google
B. przeprowadzane przez grupę docelowych użytkowników aplikacji
C. przeprowadzane na podstawie dokumentu zawierającego przypadki testowe
D. podzielone na testy funkcjonalne, wydajnościowe oraz skalowalności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy Beta są kluczowym etapem w procesie publikacji aplikacji mobilnej w sklepie Google Play, ponieważ pozwalają na uzyskanie cennych informacji zwrotnych od rzeczywistych użytkowników aplikacji. W tej fazie aplikacja jest udostępniana ograniczonej grupie docelowych użytkowników, którzy są zainteresowani testowaniem oprogramowania przed jego oficjalnym wydaniem. Użytkownicy ci mają możliwość zgłaszania błędów, proponowania ulepszeń oraz oceny funkcjonalności, co jest niezwykle ważne, aby zapewnić, że produkt spełnia wymagania rynku. Przykładem zastosowania testów Beta może być aplikacja społecznościowa, która w pierwszej fazie testowania pozwala wybranej grupie użytkowników na dzielenie się swoimi doświadczeniami. Otrzymane dane są następnie analizowane w celu wprowadzenia niezbędnych poprawek przed pełnym wprowadzeniem aplikacji na rynek. Ponadto, przeprowadzanie testów Beta jest zgodne z najlepszymi praktykami w branży oprogramowania, zgodnie z metodykami Agile, które podkreślają znaczenie interakcji z użytkownikami oraz ich wkładu w rozwój produktów.

Pytanie 36

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. przeprowadzane przez grupę docelowych użytkowników aplikacji
D. podzielone na testy dotyczące funkcjonalności, wydajności i skalowalności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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.

Pytanie 37

Która z poniższych technologii służy do tworzenia interfejsu użytkownika zarówno dla aplikacji webowych jak i mobilnych?

A. Angular
B. jQuery
C. React Native
D. Vue.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
React Native to framework stworzony przez Facebook, który pozwala na tworzenie natywnych aplikacji mobilnych przy użyciu JavaScriptu oraz React. Jego największą zaletą jest możliwość współdzielenia kodu pomiędzy aplikacjami mobilnymi a webowymi, co znacząco przyspiesza proces developmentu i redukuje koszty. React Native umożliwia wykorzystanie jednego kodu źródłowego do budowy aplikacji zarówno na systemy iOS, jak i Android, co jest idealnym rozwiązaniem w kontekście rosnącego zapotrzebowania na aplikacje wieloplatformowe. Framework ten korzysta z natywnych komponentów UI, co przekłada się na wysoką wydajność oraz natywne wrażenia użytkownika. Przykłady zastosowania React Native można znaleźć w popularnych aplikacjach, takich jak Instagram czy Airbnb, które z powodzeniem wykorzystują ten framework do tworzenia dynamicznych i responsywnych interfejsów. Dobre praktyki przy używaniu React Native obejmują optymalizację komponentów, stosowanie odpowiednich bibliotek do nawigacji oraz zarządzania stanem aplikacji.

Pytanie 38

Jakie będzie działanie przedstawionych dwóch równoważnych fragmentów kodu źródłowego?

Kod w React:

function Heading(props) {
    return (
        <h1> {props.title} </h1>
    );
}

// w metodzie render
return (
    <Heading title="Egzamin zawodowy" />
);

Kod w Angular:
// heading.component.ts
import {Component} from '@angular/core';
@Component({
    selector: 'app-heading',
    templateUrl: './heading.component.html',
    styleUrls: ['./heading.component.css']
})

export class HeadingComponent {
    title:String = "Egzamin zawodowy";
    ...
}

// heading.component.html
<h1>{{title}}</h1>
A. Wyświetlony na stronie tekst w akapicie: "Egzamin zawodowy"
B. Nadany tytuł każdego elementu HTML: "Egzamin zawodowy"
C. Wyświetlony na stronie tekst w nagłówku: "Egzamin zawodowy"
D. Nadany tytuł strony: "Egzamin zawodowy"

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dokładnie tak – zarówno w React, jak i w Angularze, oba te fragmenty kodu mają za zadanie wyświetlić tekst „Egzamin zawodowy” w nagłówku HTML, czyli w tagu <h1>. To jest klasyczna praktyka w aplikacjach frontendowych. W React przekazujesz wartość props.title do komponentu Heading i renderujesz ją w elemencie <h1>. W Angularze tworzysz pole klasy o nazwie title i korzystasz z interpolacji {{ title }} w szablonie HTML – efekt jest identyczny. Taki sposób podejścia odzwierciedla zasadę jednokierunkowego przepływu danych i rozdzielania logiki od prezentacji, co jest jedną z podstaw nowoczesnych frameworków. Bardzo często nagłówki jak <h1> są wykorzystywane nie tylko dla estetyki, ale i poprawy dostępności oraz SEO strony – roboty wyszukiwarek właśnie z tych tagów czerpią wiedzę o głównym temacie widoku. Spotykałem się wielokrotnie z sytuacjami, gdzie ktoś próbował „upiększać” nagłówki za pomocą CSS, ale zapominał o semantyce i kończył z brakiem <h1> w kodzie – to błąd! Dobrą praktyką jest zawsze korzystanie z odpowiednich tagów HTML. Takie podejście sprawia, że kod jest czytelny, łatwiej go utrzymać i jest bardziej przyjazny dla wszystkich, także osób korzystających np. z czytników ekranu. Poza tym, takie komponenty są świetne do wielokrotnego użytku – możesz przekazać różne wartości „title” do różnych nagłówków strony, nie pisząc tego samego kodu od nowa. Moim zdaniem to jedna z podstawowych, ale bardzo ważnych technik, które każdy frontendowiec powinien ogarniać.

Pytanie 39

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

A. Postman
B. Figma
C. Jenkins
D. Webpack

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Figma to narzędzie służące do tworzenia makiet interfejsu użytkownika, które jest szczególnie cenione za swoje możliwości współpracy w czasie rzeczywistym. Dzięki Figma zespoły projektowe mogą jednocześnie edytować te same projekty, co znacząco przyspiesza proces twórczy i pozwala na bieżąco wprowadzać zmiany na podstawie uwag członków zespołu. Narzędzie oferuje bogaty zestaw funkcji, takich jak wektoryzacja, prototypowanie czy zintegrowana biblioteka komponentów, co sprawia, że projektanci mogą szybko i efektywnie tworzyć interfejsy, które są zarówno estetyczne, jak i funkcjonalne. Praktyczne zastosowanie Figma obejmuje współpracę z deweloperami przy tworzeniu responsywnych aplikacji oraz możliwość dostosowywania makiet do różnych rozmiarów ekranów. Standardy branżowe, takie jak użycie siatek i systemów modułowych, można łatwo zaimplementować w Figma, co dodatkowo zwiększa jego użyteczność. Dzięki temu narzędziu, zespoły mogą tworzyć nie tylko statyczne makiety, ale także interaktywne prototypy, co jest niezbędne w procesie testowania UX.

Pytanie 40

Jaką funkcję pełni operator "|" w języku C++?

A. Bitowe "xor"
B. Bitowe "lub"
C. Logiczne "lub"
D. Operację przesunięcia bitów w prawo

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Operator `|` w języku C++ jest operatorem bitowym `OR`, który porównuje bity dwóch liczb i zwraca `1` w pozycji bitu, jeśli przynajmniej jeden z odpowiadających sobie bitów jest `1`. Przykład: `5 | 3` (w notacji binarnej `0101 | 0011`) zwróci `0111`, co odpowiada liczbie `7`. Operatory bitowe są często używane w programowaniu systemowym, kryptografii oraz manipulacji danymi na poziomie bitowym.