Wyniki egzaminu

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

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 API w kontekście programowania?

A. System zarządzania relacyjnymi bazami danych
B. Metoda kompresji danych w aplikacjach webowych
C. Interfejs programistyczny aplikacji, który definiuje sposób komunikacji między różnymi komponentami oprogramowania
D. Narzędzie do testowania interfejsu użytkownika aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
API, czyli Interfejs Programistyczny Aplikacji, to zestaw reguł i protokołów, które umożliwiają różnym komponentom oprogramowania komunikację ze sobą. W praktyce API działa jako most między różnymi systemami, pozwalając na wymianę danych oraz funkcji. Na przykład, API może być wykorzystywane do integracji z zewnętrznymi serwisami, takimi jak systemy płatności, co pozwala na łatwe wdrożenie funkcji zakupów online w aplikacji. Stosowanie API zgodnie z zasadami RESTful czy GraphQL jest powszechną praktyką, ponieważ ułatwia rozwój i utrzymanie aplikacji, umożliwiając tworzenie skalowalnych rozwiązań. Co więcej, dobrze zdefiniowane API zwiększa bezpieczeństwo aplikacji, ograniczając bezpośredni dostęp do wewnętrznych mechanizmów oraz danych. Firmy często tworzą dokumentację API, aby programiści mogli szybko zrozumieć, jak z niego korzystać, co jest zgodne z zasadami dobrych praktyk w branży programistycznej.

Pytanie 2

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

A. Product backlog
B. Diagram Gantta
C. Lista zasobów ludzkich
D. Specyfikacja techniczna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Product backlog to taki ważny dokument w Scrumie, właściwie to serce całego projektu. Zawiera listę funkcji, które chcemy mieć w produkcie, a wszystko to jest poukładane według tego, co jest najważniejsze. Fajnie, że ten dokument jest żywy – zmienia się w miarę jak rozwija się projekt i dostajemy nowe info od klienta. Dzięki temu zespół może się skupić na tym, co naprawdę ma znaczenie, a to sprawia, że dostarczamy wartość w rytm iteracji. Ta elastyczność backlogu to mega atut, bo pozwala na szybkie reagowanie na zmiany w wymaganiach, a to w dzisiejszym świecie projektowym jest kluczowe.

Pytanie 3

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. HelloWorld
B. HELLO WORLD
C. helloworld
D. Hello World

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wynik działania przedstawionego kodu to 'HelloWorld'. Zrozumienie tego wyniku wymaga analizy poszczególnych elementów kodu. Na początku mamy zmienną tekstową 'text' z wartością 'hello world'. Następnie, tekst jest dzielony na fragmenty za pomocą metody 'Split', która rozdziela go na podstawie spacji. W efekcie otrzymujemy tablicę z dwoma elementami: 'hello' i 'world'. Następnie, za pomocą metody 'Select', każdy z tych fragmentów jest przetwarzany. Pierwszy znak każdego słowa jest konwertowany na wielką literę dzięki 'char.ToUpper(s[0])', a następnie łączony z resztą słowa ('s.Substring(1)'). Tak uzyskane fragmenty są łączone w jeden ciąg za pomocą 'string.Join("", ...)'. W rezultacie otrzymujemy 'HelloWorld', co jest zgodne z praktykami konwencji nazewniczych w programowaniu, gdzie często łączy się słowa w jeden ciąg, eliminując spacje. Dzięki temu wynik jest bardziej zwięzły i czytelny."

Pytanie 4

Po uruchomieniu poniższego kodu w języku C++ w konsoli pojawi się ciąg liczb:

int a = 1;
while (a++ < 6) {
    cout << a << " ";
}
A. 2 3 4 5 6
B. 2 3 4 5 6 7
C. 1 2 3 4 5
D. 1 2 3 4 5 6

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
No i właśnie, to jest świetny przykład na to, dlaczego zrozumienie działania operatora postinkrementacji w C++ jest kluczowe. W tym kodzie pętla while wykorzystuje zapis a++ < 6, czyli najpierw sprawdza warunek (porównuje bieżącą wartość a z 6), a dopiero potem zwiększa a o 1. To sprawia, że pierwszy raz sprawdzane jest, czy 1 < 6 – warunek prawdziwy – a dopiero potem a staje się 2. W bloku pętli wypisywane jest już zaktualizowane a, czyli 2. I tak aż do momentu, gdy a osiągnie 6 i warunek będzie fałszywy. W praktykach branżowych bardzo często spotyka się takie niuanse, szczególnie gdy pracuje się z indeksami tablic czy implementuje różne algorytmy. Dobrze jest zawsze pamiętać, jak działają operatory ++ i --, bo ich nieuważne użycie może prowadzić do trudnych do wychwycenia błędów. Warto też zauważyć, że takie rozwiązanie pozwala w prosty sposób uzyskać liczby od 2 do 6 bez dodatkowego zwiększania wartości w środku pętli. Moim zdaniem, jeśli rozumiesz ten mechanizm, to już jesteś o krok dalej niż wielu początkujących programistów – w praktyce docenisz to przy debugowaniu bardziej złożonych fragmentów kodu. A co do dobrych praktyk: zawsze staraj się pisać czytelny kod i nie mieszaj zbyt wielu operacji w jednym wyrażeniu, żeby później nie zastanawiać się, dlaczego wynik jest inny niż oczekiwany.

