Wyniki egzaminu

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

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

W jakiej sytuacji wykorzystanie stosu będzie korzystniejsze niż lista podczas projektowania zestawu danych?

A. Gdy ważne jest szybkie znajdowanie elementów
B. Gdy chcemy usunąć element z końca
C. Gdy kolejność przetwarzania danych jest odwrócona (LIFO)
D. Gdy dane muszą być uporządkowane

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Stos to struktura danych działająca na zasadzie LIFO (Last In First Out), co oznacza, że ostatni dodany element jest przetwarzany jako pierwszy. Jest to niezwykle efektywne rozwiązanie w przypadkach, gdy dane muszą być przetwarzane w odwrotnej kolejności niż były dodane. Stos jest szeroko wykorzystywany w implementacji algorytmów rekurencyjnych, obsłudze wywołań funkcji oraz w systemach zarządzania historią (np. w przeglądarkach internetowych lub edytorach tekstu). Stos zapewnia szybki dostęp do ostatnio dodanych danych i efektywne zarządzanie pamięcią, co czyni go niezastąpionym w wielu aplikacjach informatycznych.

Pytanie 2

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

console.log(0.1 + 0.2 === 0.3);
console.log(0.1 + 0.2);
A. true, 0.3
B. false, 0.3
C. true, 0.30000000000000004
D. false, 0.30000000000000004

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wynik wyrażenia `0.1 + 0.2` w JavaScript nie jest równy `0.3` ze względu na sposób reprezentacji liczb zmiennoprzecinkowych w pamięci komputera. W programowaniu, liczby zmiennoprzecinkowe są przechowywane zgodnie z normą IEEE 754, co prowadzi do drobnych błędów zaokrągleń. W przypadku `0.1` oraz `0.2` ich suma w rzeczywistości daje wynik `0.30000000000000004`, co jest nieco większe niż `0.3`. Z tego powodu, porównując `0.1 + 0.2` z `0.3`, otrzymujemy `false`. To zjawisko ilustruje potrzebę ostrożności przy porównywaniu wartości zmiennoprzecinkowych i zachęca do używania metod porównawczych, które uwzględniają tolerancję błędu, takich jak `Math.abs(a - b) < epsilon`, gdzie `epsilon` to bardzo mała liczba. W praktyce, zrozumienie tych zasad jest kluczowe dla zapobiegania błędom w obliczeniach finansowych czy innych zastosowaniach wymagających wysokiej precyzji.

Pytanie 3

Co to jest CSS Grid?

A. Format plików graficznych obsługiwany przez CSS3
B. Dwuwymiarowy system układu elementów na stronie opary na siatkach
C. Biblioteka komponentów wizualnych dla aplikacji webowych
D. Metoda optymalizacji plików CSS dla lepszej wydajności strony

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CSS Grid to nowoczesny, dwuwymiarowy system układu elementów na stronie internetowej, który umożliwia projektantom i deweloperom łatwe i elastyczne tworzenie skomplikowanych układów. Dzięki CSS Grid możemy definiować zarówno kolumny, jak i wiersze, co pozwala na precyzyjne umieszczanie elementów w kontekście całego układu. Przykładem zastosowania CSS Grid może być stworzenie responsywnej galerii zdjęć, gdzie można łatwo zmieniać liczbę kolumn w zależności od szerokości ekranu. CSS Grid jest zgodny z najnowszymi standardami W3C i stał się kluczowym elementem w nowoczesnym web designie. Dzięki właściwościom takim jak grid-template-areas, grid-template-columns, czy grid-auto-rows, projektanci mogą w intuicyjny sposób organizować treści, co poprawia zarówno estetykę, jak i użyteczność stron. Ponadto, korzystanie z CSS Grid pozwala na zmniejszenie zależności od zewnętrznych bibliotek JavaScript do układania elementów, co podnosi wydajność i usprawnia proces tworzenia stron.

Pytanie 4

W sekcji, która odpowiada za obsługę wyjątku wygenerowanego przez aplikację, należy to zdefiniować

A. catch
B. try
C. finally
D. throw

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sekcja catch jest dokładnie tą częścią bloku obsługi wyjątków, która przechwytuje wyjątki wygenerowane w sekcji try. Moim zdaniem to podstawowa rzecz, którą musi znać każdy programista, bo obsługa wyjątków to codzienność, zwłaszcza jak pracuje się z zewnętrznymi bibliotekami czy systemami operacyjnymi. W praktyce catch pozwala nam napisać kod, który zareaguje na konkretne typy błędów, np. wyświetli komunikat użytkownikowi albo zapisze log do pliku. Warto też pamiętać o dobrych praktykach – nie łap wszystkich wyjątków jednym ogólnym catch, bo łatwo wtedy ukryć poważniejsze błędy. Lepiej tworzyć osobne sekcje catch dla różnych typów wyjątków. Przykład z życia: kiedy czytasz plik z dysku, może wystąpić FileNotFoundException lub IOException – można wtedy każdy z tych przypadków obsłużyć osobno. Standardy programowania, zwłaszcza w językach takich jak Java czy C#, wyraźnie zalecają stosowanie catch do obsługi określonych i przewidywalnych wyjątków, a nie do łapania wszystkiego na ślepo. Fajnie też podkreślić, że w niektórych językach catch może przyjmować różne formy, np. except w Pythonie, ale logika pozostaje podobna. Cały blok try-catch sprawia, że program jest bardziej odporny na nieoczekiwane sytuacje – dla mnie to podstawa solidnego kodu.

