Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Które z poniższych narzędzi jest używane do statycznej analizy kodu JavaScript?

A. ESLint
B. Jest
C. Webpack
D. Babel
ESLint to narzędzie służące do statycznej analizy kodu JavaScript, które pomaga programistom w identyfikacji błędów, niezgodności z konwencjami kodowania oraz problemów z wydajnością. Jego główną zaletą jest możliwość dostosowania reguł analizy do indywidualnych potrzeb projektu, co czyni go bardzo elastycznym narzędziem. W praktyce, korzystając z ESLint, możesz skonfigurować reguły, które będą zintegrowane z twoim edytorem kodu, co pozwala na bieżąco otrzymywać informacje o problemach w kodzie. To znacznie poprawia jakość pisania kodu i przyspiesza proces code review. Ponadto, ESLint wspiera różne biblioteki i frameworki, takie jak React czy Vue, co czyni go uniwersalnym rozwiązaniem w ekosystemie JavaScript. Warto również zaznaczyć, że regularne stosowanie ESLint może pomóc zespołom programistycznym w utrzymaniu spójności kodu oraz ułatwia pracę nowym członkom zespołu, którzy mogą szybko zrozumieć zasady panujące w projekcie.

Pytanie 2

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

A. String
B. Integer
C. Boolean
D. Object
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 3

Jaką wartość dziesiętną reprezentuje liczba binarna 1010?

A. 12
B. 8
C. 10
D. 14
Liczba binarna 1010 to wartość dziesiętna, która wynosi 10. Aby dokonać konwersji liczby binarnej na system dziesiętny, należy zrozumieć, że każda cyfra w systemie binarnym reprezentuje potęgę liczby 2, zaczynając od prawej strony, gdzie najniższa pozycja ma wartość 2^0. W przypadku 1010, mamy następujące pozycje: 1 * 2^3 (co daje 8), 0 * 2^2 (co daje 0), 1 * 2^1 (co daje 2) oraz 0 * 2^0 (co daje 0). Sumując te wartości: 8 + 0 + 2 + 0, otrzymujemy 10. W praktyce konwersja z systemu binarnego na dziesiętny jest niezwykle przydatna w programowaniu i elektronice, gdzie liczby binarne są powszechnie stosowane. Przykładowo, w obliczeniach komputerowych oraz w projektowaniu układów cyfrowych, znajomość tych konwersji jest kluczowa. Odnosi się to również do standardów, takich jak IEEE 754, które definiują reprezentację liczb zmiennoprzecinkowych w formatach binarnych.

Pytanie 4

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. 11
B. 5
C. 2
D. 20
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 5

Jakiego rodzaju zmiennej użyjesz w C++, aby przechować wartość "true"?

A. bool
B. tekst
C. liczba całkowita
D. liczba zmiennoprzecinkowa
Typ danych 'bool' w języku C++ jest przeznaczony do przechowywania wartości 'true' lub 'false'. Deklaracja 'bool isReady = true;' to przykład poprawnego przypisania wartości logicznej do zmiennej. Typ boolean jest kluczowy w warunkach decyzyjnych, pętlach i operacjach porównawczych. W programowaniu typ 'bool' jest wykorzystywany do kontroli przepływu programu, obsługi wyjątków oraz sprawdzania poprawności danych. Użycie booleanów w kodzie zwiększa jego czytelność i pozwala na bardziej przejrzyste budowanie logiki aplikacji.

Pytanie 6

Który z operatorów w Pythonie umożliwia sprawdzenie, czy dany element należy do listy?

A. in
B. and
C. ==
D. is
Operator `in` w języku Python służy do sprawdzania, czy element należy do listy, zbioru, krotki lub innego obiektu iterowalnego. Przykład: `if 5 in lista` sprawdza, czy liczba 5 znajduje się w liście. Operator `in` jest niezwykle przydatny w przeszukiwaniu danych, a jego zastosowanie skraca kod i zwiększa jego czytelność. W Pythonie jest on szeroko stosowany do iteracji i filtrowania danych, co czyni go jednym z najbardziej intuicyjnych operatorów języka.

Pytanie 7

Jakie będą skutki wykonania podanego fragmentu kodu w języku C++?

vector <int> liczby;
for(int i=0; i<10; i++) {
    liczby.push_back(2*i);
}
A. Do tablicy liczby, na jej końcu, dodawane są nowe wartości.
B. Z tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej początku.
C. Do tablicy liczby, na jej początku, dodawane są nowe wartości.
D. Z tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej końca.
Kod, który został przedstawiony, pokazuje bardzo typowe zastosowanie kontenera std::vector w C++. Metoda push_back() dodaje nowy element zawsze na końcu wektora, co oznacza, że kolejne wywołania tej funkcji będą rozszerzać tablicę o nowe wartości w porządku dodawania. W tym konkretnym przykładzie do pustego wektora liczby, w każdej iteracji pętli for dodawana jest liczba będąca podwojeniem indeksu – czyli 0, 2, 4, 6, 8, aż do 18 włącznie (bo i przyjmuje wartości od 0 do 9). To bardzo przyjazny i intuicyjny sposób na dynamiczne rozbudowywanie zbioru danych bez konieczności martwienia się o ręczne zarządzanie rozmiarem tablicy, co w języku C++ jest częstym źródłem błędów w przypadku zwykłych tablic. Z mojego doświadczenia korzystanie z push_back() jest czymś absolutnie podstawowym w codziennej pracy programisty, zwłaszcza jeśli chodzi o szybkie prototypowanie czy operacje na listach wynikowych. Warto zwrócić uwagę, że vector zapewnia też wydajne zarządzanie pamięcią - automatycznie rezerwuje przestrzeń, a w razie potrzeby powiększa ją. Standard C++ promuje stosowanie kontenerów STL właśnie z uwagi na bezpieczeństwo i wygodę użytkowania, więc to rozwiązanie jest nie tylko poprawne, ale też zgodne z dobrymi praktykami. Często w praktyce spotyka się właśnie takie sekwencyjne dodawanie elementów do końca wektora, chociażby przy wczytywaniu danych z plików czy budowaniu dynamicznych struktur.

