Wyniki egzaminu

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

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

Sposób deklaracji Klasa2 wskazuje, że

W C++ i C#:
class Klasa2 : Klasa1
W Java:
class Klasa2 extends Klasa1
W Python:
class Klasa2(Klasa1):
A. Klasa2 dziedziczy od Klasa1
B. Klasa1 jest dzieckiem Klasy2
C. Klasa1 dziedziczy od Klasa2
D. Klasa2 stanowi klasę bazową

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Deklaracja Klasa2 jako klasy dziedziczącej po Klasa1 oznacza, że Klasa2 przejmuje wszystkie publiczne i chronione (protected) pola oraz metody klasy bazowej (Klasa1). Dziedziczenie to jeden z filarów programowania obiektowego, który umożliwia ponowne wykorzystanie kodu i rozszerzanie funkcjonalności istniejących klas. Dzięki temu Klasa2 może nie tylko korzystać z metod Klasa1, ale także nadpisywać je, co jest kluczowe dla implementacji polimorfizmu. Dziedziczenie pozwala na budowanie hierarchii klas, co prowadzi do lepszego zarządzania kodem i ułatwia jego skalowalność. Przykładem może być klasa Pojazd, z której dziedziczy klasa Samochod, rozszerzając jej funkcjonalność o dodatkowe cechy i metody specyficzne dla samochodów.

Pytanie 2

Którego nagłówka używamy w C++ do obsługi plików?

A. <stdio.h>
B. <fileio.h>
C. <fstream>
D. <iostream>

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Nagłówek '<fstream>' w języku C++ jest używany do pracy z plikami, umożliwiając odczyt i zapis danych na dysku. Biblioteka fstream udostępnia klasy 'ifstream', 'ofstream' i 'fstream', które pozwalają na operacje wejścia i wyjścia plików. 'ifstream' służy do odczytu plików, 'ofstream' do zapisu, a 'fstream' umożliwia zarówno odczyt, jak i zapis. Praca z plikami jest kluczowa w wielu aplikacjach, od prostych narzędzi do przetwarzania danych po złożone systemy zarządzania plikami i bazami danych. Dzięki 'fstream' programiści mogą efektywnie zarządzać danymi na różnych poziomach aplikacji.

Pytanie 3

Jakie jest podstawowe środowisko do tworzenia aplikacji desktopowych przy użyciu języka C#?

A. MS Visual Studio
B. NetBeans
C. PyCharm
D. Eclipse

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
MS Visual Studio to potężne zintegrowane środowisko programistyczne (IDE) zaprojektowane przez firmę Microsoft, które oferuje pełne wsparcie dla języka C#. Dzięki bogatym funkcjom, takim jak IntelliSense, które ułatwia pisanie kodu poprzez podpowiadanie składni oraz dostępność narzędzi do debugowania, programiści mogą efektywnie rozwijać aplikacje desktopowe. MS Visual Studio obsługuje różne frameworki, takie jak .NET Framework oraz .NET Core, co pozwala na budowanie aplikacji o różnej architekturze. W praktyce, programiści mogą tworzyć aplikacje w oparciu o Windows Presentation Foundation (WPF) lub Windows Forms, co umożliwia tworzenie rozbudowanych interfejsów użytkownika. Dodatkowo, MS Visual Studio oferuje szereg narzędzi do współpracy zespołowej, integracji z systemami kontroli wersji oraz wsparcie dla testowania jednostkowego. Jako standard w branży, MS Visual Studio jest często preferowanym wyborem w projektach komercyjnych i korporacyjnych, z uwagi na jego wszechstronność oraz wsparcie ze strony społeczności programistycznej.

Pytanie 4

Przedstawione w filmie działania wykorzystują narzędzie

A. generatora kodu java
B. generatora GUI przekształcającego kod do języka XAML
C. kompilatora dla interfejsu graficznego
D. debuggera analizującego wykonujący kod

Brak odpowiedzi na to pytanie.

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

Pytanie 5

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

A. Debugger, edytor kodu, integracja z systemem kontroli wersji
B. Zarządzanie bazami danych
C. Narzędzie do tworzenia grafiki
D. Emulator urządzeń mobilnych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Debugger, edytor kodu oraz integracja z systemem kontroli wersji to kluczowe elementy środowiska IDE, które umożliwiają efektywną pracę nad aplikacjami webowymi. Debugger pozwala na wykrywanie i naprawianie błędów w czasie rzeczywistym, edytor kodu umożliwia szybkie pisanie i modyfikowanie kodu, a integracja z systemem kontroli wersji (np. Git) pozwala śledzić zmiany i współpracować w zespołach programistycznych. Te narzędzia stanowią podstawę pracy każdego dewelopera webowego.

Pytanie 6

Jaki z wymienionych komponentów jest kluczowy do inicjalizacji pola klasy podczas tworzenia instancji obiektu?

A. Konstruktor
B. Instrukcja warunkowa
C. Funkcja zaprzyjaźniona
D. Metoda statyczna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Konstruktor jest niezbędny do inicjalizacji pól klasy podczas tworzenia nowego obiektu. Bez konstruktora obiekt mógłby zostać utworzony w stanie nieokreślonym, co może prowadzić do błędów w działaniu programu. Konstruktor automatycznie przypisuje wartości do pól lub wykonuje inne niezbędne operacje przygotowawcze. Przykład w C++: `class Samochod { public: Samochod() { marka = "Nieznana"; } }`. W tym przypadku konstruktor ustawia domyślną wartość dla pola `marka`, co eliminuje konieczność ręcznego przypisywania wartości po utworzeniu obiektu.

Pytanie 7

Co to jest shadow DOM?

