Wyniki egzaminu

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

Egzamin niezdany

Wynik: 19/40 punktów (47,5%)

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

Jaki kod może być związany z treścią wygenerowaną w trakcie działania programu Java?

Exception in thread "main" java.lang.ArithmeticException: / by zero
A. if (x > y) ...
B. x = 0;
C. x = x % y;
D. x = tablica[6];
Kod x = x % y; jest klasycznym przykładem operacji, która może prowadzić do wystąpienia wyjątku ArithmeticException w Javie, szczególnie gdy zmienna y przyjmuje wartość zero. Operator modulo (%) w języku Java nie toleruje dzielenia przez zero – w przeciwieństwie do niektórych innych języków, które mogą zwracać np. NaN lub Infinity, tutaj od razu zostanie zgłoszony wyjątek. Taki wyjątek jest dość powszechny w pracy programisty, zwłaszcza w aplikacjach, gdzie dane wejściowe nie są do końca kontrolowane. Moim zdaniem dobrze jest od razu przyzwyczaić się do zabezpieczania wszystkich operacji dzielenia i modulo poprzez wcześniejsze sprawdzenie wartości dzielnika. Rekomenduje się stosowanie warunków typu if (y != 0) przed wykonaniem takiej instrukcji, co jest zgodne z dobrymi praktykami defensywnego programowania. Dodatkowo, w środowiskach produkcyjnych często otacza się te fragmenty kodu blokiem try-catch, aby elegancko obsłużyć wyjątek i np. wyświetlić użytkownikowi zrozumiały komunikat. Warto pamiętać, że ArithmeticException dziedziczy po RuntimeException, a więc nie musimy jej jawnie obsługiwać, ale nie oznacza to, że powinniśmy ją ignorować – w dobrze napisanym kodzie zawsze należy przewidywać takie sytuacje. Z mojego doświadczenia wynika, że najwięcej błędów z tym związanych pojawia się w aplikacjach przetwarzających dane liczbowe, gdzie nawet niepozorna operacja modulo może „wywalić” cały proces, jeśli nie zostanie odpowiednio zaopiekowana.

Pytanie 2

Jakie znaczenie ma krajowa normalizacja dla produktów i usług?

A. Restrukcjonuje innowacje technologiczne
B. Gwarantuje lepszą zgodność oraz jakość
C. Ogranicza liczbę dostępnych towarów
D. Usuwa konieczność przeprowadzania kontroli jakości
Normalizacja krajowa to świetny sposób na to, żeby produkty i usługi były bardziej spójne i lepszej jakości. Kiedy mamy standardy, to producenci mogą robić rzeczy, które są zgodne z wymaganiami technicznymi. To z kolei sprawia, że konsumenci mogą bardziej ufać produktom, a ryzyko, że coś będzie wadliwe, spada. Dzięki normalizacji zwiększa się bezpieczeństwo, poprawia interoperacyjność, a to wszystko wspiera rozwój technologiczny. No i jest jeszcze to, że łatwiej jest wymieniać produkty między różnymi rynkami, co ma pozytywny wpływ na całą gospodarkę.

Pytanie 3

Który z wymienionych parametrów dysku twardego ma największy wpływ na jego wydajność?

A. Rodzaj złącza (SATA/PCIe)
B. Prędkość obrotowa talerzy (RPM)
C. Pojemność dysku
D. Ilość pamięci podręcznej (Cache)
Prędkość obrotowa talerzy (RPM) jest kluczowym parametrem wpływającym na szybkość dysku twardego. Wyrażana w obrotach na minutę, RPM definiuje, jak szybko talerze dysku mogą obracać się, co z kolei wpływa na czas dostępu do danych. Dyski HDD o wyższej prędkości obrotowej, takie jak 7200 RPM w porównaniu do 5400 RPM, zazwyczaj oferują lepszą wydajność, co przekłada się na szybsze odczyty i zapisy danych. Przykładowo, w zastosowaniach wymagających intensywnego przetwarzania danych, takich jak gry komputerowe czy edycja wideo, wybór dysku o wyższej prędkości obrotowej może znacznie poprawić ogólne wrażenia użytkownika. Warto również zauważyć, że chociaż złącze SATA i PCIe wpływają na szybkość transferu, to w kontekście dysków HDD, RPM pozostaje jednym z najważniejszych czynników. Standardy takie jak SATA III oferują transfery do 6 Gb/s, ale jeśli talerze nie obracają się wystarczająco szybko, potencjał transferu nie zostanie w pełni wykorzystany. Z tego powodu, RPM jest kluczowym wskaźnikiem wydajności w kontekście dysków twardych.

Pytanie 4

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 5

Który z poniższych kodów realizuje przedstawiony fragment algorytmu?