Pytanie 5

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

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 6

Które z poniższych narzędzi jest używane do zarządzania wersjami kodu?

A. Kubernetes
B. Docker
C. Jenkins
D. Git

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Git jest narzędziem służącym do zarządzania wersjami kodu, które zyskało ogromną popularność wśród programistów na całym świecie. Jego podstawową funkcją jest umożliwienie śledzenia zmian w kodzie źródłowym, co jest niezbędne w procesie tworzenia oprogramowania. Dzięki Gitowi możemy w łatwy sposób przechowywać historię zmian, co pozwala na cofanie się do wcześniejszych wersji projektu, a także na pracę zespołową, gdzie wielu programistów może jednocześnie pracować nad różnymi częściami tego samego projektu. Git wspiera również gałęzie (ang. branches), które umożliwiają równoległe rozwijanie nowych funkcji bez zakłócania głównej linii rozwoju. Jest to kluczowe w środowiskach, gdzie rozwój i wydanie nowych funkcji musi być dobrze zorganizowane. Narzędzie to jest nie tylko darmowe, ale również open-source, co oznacza, że każdy może przyczynić się do jego rozwoju. Git jest standardem w branży IT, a jego znajomość jest często wymagana przez pracodawców. Dzięki swojej elastyczności i wszechstronności Git jest stosowany w projektach open-source, komercyjnych i edukacyjnych.

Pytanie 7

Co zostanie wyświetlone po wykonaniu poniższego kodu w języku Python?

data = [1, 2, 3, 4, 5]
result = list(map(lambda x: x*2, filter(lambda x: x % 2 == 0, data)))
print(result)
A. [2, 6, 10]
B. [4, 8]
C. [1, 2, 3, 4, 5]
D. [2, 4, 6, 8, 10]

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W kodzie Python, który analizujemy, użyto funkcji map i filter, które są często stosowane w programowaniu funkcyjnym. W pierwszej części, funkcja filter filtruje elementy z listy 'data', zwracając tylko te, które są liczbami parzystymi. W tym przypadku, z listy [1, 2, 3, 4, 5] zostaną wybrane liczby 2 i 4. Następnie, funkcja map mnoży te liczby przez 2. Dla liczby 2 otrzymujemy 4, a dla liczby 4 – 8. Dlatego wynik końcowy to lista [4, 8]. W praktyce, znajomość takich konstrukcji pozwala na efektywne przetwarzanie danych i implementację bardziej złożonych algorytmów w codziennych zastosowaniach programistycznych. Korzystając z filtracji i mapowania można na przykład szybko przetwarzać dane wejściowe w aplikacjach webowych lub analizować duże zestawy danych. Ważne jest, aby pamiętać, że te techniki są bardzo przydatne w kontekście pracy z danymi i powinny być uzupełnione o umiejętność czytania i rozumienia kodu, co jest kluczowe w praktyce programistycznej.

Pytanie 8

Jakie jest podstawowe zadanie firewalla w systemie komputerowym?

A. Ochrona danych na poziomie aplikacji internetowych
B. Zapobieganie wyciekom informacji na skutek awarii systemu
C. Zarządzanie ruchem sieciowym i blokowanie nieautoryzowanego dostępu
D. Szyfrowanie danych przesyłanych w sieci

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Firewall to taki strażnik w sieci, który decyduje, co może wejść lub wyjść z naszego systemu. Główną jego rolą jest właśnie zarządzanie ruchem sieciowym – analizuje każde połączenie, każdy pakiet danych i na podstawie ustalonych reguł pozwala albo blokuje ruch. Z mojego doświadczenia wynika, że bez firewalla w firmowej sieci to jak zostawić otwarte drzwi na oścież, serio. To narzędzie nie tylko zatrzymuje nieautoryzowany dostęp z zewnątrz, ale czasem też może blokować ryzykowne próby połączeń wychodzących – na przykład, gdy jakiś wirus próbuje kontaktować się z serwerem złodziei danych. W praktyce najczęściej spotkasz firewalle sprzętowe w routerach firmowych oraz programowe na komputerach i serwerach. Branżowo przyjmuje się, że firewall działa na poziomie sieci (warstwa 3 i 4 modelu OSI), co jest najlepszym miejscem, żeby odsiać niepożądany ruch zanim w ogóle dotrze do cennych serwisów. Ważne jest też, że dobrze skonfigurowany firewall to podstawa każdej strategii bezpieczeństwa, zgodnie z normami ISO/IEC 27001. W sumie, moim zdaniem żaden admin nie wyobraża sobie bez niego sensownej ochrony sieci – to absolutna podstawa.

Pytanie 9

Jaki będzie wynik działania poniższego kodu w języku C#?

int x = 5;
int y = 10;
Console.WriteLine($"Suma {x} i {y} wynosi {x + y}");
A. Suma 5 i 10 wynosi x + y
B. Error: niewłaściwa składnia
C. Suma x i y wynosi 15
D. Suma 5 i 10 wynosi 15

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod w języku C# wykonuje operację dodawania dwóch zmiennych, x i y, oraz wyświetla wynik w sformatowanym ciągu tekstowym. Poprawna odpowiedź to 'Suma 5 i 10 wynosi 15', ponieważ zmienna x ma wartość 5, a zmienna y ma wartość 10. Kiedy dodajemy te dwie liczby, otrzymujemy 15. Warto zwrócić uwagę na wykorzystanie interpolacji ciągów, co jest istotnym elementem w nowoczesnym C#. Umożliwia to w prosty sposób łączyć tekst z wartościami zmiennych, co zwiększa czytelność kodu. Interpolacja jest szczególnie przydatna w kontekście generowania komunikatów użytkownika i raportów. Przykład zastosowania może obejmować aplikacje, które prezentują wyniki obliczeń lub statystyki, gdzie ważne jest, aby w przyjazny sposób przedstawiać dane. Dobre praktyki programistyczne sugerują, aby unikać twardego kodowania wartości zamiast tego używać zmiennych, co ułatwia późniejsze modyfikacje i utrzymanie kodu.