A. Metoda renderowania grafiki 3D w przeglądarkach
B. Mechanizm enkapsulacji kodu HTML, CSS i JavaScript w komponenty webowe
C. Technika stylizacji elementów w CSS przy użyciu cieni
D. Wirtualny DOM używany przez biblioteki jak React i Vue.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Shadow DOM to technika pozwalająca na enkapsulację kodu HTML, CSS oraz JavaScript w komponentach webowych, co jest kluczowe w kontekście tworzenia aplikacji opartych na Web Components. Dzięki zastosowaniu Shadow DOM, elementy wewnętrzne komponentu są izolowane od reszty dokumentu, co eliminuje problemy z kolizjami nazw klas CSS oraz pozwala na tworzenie bardziej modularnych i wielokrotnego użytku elementów. Przykładem zastosowania Shadow DOM mogą być komponenty interfejsu użytkownika, takie jak przyciski czy karty, które zawierają własne style i logikę, nie wpływając na globalne style strony. To podejście jest wspierane przez standardy W3C i zalecane w projektach, gdzie skala i złożoność aplikacji wymaga wysokiej wydajności i organizacji kodu. Dobrze zaprojektowane komponenty z użyciem Shadow DOM mogą znacznie uprościć rozwój i utrzymanie aplikacji webowych, czyniąc je bardziej responsywnymi i dostosowanymi do różnych środowisk.

Pytanie 8

Jaką wartość ma zmienna b po wykonaniu poniższego kodu?

int a = 1, b = 20, c = 3;
while (a <= 10) {
    b = b - c;
    a += 2;
}
A. 20
B. 5
C. 11
D. 2

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Po przeanalizowaniu przedstawionego kodu, możemy zauważyć, że zmienne a b i c są zainicjalizowane odpowiednio wartościami 1 20 i 3. Pętla while jest zależna od warunku a <= 10 co oznacza że będzie się wykonywać dopóki a nie przekroczy 10. W ciele pętli najpierw zmniejszamy wartość b o wartość c czyli b = b - c a następnie zwiększamy a o 2 czyli a += 2. Ponieważ a jest początkowo równe 1 pętla będzie się wykonywać pięć razy zanim a stanie się większe niż 10 (1 3 5 7 9). Podczas każdej iteracji wartość b zmniejsza się o 3 (ponieważ c=3). Po pięciu iteracjach wartość b zostanie zmniejszona o 15 (5*3) z początkowej wartości 20 uzyskując ostatecznie 5. W tym kontekście poprawna odpowiedź to 5. Takie podejście do analizy pętli i zmiennych jest kluczowe podczas programowania ponieważ pozwala zrozumieć jak zmieniają się wartości zmiennych w czasie wykonywania programu. Zrozumienie tych zasad jest fundamentalne w programowaniu proceduralnym oraz w debugowaniu kodu.

Pytanie 9

Co należy do zadań interpretera?

A. wykonanie skryptu instrukcja po instrukcji
B. sprawdzanie składni całego programu przed jego uruchomieniem
C. ulepszanie większej części kodu, aby przyspieszyć jego wykonanie
D. przekładanie kodu na kod maszynowy

Brak odpowiedzi na to pytanie.

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

Pytanie 10

Które z wymienionych poniżej błędów podczas wykonywania programu można obsłużyć poprzez zastosowanie wyjątków?

A. Błąd dzielenia przez zero
B. Błąd w składni
C. Niekompatybilność typów danych w kodzie
D. Błąd kompilacyjny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W języku C++ wyjątki pozwalają na obsługę błędów wykonania, takich jak dzielenie przez zero. Jest to klasyczny przykład błędu, który może prowadzić do nieprzewidywalnych rezultatów lub awarii programu. Dzięki użyciu wyjątków można zapobiec katastrofalnym skutkom takich błędów, przekierowując sterowanie do odpowiedniego bloku 'catch', gdzie można podjąć działania naprawcze lub zakończyć program w kontrolowany sposób. Obsługa błędów takich jak dzielenie przez zero jest kluczowa w programowaniu niskopoziomowym i aplikacjach wymagających wysokiej niezawodności.

Pytanie 11

Przedstawione logo praw Creative Commons umożliwia bezpłatne użytkowanie dzieła:

Ilustracja do pytania
A. w działaniach komercyjnych
B. pod warunkiem udostępnienia go na tej samej zasadzie licencyjnej
C. w celu modyfikacji lub remiksowania
D. pod warunkiem zachowania go w oryginalnej formie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
To, że odpowiedź dotycząca modyfikacji i remiksowania jest poprawna, wynika bezpośrednio z zasad licencji Creative Commons, a w tym przypadku – oznaczenia BY-NC. Licencja ta pozwala na używanie utworów, w tym także ich przerabianie i tworzenie nowych dzieł pochodnych, pod warunkiem podania autora i nieużywania do celów komercyjnych. W praktyce oznacza to, że możesz wziąć na przykład czyjąś grafikę na tej licencji, przerobić ją, dodać coś od siebie, zrobić z tego plakat na szkolną wystawę lub użyć fragmentu w prezentacji – o ile tylko przestrzegasz warunków. Z mojego doświadczenia wynika, że wiele osób myli się co do tego, że modyfikacja jest zabroniona – a właśnie Creative Commons daje tutaj spore pole do popisu. Zasada remiksowania jest wręcz promowana, bo pozwala rozwijać kulturę. Oczywiście, cały czas trzeba pamiętać o atrybucji twórcy i nie używać dzieła do zarabiania, bo wtedy łamiesz warunki licencji. W środowisku technicznym to jest bardzo praktyczne – możesz wzorować się na czyjejś pracy, rozwijać ją i poprawiać, co w branży IT, grafiki czy edukacji jest na porządku dziennym. Warto też zerkać do oficjalnych wytycznych Creative Commons: one wprost potwierdzają, że modyfikacja i adaptacja są dozwolone przy BY-NC, pod warunkiem braku komercji. W sumie – świetna opcja na rozwój własnych projektów!