Ilustracja do pytania
A. Kod 3
B. Kod 1
C. Kod 4
D. Kod 2
Bardzo dobrze wychwycone! Kod 3 idealnie odwzorowuje logikę algorytmu przedstawioną na schemacie blokowym. Pętla while sprawdza warunek y != 100 i dopóki jest spełniony, wykonuje instrukcję y = a + b. Zarówno przebieg pętli, jak i wyjście z niej odpowiadają dokładnie temu, co prezentuje ten diagram blokowy – czyli wykonujemy przypisanie y = a + b, jeśli warunek jest prawdziwy, a gdy przestaje być, wychodzimy z pętli. Takie podejście jest bardzo typowe w programowaniu, nie tylko w szkolnych zadaniach, ale też w praktyce, gdy musimy powtarzać akcję do momentu spełnienia konkretnego warunku. Moim zdaniem, dobrze jest tutaj zauważyć, że pętle while są preferowane, gdy nie znamy z góry liczby powtórzeń, a warunek wejścia ma być sprawdzany przed każdym przebiegiem – to klasyczna konstrukcja w językach takich jak C, Java czy Python. Tego typu algorytmy można spotkać choćby podczas obsługi wejścia użytkownika (np. powtarzaj pytanie, aż użytkownik poda poprawną wartość) albo w sterowaniu urządzeniami, gdy czekamy na określony sygnał wejściowy. Warto też pamiętać, że w profesjonalnym kodzie dobrze jest dbać o czytelność i jednoznaczność takich fragmentów – a ten kod właśnie taki jest. Swoją drogą, czasem warto dodać jeszcze zabezpieczenia, by uniknąć tzw. nieskończonej pętli, ale tutaj, jak widać, intencja jest jasna i zgodna ze standardami branżowymi.

Pytanie 6

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

A. Zaniechanie odpowiadania na wiadomości od innych użytkowników
B. Udostępnianie treści bez zgody właścicieli
C. Unikanie używania dużych liter w komunikacji
D. Stosowanie nieformalnego języka w każdej rozmowie
Unikanie pisania wielkimi literami w wiadomościach jest kluczowym elementem netykiety, ponieważ tekst pisany dużymi literami w internecie jest powszechnie interpretowany jako krzyk. To zasada, która ma na celu utrzymanie kultury komunikacji online oraz zapewnienie komfortu odbiorcy. Gdy użytkownik korzysta z wielkich liter, może to być odbierane jako agresywne lub dominujące, co może prowadzić do nieporozumień oraz negatywnych reakcji. Przykładem może być sytuacja, w której osoba, pisząc do grupy na forum internetowym, używa wyłącznie wielkich liter, co może zniechęcić innych do interakcji. Dobrą praktyką jest pisanie w sposób przystępny i zrozumiały, co sprzyja pozytywnej atmosferze w komunikacji. Standardy netykiety, takie jak te przedstawione w dokumentach związanych z etyką w internecie, podkreślają znaczenie szacunku i zrozumienia w interakcjach online, co obejmuje również sposób formułowania wiadomości. Warto także pamiętać o tym, że różne platformy społecznościowe mają swoje zasady, które podkreślają unikanie pisania krzykiem, co potwierdza ogólne podejście do netykiety.

Pytanie 7

Jakie znaczenie ma określenie "klasa zaprzyjaźniona" w kontekście programowania obiektowego?

A. Klasa, która nie ma możliwości zawierania metod statycznych
B. Klasa, która ma dostęp do prywatnych i chronionych elementów innej klasy
C. Klasa, w której wszystkie komponenty są publiczne
D. Klasa, która może być dziedziczona przez inne klasy
Klasa zaprzyjaźniona (ang. 'friend class') to klasa, która ma dostęp do prywatnych i chronionych składowych innej klasy, dzięki specjalnej deklaracji 'friend' wewnątrz tej klasy. Jest to kluczowe narzędzie w programowaniu obiektowym, które umożliwia ściślejszą współpracę między klasami, jednocześnie zapewniając hermetyzację kodu w miejscach, gdzie jest to wymagane. Używanie klas zaprzyjaźnionych umożliwia bardziej efektywne zarządzanie zależnościami między klasami, co jest istotne w dużych projektach programistycznych. Klasy zaprzyjaźnione są często stosowane w bibliotekach standardowych i frameworkach, pozwalając na eleganckie rozwiązania problemów związanych z ukrywaniem implementacji i udostępnianiem tylko niezbędnych fragmentów kodu innym komponentom systemu.

Pytanie 8

Wskaż algorytm sortowania, który nie jest stabilny?

A. sortowanie bąbelkowe
B. sortowanie szybkie
C. sortowanie przez wstawianie
D. sortowanie przez zliczanie
Sortowanie szybkie (Quick Sort) to algorytm, który faktycznie nie jest stabilny w swojej podstawowej wersji. To znaczy, jeśli w kolekcji są dwa identyczne elementy pod względem klucza sortowania, po wykonaniu Quick Sort ich kolejność względem siebie może się zmienić. Z moich doświadczeń wynika, że to może mieć znaczenie, na przykład gdy sortujemy obiekty według jednego pola, ale chcemy zachować kolejność według innego – czasem w praktyce, np. przy obsłudze rekordów w bazach danych, stabilność sortowania gwarantuje spójność wyników. Quick Sort jest jednak bardzo popularny, bo ogólnie działa bardzo szybko i jest efektywny pamięciowo, stąd często go się używa tam, gdzie stabilność nie jest wymagana. W niektórych implementacjach można próbować uczynić Quick Sort stabilnym, ale wymaga to dodatkowych zabiegów i nie jest standardem – biblioteki standardowe (np. C++ std::sort) właśnie z tego powodu nie gwarantują stabilności Quick Sorta. W praktycznych projektach, jeśli zależy Ci na stabilności, lepiej użyć sortowania przez wstawianie lub przez zliczanie. Sortowanie bąbelkowe i przez wstawianie są wręcz typowe do nauki stabilnych algorytmów, a sortowanie przez zliczanie nawet dla dużych zbiorów cały czas pilnuje kolejności równych elementów. Quick Sort jest świetny, ale warto znać jego ograniczenia, szczególnie w aplikacjach biznesowych albo pracy z dużymi, złożonymi strukturami danych.