Pytanie 10

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

A. Routing Database
B. Grafowa baza danych
C. Dokumentowa baza danych
D. Relacyjna baza danych

Brak odpowiedzi na to pytanie.

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

Pytanie 11

Celem mechanizmu obietnic (ang. promises) w języku JavaScript jest

A. ulepszenie czytelności kodu synchronicznego
B. zastąpienie mechanizmu dziedziczenia w programowaniu obiektowym
C. zarządzanie funkcjonalnością związaną z kodem asynchronicznym
D. zarządzanie przechwytywaniem błędów aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Mechanizm obietnic (promises) w JavaScript to, moim zdaniem, jedno z najważniejszych udogodnień, które pojawiły się w języku, żeby ogarnąć cały ten chaos wokół asynchroniczności. Typowa sytuacja kiedyś wyglądała tak, że w kodzie robiło się „callback hell” – zagnieżdżone funkcje wywołujące się nawzajem, co mocno utrudniało życie. Promise pozwala na o wiele czytelniejsze i wygodniejsze zarządzanie operacjami, które kończą się „kiedyś”, np. pobieraniem danych z API, zapisem do pliku, czy czekaniem na odpowiedź użytkownika. Z mojego doświadczenia wynika, że dzięki promises jest dużo łatwiej obsłużyć zarówno sukces, jak i błędy – możesz skorzystać z then(), catch(), a nawet łańcuchować kilka asynchronicznych zadań bez gubienia się w kodzie. Szczególnie przydatne jest to w pracy z fetch(), gdzie bez promises cała obsługa sieci wyglądałaby strasznie topornie. Dodatkowo promises są w pełni zgodne ze standardem ECMAScript 2015 (ES6) i stanowią podstawę dla nowocześniejszych rozwiązań, takich jak async/await. Praktycznie każdy zawodowy frontendowiec czy backendowiec pracujący z Node.js powinien je znać, bo to już nie fanaberia, a codzienność. Dobra praktyka to właśnie korzystanie z promises tam, gdzie tylko mamy do czynienia z nieblokującymi operacjami. Takie podejście nie tylko poprawia czytelność kodu, ale znacząco ułatwia jego utrzymanie i debugowanie.

Pytanie 12

Co oznacza walidacja kodu programu?

A. Czynnością weryfikującą poprawność i zgodność kodu z założeniami
B. Czynnością dotyczącą publikacji aplikacji w sklepie
C. Czynnością związaną z tworzeniem dokumentacji kodu
D. Czynnością polegającą na kompilowaniu kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Walidacja kodu programu to proces sprawdzania jego poprawności i zgodności z założeniami projektowymi oraz standardami programistycznymi. Celem walidacji jest wykrycie błędów logicznych, składniowych i zgodności kodu z wymaganiami aplikacji. Walidacja może obejmować analizę statyczną kodu (bez jego wykonywania) oraz testy jednostkowe i integracyjne, które sprawdzają funkcjonalność aplikacji. Dzięki walidacji programiści mogą uniknąć błędów na późniejszych etapach rozwoju projektu, co znacząco zwiększa niezawodność i stabilność aplikacji. Proces ten jest nieodzowny w metodykach Agile i Continuous Integration, gdzie regularne testowanie kodu stanowi podstawę dostarczania wysokiej jakości oprogramowania.

Pytanie 13

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

A. Selenium
B. Postman
C. Jasmine
D. Git

Brak odpowiedzi na to pytanie.

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

Pytanie 14

Z analizy złożoności obliczeniowej algorytmów sortowania dla dużych zbiorów danych (powyżej 100 elementów) wynika, że najefektywniejszą metodą jest algorytm sortowania:

sortowanie bąbelkoweO(n²)
sortowanie przez wstawianieO(n²)
sortowanie przez scalanieO(n log n)
sortowanie przez zliczanieO(n)
sortowanie kubełkoweO(n²)
A. bąbelkowego
B. przez zliczanie
C. kubełkowego
D. przez scalanie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie przez zliczanie (Counting Sort) to jeden z najszybszych algorytmów sortowania dla dużych zbiorów danych, jeśli zakres wartości jest ograniczony. Algorytm działa w czasie O(n+k), gdzie n to liczba elementów, a k to zakres wartości. Jest to algorytm stabilny, co oznacza, że zachowuje kolejność elementów o tej samej wartości. Counting Sort jest szczególnie efektywny w przypadku danych numerycznych o ograniczonym przedziale wartości, co czyni go idealnym rozwiązaniem do sortowania dużych zbiorów danych w krótkim czasie.

Pytanie 15

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

A. XCode
B. Android Studio
C. PyCharm
D. Eclipse

Brak odpowiedzi na to pytanie.

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