Pytanie 12

Które z poniższych NIE jest zasadą programowania SOLID?

A. Single Responsibility Principle (Zasada pojedynczej odpowiedzialności)
B. Code Reuse Principle (Zasada ponownego użycia kodu)
C. Open/Closed Principle (Zasada otwarte/zamknięte)
D. Dependency Inversion Principle (Zasada odwrócenia zależności)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź "Code Reuse Principle" jest prawidłowa, ponieważ nie stanowi ona jednej z pięciu zasad programowania SOLID. SOLID to akronim, który odnosi się do pięciu podstawowych zasad, które mają na celu ułatwienie tworzenia oprogramowania, które jest łatwe w utrzymaniu i rozwijaniu. W skład tych zasad wchodzą: Zasada pojedynczej odpowiedzialności (Single Responsibility Principle), Zasada otwarte/zamknięte (Open/Closed Principle), Zasada segregacji interfejsów (Interface Segregation Principle), Zasada odwrócenia zależności (Dependency Inversion Principle) oraz Zasada Liskov (Liskov Substitution Principle). Przykładowo, Zasada pojedynczej odpowiedzialności zakłada, że każda klasa powinna mieć jedną, jasno określoną odpowiedzialność, co pozwala na łatwiejsze testowanie i modyfikowanie kodu bez wpływu na inne jego części. Użycie zasad SOLID w praktyce prowadzi do lepszego rozdzielenia logiki aplikacji i ułatwia jej rozwój oraz utrzymanie, co jest kluczowe w długoterminowych projektach programistycznych.

Pytanie 13

W jakiej metodzie zarządzania projektami nacisk kładzie się na ograniczenie marnotrawstwa?

A. Waterfall
B. Prototypowy
C. Kanban
D. Scrum

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kanban to metodologia zarządzania projektem, która koncentruje się na minimalizacji marnotrawstwa i optymalizacji przepływu pracy. Kluczowym elementem Kanbanu jest wizualizacja procesu za pomocą tablicy, na której znajdują się zadania w różnych fazach realizacji. Dzięki temu zespół może łatwo identyfikować wąskie gardła i eliminować zbędne procesy. Kanban promuje ciągłe doskonalenie (kaizen) i pozwala na dostosowywanie się do zmieniających się priorytetów bez konieczności reorganizacji całego projektu. Ta metodologia jest szeroko stosowana w branży IT, produkcji oraz w zespołach operacyjnych, które wymagają dużej elastyczności.

Pytanie 14

Który z wymienionych algorytmów jest algorytmem opartym na iteracji?

A. Fibonacci (rekurencyjnie)
B. QuickSort
C. BubbleSort
D. DFS (przeszukiwanie w głąb)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Bubble Sort to klasyczny przykład algorytmu iteracyjnego, który sortuje elementy tablicy poprzez wielokrotne porównywanie i zamianę sąsiadujących elementów. Algorytm ten działa w pętlach, aż wszystkie elementy zostaną odpowiednio uporządkowane. Chociaż jest jednym z najprostszych algorytmów sortowania, jego złożoność O(n^2) czyni go mniej efektywnym dla dużych zbiorów danych. Bubble Sort jest często wykorzystywany w nauczaniu podstaw algorytmiki, ponieważ łatwo zrozumieć jego działanie i implementację. Pomimo niskiej efektywności, bywa stosowany w przypadkach, gdy liczba elementów jest niewielka lub zbiór danych jest wstępnie posortowany.

Pytanie 15

Jakie obliczenia można wykonać za pomocą poniższego algorytmu, który operuje na dodatnich liczbach całkowitych?

Ilustracja do pytania
A. sumę cyfr wprowadzonej liczby
B. sumę wprowadzonych liczb
C. największy wspólny dzielnik wprowadzonej liczby
D. liczbę cyfr w wprowadzonej liczbie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybierając odpowiedź dotyczącą liczby cyfr w wprowadzonej liczbie, pokazujesz dobre zrozumienie tego, jak działa prezentowany algorytm. W praktyce bardzo często spotyka się podobne rozwiązania, gdy trzeba np. zliczyć, ile znaków ma PESEL, numer telefonu lub numer identyfikacyjny w bazie danych. Algorytm wykonuje bardzo prostą, ale jednocześnie sprytną operację – dzieli podaną liczbę przez 10 (zawsze całkowicie, bez reszty), aż ta liczba się wyzeruje. Za każdym obrotem pętli zwiększa licznik, więc po zakończeniu działania licznik wskazuje, ile razy można było podzielić liczbę przez 10, czyli ile było w niej cyfr. To dokładnie odpowiada liczbie cyfr w zapisie dziesiętnym. Podejście to jest bardzo efektywne, bo nie wymaga konwersji liczby na tekst ani używania dodatkowych struktur danych. W profesjonalnym kodzie często preferuje się takie rozwiązania – są szybkie i niezawodne. Moim zdaniem warto znać ten wzorzec, bo przydaje się zarówno w algorytmice, jak i analizie danych czy podczas implementacji walidacji pól liczbowych w bazach danych lub formularzach. Dodatkowo, zgodnie z dobrymi praktykami, algorytm nie ulega błędom związanym z nietypowymi danymi – działa dla każdej dodatniej liczby całkowitej. Warto zapamiętać takie sztuczki, bo potem życie programisty jest łatwiejsze.

Pytanie 16

Jakie elementy powinny być uwzględnione w dokumentacji testowej aplikacji?