Pytanie 9

Zademonstrowana pętla wykorzystuje obiekt random do:

var random = new Random();
String pulaZnakow = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ";
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. jednorazowego wylosowania znaku z określonego zestawu znaków
B. wielokrotnego generowania liczby, aby stworzyć ciąg z liczb pseudolosowych
C. stworzenia losowego napisu o długości 8 znaków składającego się z liter
D. uzupełniania tablicy danymi w postaci liczb pseudolosowych
Kod, który został przedstawiony, to typowy przykład generowania losowego napisu, takiego jak hasło czy token sesji. Random służy tutaj do wielokrotnego losowania indeksów z określonego zakresu, które następnie są używane do pobierania znaków z puli liter. W efekcie – po przejściu całej pętli – zmienna 'wynik' zawiera napis złożony z 8 losowo dobranych liter z podanego zestawu. Tak się właśnie w praktyce koduje np. generator jednorazowych haseł lub krótkich identyfikatorów użytkowników. Często takie rozwiązania spotyka się w aplikacjach internetowych, gdzie bezpieczeństwo i nieprzewidywalność takich danych są kluczowe. Zresztą, korzystanie z Random i gotowej puli znaków to branżowy standard, jeśli chodzi o prostą losowość tekstową (chociaż do kryptografii są lepsze klasy, np. RNGCryptoServiceProvider). Warto też pamiętać, że pętle for idealnie nadają się do składania ciągów o z góry ustalonej długości, co jest bardzo czytelne i zgodne z dobrymi praktykami C#. Ogólnie, ten sposób generowania losowego stringa jest szybki, łatwy do zrozumienia i nieźle się skaluje – no i sprawdza się rewelacyjnie w różnych projektach, gdzie trzeba wygenerować coś pseudo-losowego, ale czytelnego dla człowieka. Sam się kiedyś złapałem na tym, jak często taki kod się przydaje przy rejestracji użytkowników czy obsłudze prostych quizów online.

Pytanie 10

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

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

Pytanie 11

Jakie jest zastosowanie iteratora w zbiorach?

A. Do iterowania po elementach zbioru
B. Do generowania kopii zbiorów
C. Do zmiany rodzaju zbioru w trakcie działania aplikacji
D. Do usuwania elementów ze zbioru
Iterator w kolekcjach umożliwia przechodzenie przez elementy kolekcji w określonym porządku. Jest to abstrakcyjny obiekt, który pozwala na iterowanie po różnych strukturach danych, takich jak listy, wektory czy zbiory, bez konieczności znajomości ich wewnętrznej implementacji. Iteratory umożliwiają wykonywanie operacji na elementach kolekcji, takich jak odczyt, modyfikacja lub usuwanie, co czyni je niezwykle użytecznymi w programowaniu obiektowym. Dzięki iteratorom kod staje się bardziej czytelny i mniej podatny na błędy.

Pytanie 12

Jaką rolę pełni element statyczny w klasie?

A. Ogranicza dostęp do metod publicznych w klasie
B. Zachowuje wspólną wartość dla wszystkich instancji tej klasy
C. Pozwala na dynamiczne dodawanie nowych metod
D. Automatycznie likwiduje obiekty klasy po zakończeniu działania programu
Składnik statyczny klasy przechowuje wartości współdzielone przez wszystkie obiekty tej klasy. Jest to jedno z najbardziej efektywnych narzędzi w programowaniu obiektowym, pozwalające na ograniczenie zużycia pamięci oraz zapewnienie spójności danych. Główna rola składnika statycznego polega na utrzymaniu jednej kopii zmiennej lub metody, która jest dostępna niezależnie od liczby instancji klasy. To oznacza, że zmiana wartości składowej statycznej jest natychmiast widoczna dla wszystkich obiektów klasy. Przykładem jest licznik instancji klasy lub konfiguracja globalna aplikacji, gdzie statyczność pozwala na scentralizowanie danych i ich jednolite zarządzanie.

Pytanie 13

Reguła zaangażowania i konsekwencji jako jedna z zasad wpływania na innych odnosi się