Pytanie 16

Co to jest Webpack?

A. Framework JavaScript do tworzenia aplikacji mobilnych
B. Biblioteka do testowania kodu JavaScript
C. Narzędzie do budowania modułów i zarządzania zależnościami w aplikacjach JavaScript
D. System zarządzania bazami danych dla aplikacji Node.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Webpack to zaawansowane narzędzie do budowania modułów, które znacząco ułatwia zarządzanie zależnościami w aplikacjach JavaScript. Umożliwia on zorganizowane łączenie różnych zasobów, takich jak skrypty JavaScript, style CSS, obrazy i inne pliki, w jeden lub kilka plików wyjściowych. Dzięki temu programiści mogą zoptymalizować czas ładowania aplikacji, minimalizując rozmiar plików i eliminując zbędne zapytania do serwera. Przykładowo, korzystając z Webpacka, można skonfigurować automatyczną kompresję kodu i zastosowanie technik takich jak kod dzielony (code splitting), co znacząco podnosi wydajność aplikacji. Dodatkowo, Webpack wspiera różne wtyczki i loadery, co pozwala na łatwą integrację z narzędziami do kompilacji, takimi jak Babel, umożliwiający użycie nowoczesnych funkcji JavaScript, które mogą nie być jeszcze wspierane przez wszystkie przeglądarki. Standardy branżowe kładą duży nacisk na efektywność i utrzymywalność kodu, a Webpack, będąc częścią ekosystemu JavaScript, skutecznie wspiera te zasady.

Pytanie 17

W jaki sposób procesor nawiązuje komunikację z pamięcią podręczną (cache)?

A. Za pomocą systemu przerwań
B. Używając wyłącznie pamięci RAM
C. Bezpośrednio, omijając mostki systemowe
D. Poprzez linie danych w magistrali systemowej

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Procesor komunikuje się z pamięcią podręczną (cache) za pomocą linii danych w magistrali systemowej, co jest kluczowym elementem architektury komputerowej. Magistrala systemowa to zestaw ścieżek, które umożliwiają przesyłanie danych pomiędzy różnymi komponentami systemu, w tym procesorem, pamięcią RAM oraz pamięcią podręczną. Pamięć podręczna działa jako bufor, który przechowuje najczęściej używane dane, co pozwala na znaczne zwiększenie szybkości operacji, ponieważ dostęp do pamięci cache jest znacznie szybszy niż dostęp do pamięci RAM. W standardach takich jak Intel's QuickPath Interconnect (QPI) czy AMD's HyperTransport, linie danych odgrywają kluczową rolę w efektywnej komunikacji, co przekłada się na ogólną wydajność systemu. Przykładowo, w nowoczesnych procesorach wielordzeniowych, każda rdzeń może mieć własną pamięć podręczną, a komunikacja za pomocą magistrali pozwala na synchronizację danych pomiędzy tymi rdzeniami oraz współdzielenie zasobów. Efektywne zarządzanie pamięcią podręczną i magistralą jest kluczowe dla osiągnięcia wysokiej wydajności w obliczeniach oraz przetwarzaniu danych.

Pytanie 18

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

A. JavaScript
B. HTML
C. PHP
D. CSS

Brak odpowiedzi na to pytanie.

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

Wskaź kod, który spowoduje wyświetlenie okna dialogowego przedstawionego na ilustracji. Dla uproszczenia kodu, zrezygnowano z atrybutów znaczników

Ilustracja do pytania
A. kod 4
B. kod 1
C. kod 2
D. kod 3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź, którą wybrałeś, to kod 2, i nie ma co do tego wątpliwości. Dobrze, że zauważyłeś wszystkie elementy, które były w oknie dialogowym. W tym kodzie masz TextBox na górze, który pozwala na wpisanie tekstu. Dwa CheckBoxy po lewej stronie to te typowe pola wyboru, które też były widoczne. Po prawej stronie masz trzy RadioButtony, które tworzą grupę przycisków - to jest właśnie to, co powinno być. Na dole widoczny jest przycisk Button z napisem Test, co też jest zgodne z obrazkiem. Takie rozmieszczenie to klucz do stworzenia dobrego interfejsu. Wiesz, w praktyce w wielu aplikacjach używa się właśnie tych elementów do prostych formularzy. Jeżeli rozumiesz, jak te komponenty działają i jak je ze sobą łączyć, to naprawdę dobrze ci to pójdzie w przyszłości w tworzeniu ładnych i funkcjonalnych interfejsów.

Pytanie 20

Jakie informacje można uzyskać na temat metod w klasie Point?

public class Point {
    public void Move(int x, int y) {...}
    public void Move(int x, int y, int z) {...}
    public void Move(Point newPt) {...}
}
A. Są przeciążone.
B. Zawierają błąd, ponieważ nazwy metod powinny być różne.
C. Służą jako konstruktory w zależności od liczby argumentów.
D. Zawierają przeciążenie operatora.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metody klasy Point są przeciążone, co oznacza, że mogą mieć tę samą nazwę, ale różnią się liczbą lub typem parametrów. Przeciążenie metod to jedna z podstawowych technik programowania obiektowego, która pozwala na bardziej elastyczne projektowanie kodu. Dzięki temu programista może tworzyć metody dostosowane do różnych sytuacji, zachowując spójność nazw i intuicyjność użycia. To zwiększa czytelność i utrzymanie kodu, ponieważ wywołania metod o tej samej nazwie, ale różnych parametrach, są łatwe do zrozumienia i odnalezienia.