Pytanie 8

Jakie działanie wykonuje polecenie "git pull"?

A. Zachowuje zmiany w lokalnym repozytorium
B. Pobiera zmiany z zdalnego repozytorium i scala je z lokalnym
C. Tworzy nową gałąź w repozytorium
D. Eliminuje plik z repozytorium
'git commit' zapisuje zmiany w lokalnym repozytorium, ale nie synchronizuje ich zdalnie. 'git clone' kopiuje repozytorium zdalne do lokalnego systemu, ale jest używane na początku pracy z projektem. 'git pull' różni się od 'git push', które służy do przesyłania lokalnych zmian do repozytorium zdalnego, zamiast pobierania ich jak w przypadku 'git pull'.

Pytanie 9

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

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

Pytanie 10

Jakie informacje zawiera zestaw instrukcji (ISA) danego procesora?

A. Metodę obsługi pamięci podręcznej
B. Typy danych, które są trzymane w pamięci
C. Instrukcje, które procesor jest w stanie wykonać
D. Układ połączeń między procesorem a innymi elementami
Rodzaje danych, które są trzymane w pamięci, nie są bezpośrednio powiązane z zestawem instrukcji procesora. ISA skupia się bardziej na tym, co procesor może zrobić, a nie na tym, jak dane są zorganizowane w pamięci. Przechowywanie danych to bardziej kwestia zarządzania pamięcią, a nie samej architektury instrukcji. A jeśli chodzi o pamięć podręczną, to już całkiem inna sprawa, bo to dotyczy tego, jak przechowujemy i uzyskujemy dostęp do danych. W tym przypadku mówi się o algorytmach i strategiach, które działają w architekturze procesora, ale nie są częścią zestawu instrukcji. I jeszcze schemat połączeń między procesorem a innymi częściami komputera też nie wchodzi w skład ISA. To już dotyczy całej architektury systemu i tego, jak różne elementy, jak pamięć czy urządzenia wejścia/wyjścia, współpracują ze sobą. Wszystko to jest istotne dla działania systemu komputerowego, ale nie definiuje zestawu instrukcji, który jest kluczowy, żeby procesor mógł przetwarzać dane i robić obliczenia.

Pytanie 11

Zaprezentowany diagram ilustruje wyniki przeprowadzonych testów:

Informacje o stronie
Wyświetlenie po1.431 si
Pobieranie2.815 si
Całkowity czas wczytania4.395 si
Czas powtórnego wczytania1.609 si
Ilość przekierowań (wpisanego adresu)1i
Ilość żądań145i
Łącznie przesłane6.71 MBi
Pomijane przy powtórnym ładowaniu6.47 MB (96%)i
Rozmiar rzeczywisty8.29 MBi
A. ochrony
B. wydajnościowych
C. użyteczności
D. funkcjonalności
To właśnie są testy wydajnościowe – dokładnie takie parametry jak czasy ładowania, liczba żądań HTTP, rozmiar przesyłanych danych czy ilość przekierowań analizuje się w praktyce podczas oceny wydajności stron internetowych. Moim zdaniem ten typ testów jest absolutnie kluczowy w projektowaniu nowoczesnych aplikacji webowych, bo użytkownicy szybko rezygnują, jeśli strona się długo ładuje albo jest zbyt zasobożerna. W branży zwraca się obecnie ogromną uwagę na to, by strony były 'lekkie', szybkie i zoptymalizowane pod kątem przesyłu danych. Nawet Google premiuje szybkie serwisy w wynikach wyszukiwania, co niejeden programista już odczuł na własnej skórze. Testy wydajnościowe sprawdzają, jak aplikacja zachowuje się pod dużym obciążeniem i ile danych realnie pobierają użytkownicy. W praktyce polecam korzystać z narzędzi takich jak Google Lighthouse, WebPageTest czy nawet prosty DevTools w przeglądarce – pozwalają szybko wyłapać największe problemy z czasem ładowania. Warto też pamiętać, że optymalizacja wydajności to nie tylko lepsze wrażenia użytkownika, ale bardzo wymierne oszczędności na transferze i infrastrukturze. Dobry zwyczaj to cyklicznie monitorować te wskaźniki, nawet gdy wydaje się, że wszystko działa OK – bo sytuacja może się szybko zmienić po wdrożeniu nowych funkcjonalności lub zmianach w kodzie.

Pytanie 12

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

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

Pytanie 13

Jakie ma znaczenie "operacja wejścia" w kontekście programowania?

A. Wprowadzanie nowych funkcji do aplikacji
B. Zmiana wartości zmiennych globalnych
C. Przekazywanie danych do programu z zewnętrznych źródeł
D. Naprawianie błędów w kodzie aplikacji
Dodawanie nowych funkcji do programu to element programowania, ale nie jest to związane z operacją wejścia. Modyfikowanie wartości zmiennych globalnych to operacja na poziomie kodu, a nie proces wejścia danych. Usuwanie błędów w kodzie programu to etap debugowania, a nie operacja wejścia. Operacje wejścia koncentrują się na interakcji z użytkownikiem lub innymi źródłami danych, co odróżnia je od modyfikacji kodu czy zarządzania błędami.