Pytanie 5

Wskaż fragment kodu, który wykreuje przedstawioną kontrolkę?

Ilustracja do pytania
A. Kod1
B. Kod3
C. Kod2
D. Kod4

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiednim kodem do wygenerowania przedstawionej kontrolki jest Kod3 który korzysta z klasy RatingBar w Androidzie. RatingBar to bardzo przydatny element interfejsu użytkownika pozwalający użytkownikom na ocenę w skali gwiazdek. W tym przypadku RatingBar posiada atrybut android:rating ustawiony na 2.5 co oznacza że kontrolka wyświetli dwie pełne gwiazdki i jedną połowę co odpowiada przedstawionej grafice. Dodatkowo atrybut android:progressTint ustawiony na #4682B4 zmienia kolor gwiazdek na niebieski. Użycie RatingBar jest standardową praktyką w aplikacjach mobilnych dla zbierania opinii użytkowników. Ważne jest aby pamiętać że RatingBar może być konfigurowany do obsługi różnych wartości minimalnych i maksymalnych oraz do dostosowywania wyglądu za pomocą stylów i tematów. Dobrym zwyczajem jest dbanie o czytelność i intuicyjność interfejsu co osiąga się m.in. przez odpowiednie oznaczanie i rozmieszczanie kontrolek takich jak RatingBar.

Pytanie 6

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. liczby z przedziału od 0 do 100
B. suma liczb z przedziału od 0 do 100
C. suma liczb parzystych z przedziału od 0 do 100
D. liczby parzyste 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 7

W jakiej topologii sieciowe wszystkie urządzenia są bezpośrednio powiązane z każdym innym?

A. Topologia pierścienia
B. Topologia gwiazdy
C. Topologia siatki
D. Topologia magistrali

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Topologia siatki to jedna z najbardziej wydajnych i wszechstronnych struktur sieciowych, w której każde urządzenie (węzeł) jest połączone bezpośrednio z każdym innym węzłem. Tego typu topologia zapewnia wysoką dostępność i odporność na awarie, ponieważ awaria jednego połączenia nie wpływa na komunikację pozostałych węzłów. W praktyce ma to zastosowanie w dużych, zaawansowanych sieciach komputerowych, takich jak sieci miejskie (MAN) czy sieci szerokopasmowe. Istnieją dwie główne formy topologii siatki: siatka pełna, gdzie każde urządzenie ma bezpośrednie połączenia z wszystkimi innymi, oraz siatka częściowa, gdzie nie wszystkie węzły są ze sobą bezpośrednio połączone, ale komunikacja jest możliwa przez inne węzły. Topologia siatki, z uwagi na swoje zalety, jest często wykorzystywana w standardach sieciowych, takich jak Ethernet, oraz w systemach rozproszonych, gdzie kluczowe są niezawodność i efektywność przesyłania danych. Dodatkowo, w kontekście Internetu rzeczy (IoT), topologia siatki umożliwia efektywne zarządzanie dużą liczbą urządzeń, co jest kluczowe w inteligentnych miastach i automatyzacji domowej.

Pytanie 8

Które z wymienionych narzędzi nie znajduje zastosowania w tworzeniu aplikacji desktopowych?

A. Przeglądarka internetowa
B. Kompilator
C. Debugger
D. Edytor graficzny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Przeglądarka internetowa nie jest narzędziem wykorzystywanym bezpośrednio w procesie tworzenia aplikacji desktopowych. Chociaż może służyć do przeszukiwania dokumentacji lub testowania aplikacji webowych, jej funkcjonalność nie wspiera bezpośredniego tworzenia aplikacji desktopowych. W tworzeniu aplikacji desktopowych kluczowe są narzędzia takie jak kompilatory, debugery i edytory kodu. Kompilatory przekształcają kod źródłowy na kod wykonywalny, debugery pozwalają na śledzenie błędów, a edytory kodu umożliwiają pisanie i edytowanie aplikacji.

Pytanie 9

Który z wymienionych frameworków służy do budowy aplikacji webowych w C#?

A. Angular
B. ASP.NET Core
C. Django
D. React.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
ASP.NET Core to nowoczesny, wydajny i skalowalny framework opracowany przez Microsoft, który jest przeznaczony do budowy aplikacji webowych w języku C#. ASP.NET Core umożliwia tworzenie dynamicznych stron internetowych, API oraz aplikacji mikroserwisowych. Jego modularność i wsparcie dla kontenerów (Docker) oraz chmury sprawiają, że jest to jeden z najczęściej wybieranych frameworków w środowiskach enterprise. ASP.NET Core obsługuje zarówno aplikacje serwerowe, jak i aplikacje klient-serwer, a dzięki technologii Razor Pages i Blazor pozwala na budowanie aplikacji, w których logika biznesowa jest ściśle zintegrowana z warstwą prezentacji. Dodatkowo ASP.NET Core oferuje wbudowane mechanizmy do zarządzania tożsamością użytkowników, autoryzacji i autentykacji, co czyni go doskonałym wyborem do tworzenia aplikacji biznesowych oraz korporacyjnych.

Pytanie 10

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

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

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 11

Jedną z dolegliwości, która pojawia się u programistów w wyniku długotrwałego korzystania z myszki komputerowej lub klawiatury, objawiającą się bólami, drętwieniem oraz zaburzeniami czucia w obszarze 1-3 palca dłoni jest