A. do doprowadzania spraw do końca
B. do kierowania się zdaniem danej grupy
C. do uległości wobec autorytetów
D. do odwzajemniania się osobie, która nam pomogła
Kiedy analizujemy regułę zaangażowania i konsekwencji, łatwo ją pomylić z innymi mechanizmami społecznymi wpływania na ludzi, bo te psychologiczne zasady czasem zachodzą na siebie w praktyce. Moim zdaniem najczęściej mylonym pojęciem tutaj jest reguła wzajemności, która mówi o tym, że ludzie czują się zobowiązani, by się odwdzięczyć za otrzymaną pomoc – to jednak zupełnie inny mechanizm, związany bardziej z relacjami i budowaniem zaufania niż z wewnętrzną potrzebą bycia konsekwentnym względem własnych decyzji. Z kolei kierowanie się zdaniem grupy to klasyczna presja społeczna czy konformizm, która też bywa silnym czynnikiem wpływu, ale opiera się na chęci dopasowania się do większości, a nie na wcześniejszych własnych zobowiązaniach. No i jeszcze uległość wobec autorytetów – tu chodzi głównie o to, że ludzie mają tendencję słuchać osób postrzeganych jako eksperci czy przełożeni, bo wierzą w ich większą wiedzę czy doświadczenie. To inny proces, nie związany z samą konsekwencją własnych działań. Typowym błędem jest patrzenie na te zasady jakby były zamienne, a w rzeczywistości każda wywołuje inne motywacje i wywołuje inny rodzaj zachowań. W branżowych dobrych praktykach, na przykład w sprzedaży B2B czy w projektach zespołowych, bardzo ważne jest rozróżnianie tych pojęć, by umiejętnie stosować odpowiednie narzędzia wpływu. Warto zawsze pamiętać, że reguła zaangażowania i konsekwencji opiera się na wewnętrznym przymusie trzymania się własnych wcześniejszych wyborów – niezależnie od opinii innych czy zewnętrznej presji.

Pytanie 14

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

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

Pytanie 15

Która z poniższych metod HTTP jest idempotentna?

A. GET
B. POST
C. PATCH
D. CONNECT
Metoda GET jest uznawana za idempotentną, co oznacza, że wielokrotne wykonanie tej samej operacji nie zmienia stanu zasobu na serwerze. W praktyce, jeżeli wysyłamy zapytanie GET do określonego zasobu, niezależnie od tego, ile razy je powtórzymy, zwróci ono tę samą odpowiedź oraz nie wpłynie na stan zasobu. Wykorzystanie metody GET jest powszechne w aplikacjach webowych, na przykład podczas ładowania strony, gdzie użytkownik chce pobrać informacje, takie jak artykuły lub dane z bazy. Zgodnie z zasadami RESTful, metody idempotentne powinny być stosowane w przypadkach, gdy zależy nam na stabilności i przewidywalności działania systemu. Przykładem zastosowania metody GET w praktyce może być API, które zwraca szczegóły użytkownika na podstawie jego identyfikatora. W takim przypadku, wywołanie GET na danym URI zawsze zwróci te same dane, o ile nie nastąpią zmiany w bazie danych.

Pytanie 16

Jakie jest fundamentalne zagadnienie w projektowaniu aplikacji w architekturze klient-serwer?

A. Brak podziału na role klienta i serwera
B. Funkcjonowanie aplikacji wyłącznie w trybie offline
C. Użycie serwera jako głównego miejsca przetwarzania danych
D. Przeniesienie wszystkich obliczeń na stronę klienta
Użycie serwera jako centralnego miejsca przetwarzania danych jest kluczowym elementem architektury klient-serwer. Serwer pełni rolę centralnego punktu, który zarządza żądaniami klientów, przechowuje dane i zapewnia odpowiedzi na zapytania. Taki model zapewnia większe bezpieczeństwo danych, ułatwia zarządzanie zasobami i umożliwia skalowanie aplikacji w miarę wzrostu liczby użytkowników. Architektura klient-serwer jest szeroko stosowana w aplikacjach webowych, systemach bankowych oraz usługach chmurowych, gdzie konieczna jest centralizacja danych i ich ochrona.

Pytanie 17

W języku Python, jak nazywa się funkcja, która jest wykonywana automatycznie, gdy obiekt jest niszczony?

A. __str__
B. __del__
C. __repr__
D. __init__
W Pythonie funkcja <code>__del__</code> to metoda destruktora, która jest wywoływana, gdy obiekt jest niszczony. Jest to część procesu zarządzania pamięcią, gdzie interpreter Pythona automatycznie usuwa obiekty, które nie są już potrzebne, aby zwolnić pamięć. <code>__del__</code> pozwala na wykonanie dodatkowych czynności przed ostatecznym usunięciem obiektu, takich jak zamknięcie plików czy połączeń sieciowych. Warto jednak pamiętać, że użycie <code>__del__</code> nie jest zalecane do zarządzania zasobami, ponieważ może prowadzić do trudnych do zdiagnozowania błędów, szczególnie gdy obiekty są usuwane w nieprzewidywalnym momencie. Zamiast tego, lepiej jest używać menedżerów kontekstu (z instrukcją <code>with</code>), które zapewniają bardziej kontrolowane i bezpieczne zwalnianie zasobów. Przykładowo, otwierając plik za pomocą <code>with open('plik.txt', 'r') as f:</code>, masz pewność, że plik zostanie zamknięty poprawnie po zakończeniu bloku kodu, niezależnie od tego, czy wystąpił błąd.

Pytanie 18

Jaką funkcję pełnią mechanizmy ciasteczek w aplikacjach internetowych?

A. Do przechowywania informacji w bazie danych
B. Do generowania dynamicznych interfejsów dla użytkowników
C. Do zapisywania danych użytkownika na serwerze
D. Do zapisywania danych użytkownika w przeglądarce
Mechanizm ciasteczek (cookies) w aplikacjach webowych służy do przechowywania danych użytkownika bezpośrednio w przeglądarce. Ciasteczka mogą przechowywać różnego rodzaju informacje, takie jak preferencje językowe, identyfikatory sesji czy dane logowania, co pozwala na personalizację doświadczenia użytkownika oraz śledzenie jego aktywności na stronie. Dzięki ciasteczkom aplikacje webowe mogą zapamiętać użytkownika i dostosować treści do jego potrzeb przy kolejnych wizytach. Cookies są nieodłącznym elementem zarządzania stanem w aplikacjach stateless, takich jak te oparte na protokole HTTP. Mogą być one również wykorzystywane w systemach reklamowych i analitycznych do monitorowania zachowań użytkowników. Prawidłowe zarządzanie ciasteczkami i stosowanie odpowiednich polityk prywatności są kluczowe dla zgodności z przepisami RODO oraz regulacjami dotyczącymi ochrony danych osobowych.