A. Opis procedur testowych oraz rezultaty wykonanych testów
B. Specyfikacje techniczne serwera
C. Zalecenia dotyczące optymalizacji kodu
D. Harmonogram wdrożenia aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Opis procedur testowych i wyników przeprowadzonych testów to kluczowy element dokumentacji testów aplikacji. Tego rodzaju dokumentacja obejmuje szczegółowe instrukcje dotyczące metod testowania, użytych narzędzi oraz kroków niezbędnych do przeprowadzenia testów jednostkowych, integracyjnych i systemowych. W dokumentacji znajdują się również raporty z wynikami testów, które wskazują, czy aplikacja działa zgodnie z wymaganiami oraz jakie błędy zostały wykryte. Testy pozwalają na wczesne wychwycenie problemów i eliminację błędów przed wdrożeniem aplikacji na produkcję, co znacząco zwiększa jakość oprogramowania. Dokumentacja testowa jest także nieocenionym źródłem informacji dla zespołów QA (Quality Assurance), umożliwiając śledzenie historii testów i zapewnienie, że wszystkie elementy aplikacji zostały przetestowane zgodnie z procedurami.

Pytanie 17

Jaką wartość przyjmie etykieta label po wykonaniu poniższego kodu, gdy zostanie on uruchomiony po naciśnięciu przycisku w aplikacji?

private void Button_click(object sender, routedEventArgs e) {
    int tmp = 0;
    for (int i=0; i<=100; i+=2) {
        tmp += i;
    }
    label.Content = tmp;
}
A. suma liczb z przedziału od 0 do 100
B. liczby z przedziału od 0 do 100
C. liczby parzyste z przedziału od 0 do 100
D. suma liczb parzystych z przedziału od 0 do 100

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod, który został podany w pytaniu, wykorzystuje pętlę for do obliczenia sumy wszystkich liczb parzystych z przedziału od 0 do 100 włącznie. Zmienna tmp pełni tutaj rolę akumulatora, który z każdą iteracją powiększa swoją wartość o kolejną liczbę parzystą. Startujemy od zera, a dzięki i+=2 pętla przechodzi tylko przez liczby parzyste (0, 2, 4, ..., 100). To bardzo typowy sposób, żeby wyliczyć sumę konkretnego zbioru liczb – w tym przypadku parzystych z określonego zakresu. Moim zdaniem warto zauważyć, że takie podejście świetnie sprawdza się w prostych kalkulatorach, prostych analizach danych czy nawet w grach, gdzie czasem trzeba sumować tylko wybrane wartości. W praktyce, szczególnie w większych projektach, lepiej opakować takie operacje w osobne metody lub korzystać np. z funkcji agregujących LINQ w C#. Ale zasada jest ta sama – najpierw określamy, co konkretnie chcemy sumować (tutaj: liczby parzyste), a potem realizujemy to w pętli. Ten fragment kodu jest też niezłym przykładem, jak optymalnie można przechodzić przez dane, jeśli nie musimy analizować wszystkich możliwych wartości (tutaj: wystarczy co drugi krok). Takie sumowanie przydaje się w pracy z raportami, zestawieniami i w miejscach, gdzie liczy się wydajność przetwarzania danych.

Pytanie 18

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

<StackLayout Orientation="Vertical">
  <Label Text="Fotograf" />
  <Image Source="obraz.jpg" Aspect="AspectFill" />
  <StackLayout Orientation="Horizontal">
    <Button Text="Like" />
    <Button Text="Share" />
  </StackLayout>
  <Label Text="Fotka z moich wakacji" />
</StackLayout>
A. obraz znajduje się po lewej stronie, a pozostałe elementy po prawej
B. tekst "Fotograf" znajduje się po prawej stronie obrazu
C. przyciski są ustawione poziomo obok siebie
D. elementy: tekst, obraz, przycisk Like, przycisk Share, tekst są ułożone jeden pod drugim

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W analizowanym kodzie XAML widzimy, że element <StackLayout> z atrybutem Orientation="Horizontal" zawiera przyciski <Button> z tekstami "Like" i "Share". W XAML, stosując stack layout z orientacją poziomą, elementy w nim zawarte są umieszczane obok siebie w rzędzie. To sprawia, że przyciski "Like" i "Share" są widoczne na interfejsie użytkownika ułożone poziomo, zgodnie z tym, co jest opisane w poprawnej odpowiedzi. Użycie StackLayout z orientacją poziomą to często spotykana praktyka w projektowaniu interfejsów, gdy chcemy zorganizować elementy w rzędzie, na przykład przyciski na pasku narzędzi. Zrozumienie tego mechanizmu jest istotne, ponieważ pozwala na efektywne zarządzanie przestrzenią w aplikacjach mobilnych i webowych, gdzie dostępne miejsce może być ograniczone. Praktyczne zastosowanie takiego układu można zobaczyć na przykład w projektowaniu formularzy, gdzie grupujemy elementy w logiczny sposób, ułatwiając użytkownikowi interakcję z aplikacją. Dobre praktyki w projektowaniu interfejsów użytkownika zalecają, aby układ elementów był intuicyjny i zgodny z oczekiwaniami użytkowników, co StackLayout z orientacją poziomą doskonale realizuje w wielu przypadkach.

Pytanie 19

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

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success');
  }, 1000);
});

promise
  .then(res => {
    console.log(res);
    return 'first then';
  })
  .then(res => {
    console.log(res);
  });
A. first then, success
B. success, first then
C. first then
D. success

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Podany kod JavaScript korzysta z obietnic (Promises), co jest nowoczesnym podejściem do zarządzania asynchronicznością w JavaScript. W momencie, gdy tworzymy nową obietnicę, wykorzystujemy funkcję `setTimeout`, która po 1 sekundzie wywołuje metodę `resolve`, przekazując tekst 'success'. To jest pierwszy krok, w którym obietnica zostaje spełniona. Następnie, w łańcuchu `then`, pierwsza funkcja `then` przyjmuje wynik obietnicy, czyli 'success', loguje go na konsolę, a następnie zwraca nowy tekst 'first then'. Druga funkcja `then` odbiera ten wynik i również go loguje. W rezultacie na konsoli pojawią się kolejno: 'success' oraz 'first then'. Taki sposób tworzenia łańcuchów obietnic jest zgodny z najlepszymi praktykami programowania asynchronicznego w JavaScript, ponieważ pozwala na czytelniejsze i bardziej zrozumiałe zarządzanie kodem asynchronicznym, eliminując złożoność związaną z tzw. „callback hell”. Warto zaznaczyć, że obietnice mogą być stosowane do radzenia sobie z żądaniami sieciowymi, operacjami na plikach czy innymi długotrwałymi procesami, co czyni je niezbędnym narzędziem w nowoczesnym programowaniu webowym.