Pytanie 21

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 przez wybór
C. Sortowanie bąbelkowe
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 22

W zamieszczonym fragmencie kodu Java wskaż nazwę zmiennej, która może przechować wartość 'T'.

int zm1;
float zm2;
char zm3;
boolean zm4;
A. zm3
B. zm2
C. zm1
D. zm4

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Poprawnie wskazana została zmienna 'zm3', której typ to 'char'. To właśnie zmienne typu 'char' w Javie służą do przechowywania pojedynczych znaków, takich jak na przykład litera 'T'. Zmienna 'char' przechowuje znak jako wartość liczbową zgodnie z kodowaniem Unicode, co pozwala na obsługę szerokiego zakresu znaków z różnych alfabetów. W praktyce często spotyka się sytuacje, gdzie potrzebujemy przechować czy odczytać pojedynczy znak – np. literę przy przetwarzaniu tekstu, analizowaniu plików, czy nawet w prostych grach tekstowych, gdzie np. sterowanie postacią opiera się o pojedyncze litery wciskane na klawiaturze. Moim zdaniem dobre zrozumienie typu 'char' to podstawa, bo łatwo pomylić go z typem 'String', który przechowuje jednak całe ciągi znaków, a nie pojedyncze znaki. Z punktu widzenia dobrych praktyk, zawsze warto dobierać możliwie najwęższy typ danych do zadania – jeżeli chcemy przechować jedną literę, typ 'char' jest po prostu najefektywniejszy. Nawiasem mówiąc, w Javie znak umieszczamy w pojedynczych apostrofach (np. 'T'), co jednoznacznie odróżnia je od tekstów (podwójne cudzysłowy). Osobiście zdarzało mi się kiedyś pomylić te typy i potem szukać błędów, więc warto zapamiętać tę różnicę. Warto też wiedzieć, że typ 'char' przydaje się np. do operacji na znakach w tablicach, przy konwersjach kodów ASCII czy nawet szyfrowaniu prostych tekstów. Zdecydowanie jest to typ, którego nie można pominąć w nauce Javy.

Pytanie 23

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

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

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 24

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

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

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 25

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

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

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 26

Którą konwencję nazewnictwa najczęściej stosuje się w JavaScript?

A. kebab-case
B. snake_case
C. camelCase
D. PascalCase

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CamelCase to konwencja nazewnictwa, która jest powszechnie stosowana w JavaScript, szczególnie w kontekście definiowania zmiennych i funkcji. W tej metodzie, każde nowe słowo zaczyna się dużą literą, co czyni tekst bardziej czytelnym. Przykładami mogą być zmienne takie jak `userName` czy `getUserInfo`, gdzie pierwsza część jest zapisana małymi literami, a każde kolejne słowo zaczyna się od dużej litery. Stosowanie camelCase jest zgodne z przyjętymi standardami i dobrymi praktykami w Javascript, gdzie wskazano, że zmienne i funkcje powinny być nazwane w sposób, który jasno określa ich przeznaczenie. Dzięki temu, kod staje się bardziej zrozumiały i łatwiejszy do utrzymania. Warto również zauważyć, że wiele z popularnych bibliotek i frameworków JavaScript, takich jak React czy Angular, również korzysta z tej konwencji, co sprawia, że jest to umiejętność niezbędna dla każdego programisty JavaScript. Dobrą praktyką jest również przestrzeganie tej konwencji w nazwach klas i obiektów, co further enhances readability and maintainability of the code.

Pytanie 27

Które z wymienionych zastosowań najlepiej definiuje bibliotekę jQuery?

A. Projektowanie struktur baz danych
B. Tworzenie interfejsów w programach desktopowych
C. Budowanie aplikacji mobilnych
D. Ułatwienie manipulacji DOM oraz obsługi zdarzeń w JavaScript

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
jQuery to popularna biblioteka JavaScript, która ułatwia manipulację DOM (Document Object Model), obsługę zdarzeń oraz wykonywanie animacji na stronach internetowych. Dzięki jQuery programiści mogą znacznie skrócić ilość kodu potrzebnego do realizacji operacji na elementach HTML. Biblioteka ta zapewnia również wygodny sposób na wykonywanie asynchronicznych żądań HTTP (AJAX), co pozwala na dynamiczne pobieranie danych z serwera bez konieczności przeładowywania całej strony. jQuery jest szeroko stosowane w projektach, które wymagają interaktywności oraz lekkich efektów wizualnych. Choć w ostatnich latach jego popularność spadła na rzecz bardziej zaawansowanych frameworków takich jak React czy Angular, jQuery nadal jest cenione za prostotę, wydajność oraz bogaty ekosystem gotowych wtyczek i rozszerzeń.

Pytanie 28

Które z poniższych twierdzeń najlepiej charakteryzuje metodę wirtualną?