Pytanie 14

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

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

Pytanie 15

Który z poniższych składników NIE jest konieczny do stworzenia klasy w C++?

A. Definicja funkcji członkowskich klasy
B. Definicja destruktora
C. Deklaracja atrybutów klasy
D. Zastosowanie słowa kluczowego class
Do utworzenia klasy w C++ nie jest wymagana definicja destruktora. Destruktor to specjalna metoda klasy, która jest wywoływana automatycznie w momencie zniszczenia obiektu, ale jego obecność jest opcjonalna. Klasy, które nie operują bezpośrednio na zasobach zewnętrznych, takich jak dynamiczna pamięć lub pliki, często nie potrzebują destruktora, ponieważ domyślny destruktor generowany przez kompilator jest wystarczający. Aby utworzyć klasę, wystarczy deklaracja pól i metod oraz użycie słowa kluczowego 'class'. To sprawia, że C++ pozwala na szybkie definiowanie prostych klas, które można później rozwijać w miarę potrzeby.

Pytanie 16

Jakie jest główne zadanie ochrony danych osobowych?

A. Zabezpieczenie danych osobowych przed nieautoryzowanym dostępem i ich wykorzystaniem
B. Gwarantowanie anonimowości dla internautów
C. Utrudnianie działalności organom ścigania
D. Udostępnianie danych osobowych w celach marketingowych
Ochrona danych osobowych przed nieuprawnionym dostępem i wykorzystaniem to podstawowy cel ochrony danych osobowych. Zasady ochrony prywatności, takie jak RODO (GDPR), zapewniają użytkownikom prawo do kontroli nad swoimi danymi i decydowania, kto może je przetwarzać. Firmy i organizacje muszą wdrażać środki techniczne oraz organizacyjne, aby zabezpieczyć dane przed wyciekiem, kradzieżą i nadużyciami. Przestrzeganie tych zasad nie tylko chroni jednostki, ale również buduje zaufanie klientów do przedsiębiorstw.

Pytanie 17

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

A. Testy integracyjne
B. Testy jednostkowe
C. Testy systemowe
D. Testy akceptacyjne
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 18

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest:

A. dostosowanie interfejsu użytkownika do różnych kategorii użytkowników
B. monitorowanie działań użytkownika oraz generowanie wyjątków
C. informowanie obiektów o modyfikacji stanu innych obiektów
D. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
Często można się pomylić, próbując „wymyślić” jakąś funkcjonalność, którą może realizować wzorzec Obserwator w aplikacji webowej. Jednak nie każda aktywność związana ze zmianami w systemie czy komunikacją między komponentami to domena właśnie tego wzorca. Z mojego doświadczenia, widzę że wiele osób myli obserwatora z mechanizmami monitorującymi zachowanie użytkownika, jak narzędzia do śledzenia kliknięć czy generowania wyjątków w reakcji na nietypowe akcje – tymczasem Obserwator nie służy do analityki lub obsługi logiki wyjątków. To raczej narzędzie do powiadamiania powiązanych obiektów o zmianach, które zachodzą w jednym z nich. Spotkałem się także z opinią, że wzorzec ten zarządza funkcjami synchronicznymi. W praktyce nie ma on nic wspólnego z zarządzaniem synchronicznością czy asynchronicznością kodu – sam jest neutralny względem tych aspektów. Synchroniczność lub asynchroniczność zależy raczej od implementacji (np. Promises, async/await, event loop), a nie od samego wzorca Obserwator. Jeszcze inny częsty błąd to utożsamianie tego wzorca z mechanizmami dostosowującymi interfejs użytkownika do różnych profili użytkowników. To już bardziej domena wzorców strategii, kompozycji lub nawet prostych warunków w kodzie. W skrócie: Obserwator to taki „kurier”, który informuje zainteresowanych, gdy coś się zmienia – i tylko tyle. Jak dla mnie, zrozumienie tej granicy pomaga uniknąć niepotrzebnych komplikacji w projektowaniu architektury aplikacji webowych.

Pytanie 19

Jakie jest główne zadanie portali społecznościowych?

A. Analiza rezultatów działalności gospodarczej
B. Zarządzanie handlem produktami i usługami
C. Tworzenie kopii zapasowych plików
D. Udostępnianie informacji i interakcja między użytkownikami
Główna funkcja portali społecznościowych polega na umożliwieniu użytkownikom tworzenia, udostępniania oraz wymiany treści, a także komunikacji w czasie rzeczywistym. Portale takie jak Facebook, Twitter czy Instagram pozwalają na interakcję poprzez posty, komentarze, polubienia oraz wiadomości prywatne. Użytkownicy mogą dzielić się zdjęciami, filmami, artykułami lub osobistymi przemyśleniami, co sprzyja budowaniu społeczności i nawiązywaniu relacji. Funkcjonalności te są zgodne z najlepszymi praktykami UX/UI, które kładą nacisk na intuicyjność i łatwość obsługi. W kontekście SEO, portale społecznościowe są także ważne ze względu na możliwość generowania ruchu na zewnętrzne strony internetowe poprzez linki i udostępnienia. Przykładem może być wykorzystanie platformy Instagram do promocji produktów, gdzie użytkownicy mogą kliknąć w linki do sklepu. Takie działania zwiększają widoczność marki w Internecie oraz angażują odbiorców, co jest kluczowe dla efektywnej strategii marketingowej.

Pytanie 20

Jaką wydajność posiada sieć, która przesyła 500 MB danych w czasie 10 sekund?