Pytanie 20

Kod XAML zaprezentowany powyżej zostanie wyświetlony jako:

Ilustracja do pytania
A. B
B. A
C. D
D. C

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrałeś dokładnie taką odpowiedź, jaką powinien wskazać każdy, kto dobrze rozumie XAML i układ StackLayout. Zobacz, co tu się dzieje: dwa pola Entry wyświetlają się jedno pod drugim, co daje klasyczną strukturę formularza – najpierw pole "Imię", potem "Nazwisko". Dalej mamy StackLayout z orientacją poziomą (Horizontal), więc etykieta "Zgoda RODO" oraz przełącznik Switch pojawiają się obok siebie – to bardzo typowy sposób na prezentację zgody na coś w aplikacjach, bo nie ma sensu rozdzielać tego na dwie linie. Po nich pojawia się Slider z ustawionym Value na 0.5 i kolorami MinimumTrackColor oraz MaximumTrackColor, czyli dokładnie tak jak widać na obrazku – jeden kolor po lewej, drugi po prawej i kółko pośrodku. Na końcu jest Button "Zapisz". Moim zdaniem, taki układ to wręcz klasyka budowy prostych formularzy w aplikacjach mobilnych opartych na XAML. Swoją drogą, to świetny przykład, jak StackLayout pozwala na szybkie i czytelne układanie elementów na ekranie, bez zbędnego komplikowania interfejsu. W praktyce warto jeszcze pamiętać, że oddzielenie pól Entry podnosi czytelność, a stosowanie układów poziomych sprawdza się wtedy, gdy chcesz, żeby użytkownik od razu widział etykietę i jej kontrolkę. Widać tu też dbałość o kolory i spójność wizualną. Według mnie, warto od razu testować takie formularze na różnych urządzeniach, bo StackLayout zachowuje się przewidywalnie, ale warto mieć na uwadze responsywność – no i nie zapomnij, że Slider i Switch mają swoje domyślne wartości, które można łatwo sterować z kodu.

Pytanie 21

Jak określa się proces, w trakcie którego klasa przejmuje właściwości innej klasy w programowaniu obiektowym?

A. Abstrakcja
B. Dziedziczenie
C. Hermetyzacja
D. Polimorfizm

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dziedziczenie to kluczowa cecha programowania obiektowego (OOP), która pozwala jednej klasie (klasie pochodnej) przejmować cechy i zachowania innej klasy (klasy bazowej). Dzięki dziedziczeniu można wielokrotnie wykorzystywać kod, co prowadzi do większej modularności i zmniejszenia redundancji. Dziedziczenie umożliwia rozszerzanie funkcjonalności klas bazowych poprzez dodawanie nowych metod lub modyfikowanie istniejących, bez konieczności ingerencji w oryginalny kod. Przykład w C++: `class Pojazd { ... }; class Samochod : public Pojazd { ... };` – `Samochod` dziedziczy wszystkie publiczne i chronione (protected) elementy klasy `Pojazd`.

Pytanie 22

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

Ilustracja do pytania
A. 5
B. 8
C. 7
D. 6

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Warunek 'n < 7' będzie sprawdzany dokładnie 6 razy. To dlatego, że w klasycznej pętli for czy while liczba powtórzeń jest zawsze o jeden mniejsza niż wartość graniczna. Jak widzisz, w takich schematach liczba porównań idzie w parze z liczbą iteracji, a pętla zatrzymuje się, jak tylko warunek zostanie spełniony.

Pytanie 23

Który fragment kodu ilustruje zastosowanie rekurencji?

Blok 1:
int fn(int a) {
  if(a==1) return 1;
  return fn(a-1)+2;
}
Blok 2:
int fn(int a) {
  if(a==1) return 1;
  return (a-1)+2;
}
Blok 3:
int fn(int a) {
  if(a==1) return 1;
  return fun(a-1)+2;
}
Blok 4:
int fn(int a) {
  if(a==1) return 1;
  return 2;
}
A. Blok 1
B. Blok 2
C. Blok 4
D. Blok 3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Blok 1 to typowy przykład rekurencji, czyli sytuacji, gdy funkcja wywołuje samą siebie z innym argumentem (tutaj fn(a-1)). Takie podejście pojawia się w programowaniu bardzo często, szczególnie przy rozwiązywaniu problemów, gdzie rozwiązanie można rozbić na mniejsze, podobne zadania. W Bloku 1 mamy tzw. przypadek bazowy (if(a==1) return 1), czyli moment, w którym dalsza rekurencja się zatrzymuje – bez tego każdy program rekurencyjny skończyłby się przepełnieniem stosu i błędem. Moim zdaniem, dobrze rozumiana rekurencja to jedna z podstaw algorytmiki – spotyka się ją choćby przy obliczaniu silni, ciągu Fibonacciego czy w algorytmach przeszukiwania struktur drzewiastych, np. w operacjach na drzewach binarnych. W praktyce branżowej warto wiedzieć, że rekurencja bywa bardzo elegancka i skraca kod, ale trzeba ją stosować z głową – łatwo przekroczyć limity stosu przy zbyt głębokim wywołaniu albo zapomnieć o przypadku bazowym, przez co program nie kończy działania. W standardach wielu języków (np. C, Java) rekurencja jest narzędziem jak każde inne, ale zawsze powinna być projektowana z myślą o czytelności i efektywności rozwiązania. Często spotykam się z sytuacją, gdzie początkujący próbują wszystko rozwiązywać rekurencyjnie, a to nie zawsze jest optymalne – niektóre problemy lepiej rozwiązać iteracyjnie, choćby ze względu na wydajność. W tym konkretnym kodzie zastosowanie rekurencji jest klasyczne i poprawne, więc zdecydowanie jest to dobry wzór do nauki.