A. Metoda, która może być przesłonięta w klasie dziedziczącej
B. Metoda, która jest zawsze stosowana w konstruktorach danej klasy
C. Metoda, która może być wywoływana tylko przez klasę nadrzędną
D. Metoda, która działa wyłącznie dla statycznych pól danej klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wirtualna metoda to taka, która jest zdefiniowana w klasie bazowej i można ją nadpisać w klasie pochodnej. Fajna sprawa z tą metodą wirtualną jest taka, że działa na zasadzie dynamicznego wiązania, co w praktyce oznacza, że program decyduje w czasie działania, którą wersję metody wywołać. Dzięki temu mamy polimorfizm – możemy użyć różnych wersji tej samej metody, w zależności od typu obiektu, na którym pracujemy. To naprawdę ważny aspekt programowania obiektowego, bo pozwala na większą elastyczność i łatwiejsze rozwijanie kodu. W hierarchiach klas to się sprawdza, bo klasa bazowa ma ogólne metody, a klasy pochodne mogą je dostosować do swoich potrzeb.

Pytanie 29

Zamieszczony fragment kodu w Android Studio wdraża metodę nasłuchującą dla obsługi zdarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. zmiany w polu tekstowym
B. wybierania daty
C. zmiany stanu kontrolki Switch
D. naciśnięcia przycisku

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod wykorzystuje metodę setOnClickListener, która jest podstawowym sposobem przypisywania reakcji na kliknięcie przycisku (Button) w Androidzie. To taki klasyczny wzorzec nasłuchiwania zdarzeń, w tym przypadku – kliknięcia użytkownika. Moim zdaniem, ta konstrukcja pojawia się praktycznie w każdym większym projekcie Androidowym, bo trudno sobie wyobrazić interfejs bez przycisków, które coś faktycznie robią. Co ciekawe, korzystając z setOnClickListener, przekazujemy obiekt anonimowej klasy implementującej interfejs View.OnClickListener, a w jej metodzie onClick() umieszczamy kod, który ma się wykonać po naciśnięciu przycisku. To bardzo elastyczne rozwiązanie, bo możemy tu zarówno wyświetlić Toast, przejść do innego activity, wysłać dane do internetu czy nawet ukryć inny widok. Warto pamiętać, że praktycznie wszystkie kontrolki dziedziczące po View mogą mieć własnych listenerów, ale Button to najbardziej naturalny przypadek użycia. To taka podstawa obsługi UI w Android Studio i moim zdaniem każdy, kto chce pisać apki na Androida, powinien mieć to opanowane na pamięć. Dodatkowo, od wersji Android API 26 można używać także lambda expressions, co jeszcze bardziej skraca kod, ale sama idea zostaje ta sama – reagujemy na kliknięcie przycisku.

Pytanie 30

Który element dokumentacji technicznej jest istotny dla ustalenia metod ochrony danych w aplikacji?

A. System ochrony aplikacji
B. Koncepcja interfejsu użytkownika
C. Harmonogram zarządzania zadaniami
D. Opis architektury klient-serwer

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
System zabezpieczeń aplikacji to kluczowy element specyfikacji technicznej, który określa metody ochrony danych. Obejmuje on takie elementy jak szyfrowanie, kontrola dostępu, uwierzytelnianie oraz autoryzacja. Prawidłowo zaprojektowany system zabezpieczeń zapewnia ochronę przed atakami hakerskimi, nieautoryzowanym dostępem oraz utratą danych. W aplikacjach webowych i mobilnych systemy zabezpieczeń obejmują również techniki takie jak dwuskładnikowe uwierzytelnianie (2FA), zabezpieczenia API oraz regularne audyty bezpieczeństwa. Implementacja solidnych mechanizmów zabezpieczeń jest niezbędna, aby zapewnić zgodność z regulacjami prawnymi i zyskać zaufanie użytkowników.

Pytanie 31

W dwóch przypadkach opisano mechanizm znany jako Binding. Jego celem jest

W Android Studio:
<TextView android:text="@{viewmodel.userName}" />
W XAML:
<Label Text="{Binding Source={x:Reference slider2}, Path=Value}" />
A. wiązanie oraz eksportowanie plików z różnych modułów aplikacji
B. wiązać właściwości (property) elementu interfejsu użytkownika z danymi lub właściwością innego obiektu
C. przetwarzanie zdarzeń kontrolek interfejsu użytkownika przez wywoływanie odpowiednich funkcji
D. zarządzanie mechanizmem obietnic (promises) lub obserwatora (observable) w programowaniu asynchronicznym

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wiązanie (binding) w kontekście interfejsów użytkownika, takich jak Android Studio czy XAML, to bardzo kluczowy mechanizm, który pozwala na automatyczne połączenie danych z logiki aplikacji (np. zmiennych, modeli ViewModel) z konkretnymi właściwościami kontrolek na ekranie. Dzięki temu nie trzeba ręcznie programować każdej aktualizacji – wszystko dzieje się „w tle”. Na przykład, jeśli użytkownik zmieni wartość jakiejś kontrolki, takiej jak suwak (Slider), odpowiednia właściwość w klasie ViewModel również się zaktualizuje i na odwrót. To podejście jest zgodne z architekturą MVVM (Model-View-ViewModel), która jest bardzo popularna w aplikacjach mobilnych i desktopowych. Moim zdaniem to ogromna oszczędność czasu i po prostu mniej błędów w kodzie, bo nie trzeba pisać setek linii kodu łączącego UI z danymi. W praktyce binding często umożliwia także walidację danych na bieżąco, reakcje na zmiany oraz poprawia czytelność kodu. Bez tego, nawet proste aplikacje robią się niepotrzebnie skomplikowane i trudne do utrzymania. Przykłady użycia – to chociażby powiązanie tekstu wyświetlanego w TextView z polem w ViewModel, czy automatyczna aktualizacja etykiety, gdy zmienia się wartość suwaka. To jedna z podstawowych rzeczy, które wyróżniają nowoczesne frameworki UI – i szczerze, trudno bez tego wyobrazić sobie dzisiejsze tworzenie aplikacji.