Pytanie 19

Które z wymienionych sytuacji jest przykładem hermetyzacji w programowaniu obiektowym?

A. Tworzenie wielu metod o tej samej nazwie w różnych klasach
B. Ograniczenie dostępu do pól klasy poprzez modyfikatory dostępu
C. Wykorzystanie klasy nadrzędnej w innej klasie
D. Tworzenie klasy abstrakcyjnej
Hermetyzacja (ang. encapsulation) to mechanizm programowania obiektowego, który polega na ukrywaniu wewnętrznych danych obiektu oraz udostępnianiu dostępu do nich tylko za pośrednictwem metod publicznych (gettery i settery). Dzięki hermetyzacji dane klasy są chronione przed bezpośrednią modyfikacją, co zwiększa bezpieczeństwo i stabilność kodu. Przykład w C++: `class Konto { private: double saldo; public: void wplata(double kwota) { saldo += kwota; } }` – saldo jest polem prywatnym, które można modyfikować tylko poprzez metody publiczne, co zapobiega nieautoryzowanemu dostępowi.

Pytanie 20

Wynikiem wykonania poniższego fragmentu kodu jest wyświetlenie liczb z zakresu od 2 do 20, które są

for (let number = 2; number <= 20; number++) {
    let check = true;
    for (let test = 2; test < number; test++) {
        if (number % test === 0) {
            check = false;
            break;
        }
    }
    if (check) console.log(number);
}
A. pierwsze.
B. podzielne przez wartość zmiennej check.
C. podzielne przez wartość zmiennej test.
D. parzyste.
Kod wypisuje liczby pierwsze, czyli takie, które mają dokładnie dwa dzielniki: 1 i samą siebie. Liczby pierwsze są podstawą w wielu dziedzinach matematyki i informatyki, szczególnie w kryptografii i algorytmach. Wyszukiwanie liczb pierwszych w danym przedziale to popularne zadanie, które pozwala na lepsze zrozumienie iteracji, pętli i warunków logicznych w programowaniu. Algorytm ten jest również wykorzystywany w optymalizacji algorytmów szyfrowania i generowania kluczy.

Pytanie 21

Co oznacza termin 'polimorfizm' w programowaniu obiektowym?

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

Brak odpowiedzi na to pytanie.

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

Pytanie 22

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 23

Które z poniższych stwierdzeń jest prawdziwe w kontekście dziedziczenia w języku Java?

A. Dziedziczenie jest niezalecane w języku Java.
B. Klasa pochodna dziedziczy po jednej klasie bazowej.
C. Java nie wspiera dziedziczenia.
D. Klasa pochodna może dziedziczyć po wielu klasach bazowych.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dziedziczenie jest jednym z kluczowych mechanizmów programowania obiektowego, a Java wspiera dziedziczenie jednokrotne. Oznacza to, że klasa pochodna może dziedziczyć tylko po jednej klasie bazowej. Jest to zgodne z modelem dziedziczenia stosowanym w wielu językach obiektowych. Dzięki temu mechanizmowi możemy ponownie wykorzystywać kod, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Dziedziczenie pozwala na tworzenie hierarchii klas, gdzie klasa pochodna dziedziczy właściwości i metody klasy bazowej, co ułatwia rozszerzanie funkcjonalności bez konieczności ponownego pisania kodu. Przykład zastosowania to tworzenie klasy 'Samochód', która dziedziczy po klasie 'Pojazd', co pozwala na automatyczne odziedziczenie wszystkich cech pojazdu, takich jak metoda 'uruchom', a jednocześnie dodanie specyficznych funkcji dla samochodu, jak 'otwórz bagażnik'. Dziedziczenie ułatwia zarządzanie złożonymi systemami, umożliwiając organizację kodu w sposób bardziej zrozumiały i zarządzalny.

Pytanie 24

Który z wymienionych elementów NIE stanowi części instrukcji dla użytkownika programu?

A. Opis testów jednostkowych
B. Rozwiązywanie problemów związanych z użytkowaniem aplikacji
C. Opis metody instalacji aplikacji
D. Instrukcje dotyczące obsługi poszczególnych funkcji aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Instrukcja użytkownika programu zawiera opisy dotyczące sposobu instalacji aplikacji, konfiguracji oraz obsługi poszczególnych funkcji. Jest to kluczowy dokument pomagający użytkownikom w szybkim wdrożeniu się w pracę z oprogramowaniem. Zawiera również sekcje dotyczące rozwiązywania typowych problemów oraz wskazówki, jak efektywnie korzystać z narzędzi i funkcji aplikacji. Instrukcja użytkownika może być dostępna w formie elektronicznej (PDF, strony WWW) lub papierowej, a jej celem jest uproszczenie procesu wdrażania oraz ograniczenie liczby zgłoszeń do działu wsparcia technicznego. Dokumentacja tego typu stanowi również ważny element budowania pozytywnego doświadczenia użytkownika (UX).