A. 50 Mbps
B. 40 Mbps
C. 500 Mbps
D. 400 Mbps
Przepustowość sieci to jeden z najważniejszych parametrów, który określa, jak szybko możemy przesyłać dane pomiędzy urządzeniami w danej infrastrukturze. W najprostszych słowach jest to ilość informacji, jaka może zostać przesłana w jednostce czasu, zazwyczaj wyrażana w bitach na sekundę (bps – bits per second). W praktyce często spotykamy skróty takie jak kbps, Mbps czy Gbps, oznaczające kolejno tysiące, miliony i miliardy bitów przesyłanych w ciągu sekundy. Aby poprawnie obliczyć przepustowość, musimy więc znać ilość przesyłanych danych oraz czas, w jakim ta transmisja się odbywa. W naszym przypadku mamy do czynienia z przesyłaniem 500 MB danych w ciągu 10 sekund. Pierwszym krokiem jest przeliczenie megabajtów (MB) na megabity (Mb), ponieważ przepustowość zawsze wyraża się w bitach. Warto przypomnieć, że 1 bajt to 8 bitów, dlatego 500 MB należy pomnożyć przez 8. W wyniku otrzymujemy 4000 megabitów (Mb). Kiedy już mamy dane w odpowiedniej jednostce, możemy przejść do drugiego kroku, czyli obliczenia przepustowości. Dzielimy 4000 megabitów przez 10 sekund, co daje 400 megabitów na sekundę (400 Mb/s). Wynik ten można również zapisać jako 400 Mbps, ponieważ obie formy zapisu oznaczają dokładnie to samo – megabity na sekundę. Ostatecznie można więc stwierdzić, że sieć, która przesyła 500 MB danych w 10 sekund, ma przepustowość 400 Mbps. To całkiem wysoki wynik, świadczący o bardzo dobrej jakości połączenia, typowej dla nowoczesnych sieci światłowodowych lub infrastruktury o dużej przepustowości. Warto też dodać, że przepustowość to nie to samo, co prędkość internetu widoczna w testach online – rzeczywista prędkość może być mniejsza z powodu opóźnień, strat pakietów czy ograniczeń sprzętowych. Mimo to, obliczenia te dobrze ilustrują, jak przeliczać jednostki i w prosty sposób określać, jak wydajna jest dana sieć.

Pytanie 21

Jaką funkcję pełnią okna dialogowe niemodalne?

A. zarządzania stanem aplikacji za pomocą systemów menu
B. prezentowania komunikatów, które wymagają potwierdzenia, aby kontynuować działanie aplikacji
C. zarządzania ustawieniami aplikacji, jako okno, które pozostaje widoczne na ekranie przez cały czas trwania aplikacji
D. wstrzymywania działania aplikacji w czasie wprowadzania oraz zatwierdzania danych
Okna dialogowe niemodalne, czasem zwane też oknami narzędziowymi albo pomocniczymi, to bardzo praktyczny element interfejsu użytkownika. To, co wyróżnia je spośród innych typów okien, to fakt, że użytkownik może korzystać równocześnie zarówno z tego okna, jak i z głównej aplikacji. Nie blokuje ono działania programu – wszystko jest dostępne w tym samym czasie. Najczęściej takie okna służą do zarządzania ustawieniami aplikacji albo wywoływania funkcji, które użytkownik może modyfikować na bieżąco, bez konieczności zamykania tego okna po każdej zmianie. Przykład z życia: paleta warstw w programach graficznych (np. GIMP czy Photoshop) albo okno stylów w edytorze tekstu. Dla mnie osobiście, taki model pracy jest dużo wygodniejszy niż korzystanie z okien modalnych, bo pozwala płynnie zmieniać ustawienia bez przerywania pracy. Dobrą praktyką w branży jest, żeby okna niemodalne nie zasłaniały kluczowych elementów interfejsu i były jasno oznaczone, by użytkownik wiedział, że może je w każdej chwili zamknąć, nie tracąc postępów. Takie podejście jest wręcz rekomendowane w wytycznych projektowania UX publikowanych przez Apple czy Microsoft (np. Human Interface Guidelines). Okna niemodalne są szczególnie ważne w aplikacjach wymagających ciągłego dostępu do narzędzi lub parametrów, np. edytorach grafiki, IDE czy programach CAD. Warto o tym pamiętać, projektując bardziej złożone systemy.

Pytanie 22

Jaką cechę powinien posiadać dobry negocjator?

A. brak pewności
B. przechwalanie się
C. spokój
D. myślenie tylko o sobie
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 23

Która z wymienionych reguł należy do netykiety?

A. Stosowanie nieformalnego języka w każdej rozmowie
B. Zaniechanie odpowiadania na wiadomości od innych użytkowników
C. Udostępnianie treści bez zgody właścicieli
D. Unikanie używania dużych liter w komunikacji
Pierwsza odpowiedź, dotycząca ignorowania wiadomości od innych użytkowników, jest całkowicie sprzeczna z duchem netykiety. Efektywna komunikacja w środowisku online zakłada aktywne uczestnictwo oraz reagowanie na wiadomości, co sprzyja budowaniu relacji oraz wspólnoty. Ignorowanie wiadomości może prowadzić do frustracji i poczucia odrzucenia, co jest niezgodne z podstawowymi zasadami współżycia w internecie. Kolejny aspekt dotyczy używania nieformalnego języka w każdej rozmowie. Choć wiele platform internetowych sprzyja luźniejszej komunikacji, to nie każda sytuacja wymaga takiego podejścia. W kontekście profesjonalnym czy w bardziej formalnych dyskusjach, nieformalny język może być źródłem nieporozumień oraz braku szacunku. Użycie właściwego tonu oraz formy jest istotne, aby zachować właściwy kontekst dyskusji. Ostatnia z niepoprawnych odpowiedzi, dotycząca publikowania treści bez zgody autorów, narusza podstawowe zasady etyki w internecie, w tym prawa autorskie. Publikowanie cudzych treści bez zgody jest nie tylko niezgodne z netykietą, ale również może prowadzić do konsekwencji prawnych. Szacunek dla pracy innych użytkowników oraz ich własności intelektualnej jest fundamentem zdrowych interakcji w sieci. W związku z powyższym, każda z wymienionych odpowiedzi nie wpisuje się w zasady netykiety, a ich stosowanie może prowadzić do negatywnych skutków w komunikacji online.