A. Dyskopatia
B. kifoza
C. zespól cieśni kanału nadgarstka
D. zespół suchego oka

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Zespół cieśni kanału nadgarstka to schorzenie, które powstaje w wyniku ucisku na nerw pośrodkowy w kanale nadgarstka. Jest to wąski tunel utworzony przez kości nadgarstka oraz więzadła, przez który przechodzą ścięgna oraz nerwy odpowiedzialne za czucie i ruch w dłoni. Objawy zespołu cieśni kanału nadgarstka obejmują bóle, drętwienie oraz zaburzenia czucia, szczególnie w obszarze pierwszych trzech palców ręki. Praca z myszą komputerową i klawiaturą przez długi czas, szczególnie w niewłaściwej ergonomicznej pozycji, może prowadzić do nadmiernego obciążenia i zapalenia tkanek otaczających nerw pośrodkowy. W praktyce, osoby cierpiące na to schorzenie często skarżą się na problemy z chwytaniem przedmiotów, a także na osłabienie siły uchwytu. W leczeniu zespołu cieśni kanału nadgarstka zaleca się m.in. unikanie czynników przyczynowych, stosowanie ortez, fizjoterapię oraz w niektórych przypadkach leczenie chirurgiczne. Należy również zwrócić uwagę na ergonomię stanowiska pracy, co może znacząco zredukować ryzyko wystąpienia tej dolegliwości. Zarządzanie czasem spędzanym przy komputerze oraz regularne przerwy są kluczowe w prewencji tego schorzenia.

Pytanie 12

W pokazanych fragmentach kodu zdefiniowano funkcję o nazwie fun1. W tej funkcji należy zaimplementować obsługę. Fragment kodu interfejsu użytkownika (XAML):