Pytanie 25

Jakie narzędzie programowe jest odpowiedzialne za konwersję kodu źródłowego na formę zrozumiałą dla maszyny, weryfikuje wszystkie polecenia pod kątem ewentualnych błędów, a następnie generuje moduł do wykonania?

A. debugger
B. dekompilator
C. interpreter
D. kompilator

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kompilator to właśnie to narzędzie, które przekształca cały kod źródłowy na raz, zamieniając go na plik wykonywalny lub tzw. kod maszynowy. W praktyce to działa tak: piszesz program w języku wysokiego poziomu, np. C++ czy Java, uruchamiasz kompilator i on sprawdza, czy wszystko w kodzie jest poprawne – od prostych literówek po bardziej złożone błędy składniowe i semantyczne. Jeśli są jakieś błędy, kompilator się na nich zatrzyma i wyświetli Ci komunikaty – nie ruszy dalej, dopóki nie poprawisz. Dopiero potem generuje plik wynikowy, np. .exe na Windowsie albo .class w Javie, który potem może być uruchamiany przez system operacyjny (lub maszynę wirtualną). To cała magia – kod jest gotowy do działania bez ponownego tłumaczenia za każdym razem. Moim zdaniem to ogromne przyspieszenie, szczególnie jak tworzysz większe projekty, bo wiesz, że raz skompilowany program nie wymaga już kompilatora, żeby działać u użytkownika. Kompilatory są kluczowe np. w dużych systemach informatycznych albo wbudowanych (embedded), gdzie liczy się wydajność, przewidywalność i bezpieczeństwo. Nie można też zapomnieć, że kompilatory bardzo często wdrażają różne techniki optymalizacji, dzięki czemu kod wynikowy działa szybciej i sprawniej – przykładem są optymalizacje GCC albo Clang. Z mojego doświadczenia dobra praktyka to zawsze przeprowadzać kompilację w trybie ostrzeżeń, żeby wychwycić nawet najmniejsze nieścisłości. To się naprawdę opłaca – mniej błędów na produkcji!

Pytanie 26

Który z poniższych elementów jest częścią architektury PWA (Progressive Web App)?

A. Service Worker
B. Virtual Machine
C. DOM Renderer
D. Media Encoder

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Service Worker to kluczowy element architektury Progressive Web App (PWA), który umożliwia działania offline, zarządzanie pamięcią podręczną oraz lepsze doświadczenie użytkownika. Działa on jako pośrednik między aplikacją a serwerem, co pozwala na interceptowanie zapytań sieciowych i dostarczanie zasobów z pamięci podręcznej, gdy sieć jest niedostępna. Dzięki temu użytkownicy mogą korzystać z aplikacji nawet w trybie offline. Service Workers są również odpowiedzialne za powiadomienia push, co zwiększa interaktywność aplikacji. W praktyce oznacza to, że można zbudować aplikację, która działa płynnie na różnych platformach (desktop, mobilne), zachowując przy tym szybkość i responsywność. Warto zaznaczyć, że Service Workers muszą być zarejestrowane na stronie obsługiwanej przez HTTPS, co jest jednym z wymogów bezpieczeństwa. Stosowanie Service Workerów jest zgodne z najlepszymi praktykami branżowymi, a ich implementacja znacząco podnosi jakość i użyteczność aplikacji webowych.

Pytanie 27

Algorytm zaprezentowany w zadaniu można zrealizować w języku Java wykorzystując instrukcję

Ilustracja do pytania
A. while
B. switch
C. try
D. if

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pętla while w języku Java jest idealna do implementacji algorytmów, które wymagają wielokrotnego wykonywania bloku kodu dopóki określony warunek logiczny pozostaje prawdziwy. W przedstawionym schemacie blokowym widzimy iteracyjny proces, który zaczyna się od przypisania wartości 2 do zmiennej number, a następnie kontynuuje dodawanie 2 do tej zmiennej tak długo, jak długo jej wartość nie osiągnie 10. Struktura ta jest typowym przykładem problemu, który najlepiej rozwiązać za pomocą pętli while. Wyrażenie warunkowe number != 10 jest sprawdzane przed każdą iteracją pętli, co umożliwia zakończenie pętli w momencie, gdy warunek przestaje być prawdziwy. To podejście jest zgodne z dobrymi praktykami programistycznymi, które zalecają minimalizowanie niepotrzebnych obliczeń i zwiększanie czytelności kodu. Pętle while są często stosowane w sytuacjach, gdy liczba iteracji nie jest z góry znana i zależy od dynamicznie zmieniających się warunków, co czyni je wszechstronnym narzędziem w wielu aplikacjach, od przetwarzania danych po kontrolę przepływu w symulacjach komputerowych. Praktyczna znajomość pętli pozwala na efektywne rozwiązywanie problemów w złożonych projektach informatycznych.

Pytanie 28

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 29

Co to jest shadow DOM?

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

Brak odpowiedzi na to pytanie.

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

Pytanie 30

Co to jest JWT (JSON Web Token)?