Pytanie 24

Który z wymienionych programów jest przeznaczony do zarządzania projektami przy pomocy tablic kanban?

A. Photoshop
B. Jira
C. Trello
D. Word
Trello to narzędzie do zarządzania projektami, które wykorzystuje tablice kanban do organizacji i monitorowania zadań. Użytkownicy mogą tworzyć karty reprezentujące poszczególne zadania, które następnie są przenoszone między kolumnami odzwierciedlającymi etapy realizacji. Dzięki swojej prostocie i intuicyjności Trello jest szeroko stosowane zarówno w małych zespołach, jak i dużych organizacjach. Umożliwia efektywne zarządzanie projektami, planowanie sprintów oraz monitorowanie bieżącego statusu prac. Tablice kanban pomagają wizualizować przepływ pracy, co ułatwia identyfikację wąskich gardeł i zarządzanie priorytetami.

Pytanie 25

Szablon MojaTablica oferuje funkcjonalność tablicy z indeksami oraz elementami różnych typów. W oparciu o pokazany kod, który wykorzystuje ten szablon do tworzenia tablicy asocjacyjnej, wskaż definicję, która posługuje się szablonem do zainicjowania tablicy, gdzie indeksami są liczby całkowite, a elementami są napisy?

MojaTablica tab1 = new MojaTablica<string, string>();
tab1["good"] = "dobry";
A. MojaTablica tab2 = new MojaTablica()
B. int tab2[] = new MojaTablica()
C. int tab2 = new MojaTablica()
D. MojaTablica tab2 = MOjaTablica()
Aby utworzyć tablicę asocjacyjną w oparciu o szablon, należy zainicjalizować ją przy użyciu właściwej składni: MojaTablica tab2 = new MojaTablica();. Tego typu deklaracja tworzy obiekt tablicy, gdzie klucze są liczbami całkowitymi, a wartości przechowywane w tablicy to napisy. Tablice asocjacyjne to potężne narzędzie pozwalające na szybkie wyszukiwanie i przechowywanie danych, bazujące na unikalnych kluczach, co umożliwia efektywne zarządzanie złożonymi strukturami danych.

Pytanie 26

Jednym z elementów, które mają zostać zaimplementowane w aplikacji, jest możliwość cofnięcia ostatnich działań do 20 operacji wstecz (undo). Struktura danych, która jest odpowiednia do tego celu i pozwala na dostęp tylko do ostatnio dodanego elementu, to:

A. kolejka
B. tablica
C. stos
D. drzewo
Kolejka to struktura danych działająca na zasadzie FIFO (First In, First Out), co oznacza, że pierwszy dodany element jest pierwszym, który zostaje usunięty. Tego rodzaju organizacja danych nie nadaje się do implementacji funkcji cofania, ponieważ nie umożliwia łatwego dostępu do ostatnich operacji. W kontekście aplikacji umożliwiającej cofnięcie działań, kolejka nie zaspokaja potrzeb użytkownika, gdyż nie pozwala na usunięcie najnowszej operacji. Drzewo, jako bardziej złożona struktura, jest używane głównie do organizacji danych w hierarchicznej formie. Chociaż drzewa mogą być skuteczne w wyszukiwaniu i porządkowaniu danych, nie są odpowiednie do realizacji funkcji cofania ostatnich operacji, ponieważ nie oferują prostego dostępu do ostatnio dodanych elementów. Wreszcie, tablica jest statyczną strukturą danych, która przechowuje elementy w sekwencyjnej kolejności. Mimo że można by używać tablicy do przechowywania operacji, ich ograniczenia dotyczące rozmiaru i elastyczności sprawiają, że są mniej efektywne w porównaniu do stosu w kontekście cofania operacji. W związku z tym, ani kolejka, ani drzewo, ani tablica nie są odpowiednimi wyborami dla funkcjonalności cofania w aplikacji, co czyni stos jedynym logicznym rozwiązaniem.

Pytanie 27

Jakie zasady stosuje programowanie obiektowe?

A. Podział kodu na funkcje i procedury
B. Tworzenie aplikacji z wykorzystaniem relacyjnych baz danych
C. Rozwiązywanie problemów poprzez modelowanie ich przy pomocy klas i obiektów
D. Zastosowanie wyłącznie algorytmów heurystycznych
Programowanie obiektowe polega na rozwiązywaniu problemów poprzez modelowanie ich za pomocą klas i obiektów. Klasy definiują strukturę i zachowanie obiektów, które są instancjami tych klas. Obiekty przechowują stan (dane) w polach i realizują funkcjonalność poprzez metody. Programowanie obiektowe pozwala na odwzorowanie rzeczywistych systemów, dziedziczenie cech, polimorfizm oraz hermetyzację danych, co prowadzi do bardziej modułowego i skalowalnego kodu. Przykłady języków obiektowych to C++, Java i Python.