<RadioButton Content="opcja1" />
<RadioButton Content="opcja2" />
<Button Content="OK" Width=75 Click="fun1"/>
Fragment kodu logiki programu (C#):
private void fun1(object sender, RoutedEventArgs e) { ... }
A. inicjacji elementów interfejsu użytkownika
B. usunięcia kontrolek z pamięci RAM
C. naciśnięcia przycisku zatwierdzającego dialog
D. aplikacji po wystąpieniu zdarzenia utraty fokusu przez pole opcji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Obsługa zdarzeń związanych z przyciskami zatwierdzającymi dialogi jest kluczową częścią interakcji użytkownika z aplikacją. W wielu środowiskach programistycznych, takich jak JavaScript, C# czy Java, przyciski te wywołują funkcje obsługi zdarzeń (event handlers), które mogą walidować dane, przetwarzać informacje lub wykonywać inne działania po naciśnięciu przycisku. Implementacja funkcji obsługującej przycisk jest nieodzowna w aplikacjach graficznych, gdzie interakcja z użytkownikiem wymaga dynamicznego reagowania na jego działania. Dzięki temu aplikacje stają się bardziej interaktywne i responsywne, co zwiększa komfort użytkownika i poprawia ogólną użyteczność oprogramowania.

Pytanie 13

W którym przypadku algorytm sortowania bąbelkowego działa z optymalną wydajnością?

A. Dla tablicy z dużą liczbą powtórzeń
B. Dla tablicy losowej
C. Dla tablicy uporządkowanej rosnąco
D. Dla tablicy uporządkowanej malejąco

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Algorytm sortowania bąbelkowego działa z optymalną wydajnością w przypadku, gdy tablica jest już posortowana rosnąco. W takiej sytuacji algorytm wykona jedynie jedno przejście przez tablicę, bez konieczności dokonywania zamian, co sprawia, że jego złożoność wynosi O(n). To znacząco zwiększa jego efektywność w przypadku niemal posortowanych danych, choć nadal pozostaje mniej wydajny niż algorytmy takie jak QuickSort czy MergeSort dla dużych zbiorów. Sortowanie bąbelkowe jest jednak łatwe do zrozumienia i implementacji, co czyni je popularnym narzędziem edukacyjnym.

Pytanie 14

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.

Pytanie 15

Jaka będzie zawartość zmiennej filteredItems po wykonaniu poniższego kodu?

const items = [
  { id: 1, name: 'phone', price: 500 },
  { id: 2, name: 'laptop', price: 1000 },
  { id: 3, name: 'tablet', price: 750 }
];

const filteredItems = items.filter(item => item.price > 600)
                          .map(item => item.name);
A. ['laptop', 'tablet', 'phone']
B. ['phone']
C. [{id: 2, name: 'laptop', price: 1000}, {id: 3, name: 'tablet', price: 750}]
D. ['laptop', 'tablet']

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Zmienna filteredItems zawiera tylko te elementy, których cena jest większa niż 600. W tym przypadku w tablicy items mamy trzy obiekty: 'phone' z ceną 500, 'laptop' z ceną 1000 oraz 'tablet' z ceną 750. Funkcja filter przeszukuje tablicę items i zwraca tylko te obiekty, które spełniają warunek price > 600, co daje nam 'laptop' oraz 'tablet'. Następnie, metoda map przekształca te obiekty w tablicę ich nazw, co skutkuje finalnym wynikiem ['laptop', 'tablet']. Takie podejście do filtrowania danych i mapowania ich na inne wartości jest niezwykle przydatne w programowaniu, szczególnie w pracy z danymi, gdzie często potrzebujemy wyodrębnić i przekształcić dane w bardziej użyteczne formy. Użycie metod filter i map jest zgodne z najlepszymi praktykami w JavaScript i przyczynia się do bardziej czytelnego oraz zwięzłego kodu.

Pytanie 16

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 17

Która z wymienionych kart graficznych oferuje lepszą wydajność w grach komputerowych?

A. AMD Radeon RX 580 - 8GB GDDR5, 256-bit
B. Intel UHD Graphics 630 - zintegrowana
C. AMD Radeon R7 240 - 2GB GDDR5, 64-bit
D. NVIDIA GeForce GTX 1050 Ti - 4GB GDDR5, 128-bit

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
AMD Radeon RX 580 to karta graficzna, która zapewnia wyższą wydajność w grach komputerowych w porównaniu do innych wymienionych opcji. Wyposażona w 8GB pamięci GDDR5 oraz 256-bitową szynę danych, karta ta jest w stanie obsługiwać bardziej złożone tekstury oraz większe rozdzielczości. Jej architektura Polaris pozwala na lepsze zarządzanie energią oraz wydajność w grach, co czyni ją idealnym wyborem dla graczy. Dzięki obsłudze technologii DirectX 12 i Vulkan, RX 580 jest w stanie wykorzystać najnowsze osiągnięcia w dziedzinie grafiki, co przekłada się na wyższą jakość obrazu oraz płynność animacji. Przykłady gier, w których RX 580 sprawdza się najlepiej to 'Far Cry 5' czy 'Shadow of the Tomb Raider', gdzie karta umożliwia granie w wysokich ustawieniach graficznych z zachowaniem wysokiej liczby klatek na sekundę. Standardy, takie jak PCIe 3.0, zapewniają pełną kompatybilność z nowoczesnymi płytami głównymi, co czyni tę kartę doskonałym wyborem dla entuzjastów gier komputerowych.

Pytanie 18

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

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

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 19

Jakie jest podstawowe zastosowanie wzorca projektowego Singleton?

A. Szybsza komunikacja pomiędzy obiektami
B. Tworzenie wielu instancji obiektu na podstawie klasy
C. Zapewnienie jednej instancji obiektu w aplikacji
D. Optymalizacja pamięci poprzez dziedziczenie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy Singleton jest jednym z najbardziej rozpoznawalnych wzorców w świecie programowania obiektowego. Jego głównym celem jest zapewnienie istnienia dokładnie jednej instancji danej klasy w całej aplikacji, co jest kluczowe w sytuacjach, gdy posiadanie wielu instancji mogłoby prowadzić do problemów z synchronizacją lub niepożądanymi skutkami w stanach programu. Singleton jest często stosowany w kontekście zarządzania zasobami, takimi jak połączenia z bazą danych, gdzie jednoczesne posiadanie wielu połączeń może prowadzić do nieefektywnego wykorzystania zasobów. Wzorzec ten jest również używany do implementowania globalnych punktów dostępu, co umożliwia centralne zarządzanie pewnymi zasobami lub stanami w aplikacji. Z punktu widzenia dobrych praktyk, ważne jest, aby Singleton był zaimplementowany w sposób bezpieczny dla wątków, aby uniknąć problemów z wyścigami, które mogą wystąpić, gdy wiele wątków próbuje jednocześnie utworzyć instancję Singletona. Stosowanie Singletona może wprowadzać pewne ograniczenia w testowaniu jednostkowym, z uwagi na jego globalny charakter, jednak odpowiednia konstrukcja kodu, na przykład poprzez wstrzykiwanie zależności, może pomóc w zachowaniu elastyczności testowania.

Pytanie 20

Co to jest dokumentacja instruktażowa programu?

A. Kolekcją testów jednostkowych oraz ich wyników
B. Instrukcją opisującą, jak używać funkcji programu
C. Dokumentem przedstawiającym plany rozwoju oprogramowania
D. Zbiorem szczegółów technicznych dotyczących kodu źródłowego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Instrukcja wyjaśniająca, jak korzystać z funkcji programu, to podstawowy element dokumentacji pomocy programu. Tego rodzaju dokumentacja jest skierowana do użytkowników końcowych i zawiera opisy interfejsu, funkcji oraz dostępnych narzędzi. Instrukcja użytkownika może obejmować zrzuty ekranu, filmy instruktażowe oraz FAQ (często zadawane pytania), co ułatwia szybkie wdrożenie w obsługę aplikacji. Celem dokumentacji pomocy jest nie tylko wyjaśnienie podstawowych funkcji programu, ale także zwiększenie komfortu użytkownika i minimalizacja problemów związanych z obsługą oprogramowania. Przejrzysta i dobrze napisana instrukcja wpływa na pozytywne doświadczenia użytkowników, redukując liczbę zgłoszeń do działu wsparcia technicznego.

Pytanie 21

Który z poniższych nie jest typem danych w języku JavaScript?

A. String
B. Integer
C. Boolean
D. Object

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W języku JavaScript typ danych Integer nie istnieje jako osobny typ. JavaScript używa jednego, uniwersalnego typu numerycznego, który reprezentuje zarówno liczby całkowite, jak i zmiennoprzecinkowe. Wszystkie liczby w JavaScript, niezależnie od tego, czy są to całkowite wartości, czy wartości dziesiętne, są przechowywane jako liczby typu Number. Dla programistów oznacza to, że operacje matematyczne na różnych typach liczb są prostsze, ponieważ nie muszą martwić się o konwersje między typami. Na przykład, jeśli zdefiniujesz zmienną `let x = 5;` i `let y = 10.5;`, możesz bez przeszkód wykonywać operacje takie jak `let suma = x + y;`, która poprawnie zwróci `15.5`. Warto zauważyć, że JavaScript nie obsługuje typów liczbowych takich jak Integer czy Float bezpośrednio, co może być interesującym zagadnieniem, na które warto zwrócić uwagę przy projektowaniu aplikacji. Dzięki temu, JavaScript jest bardziej elastyczny w kontekście różnych operacji matematycznych, stosując zasady IEEE 754 dla liczb zmiennoprzecinkowych.

Pytanie 22

Co to jest wskaźnik w języku C?

A. Typ danych do zapisywania tekstów
B. Funkcja do dynamicznej alokacji pamięci
C. Zmienna przechowująca adres pamięci
D. Zmienna przechowująca wartość logiczną

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wskaźnik w języku C to zmienna przechowująca adres pamięci innej zmiennej. Umożliwia bezpośrednią manipulację pamięcią, co czyni wskaźniki niezwykle potężnym narzędziem w programowaniu niskopoziomowym. Dzięki wskaźnikom można dynamicznie alokować pamięć, przekazywać duże struktury danych do funkcji bez ich kopiowania oraz implementować struktury danych, takie jak listy, drzewa czy grafy. Wskaźniki umożliwiają także iterowanie po tablicach i efektywne zarządzanie zasobami systemowymi, co czyni je kluczowym elementem w programowaniu systemowym.

Pytanie 23

Które z wymienionych stanowi przykład struktury dziedziczenia?

A. Klasa Pojazd ma dziedziczenie od klasy Samochód
B. Klasa Pojazd nie dziedziczy z żadnej klasy
C. Klasa Samochód i Pojazd nie są ze sobą powiązane
D. Klasa Samochód ma dziedziczenie od klasy Pojazd

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Hierarchia dziedziczenia to struktura klas, w której klasa pochodna dziedziczy właściwości i metody klasy bazowej. Klasa 'Samochód' dziedzicząca po klasie 'Pojazd' jest przykładem prawidłowej hierarchii dziedziczenia – klasa 'Samochód' rozszerza klasę 'Pojazd', dziedzicząc ogólne właściwości pojazdu, takie jak prędkość czy typ silnika. Dziedziczenie umożliwia rozszerzanie istniejącej funkcjonalności bez konieczności przepisywania tego samego kodu, co jest jednym z fundamentów programowania obiektowego.

Pytanie 24

Jaką cechę powinien posiadać dobry negocjator?

A. spokój
B. przechwalanie się
C. myślenie tylko o sobie
D. brak pewności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Cechą dobrego negocjatora jest opanowanie, które odgrywa kluczową rolę w procesie negocjacji. Osoba potrafiąca zachować spokój w trudnych sytuacjach może lepiej ocenić sytuację, zrozumieć potrzeby drugiej strony oraz zidentyfikować potencjalne punkty konfliktu. Opanowanie pozwala na skuteczne zarządzanie emocjami, co jest niezbędne w celu osiągnięcia korzystnych rezultatów. Przykładem może być sytuacja, w której negocjator musi zmierzyć się z agresywnym przeciwnikiem; zachowanie zimnej krwi pozwala na analizę sytuacji bez emocjonalnych impulsów. Ponadto, opanowanie wpływa na postrzeganie osoby negocjującej przez innych, budując zaufanie i respekt. W kontekście standardów negocjacyjnych, takich jak BATNA (Best Alternative to a Negotiated Agreement), opanowanie umożliwia lepsze podejmowanie decyzji w trudnych sytuacjach. Dlatego umiejętność zachowania spokoju jest fundamentem skutecznych negocjacji.

Pytanie 25

Wskaż fragment kodu, który stanowi realizację przedstawionego algorytmu w języku C++.

Kod 1
do {
  suma = suma + i;
} while (suma <= liczba);
cout << suma;
Kod 2
if (suma <= liczba) {
  suma = suma + i;
  i++;
}
else
  cout << suma;
Kod 3
for (i = suma; i <= liczba; i++)
  suma = suma + i;
else
  cout << suma;
Kod 4
while (suma <= liczba) {
  suma = suma + i;
  i++;
}
cout << suma;
Ilustracja do pytania
A. kod 2
B. kod 3
C. kod 1
D. kod 4

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrałeś fragment kodu, który faktycznie odwzorowuje logikę schematu blokowego: najpierw sprawdzamy warunek suma <= liczba, a dopiero gdy jest spełniony, wchodzimy do pętli, dodajemy i do zmiennej suma, inkrementujemy licznik i i wracamy do ponownego sprawdzenia warunku. To jest klasyczne zastosowanie pętli while, czyli sytuacji, kiedy nie znamy liczby iteracji z góry, ale wiemy, kiedy mamy skończyć – w tym wypadku, gdy suma przekroczy wartość graniczną liczba. Z mojego doświadczenia właśnie tak wygląda typowy fragment kodu sumujący kolejne liczby naturalne, dopóki nie zostanie osiągnięty limit. Ważne jest też to, że instrukcja wypisania wyniku znajduje się dopiero za pętlą, więc zostanie wykonana dokładnie raz, po zakończeniu obliczeń, co idealnie zgadza się z blokiem pisz suma na schemacie. W dobrych praktykach programistycznych zawsze pilnujemy, żeby warunek pętli dokładnie odpowiadał opisowi w algorytmie, a modyfikacja zmiennych sterujących, takich jak suma i i, była wykonywana wewnątrz pętli w spójny sposób. Taka konstrukcja jest potem łatwa w utrzymaniu, przeniesieniu do innych języków czy modyfikacji, na przykład można bez problemu zmienić warunek na suma < liczba albo dodać dodatkowe sprawdzenie, czy i nie rośnie za szybko. W praktycznych projektach, np. przy obliczaniu sum kontrolnych, limitów budżetowych, punktów gracza w grze, dokładnie taki wzorzec while warunek, obliczenia, inkrementacja, wypisz wynik pojawia się naprawdę często.

Pytanie 26

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

A. FF
B. 100
C. EF
D. FE

Brak odpowiedzi na to pytanie.

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

Pytanie 27

Który typ testów jest wykonywany na pojedynczych komponentach lub funkcjach w izolacji?

A. Testy systemowe
B. Testy akceptacyjne
C. Testy integracyjne
D. Testy jednostkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy jednostkowe to podstawowy rodzaj testów, które koncentrują się na weryfikacji pojedynczych komponentów lub funkcji aplikacji w izolacji. Ich celem jest upewnienie się, że dany element kodu działa zgodnie z oczekiwaniami. Przykładowo, jeśli mamy funkcję, która oblicza sumę dwóch liczb, test jednostkowy sprawdzi, czy ta funkcja poprawnie zwraca wynik dla różnych zestawów danych wejściowych. Zastosowanie testów jednostkowych jest kluczowe w nowoczesnym programowaniu, ponieważ pozwala na szybkie wykrywanie błędów na wczesnym etapie rozwoju oprogramowania. Dzięki nim można również łatwiej wprowadzać zmiany w kodzie, gdyż mając pewność, że pojedyncze komponenty działają prawidłowo, można modyfikować całą aplikację bez obaw o wprowadzenie nowych błędów. W praktyce, testy jednostkowe są często zautomatyzowane i stanowią integralną część ciągłej integracji (CI), co pozwala na szybkie i efektywne testowanie kodu przy każdej zmianie. Dobre praktyki w zakresie testów jednostkowych obejmują pisanie testów przed właściwą implementacją kodu (tzw. TDD - Test Driven Development) oraz stosowanie odpowiednich narzędzi, takich jak JUnit dla Javy czy NUnit dla .NET.

Pytanie 28

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. kubełkowego
B. przez scalanie
C. bąbelkowego
D. przez zliczanie

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 29

Co to jest Event Loop w JavaScript?

A. System zarządzania cyklem życia komponentów w Angular
B. Protokół komunikacji między różnymi częściami aplikacji webowej
C. Technika obsługi zdarzeń w aplikacjach React
D. Mechanizm pozwalający na asynchroniczne wykonywanie kodu mimo jednowątkowej natury JavaScript

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Event Loop w JavaScript to kluczowy mechanizm, który umożliwia asynchroniczne wykonywanie kodu mimo jednowątkowej natury tego języka. JavaScript działa w jednym wątku, co oznacza, że może wykonywać jedną operację w danym czasie. Event Loop pozwala jednak na zarządzanie operacjami asynchronicznymi, takimi jak wywołania API czy operacje na danych, które mogą trwać dłużej. Dzięki temu, zamiast czekać na zakończenie tych operacji, kod może kontynuować wykonywanie innych zadań. W praktyce, gdy operacja asynchroniczna kończy się, jej wynik jest umieszczany w kolejce do przetworzenia, a Event Loop zajmuje się ich przetwarzaniem, kiedy główny wątek jest dostępny. To podejście sprawia, że aplikacje webowe są bardziej responsywne, ponieważ nie blokują interfejsu użytkownika podczas oczekiwania na zakończenie długoterminowych zadań. Dobrą praktyką jest zrozumienie działania Event Loop, ponieważ pozwala to na efektywniejsze zarządzanie asynchronicznością w kodzie JavaScript, co jest niezwykle istotne w przypadku rozwijania nowoczesnych aplikacji webowych.

Pytanie 30

Co to jest SPA (Single Page Application)?

A. Technika optymalizacji kodu w aplikacjach JavaScript
B. Metoda projektowania interfejsu użytkownika dla aplikacji mobilnych
C. Format pliku używany w aplikacjach do przetwarzania danych
D. Aplikacja webowa działająca na jednej stronie, dynamicznie aktualizująca treść bez przeładowywania całej strony

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Single Page Application (SPA) to typ aplikacji internetowej, która działa na jednej stronie, umożliwiając dynamiczne ładowanie treści bez konieczności przeładowania całej witryny. W tradycyjnych aplikacjach webowych, każda interakcja użytkownika, która wymagała zmiany treści, wiązała się z odświeżeniem strony. W przypadku SPA, korzysta się z technologii takich jak AJAX, WebSockets czy API, co pozwala na asynchroniczne pobieranie danych z serwera. Przykłady SPA to popularne frameworki i biblioteki, takie jak React, Angular czy Vue.js. Dzięki tym technologiom, użytkownicy mogą doświadczyć płynniejszego i bardziej responsywnego interfejsu. Dobrą praktyką w projektowaniu SPA jest stosowanie wzorców projektowych, takich jak MVC (Model-View-Controller), co ułatwia zarządzanie kodem oraz jego modułowość. SPA są szczególnie przydatne w aplikacjach wymagających intensywnej interakcji, takich jak platformy e-commerce czy aplikacje społecznościowe, gdzie kluczowa jest szybkość i komfort użytkowania.

Pytanie 31

Która z poniższych informacji o pojęciu obiekt jest prawdziwa?

A. obiekt pozwala na zdefiniowanie klasy
B. obiekt jest instancją klasy
C. obiekt oraz klasa są identyczne
D. obiekt to typ złożony

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prawidłowo, obiekt w programowaniu obiektowym to konkretny egzemplarz, czyli instancja klasy. Wyobraź sobie klasę jako przepis (np. instrukcja budowy samochodu), a obiekt to już gotowy samochód wyprodukowany według tej instrukcji. W praktyce, kiedy definiujesz klasę w języku takim jak Java, C++ czy Python, tworzysz pewnego rodzaju szablon opisujący, co dany obiekt będzie mógł robić (metody) i jakie będzie miał dane (pola/atrybuty). Dopiero utworzenie instancji tej klasy, czyli wywołanie np. new Car(), powoduje, że powstaje prawdziwy, działający obiekt, z którym możesz coś zrobić – na przykład ustawić mu kolor, zapalić światła czy uruchomić silnik. Z mojego doświadczenia wynika, że właśnie rozróżnienie klasy i obiektu pozwala pisać kod bardziej uniwersalny i czytelny. W dobrych praktykach, na przykład zgodnie z zasadami SOLID, klasa powinna być zrozumiała i opisująca pewien spójny koncept, zaś obiekty powstające na jej podstawie mogą zachowywać się różnie zależnie od wprowadzonych danych. To podejście jest fundamentem programowania nowoczesnych aplikacji, bo pozwala łatwo zarządzać złożonością, testować kod i rozwijać projekty. Warto też pamiętać, że instancja klasy może mieć swój własny, unikalny stan, co odróżnia ją od samej definicji klasy. Bez tworzenia obiektów klasy nie mają praktycznego zastosowania – to właśnie obiekty wykonują zadania w programie.

Pytanie 32

Który z wymienionych mechanizmów pozwala na monitorowanie stanu użytkownika w trakcie sesji w aplikacji internetowej?

A. HTTP Headers
B. Sesje (Sessions)
C. CSS Selectors
D. HTML Forms

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sesje (sessions) to mechanizm wykorzystywany w aplikacjach webowych do śledzenia stanu użytkownika podczas sesji przeglądania. Sesje umożliwiają przechowywanie danych użytkownika na serwerze przez określony czas i identyfikowanie go za pomocą unikalnego identyfikatora (session ID), który jest zwykle przechowywany w ciasteczkach. Mechanizm sesji pozwala na implementację logowania, koszyków zakupowych oraz innych funkcji, które wymagają zachowania stanu między żądaniami HTTP. Sesje są kluczowe dla aplikacji wymagających autoryzacji i autentykacji, ponieważ umożliwiają śledzenie działań użytkownika bez konieczności wielokrotnego logowania. Zastosowanie sesji w aplikacjach zwiększa bezpieczeństwo i poprawia komfort użytkowania, a także umożliwia personalizację treści w czasie rzeczywistym.

Pytanie 33

Ile kilobajtów (KB) znajduje się w jednym megabajcie (MB)?

A. 100
B. 1024
C. 10
D. 1000

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W informatyce jednostki pamięci są często używane do określenia pojemności danych. 1 megabajt (MB) równa się 1024 kilobajtom (KB) w systemie binarnym, który jest podstawowym systemem liczbowym używanym w komputerach. Wynika to z faktu, że komputery operują w systemie binarnym, gdzie wartości są potęgami liczby 2. Z definicji, 1 MB to 2 do potęgi 20 bajtów, co daje 1048576 bajtów. Kiedy dzielimy tę wartość przez 1024, otrzymujemy 1024 kilobajty. W praktyce, ta konwersja jest niezwykle istotna w kontekście zarządzania pamięcią oraz określania rozmiarów plików. Na przykład, przy pobieraniu plików z internetu, znając tę konwersję, można lepiej oszacować czas pobierania oraz zarządzanie przestrzenią dyskową. Warto również zauważyć, że niektóre systemy operacyjne i producenci sprzętu używają systemu dziesiętnego, w którym 1 MB to 1000 KB, co prowadzi do nieporozumień. Dlatego znajomość różnic między systemami binarnym i dziesiętnym jest kluczowa dla zrozumienia pojemności pamięci komputerowej i odpowiednich jednostek.

Pytanie 34

Przedstawione w filmie działania wykorzystują narzędzie

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

Jakie są różnice między konstruktorem a zwykłą metodą w klasie?

A. Konstruktor zawsze nosi tę samą nazwę co klasa i nie zwraca wartości
B. Konstruktor jest uruchamiany jedynie przez destruktor
C. Konstruktor można wywołać bez konieczności tworzenia obiektu
D. Konstruktor powinien zwracać jakąś wartość

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Konstruktor różni się od zwykłych metod klasy tym, że nosi taką samą nazwę jak klasa i nie zwraca żadnej wartości, nawet `void`. Konstruktor jest wywoływany automatycznie podczas tworzenia obiektu i nie można go wywołać ręcznie jak zwykłą metodę. Jego zadaniem jest inicjalizacja pól obiektu i przygotowanie go do działania. Przykład w C++: `class Samochod { public: Samochod() { marka = "Ford"; } }`. W przeciwieństwie do innych metod konstruktor nie wymaga deklaracji typu zwracanego, co jest jedną z jego najbardziej charakterystycznych cech.

Pytanie 36

Jakie stwierdzenie najlepiej tłumaczy cel podziału programu na funkcje (metody)?

A. Umożliwia skrócenie kodu przez eliminację wszelkich komentarzy
B. Gwarantuje automatyczną kompilację programu
C. Eliminuje potrzebę korzystania ze zmiennych globalnych
D. Ułatwia proces debugowania oraz ponowne wykorzystanie fragmentów kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dzielenie programu na funkcje (lub metody) jest jedną z kluczowych zasad programowania strukturalnego i obiektowego. Funkcje pozwalają na podzielenie dużych bloków kodu na mniejsze, łatwiejsze do zarządzania i ponownego wykorzystania fragmenty. Dzięki temu kod jest bardziej czytelny, zrozumiały i łatwiejszy do testowania. Ułatwia to także proces debugowania, ponieważ błędy można izolować w konkretnych funkcjach, zamiast przeszukiwać cały program. Ponadto funkcje umożliwiają wielokrotne używanie tego samego fragmentu kodu, co zwiększa efektywność i eliminuje konieczność powielania kodu, zmniejszając ryzyko błędów.

Pytanie 37

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. success
B. first then, success
C. first then
D. success, first then

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 38

Która z wymienionych właściwości odnosi się do klasy pochodnej?

A. Nie może być zastosowana w strukturze dziedziczenia
B. Nie ma możliwości dodawania nowych metod
C. Dziedziczy atrybuty i metody z klasy bazowej
D. Jest automatycznie usuwana po zakończeniu działania programu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Cechą klasy pochodnej jest dziedziczenie pól i metod z klasy bazowej, co oznacza, że klasa pochodna automatycznie uzyskuje dostęp do wszystkich publicznych i chronionych składowych klasy nadrzędnej. Dzięki temu programista może rozwijać i modyfikować funkcjonalność istniejących klas, tworząc bardziej wyspecjalizowane obiekty. Dziedziczenie to kluczowy mechanizm umożliwiający wielokrotne użycie kodu, co prowadzi do zmniejszenia duplikacji i zwiększenia efektywności w zarządzaniu projektem. Klasa pochodna może również nadpisywać metody klasy bazowej, dostosowując ich działanie do swoich specyficznych potrzeb.

Pytanie 39

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

A. C++
B. Objective-C
C. Java
D. C#

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
C# to język programowania szeroko stosowany w tworzeniu aplikacji desktopowych, w tym do budowy interfejsów użytkownika przy użyciu XAML. XAML (Extensible Application Markup Language) to język znaczników wykorzystywany w środowisku WPF (Windows Presentation Foundation) oraz UWP (Universal Windows Platform) do projektowania graficznych interfejsów użytkownika. C# i XAML doskonale się uzupełniają, pozwalając na tworzenie nowoczesnych, interaktywnych aplikacji desktopowych, w których logika (C#) jest oddzielona od warstwy wizualnej (XAML). Dzięki tej separacji możliwe jest szybkie prototypowanie i łatwa rozbudowa aplikacji, co czyni je preferowanym wyborem dla deweloperów pracujących w ekosystemie Microsoftu.

Pytanie 40

Zaprezentowany fragment kodu w języku C# tworzy hasło. Wskaż zdanie PRAWDZIWE dotyczące charakterystyki tego hasła:

var random = new Random();
string pulaZnakow = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";

int dlPuli = pulaZnakow.Length - 1;
char znak;
string wynik = "";

for(int i = 0; i < 8; i++)  {
    znak = pulaZnakow[random.Next(0, dlPuli)];
    wynik += znak;
}
A. Może zawierać małe i wielkie litery oraz cyfry
B. Może zawierać zarówno małe, jak i wielkie litery, cyfry oraz symbole
C. Ma co najmniej 8 znaków oraz zawiera małe i wielkie litery oraz cyfry
D. Jest maksymalnie 7-znakowe, co wynika z wartości zmiennej i

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Analizując podany fragment kodu, widać, że hasło generowane jest losowo z puli znaków, która zawiera małe i wielkie litery alfabetu łacińskiego oraz cyfry od 0 do 9. Nie znajdują się tam żadne znaki specjalne ani symbole, więc hasło nie może ich zawierać – to ważne z praktycznego punktu widzenia, bo często spotyka się wymagania dotyczące obecności symboli w bezpiecznych hasłach. Kod wykorzystuje pętlę for, która wykonuje się dokładnie 8 razy, czyli hasło ma zawsze 8 znaków – ani mniej, ani więcej. Z mojego doświadczenia wynika, że taki sposób generowania haseł jest dość powszechny w prostych aplikacjach, np. przy automatycznym tworzeniu kont użytkowników. Jednak warto pamiętać, że im bardziej zróżnicowana pula znaków, tym lepsze zabezpieczenie – tutaj ograniczamy się tylko do liter i cyfr. Z praktycznego punktu widzenia, takie losowe hasło trudno odgadnąć ręcznie, ale jest dość przewidywalne, jeśli ktoś zna algorytm i nie ma dodatkowych zabezpieczeń (np. cryptographically secure random number generator). W standardach bezpieczeństwa, np. OWASP, zaleca się uwzględnianie symboli i unikanie prostego Random do generowania haseł, bo można go przewidzieć, ale do nauki i zastosowań testowych taki kod jest całkiem w porządku. Hasło więc może zawierać małe i wielkie litery oraz cyfry – dokładnie jak głosi prawidłowa odpowiedź.