A. Biblioteka JavaScript do manipulacji danymi JSON
B. Otwarty standard do bezpiecznego przekazywania informacji między stronami jako obiekt JSON
C. Protokół komunikacji między frontendem a backendem
D. Format przechowywania danych w bazach NoSQL

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
JWT, czyli JSON Web Token, to otwarty standard (RFC 7519), który definiuje sposób bezpiecznego przekazywania informacji między stronami jako obiekt JSON. Głównym celem JWT jest zapewnienie autoryzacji i integralności danych. Token składa się z trzech części: nagłówka, ładunku i podpisu. Nagłówek określa algorytm użyty do podpisu, ładunek zawiera dane użytkownika (np. identyfikator, role), a podpis umożliwia weryfikację, że token nie został zmieniony po jego wydaniu. Dzięki tej strukturze JWT jest popularny w aplikacjach webowych, gdzie użytkownicy muszą być autoryzowani w różnych sekcjach aplikacji. Praktycznym zastosowaniem JWT jest autoryzacja API, gdzie serwery mogą weryfikować tożsamość użytkowników na podstawie tokenów przesyłanych w nagłówkach HTTP, co zwiększa bezpieczeństwo i elastyczność w komunikacji między systemami. Warto podkreślić, że JWT powinny być używane zgodnie z najlepszymi praktykami, takimi jak stosowanie HTTPS, aby chronić dane przed przechwyceniem, oraz regularne odnawianie tokenów, aby zminimalizować ryzyko ich wykorzystywania przez osoby nieuprawnione.

Pytanie 31

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

A. Intel UHD Graphics 630 - zintegrowana
B. AMD Radeon RX 580 - 8GB GDDR5, 256-bit
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 32

Zaprezentowany diagram Gantta odnosi się do projektu IT. Przy założeniu, że każdy członek zespołu dysponuje wystarczającymi umiejętnościami do realizacji każdego z zadań oraz że do każdego zadania można przypisać jedynie jedną osobę, która poświęci na zadanie pełny dzień pracy, to minimalna liczba członków zespołu powinna wynosić:

Ilustracja do pytania
A. 4 osoby
B. 2 osoby
C. 1 osobę
D. 5 osób

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrana odpowiedź jest trafna, bo minimalna liczba członków zespołu wynosi właśnie 2 osoby. W projekcie przedstawionym na diagramie Gantta, kluczowe jest zwrócenie uwagi na to, ile zadań nakłada się w danym tygodniu – a nie łączna liczba zadań. Największe obciążenie zespołu wypada na okresy, gdzie równolegle realizowane są dwa zadania, np. w pierwszym tygodniu są to Projekt aplikacji i Grafika, później w ostatnim tygodniu dwie aplikacje: front-end i back-end. W żadnym momencie nie występuje potrzeba, by więcej niż dwie osoby pracowały równolegle nad różnymi zadaniami. To bardzo praktyczna sytuacja – w realnych projektach IT planuje się obłożenie pracą właśnie przez analizę diagramu Gantta, by nie generować sztucznego przestoju lub nadmiaru ludzi. Moim zdaniem taka optymalizacja zespołu to podstawa w IT, bo pozwala ograniczyć koszty i lepiej zarządzać zasobami. Warto pamiętać, że zgodnie z dobrymi praktykami zarządzania projektami, np. w metodykach PMBOK czy Prince2, zawsze analizuje się ścieżki krytyczne i równoległość zadań, dokładnie w taki sposób, żeby nie dublować niepotrzebnie rąk do pracy. Świetnie, jeśli już na etapie planowania potrafisz to zauważyć i wyciągnąć praktyczne wnioski – to naprawdę przydaje się potem przy rozpisywaniu harmonogramów na czasach rzeczywistych projektów.

Pytanie 33

Która technologia służy do tworzenia responsywnych stron internetowych?

A. WebSockets
B. Media Queries w CSS
C. Local Storage
D. REST API

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Media Queries w CSS to technika, która pozwala na tworzenie responsywnych stron internetowych poprzez dostosowywanie stylów do różnych rozmiarów ekranów i urządzeń. Dzięki zastosowaniu reguł media queries, projektanci mogą definiować, jak elementy na stronie mają się zachowywać w zależności od szerokości ekranu, orientacji urządzenia czy jego rozdzielczości. Na przykład, można ustawić większe marginesy na dużych ekranach desktopowych, a na mniejszych urządzeniach mobilnych zredukować je, aby lepiej wykorzystać ograniczoną przestrzeń. Stosując media queries, można również zmieniać rozmiary czcionek, układ kolumn czy widoczność niektórych elementów, co jest kluczowe dla optymalizacji użytkowania na różnych platformach. Jest to częścią podejścia mobile-first, które stało się standardem w nowoczesnym web designie. Warto również zaznaczyć, że korzystanie z media queries wspiera dostępność i użyteczność stron internetowych, co jest zgodne z dobrymi praktykami branżowymi.

Pytanie 34

Która z poniższych technologii nie jest używana do tworzenia aplikacji mobilnych?