Pytanie 28

Który z wymienionych objawów może sugerować nagłe zagrożenie dla zdrowia?

A. Zwiększona efektywność pracy
B. Intensywne pocenie się w gorącym otoczeniu
C. Obniżony nastrój w ciągu dnia
D. Ostry ból w klatce piersiowej
Ostry ból w klatce piersiowej to jeden z najbardziej alarmujących objawów wskazujących na nagłe zagrożenie zdrowotne, takie jak zawał serca lub zatorowość płucna. Tego rodzaju ból jest często opisywany jako gniotący, ściskający lub rozlewający się na inne części ciała, takie jak ramię, szyja czy żuchwa. W takich przypadkach kluczowe jest szybkie wezwanie pomocy medycznej, ponieważ każda minuta opóźnienia może zwiększyć ryzyko powikłań lub śmierci. Edukacja w zakresie rozpoznawania tego objawu może uratować życie, dlatego tak ważne jest rozróżnianie go od innych mniej groźnych objawów.

Pytanie 29

Jakie są różnice pomiędzy środowiskiem RAD a klasycznym IDE w kontekście aplikacji webowych?

A. RAD umożliwia szybsze prototypowanie i rozwój aplikacji dzięki narzędziom wizualnym
B. RAD nie wspiera żadnych języków backendowych
C. RAD funkcjonuje tylko w systemach Windows
D. RAD koncentruje się wyłącznie na budowie frontendu aplikacji
Rapid Application Development (RAD) to metodologia, która koncentruje się na szybkim prototypowaniu i iteracyjnym tworzeniu aplikacji. Dzięki narzędziom wizualnym RAD umożliwia programistom i projektantom szybkie budowanie interfejsów użytkownika oraz testowanie funkcjonalności aplikacji na wczesnym etapie rozwoju. RAD skraca czas potrzebny na dostarczenie gotowego produktu, co czyni go idealnym rozwiązaniem w dynamicznie zmieniających się projektach webowych. Narzędzia RAD umożliwiają także automatyczne generowanie kodu, co znacznie przyspiesza proces programowania.

Pytanie 30

Jakie kwestie związane z percepcją są uwzględnione w rekomendacjach standardu WCAG 2.0?

A. prezentacji elementów interfejsu użytkownika
B. umożliwienia interakcji między elementami użytkownika za pomocą klawiatury
C. jasności i dokładności w dostarczonych treściach na stronie
D. zapewnienia odpowiedniego czasu na zapoznanie się i przetworzenie informacji
Odpowiedzi odnoszące się do zapewnienia odpowiedniego czasu na zapoznanie się z informacjami, umożliwienia interakcji poprzez klawiaturę czy jasności i dokładności treści są ważne w kontekście dostępności stron, ale nie dotyczą bezpośrednio percepcji według standardu WCAG 2.0. Często zdarza się, że osoby uczące się mylą pojęcia percepcji z innymi zasadami WCAG, na przykład zrozumiałością (understandable) czy funkcjonalnością (operable). Percepcja w WCAG skupia się na tym, jak treści są postrzegane przez zmysły – głównie wzrok i słuch, ale czasem też dotyk, gdy mowa np. o wyświetlaczach brajlowskich. Zapewnienie odpowiedniego czasu i interakcji klawiaturą to typowe wymagania dla użytkowników z ograniczeniami motorycznymi, i chociaż są one bardzo istotne, to WCAG klasyfikuje je w innych kategoriach niż percepcja. Jasność i dokładność treści to cecha istotna dla zrozumiałości, jednak nie gwarantuje, że użytkownik w ogóle tę treść zauważy lub rozpozna – do tego potrzebna jest właśnie prawidłowa prezentacja elementów interfejsu. Tu najczęściej pojawia się błąd myślowy: zakłada się, że jak coś jest napisane jasno, to każdy to zobaczy i zrozumie, ale wielu użytkowników ma problemy z odbiorem samych wizualnych aspektów strony. WCAG 2.0 podkreśla, żeby nie polegać tylko na jednym kanale percepcji, np. kolorze, dźwięku czy obrazie. Dopiero dbałość o prezentację elementów interfejsu – kontrast, czytelność, alternatywy tekstowe – sprawia, że strona jest dostępna percepcyjnie. Warto zapamiętać, że kategorie WCAG są celowo podzielone właśnie w ten sposób, aby każda istotna kwestia była rozpatrywana osobno i nie mieszana z innymi.

Pytanie 31

Jakie jest przeznaczenie polecenia "git merge"?

A. Do pobierania aktualizacji zdalnego repozytorium
B. Do usuwania zmian w repozytorium
C. Do zakładania nowego repozytorium
D. Do łączenia zmian z różnych gałęzi
Wiele osób na początku nauki Gita myli różne polecenia, bo brzmią podobnie albo wydają się robić coś bliskiego. "git merge" często bywa mylone z poleceniami typu "git pull" czy "git clone", które mają jednak zupełnie inne zastosowanie. Pobieranie aktualizacji ze zdalnego repozytorium to domena "git pull" – to polecenie automatycznie pobiera nowe commity i próbuje je od razu zintegrować z lokalną gałęzią, często zresztą używając w tle właśnie "merge". Ale samo "git merge" nie ściąga niczego z internetu, ono tylko łączy zmiany już obecne w lokalnych gałęziach. Z kolei tworzenie nowego repozytorium to zadanie "git init"; to zupełnie inny etap pracy, bo dotyczy rozpoczęcia projektu, a nie zarządzania jego rozwojem. Usuwanie zmian w repozytorium – tutaj najczęściej używa się "git reset" czy "git revert", zależnie od tego czy chcemy cofnąć zmiany lokalnie czy naprawić coś w historii. Merge natomiast nie służy do usuwania ani cofania, tylko do scalania zmian – to kluczowe, żeby nie pomylić tych narzędzi, bo można przez to nieźle namieszać w kodzie. Moim zdaniem, głównym błędem jest założenie, że wszystkie polecenia związane z aktualizacją kodu robią to samo, podczas gdy w Git każde z nich ma bardzo konkretne zadanie i konsekwencje. Dla dobrych praktyk w zespole ważne jest, żeby rozumieć subtelne różnice między tymi operacjami. Praktyka pokazuje, że błędne użycie "merge" – jak również zamiana go z "pull" albo "reset" – potrafi prowadzić do chaosu w historii projektu. Warto zatem dobrze opanować przeznaczenie każdego z poleceń przed rozpoczęciem pracy nad większym projektem.