Pytanie 32

W środowisku IDE przeznaczonym do tworzenia aplikacji okienkowych zdefiniowano okno Form1. Aby wprowadzić zmiany w ustawieniach, w kolejności: tytuł okna na górnym pasku, standardowy kursor na strzałkę oraz kolor tła okna, należy dostosować następujące pola w oknie Properties:

Ilustracja do pytania
A. Text, Cursor, BackColor
B. Text, UseWaitCursor, BackColor
C. (Name), Cursor, BackgroundImage
D. (Name), UseWaitCursor, BackgroundImage

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrana odpowiedź jest prawidłowa, bo dokładnie te trzy właściwości – Text, Cursor i BackColor – odpowiadają w Windows Forms za ustawienia tytułu okna, domyślnego kursora myszy oraz koloru tła formularza. W praktyce, edytując pole Text w Properties, określasz, co użytkownik zobaczy na belce tytułowej okna. To często pierwszy krok w customizacji okna – tytuł powinien jednoznacznie identyfikować aplikację i jej funkcję, zgodnie z dobrymi praktykami UX/UI. Następnie pole Cursor umożliwia wybranie rodzaju kursora, który pojawi się, gdy użytkownik najedzie myszą na dany formularz. Najczęściej używany jest domyślny wskaźnik (strzałka), ale można tu ustawić na przykład kursor oczekiwania czy rękę, jeśli wymaga tego logika aplikacji. Zmiana BackColor to podstawa, jeśli chcesz wizualnie wyróżnić okno lub dostosować je do kolorystyki firmowej. Moim zdaniem, te trzy pola to podstawa podstaw w pracy z IDE do Windows Forms – bez ich zrozumienia ciężko mówić o jakimkolwiek sensownym projektowaniu interfejsu. Warto też zwrócić uwagę, że te właściwości są uniwersalne i pojawiają się praktycznie w każdym tutorialu czy dokumentacji Microsoftu dla .NET – to już taki żelazny standard branżowy. Z mojego doświadczenia często początkujący programiści mają z tym problem, bo szukają skomplikowanych rozwiązań, a tu chodzi po prostu o poprawne posługiwanie się Properties. Dzięki temu nawet najprostsza apka wygląda profesjonalniej i jest bardziej intuicyjna dla użytkownika.

Pytanie 33

Który system operacyjny jest podstawowym środowiskiem do tworzenia aplikacji mobilnych w języku Swift?

A. Windows UWP
B. Android
C. iOS
D. LG UX

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Swift to język programowania stworzony przez Apple specjalnie z myślą o ekosystemie tej firmy, czyli głównie o systemach iOS, macOS, watchOS oraz tvOS. To właśnie iOS jest podstawową, domyślną platformą, na której programiści wykorzystują Swift do budowania aplikacji mobilnych. Praktycznie każda nowoczesna aplikacja na iPhone’a czy iPada, która powstała po 2014 roku, jest przynajmniej w części napisana w Swifcie, bo to obecnie standard branżowy w świecie Apple. Moim zdaniem to jest super wygodne, bo Apple dostarcza kompletne narzędzia do pracy ze Swiftem, jak Xcode czy rozbudowane frameworki (UIKit, SwiftUI). Z mojego doświadczenia wynika, że programowanie w Swifcie dla iOS to nie tylko prostsza składnia, ale też większa stabilność i bezpieczeństwo aplikacji – Apple bardzo dba o aktualizacje narzędzi i dobre praktyki. Warto też pamiętać, że od wersji SwiftUI rozwijanie aplikacji na iOS stało się jeszcze bardziej intuicyjne, bo można korzystać z deklaratywnego podejścia do interfejsów. W realnych projektach spotyka się też Objective-C, ale obecnie Swift wygrywa czytelnością i wsparciem społeczności. Gdyby ktoś chciał tworzyć aplikacje mobilne poza ekosystemem Apple, to niestety Swift nie będzie najlepszym wyborem – właśnie dlatego iOS jest tym środowiskiem, do którego Swift został stworzony i tam najbardziej się sprawdza.

Pytanie 34

Jak w CSS definiuje się element, który ma reagować na najechanie kursorem?

A. :over
B. :hover
C. :click
D. :mouse

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź :hover jest poprawna, ponieważ w CSS pseudo-klasa :hover jest używana do definiowania stylów elementu, gdy kursor myszy znajduje się nad tym elementem. Jest to niezwykle przydatne w tworzeniu interaktywnych stron internetowych, ponieważ umożliwia twórcom zwiększenie responsywności elementów, takich jak przyciski, linki czy obrazy. Przykładowo, można zastosować :hover do zmiany koloru tła przycisku, co wskazuje użytkownikom, że dany element jest aktywny i gotowy do interakcji. Zastosowanie tej pseudo-klasy nie tylko poprawia estetykę strony, ale również zwiększa jej użyteczność oraz dostępność, co jest zgodne z dobrymi praktykami w projektowaniu UI/UX. Należy pamiętać, że :hover działa tylko w przeglądarkach obsługujących CSS, a efekty związane z tą pseudo-klasą są natychmiastowe, co sprawia, że są one bardzo efektywne w zastosowaniu. Warto również zaznaczyć, że w przypadku urządzeń dotykowych, takich jak smartfony, reakcja na najechanie może być symulowana poprzez dotknięcie ekranu, co sprawia, że ta technika jest uniwersalna.