A. COBOL
B. React Native
C. Flutter
D. Kotlin

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
COBOL, czyli Common Business Oriented Language, jest językiem programowania opracowanym w latach 50. XX wieku, głównie do zastosowań w administracji i biznesie, takich jak systemy bankowe czy zarządzanie danymi. Nie jest on przeznaczony do tworzenia aplikacji mobilnych, które wymagają nowoczesnych technologii i frameworków dostosowanych do dynamicznego rozwoju rynku. W przeciwieństwie do Kotlin, React Native i Flutter, które są współczesnymi technologiami umożliwiającymi tworzenie aplikacji mobilnych, COBOL nie posiada narzędzi ani bibliotek, które wspierałyby rozwój aplikacji na systemy iOS czy Android. W praktyce, programiści wykorzystujący te nowoczesne technologie, mogą tworzyć aplikacje, które są responsywne i działają płynnie na różnych urządzeniach mobilnych, co znacząco wpływa na doświadczenia użytkowników. Warto zatem znać różnice między tymi technologiami, aby dobrze zrozumieć, jakie języki i narzędzia są adekwatne do danego projektu.

Pytanie 35

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 36

Co to jest destructuring assignment w JavaScript?

A. Składnia pozwalająca na rozpakowanie wartości z tablic lub obiektów do oddzielnych zmiennych
B. Metoda usuwania nieużywanych zmiennych z kodu
C. Proces konwersji typów danych w JavaScript
D. Technika optymalizacji kodu przez kompilator

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Destructuring assignment w JavaScript to technika, która pozwala na wygodne i intuicyjne rozpakowywanie wartości z tablic oraz obiektów, co znacząco ułatwia pracę z danymi. Używając tej składni, możemy przypisywać wartości do zmiennych w bardziej przejrzysty sposób. Na przykład, jeśli mamy obiekt z danymi użytkownika, zamiast pisać wiele linii kodu, aby uzyskać dostęp do poszczególnych właściwości, możemy użyć destructuring. Przykład: const user = { name: 'Jan', age: 30 }; const { name, age } = user; Teraz mamy bezpośredni dostęp do zmiennych name i age, co poprawia czytelność kodu. Destructuring jest również przydatny w kontekście funkcji, gdzie możemy rozpakowywać argumenty w sposób bardziej zrozumiały. Jest to zgodne z najlepszymi praktykami programowania w JavaScript, co sprawia, że kod jest bardziej zwięzły oraz łatwiejszy do utrzymania. Dodatkowo, technika ta wspiera rozwój złożonych aplikacji, gdzie zarządzanie danymi i ich struktura odgrywają kluczową rolę.

Pytanie 37

Jakie jest podstawowe zadanie funkcji zaprzyjaźnionej w danej klasie?

A. Umożliwienie funkcji dostępu do prywatnych atrybutów klasy
B. Dodawanie nowych instancji do klasy
C. Ograniczenie widoczności atrybutów klasy
D. Generowanie kopii pól obiektu w innej klasie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Funkcja zaprzyjaźniona umożliwia dostęp do prywatnych i chronionych składowych klasy, z którą jest zaprzyjaźniona. To mechanizm, który pozwala na utrzymanie hermetyzacji, jednocześnie umożliwiając wybranym funkcjom lub klasom bezpośredni dostęp do wewnętrznych danych innej klasy. Funkcje zaprzyjaźnione często są stosowane do operacji, które wymagają dostępu do wewnętrznych danych klasy, ale nie powinny być jej metodami, np. operacje arytmetyczne lub porównawcze na obiektach tej klasy.

Pytanie 38

Które z wymienionych działań stanowi zagrożenie dla emocjonalnego dobrostanu człowieka w sieci?

A. Cyberstalking
B. Przesyłanie niezaszyfrowanych plików
C. Nadmierne korzystanie z mediów społecznościowych
D. Zła postawa podczas pracy przy komputerze

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Cyberstalking to groźne zjawisko polegające na uporczywym prześladowaniu, nękaniu lub groźbach w przestrzeni internetowej. Może prowadzić do poważnych problemów emocjonalnych, takich jak lęki, depresja, a nawet zespół stresu pourazowego (PTSD). Cyberstalking narusza prywatność ofiary, wywołując poczucie zagrożenia i bezradności. Walka z tym zjawiskiem obejmuje zgłaszanie przypadków organom ścigania, blokowanie prześladowców i korzystanie z narzędzi ochrony prywatności.

Pytanie 39

Jakie czynności należy wykonać, aby zrealizować zdarzenie kliknięcia na przycisk w aplikacji desktopowej?

A. Powiązać zdarzenie kliknięcia z odpowiednią metodą w kodzie
B. Zmienić plik XAML
C. Zaprojektować nowy dialog modalny
D. Utworzyć metodę w systemie menu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Podłączenie zdarzenia kliknięcia do odpowiedniej metody w kodzie to podstawowy krok w obsłudze interakcji użytkownika z przyciskiem w aplikacjach desktopowych. W środowiskach takich jak WPF (Windows Presentation Foundation), WinForms czy Qt, każda kontrolka (np. przycisk) może posiadać przypisaną metodę, która zostanie wywołana w momencie kliknięcia. Dzięki temu możliwe jest wykonywanie operacji, takich jak otwieranie nowych okien, przetwarzanie danych lub aktualizacja interfejsu użytkownika. Prawidłowa implementacja zdarzeń jest kluczowa dla funkcjonalności aplikacji i umożliwia dynamiczne reagowanie na działania użytkownika. W środowiskach takich jak Visual Studio, proces ten jest intuicyjny i często realizowany przez mechanizm 'kliknij i przeciągnij', a następnie przypisanie kodu do wygenerowanego szkieletu funkcji.

Pytanie 40

Co to jest API w kontekście programowania?

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

Brak odpowiedzi na to pytanie.

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