Pytanie 32

Zapisany kod w języku Python ilustruje

pierwiastki = {"N": "Azot", "O": "Tlen", "P": "Fosfor", "Si": "Siarka"}
A. tablicę asocjacyjną (słownik)
B. kolejkę (LIFO)
C. stos
D. strukturę
W tym zadaniu mamy do czynienia z tablicą asocjacyjną, która w Pythonie nazywa się słownikiem. Słownik to taki fajny sposób na przechowywanie par klucz-wartość, co jest naprawdę przydatne. W naszym przypadku kluczami są symbole chemiczne, jak N czy O, a wartościami ich pełne nazwy, czyli Azot oraz Tlen. Dzięki tej strukturze można szybko sięgnąć po konkretne dane, co jest bardzo pomocne w różnych sytuacjach. Na przykład, można używać ich do przechowywania konfiguracji albo do prostych baz danych. Warto też dodać, że słowniki świetnie pasują do obiektów JSON, co jest ważne w tworzeniu aplikacji webowych. Dają nam dużą elastyczność i robią to w bardzo efektywny sposób, dlatego są jednym z kluczowych elementów Pythona. Ułatwiają pisanie kodu, który jest zarówno czytelny, jak i funkcjonalny.

Pytanie 33

Co to jest JWT (JSON Web Token)?

A. Standard definiujący sposób bezpiecznego przekazywania informacji jako obiekt JSON
B. Biblioteka JavaScript do walidacji formularzy webowych
C. Protokół komunikacyjny do transferu danych między klientem a serwerem
D. Format zapisu danych używany w bazach NoSQL
JWT, czyli JSON Web Token, jest standardem, który definiuje sposób bezpiecznego przekazywania informacji między dwiema stronami w postaci obiektu JSON. Tokeny JWT są powszechnie wykorzystywane w systemach autoryzacji i autoryzacji, umożliwiając przekazywanie zweryfikowanych i podpisanych danych. Struktura tokena składa się z trzech części: nagłówka, ładunku (payload) oraz podpisu. Nagłówek zazwyczaj określa typ tokena oraz algorytm użyty do podpisania, ładunek zawiera dane, które chcemy przesłać, a podpis jest generowany przy użyciu tajnego klucza, co zapewnia integralność danych. Przykładem zastosowania JWT może być system logowania, gdzie po pomyślnym zalogowaniu użytkownik otrzymuje token, który jest następnie używany do autoryzacji kolejnych zapytań do serwera. Dzięki swojej strukturze, JWT nie tylko zwiększa bezpieczeństwo, ale także umożliwia łatwą wymianę informacji między różnymi systemami, co jest szczególnie ważne w architekturach mikroserwisowych.

Pytanie 34

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

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

Pytanie 35

Które z podejść do tworzenia aplikacji najlepiej uwzględnia przyszłe zmiany w funkcjonalności?

A. Pisanie kodu bez jakiejkolwiek dokumentacji
B. Zastosowanie modularnej architektury aplikacji
C. Tworzenie bez wcześniejszej specyfikacji technicznej
D. Skupienie się tylko na estetce aplikacji
Użycie modularnej architektury aplikacji to najlepsze podejście do projektowania systemów, które muszą uwzględniać przyszłe modyfikacje funkcjonalności. Modularność pozwala na podział aplikacji na mniejsze, niezależne komponenty, które mogą być rozwijane, testowane i aktualizowane niezależnie od siebie. Takie podejście zwiększa elastyczność, ułatwia zarządzanie kodem i pozwala na szybkie wdrażanie nowych funkcji bez konieczności ingerencji w cały system. Architektura modularna jest szczególnie przydatna w dużych projektach, gdzie zmiany są częste, a wymagania dynamicznie się zmieniają.

Pytanie 36

Jaka będzie wartość zmiennej x po wykonaniu poniższego kodu?

let x = 0;
for (let i = 0; i < 10; i++) {
  if (i % 2 === 0) continue;
  x += i;
}
A. 20
B. 45
C. 25
D. 30
Wartość zmiennej x po wykonaniu podanego kodu wynosi 25, co jest wynikiem sumy wszystkich nieparzystych liczb od 0 do 9. W pętli for iterujemy od 0 do 9, a dla każdej wartości i sprawdzamy, czy jest parzysta. Jeżeli i jest parzyste, używamy instrukcji continue, co oznacza, że ten krok pętli jest pomijany i przechodzimy do następnej iteracji. W praktyce oznacza to, że wartości takie jak 0, 2, 4, 6, 8 nigdy nie zostaną dodane do zmiennej x. Zostaną natomiast dodane wartości nieparzyste: 1, 3, 5, 7, 9. Ich suma wynosi 1 + 3 + 5 + 7 + 9 = 25. Takie podejście jest typowe w programowaniu, gdyż pozwala na efektywne pomijanie niepotrzebnych wartości, co zwiększa wydajność kodu. Używanie operatora modulo (%) do sprawdzania parzystości jest powszechną praktyką. Tego typu konstrukcje możemy znaleźć w różnych zastosowaniach, na przykład w algorytmach sortujących czy w przetwarzaniu danych, gdzie istotne jest operowanie tylko na wybranych elementach.