Pytanie 35

Co to jest Continuous Integration (CI)?

A. Metoda ciągłego monitorowania wydajności aplikacji w produkcji
B. Protokół komunikacji między różnymi częściami aplikacji
C. Technika tworzenia aplikacji mobilnych w sposób przyrostowy
D. Praktyka automatycznego integrowania kodu w repozytorium wspólnym wraz z testami

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Continuous Integration (CI) to praktyka, która ma na celu automatyzację procesu integrowania kodu w repozytorium wspólnym. Główną ideą CI jest to, aby programiści regularnie dodawali swoje zmiany do głównej gałęzi kodu, co pozwala na bieżące testowanie aplikacji. Dzięki temu można szybko wykrywać i naprawiać błędy, zanim staną się one poważnym problemem. Typowym przykładem zastosowania CI jest użycie narzędzi takich jak Jenkins, GitLab CI czy Travis CI, które automatycznie uruchamiają zestaw testów po każdym wprowadzeniu zmian. Takie podejście nie tylko poprawia jakość kodu, ale również przyspiesza cykl wydania oprogramowania, co jest zgodne z najlepszymi praktykami w branży. Warto również zauważyć, że CI jest często częścią szerszego podejścia do DevOps, które integruje rozwój i operacje, aby zwiększyć efektywność całego procesu wytwarzania oprogramowania.

Pytanie 36

Jakie jest wyjście działania kompilatora?

A. Zestaw błędów występujących w kodzie
B. Plik maszynowy gotowy do uruchomienia
C. Plik źródłowy w języku o wyższym poziomie
D. Kolekcja instrukcji w języku pośrednim

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Plik maszynowy gotowy do uruchomienia jest wynikiem działania kompilatora. Po przekształceniu kodu źródłowego na język maszynowy tworzony jest plik binarny, który może być uruchomiony na komputerze bez konieczności ponownej kompilacji. Pliki te są szybkie i efektywne, ponieważ kod został wcześniej zoptymalizowany i przetworzony na instrukcje rozumiane przez procesor. Przykłady takich plików to .exe w systemie Windows lub pliki binarne w systemach Linux. Plik maszynowy to ostateczna forma programu, gotowa do dystrybucji i użytkowania.

Pytanie 37

Zapisany fragment w C# wskazuje na definicję klasy Car, która:

public class Car: Vehicle {     ...   }
A. jest powiązana z klasą Vehicle
B. używa prywatnych pól klasy Vehicle
C. stanowi klasę bazową (nie dziedziczy po żadnej klasie)
D. dziedziczy po Vehicle

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W przedstawionym kodzie w języku C# mamy definicję klasy Car, która dziedziczy po klasie Vehicle. Dziedziczenie to fundamentalny mechanizm programowania obiektowego, pozwalający jednej klasie przejąć właściwości i metody innej klasy. W praktyce oznacza to, że klasa Car automatycznie zyskuje dostęp do metod i właściwości publicznych oraz chronionych klasy Vehicle, co umożliwia ponowne użycie kodu i zwiększa jego przejrzystość. Dziedziczenie jest kluczowe w projektowaniu skalowalnych systemów, gdzie umożliwia tworzenie bardziej specyficznych klas na podstawie klas ogólnych, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Przykładowo, jeżeli klasa Vehicle zawiera metody takie jak Start() i Stop(), klasa Car może je wykorzystać bez konieczności ponownego definiowania. Dobre praktyki w programowaniu obiektowym zalecają wykorzystywanie dziedziczenia do tworzenia hierarchii klas, które logicznie odwzorowują relacje „jest-a” pomiędzy obiektami w systemie. Ważne jest też unikanie zbyt głębokiego dziedziczenia, co może prowadzić do skomplikowanego i trudnego w utrzymaniu kodu. Zrozumienie dziedziczenia jest kluczowe dla efektywnego wykorzystania wzorców projektowych, takich jak wzorzec projektowy Adapter czy Dekorator.

Pytanie 38

Jakie słowa kluczowe są stosowane w języku C++ do zarządzania wyjątkami?

A. throw i handle
B. try i raise
C. except i finally
D. try i catch

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Słowa kluczowe 'try' i 'catch' są podstawą obsługi wyjątków w języku C++. Umożliwiają one przechwytywanie i obsługę błędów, które mogą wystąpić podczas wykonywania programu. Blok 'try' zawiera kod, który jest monitorowany pod kątem błędów, a blok 'catch' przechwytuje i przetwarza zgłoszony wyjątek, zapobiegając nieoczekiwanemu zakończeniu programu. Mechanizm ten jest kluczowy dla tworzenia niezawodnego i odpornego na błędy oprogramowania. Dzięki 'try' i 'catch' programista może implementować logikę naprawczą lub logować błędy, co zwiększa stabilność i bezpieczeństwo aplikacji.

Pytanie 39

Jakie są kluczowe etapy realizacji projektu programistycznego?

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

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 40

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

A. !
B. #
C. ""
D. //

Brak odpowiedzi na to pytanie.

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