Pytanie 24

W zaprezentowanym kodzie stworzono abstrakcyjną klasę figura oraz klasę prostokąta, która dziedziczy po niej, zawierającą zdefiniowane pola i konstruktory. Wskaż minimalną wersję implementacji sekcji /* metody klasy */ dla klasy Prostokat:

abstract class Figura
{
    abstract double Pole();
    abstract double Obwod();
}

public class Prostokat extends Figura
{
    private double a;
    private double b;

    ... /* Konstruktory */
    ... /* Metody klasy */
}
AB
public double Pole() {
    return a * b;
}

public double Obwod() {
    return 2*a + 2*b;
}
public double Pole() {
    return a * b;
}
CD
public double LiczPole()
{
    return a * b;
}

public double LiczObwod()
{
    return 2*a + 2*b;
}
abstract double Pole()
{
    return a * b;
}

abstract double LiczObwod()
A. D
B. B
C. C
D. A

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tej sytuacji odpowiedź A to zdecydowanie najlepszy wybór. Dlaczego? Klasa Prostokat dziedziczy po abstrakcyjnej Figurze, która wymusza zaimplementowanie dwóch metod abstrakcyjnych: Pole() oraz Obwod(). W Javie (bo składnia sugeruje właśnie ją), jeżeli klasa nie zaimplementuje wszystkich metod abstrakcyjnych odziedziczonych po klasie abstrakcyjnej, sama musi być oznaczona jako abstract, a tu przecież Prostokat ma być konkretną klasą. Wersja A pokazuje dokładnie te dwie metody, z odpowiednimi nazwami, typami zwracanymi i poprawną logiką obliczeń: pole prostokąta to a * b, a obwód to 2*a + 2*b. Taki sposób pisania jest zgodny ze sztuką programowania obiektowego – spełniamy wymagania kontraktu narzuconego przez klasę bazową, implementujemy tylko to, co jest wymagane i w taki sposób, by użytkownik klasy mógł od razu wykorzystywać instancję Prostokata do obliczeń. Takie podejście bardzo ułatwia późniejsze rozbudowywanie projektu i współpracę z innymi programistami, bo każdy od razu wie, że Pole() i Obwod() są częścią wspólnego interfejsu wszystkich Figur. Moim zdaniem, w realnych projektach często się z czymś takim spotyka – jeśli tylko mamy dziedziczenie po klasie abstrakcyjnej, zawsze trzeba pamiętać o tych narzuconych metodach. Warto też zauważyć, że brak zbędnych dodatków – np. nadmiarowych metod czy zmienionych nazw – minimalizuje szansę na pomyłki i nieporozumienia w zespole. Tak w praktyce robi się solidną, czytelną bazę pod hierarchię figur geometrycznych.

Pytanie 25

Jakie jest oznaczenie komentarza wieloliniowego w języku Java?