Pytanie 37

Która z wymienionych sytuacji stanowi naruszenie praw autorskich?

A. Tworzenie kopii zapasowej legalnie zakupionego programu
B. Nabycie licencji na oprogramowanie
C. Używanie programu typu open-source zgodnie z warunkami licencji
D. Udostępnianie filmu objętego prawami autorskimi bez zgody właściciela
Publikowanie filmu chronionego prawami autorskimi bez zgody właściciela jest naruszeniem praw autorskich. Prawa autorskie chronią twórców przed nieuprawnionym kopiowaniem, dystrybucją i rozpowszechnianiem ich dzieł. W przypadku filmów, muzyki czy oprogramowania, każde użycie bez odpowiednich licencji lub zgody właściciela jest niezgodne z prawem. Twórcy mają prawo do wynagrodzenia za swoją pracę, a naruszenia mogą skutkować wysokimi grzywnami, a nawet postępowaniem sądowym. Przestrzeganie praw autorskich wspiera rozwój kultury i technologii, chroniąc interesy twórców.

Pytanie 38

Które urządzenie komputerowe jest najbardziej odpowiednie do graficznego projektowania w aplikacjach CAD?

A. Serwer dysponujący dużą ilością pamięci RAM
B. Laptop z zintegrowanym układem graficznym
C. Komputer stacjonarny z kartą graficzną NVIDIA Quadro
D. Laptop z interfejsem dotykowym
W kontekście projektowania graficznego w programach typu CAD, kluczowym elementem jest wybór odpowiedniego sprzętu, który zapewni nie tylko stabilność, ale także wydajność. Komputer stacjonarny wyposażony w kartę graficzną NVIDIA Quadro jest najlepszym rozwiązaniem, ponieważ te karty są specjalnie zaprojektowane do obsługi złożonych obliczeń i renderowania grafiki 3D. Dzięki zaawansowanej architekturze oraz optymalizacji pod kątem aplikacji inżynieryjnych i projektowych, karty NVIDIA Quadro oferują znacznie wyższą wydajność w porównaniu do standardowych kart graficznych. Dodatkowo, stacjonarne komputery pozwalają na łatwiejszą rozbudowę, co może być kluczowe w przypadku rosnących wymagań projektowych. W praktyce, użytkownicy CAD często muszą radzić sobie z dużymi i złożonymi modelami, które wymagają nie tylko odpowiedniej mocy obliczeniowej, ale także dużej ilości pamięci wideo, co zapewnia NVIDIA Quadro. Warto dodać, że standardy branżowe, takie jak OpenGL i DirectX, są w pełni wspierane przez te karty, co przekłada się na ich niezawodność i efektywność w profesjonalnym środowisku projektowym.

Pytanie 39

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

A. PascalCase
B. camelCase
C. kebab-case
D. snake_case
Wybór konwencji nazewnictwa ma kluczowe znaczenie dla czytelności i utrzymania kodu, a błędne podejście do tego tematu może prowadzić do poważnych nieporozumień. Snake_case, który polega na oddzielaniu słów za pomocą podkreślników (np. `user_name`), jest popularny w językach takich jak Python, ale nie jest powszechnie akceptowany w JavaScript. Użycie tej konwencji w JavaScript może skutkować niekonsekwencjami w kodzie, zwłaszcza gdy współpracuje się z innymi programistami, którzy mogą oczekiwać stosowania camelCase jako standardu. Z kolei PascalCase, w którym każde słowo zaczyna się dużą literą, jest zazwyczaj używany w kontekście nazywania klas (np. `UserProfile`). Choć jest to przydatne, nie jest to konwencja dla zmiennych czy funkcji, co może prowadzić do niejasności, jeśli nie stosuje się jej zgodnie z ogólnie przyjętymi zasadami. Kebab-case, będący inną formą separacji słów przy pomocy myślników (np. `user-name`), jest najczęściej stosowany w nazwach URL i nie jest zgodny z konwencjami JavaScript. Dlatego stosowanie tych nieodpowiednich konwencji może prowadzić do trudności w utrzymaniu kodu, a także może wpływać na błędy w współpracy z innymi narzędziami i bibliotekami, które oczekują zgodności z camelCase.

Pytanie 40

Jak zrealizować definiowanie własnego wyjątku w języku C++?

A. Wykorzystać blok try z pustym blokiem catch
B. Utworzyć klasę, która dziedziczy po std::exception
C. Automatycznie wywołać funkcję throw
D. Skorzystać z domyślnej metody obsługi błędów
Użycie standardowej funkcji obsługi błędów, takiej jak 'perror()', nie pozwala na zdefiniowanie własnego wyjątku – 'perror()' wyświetla komunikat o błędzie, ale nie zgłasza wyjątku. Blok 'try' z pustym blokiem 'catch' nie tworzy nowego wyjątku, lecz jedynie przechwytuje istniejące wyjątki. Wywołanie 'throw' automatycznie nie definiuje nowego wyjątku – 'throw' służy do zgłaszania istniejącego wyjątku, ale definicja własnego wyjątku wymaga utworzenia nowej klasy dziedziczącej po 'std::exception'.