A. /* ... */
B. """ ... """
C. // ... //
D. <!-- ... -->

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Komentarze wieloliniowe w języku Java zapisuje się właśnie w taki sposób: /* ... */. Taki zapis pozwala na umieszczenie kilku linii tekstu między znakami otwierającym /* i zamykającym */, które kompilator całkowicie ignoruje podczas tłumaczenia kodu. Z mojego doświadczenia to jest najwygodniejsza forma, kiedy trzeba wyłączyć większy fragment kodu – np. część algorytmu, której chwilowo nie chcemy wykonywać lub większy blok dokumentacji. Bardzo często używa się komentarzy wieloliniowych przy pisaniu tzw. docstringów, choć w Javie do dokumentacji API lepiej stosować komentarze JavaDoc z podwójnym ukośnikiem i gwiazdką (/** ... */), ale zwykłe /* ... */ są super uniwersalne – czy to na zajęciach, czy w dużych projektach zespołowych. Moim zdaniem, jeśli uczysz się Javy, warto pamiętać, żeby nie mieszać komentarzy wieloliniowych z jednoliniowymi (// ...), bo to czasem prowadzi do zamieszania, szczególnie przy większych refaktoryzacjach. Co ciekawe, takie same komentarze znajdziesz też w C czy C++, więc jak ktoś zna te języki, to szybko się odnajdzie. W sumie to prosta sprawa, ale zdziwiłbyś się ile osób próbuje stosować inne formaty, które działają w zupełnie innych technologiach. No i jeszcze taka drobna uwaga z praktyki: nigdy nie wstawiaj komentarza wieloliniowego wewnątrz innego; Java tego nie obsługuje i kompilator się pogubi.

Pytanie 26

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

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

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 27

Jakie są cechy testów interfejsu?

A. Analizują wydajność aplikacji w czasie rzeczywistym
B. Ulepszają kod aplikacji
C. Sprawdzają prawidłowość pracy elementów graficznych oraz interakcji użytkownika z aplikacją
D. Weryfikują zgodność aplikacji z przepisami prawnymi

Brak odpowiedzi na to pytanie.

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

Pytanie 28

Który z wymienionych poniżej przykładów ilustruje użycie systemu informatycznego w działalności gospodarczej?

A. System sterowania ruchem miejskim
B. System nawigacji GPS
C. System wentylacji
D. E-sklep

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
E-sklep, jako przykład zastosowania systemu informatycznego w działalności biznesowej, reprezentuje złożony ekosystem technologiczny, który umożliwia przedsiębiorstwom sprzedaż produktów i usług w Internecie. E-sklepy wykorzystują różnorodne technologie, takie jak systemy zarządzania treścią (CMS), bazy danych oraz systemy płatności, co pozwala na efektywne zarządzanie ofertą, realizację zamówień oraz obsługę klienta. Przykładem może być platforma Shopify, która oferuje funkcjonalności umożliwiające łatwe tworzenie i zarządzanie sklepem online. E-sklepy są zgodne z różnymi standardami, takimi jak PCI DSS, które zapewniają bezpieczeństwo transakcji płatniczych. Dzięki integracji z systemami analitycznymi, właściciele e-sklepów mogą śledzić zachowania użytkowników, co pozwala na optymalizację oferty oraz strategii marketingowej. Tego rodzaju rozwiązania informatyczne fundamentalnie zmieniają sposób, w jaki przedsiębiorstwa prowadzą działalność i komunikują się z klientami, czyniąc procesy bardziej wydajnymi i zautomatyzowanymi.

Pytanie 29

Który z dokumentów stosowanych w metodologii Agile zawiera listę funkcjonalności produktu uporządkowanych według ich ważności?

A. Diagram Gantta
B. Harmonogram projektu
C. Product backlog
D. Backlog sprintu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Product backlog to dokument zawierający listę funkcjonalności produktu uporządkowanych według priorytetów. Jest to jedno z głównych narzędzi w metodykach Agile, szczególnie w Scrumie, gdzie backlog stanowi podstawę do planowania sprintów. Zawiera on wszystkie elementy, które muszą zostać zaimplementowane, w tym nowe funkcje, poprawki błędów oraz zadania techniczne. Priorytety są ustalane przez właściciela produktu (Product Ownera) i dostosowywane na bieżąco w zależności od zmieniających się wymagań i potrzeb biznesowych. Dzięki backlogowi zespół może skupić się na dostarczaniu najważniejszych funkcji, co pozwala na szybkie reagowanie na feedback i rozwój aplikacji zgodnie z oczekiwaniami klienta.

Pytanie 30

Który z poniższych formatów plików jest używany do konfiguracji projektów Node.js?

A. node.config
B. package.json
C. settings.ini
D. config.xml

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź 'package.json' jest prawidłowa, ponieważ jest to kluczowy plik konfiguracyjny w projektach Node.js. Zawiera on metadane dotyczące projektu, takie jak nazwa, wersja, autorzy, zależności oraz skrypty do uruchamiania różnych zadań związanych z projektem. Na przykład, sekcja 'dependencies' w tym pliku pozwala na zdefiniowanie zewnętrznych bibliotek, które są wymagane do działania aplikacji. Gdy użytkownik uruchamia polecenie 'npm install', system automatycznie instaluje wszystkie zależności określone w 'package.json'. Dodatkowo, plik ten pozwala na łatwe zarządzanie wersjami i aktualizacjami, co jest zgodne z dobrymi praktykami w zarządzaniu projektami oprogramowania, zapewniając lepszą kontrolę nad środowiskiem deweloperskim. Użycie 'package.json' jest standardem w ekosystemie Node.js, co czyni go niezbędnym dla każdego dewelopera pracującego w tym środowisku.

Pytanie 31

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

A. testy kompatybilności
B. testy jednostkowe
C. testy wydajnościowe
D. testy wdrożeniowe

Brak odpowiedzi na to pytanie.

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

Pytanie 32

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

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

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 33

Programista może wykorzystać framework Angular do realizacji aplikacji

A. mobilnej
B. typu front-end
C. desktopowej
D. typu back-end

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Angular to naprawdę fajny framework, stworzony przez Google, który głównie skupia się na tworzeniu aplikacji webowych po stronie klienta, czyli na front-endzie. Umożliwia programistom tworzenie dynamicznych i interaktywnych interfejsów użytkownika. Dzięki tej modularnej budowie, można łatwo zarządzać różnymi częściami aplikacji, co jest super przydatne. Z własnego doświadczenia mogę powiedzieć, że Angular świetnie nadaje się do aplikacji jednoekranowych (SPA), bo pozwala na ładowanie danych asynchronicznie. Przykładem może być aplikacja do zarządzania projektami, gdzie użytkownik może dodawać, edytować i usuwać zadania bez przeładowywania strony. Angular integruje się też z RxJS, co sprawia, że zarządzanie zdarzeniami i strumieniami danych staje się efektywniejsze. Warto również dodać, że Angular CLI pozwala szybko generować komponenty i inne elementy aplikacji, co przyspiesza cały proces tworzenia i pomaga utrzymać spójność projektu.

Pytanie 34

Który wzorzec projektowy jest najlepszy do zarządzania tworzeniem obiektów?

A. Adapter
B. Decorator
C. Observer
D. Factory Method

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy Factory Method jest kluczowym rozwiązaniem w kontekście zarządzania tworzeniem obiektów. Jego głównym celem jest oddzielenie procesu tworzenia obiektów od ich używania, co zwiększa elastyczność i łatwość w rozszerzaniu aplikacji. Factory Method pozwala na definiowanie interfejsu do tworzenia obiektów, ale pozostawia decyzję o tym, które klasy instancjonować, pod kontrolą podklas. Dzięki temu można łatwo wprowadzać nowe typy obiektów bez modyfikowania kodu klienckiego. Przykładem zastosowania tego wzorca może być system zarządzania dokumentami, gdzie różne typy dokumentów (np. PDF, DOCX) są tworzone przez różne fabryki, ale użycie tych obiektów odbywa się w jednolity sposób. W praktyce stosowanie wzorca Factory Method wspiera zasady SOLID, w szczególności zasadę otwartego-zamkniętego, co sprzyja utrzymywaniu i rozwijaniu systemu zgodnie z najlepszymi praktykami inżynierii oprogramowania.

Pytanie 35

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

A. 70 lat od zgonu autora
B. Bezterminowo
C. 75 lat od daty powstania utworu
D. 50 lat od chwili pierwszej publikacji utworu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Podstawowy czas trwania autorskich praw majątkowych w Unii Europejskiej wynosi 70 lat od śmierci autora. Oznacza to, że przez ten okres twórca lub jego spadkobiercy mają wyłączne prawo do korzystania z utworu i czerpania z niego korzyści finansowych. Po upływie tego czasu dzieło przechodzi do domeny publicznej i może być swobodnie wykorzystywane przez każdego, bez konieczności uzyskania zgody. Długość ochrony praw autorskich została ujednolicona w ramach przepisów UE, aby zagwarantować spójność w całej wspólnocie i wspierać ochronę kultury oraz dziedzictwa narodowego.

Pytanie 36

Jakie znaczenie ma deklaracja zmiennej w programowaniu?

A. Określenie typu oraz nazwy zmiennej w kodzie programu
B. Stworzenie nowej wartości w bazie danych
C. Zarezerwowanie miejsca w pamięci dla wyników operacji arytmetycznych
D. Przypisanie zmiennej wartości domyślnej

Brak odpowiedzi na to pytanie.

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

Pytanie 37

Jakie środki ochrony zbiorowej najlepiej chronią kręgosłup w warunkach pracy biurowej?

A. Korzystanie z regulowanych krzeseł i biurek
B. Regulowanie poziomu oświetlenia w biurze
C. Umieszczanie monitorów na wysokości oczu
D. Ograniczenie hałasu w pomieszczeniu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Używanie regulowanych foteli i biurek to jeden z najlepszych sposobów na zapobieganie problemom z kręgosłupem w pracy biurowej. Ergonomiczne fotele pozwalają na dostosowanie wysokości siedziska, podparcia lędźwiowego oraz kąta nachylenia oparcia, co zapewnia optymalne wsparcie dla kręgosłupa i zmniejsza ryzyko bólu pleców. Regulowane biurka umożliwiają zmianę pozycji pracy – z siedzącej na stojącą – co redukuje obciążenie kręgosłupa i poprawia krążenie krwi. Ergonomia stanowiska pracy to kluczowy element profilaktyki zdrowotnej, który minimalizuje ryzyko dolegliwości związanych z długotrwałą pracą w jednej pozycji.

Pytanie 38

Które z wymienionych atrybutów klasy mogą być dostępne wyłącznie w obrębie tej klasy oraz jej klas potomnych?

A. Public
B. Protected
C. Private
D. Static

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator `protected` pozwala na dostęp do pól i metod klasy w ramach tej samej klasy oraz w klasach dziedziczących. Jest to pośredni poziom dostępu między `private` i `public`. Pola `protected` są ukryte przed innymi klasami spoza hierarchii dziedziczenia, ale pozostają dostępne w klasach pochodnych. Dzięki temu dziedziczenie staje się bardziej elastyczne, umożliwiając klasom potomnym korzystanie z chronionych elementów klasy bazowej. Przykład w C++: `class Pojazd { protected: int predkosc; }`. Klasy dziedziczące po `Pojazd` mogą używać `predkosc`, ale obiekty nie mają bezpośredniego dostępu do tego pola.

Pytanie 39

Jaką rolę odgrywa pamięć operacyjna (RAM) w komputerowym systemie?

A. Tymczasowe magazynowanie danych i instrukcji dla procesora
B. Zarządzanie transferem danych pomiędzy urządzeniami wejścia/wyjścia
C. Umożliwienie tworzenia kopii zapasowej danych użytkownika
D. Trwałe przechowywanie systemu operacyjnego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pamięć operacyjna, znana jako RAM (Random Access Memory), odgrywa kluczową rolę w funkcjonowaniu systemu komputerowego. Jej głównym zadaniem jest tymczasowe przechowywanie danych i instrukcji, które są niezbędne dla procesora w trakcie wykonywania programów. Kiedy uruchamiamy aplikację, jej kod oraz dane są ładowane z pamięci masowej (np. dysku twardego) do pamięci RAM, co umożliwia szybki dostęp do nich przez procesor. Dzięki dużej prędkości działania pamięć operacyjna znacząco przyspiesza procesy obliczeniowe, ponieważ operacje na danych przechowywanych w RAM są wielokrotnie szybsze niż na danych znajdujących się na dysku twardym. Współczesne komputery często wyposażone są w kilka gigabajtów pamięci RAM, co pozwala na efektywne zarządzanie wieloma uruchomionymi aplikacjami jednocześnie. Standardy takie jak DDR4 i DDR5 określają nie tylko wydajność, ale również szybkość przesyłania danych, co ma kluczowe znaczenie w kontekście wydajności systemu komputerowego. W efekcie, pamięć operacyjna jest niezbędna do płynnego działania systemu operacyjnego oraz aplikacji, a jej pojemność i szybkość mają bezpośredni wpływ na ogólną wydajność komputera.

Pytanie 40

Który z poniższych elementów UI umożliwia graficzną nawigację pomiędzy różnymi sekcjami aplikacji?

A. Przycisk opcji
B. Obszar tekstowy
C. Rozwijana lista
D. Menu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pasek menu to kluczowy element interfejsu użytkownika, który umożliwia wizualną nawigację pomiędzy różnymi sekcjami aplikacji. Paski menu są powszechnie stosowane w aplikacjach desktopowych i mobilnych, ponieważ pozwalają na szybki dostęp do różnych funkcji oraz ustawień. Dzięki ich hierarchicznej strukturze użytkownicy mogą łatwo odnaleźć potrzebne narzędzia i opcje, co zwiększa intuicyjność i wygodę korzystania z aplikacji.