Wyniki egzaminu

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

Egzamin zdany!

Wynik: 36/40 punktów (90,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

Kod przedstawiony w języku XML/XAML określa:

<Switch
    android:id = "@+id/switch1"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:background = "#00ffff"
    android:text = "Switch"
    tools:layout_editor_absoluteX = "176dp"
    tools:layout_editor_absoluteY = "389dp" />
A. stepper
B. przełącznik
C. suwak
D. listę rozwijaną
Kod przedstawiony w pytaniu to klasyczny przykład wykorzystania komponentu Switch w Androidzie. Switch, jak sama nazwa wskazuje, służy do przełączania między dwoma stanami — najczęściej włącz/wyłącz, aktywne/nieaktywne. Z punktu widzenia interfejsów mobilnych, przełącznik bardzo często znajduje zastosowanie w ustawieniach aplikacji, np. do szybkiego włączania trybu ciemnego, aktywacji powiadomień czy zezwalania na lokalizację. Ten konkretny xml zawiera podstawowe atrybuty, jak android:id, layout_width, layout_height oraz background, czyli kolor tła, co od razu sugeruje, że nie jest to np. dropdown czy suwak. Co ciekawe, Switch różni się od CheckBoxa tym, że wizualnie lepiej komunikuje zmianę trybu (przesuwający się znacznik), co moim zdaniem zwiększa użyteczność, szczególnie jeśli użytkownik ma szybko zrozumieć, co ustawia. Standardy Material Design wręcz zalecają stosowanie Switch do kontrolowania pojedynczych ustawień, bo jest to bardziej czytelne niż inne widgety. Warto pamiętać, że Switch ma różne warianty i można go rozbudować o obsługę zdarzeń onCheckedChangeListener w kodzie Java albo Kotlin, przez co staje się bardzo elastyczny. Odpowiedź przełącznik jest więc zgodna ze wszystkimi cechami tej kontrolki i jej zastosowaniami w praktyce.

Pytanie 2

Jaką wartość będzie miała zmienna result po wykonaniu poniższego kodu PHP?

$array = [5, 1, 8, 3, 7];
$result = 0;
foreach ($array as $value) {
  if ($value > $result) {
    $result = $value;
  }
}
A. 7
B. 24
C. 5
D. 8
Wartość zmiennej result po wykonaniu podanego kodu PHP wynosi 8, ponieważ kod ten ma na celu znalezienie największej liczby w tablicy. Zmienna $result jest początkowo ustawiona na 0, co oznacza, że każda liczba z tablicy, która jest większa od zera, zostanie przypisana do $result. W trakcie iteracji przez tablicę $array, każdy element jest porównywany z bieżącą wartością $result. Kiedy napotykamy wartość 5, która jest większa od 0, zmienna $result zostaje zaktualizowana do 5. Następnie porównujemy 1, co nie zmienia $result. Kiedy napotykamy 8, zmienna $result jest aktualizowana do 8, ponieważ 8 jest większe od 5. Kolejne wartości 3 i 7 również nie zmieniają $result, ponieważ są mniejsze od 8. Po zakończeniu pętli, $result pozostaje równe 8, co jest największą wartością w tablicy. To podejście jest zgodne z dobrymi praktykami programistycznymi, gdzie używa się pętli do przetwarzania kolekcji danych w sposób optymalny i przejrzysty.

Pytanie 3

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

A. Zarządzanie handlem produktami i usługami
B. Udostępnianie informacji i interakcja między użytkownikami
C. Tworzenie kopii zapasowych plików
D. Analiza rezultatów działalności gospodarczej
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 4

Przedstawione w filmie działania wykorzystują narzędzie

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

Pytanie 5

Wykorzystując React.js oraz Angular, stworzono funkcjonalnie równoważne kody źródłowe. Aby móc w metodzie handleSubmit pokazać zawartość kontrolki input w miejscu oznaczonym ???, należy odwołać się do atrybutu o nazwie:
React.js:

nazwa1 = React.createRef();
handleSubmit = e => {
    console.log(this.???.current.value);
}
...
<form onSubmit={this.handleSubmit}>
    <input ref={this.nazwa1} name="nazwa2" id="nazwa3" for="nazwa4" />
Angular:
<form #f="ngForm" (ngSubmit) = "handleSubmit(f)">
    <input ngModel name="nazwa1" id="nazwa2" class="nazwa3" for="nazwa4" >
...
handleSubmit(f) {
    console.log(f.value.???);
}
A. nazwa4
B. nazwa2
C. nazwa1
D. nazwa3
To właśnie nazwa1 jest właściwym atrybutem, do którego trzeba się odwołać, żeby wyciągnąć wartość inputa zarówno w React, jak i w Angularze. W React, kiedy chcemy pobrać wartość z inputa przez refa, to przekazujemy ref={this.nazwa1}, a potem w handleSubmit robimy this.nazwa1.current.value. To po prostu dokładnie ta sama nazwa, którą przypisałeś do refa, nie ma tu żadnej magii. W Angularze z kolei input posiada ngModel oraz name="nazwa1" – i to name jest kluczowe, bo obiekt f.value generowany przez ngForm zawiera wszystkie pola po kluczach odpowiadających atrybutom name. Dzięki temu możesz potem użyć f.value.nazwa1 i dostajesz wartość inputa. W praktyce zawsze warto pilnować, żeby atrybut name był sensowny i jednoznaczny, bo to na nim opierają się frameworki przy serializacji danych formularza i obsłudze ich stanu. Moim zdaniem to jest jedna z bardziej praktycznych umiejętności przy pracy z dynamicznymi formularzami – jeśli ktoś nie dba o spójność nazw atrybutów name, to łatwo o błędy, które są potem trudne do wykrycia. Warto jeszcze pamiętać, że atrybuty typu id, class czy for mają zupełnie inne zastosowanie – służą do stylowania, powiązań z labelkami, itd. Name natomiast to podstawa logicznej obsługi wartości pól formularza. Często spotykam się z sytuacjami, że ktoś próbuje pobierać dane po id czy class, ale to nie jest zgodne z dobrymi praktykami – dla czytelności kodu i łatwości refaktoryzacji o wiele lepiej korzystać z name. Takie rozwiązania są też zalecane w oficjalnej dokumentacji zarówno React, jak i Angulara.

Pytanie 6

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

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

Pytanie 7

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. Tworzenie klasy abstrakcyjnej
D. Wykorzystanie klasy nadrzędnej w innej klasie
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 8

Oznaczenie ochrony przeciwpożarowej przedstawione na symbolu wskazuje na

Ilustracja do pytania
A. przełącznik zasilania
B. system alarmowy przeciwpożarowy
C. rozdzielnię elektryczną
D. punkt remote release
Ten symbol jednoznacznie wskazuje na ręczny ostrzegacz pożarowy, będący kluczowym elementem systemu alarmowego przeciwpożarowego. W praktyce taki przycisk znajdziesz w korytarzach szkół, biur czy dużych hal, zwykle przy wyjściach ewakuacyjnych. Po naciśnięciu wywołuje on alarm w całym obiekcie, pozwalając na szybką reakcję służb oraz ewakuację osób znajdujących się w strefie zagrożenia. Moim zdaniem zrozumienie działania i lokalizacji ręcznych ostrzegaczy jest absolutnie fundamentalne dla bezpieczeństwa pożarowego każdego budynku. Zgodnie z normą PN-EN 54-11 oraz wytycznymi Państwowej Straży Pożarnej, oznaczenie to musi być dobrze widoczne, z wyraźną, czerwoną barwą tła i prostym, czytelnym symbolem. Praktyka pokazuje, że w sytuacjach krytycznych ludzie dużo szybciej reagują na jednoznaczne oznaczenia graficzne niż na same napisy. Właśnie dlatego tak bardzo przykłada się wagę do poprawnej widoczności i rozmieszczenia tych znaków. Sam system alarmowy przeciwpożarowy, którego częścią są takie przyciski, jest podstawą nie tylko ochrony ludzi, ale też minimalizowania strat materialnych, bo pozwala na natychmiastowe powiadomienie odpowiednich służb. Warto zapamiętać, że ręczne ostrzegacze są regularnie testowane podczas przeglądów PPOŻ i ich prawidłowe oznakowanie to wymóg prawny oraz element dobrej praktyki branżowej.

Pytanie 9

Jaką rolę pełni instrukcja throw w języku C++?

A. Ogranicza zasięg zmiennych w bloku try
B. Zgłasza wyjątek, który można przechwycić za pomocą bloku catch
C. Przerywa działanie programu, gdy wystąpi wyjątek
D. Inicjuje nowy wyjątek podczas działania aplikacji
Instrukcja 'throw' w C++ służy do zgłaszania wyjątków, które mogą być następnie przechwycone i obsłużone przez blok 'catch'. Mechanizm ten pozwala na przerwanie normalnego przepływu programu w przypadku wystąpienia błędu i skierowanie sterowania do odpowiedniego miejsca obsługi wyjątków. 'Throw' jest kluczowym elementem obsługi błędów i umożliwia propagowanie informacji o błędach na wyższe poziomy programu, co pozwala na ich efektywną obsługę. Używanie wyjątków poprawia czytelność kodu, umożliwiając oddzielenie logiki biznesowej od logiki obsługi błędów.

Pytanie 10

Jak nazywa się technika umożliwiająca asynchroniczne wykonywanie operacji w JavaScript?

A. Promise
B. Function
C. Variable
D. Object
Promise to technika w JavaScript, która umożliwia obsługę operacji asynchronicznych. W odróżnieniu od tradycyjnych funkcji, które mogą blokować wykonanie kodu do momentu zakończenia operacji, Promise pozwala na kontynuację wykonywania kodu, a wyniki operacji są dostępne, gdy zostaną one zakończone. Główne zastosowanie Promise polega na obsłudze operacji takich jak żądania sieciowe, które mogą trwać nieprzewidywalnie długo. Przykładem jest użycie Promise do wykonania zapytania do API: fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)). Dobrą praktyką jest stosowanie asynchronizacji z użyciem async/await, co pozwala na bardziej czytelny kod. Promise jest częścią ECMAScript 2015 (ES6) i stanowi podstawę dla bardziej zaawansowanych technik, takich jak async/await, co pozwala na jeszcze prostszą obsługę asynchronicznych operacji. Zrozumienie Promise jest kluczowe dla efektywnego programowania w JavaScript, zwłaszcza w kontekście aplikacji webowych, gdzie asynchroniczność odgrywa kluczową rolę.

Pytanie 11

Jakie są kluczowe różnice między typami stałoprzecinkowymi a zmiennoprzecinkowymi?

A. Typy stałoprzecinkowe przechowują liczby całkowite, a typy zmiennoprzecinkowe przechowują liczby z ułamkami dziesiętnymi
B. Typy stałoprzecinkowe wymagają większej ilości pamięci niż typy zmiennoprzecinkowe
C. Typy zmiennoprzecinkowe przechowują wyłącznie liczby ujemne
D. Typy stałoprzecinkowe obsługują liczby ujemne, natomiast typy zmiennoprzecinkowe tylko dodatnie
Główna różnica między typami stałoprzecinkowymi a zmiennoprzecinkowymi polega na tym, że stałoprzecinkowe przechowują liczby całkowite, podczas gdy zmiennoprzecinkowe przechowują liczby z częściami dziesiętnymi. Stałoprzecinkowe typy, takie jak 'int', są bardziej efektywne pod względem wydajności i zajmują mniej pamięci, co czyni je idealnym rozwiązaniem w przypadkach, gdzie precyzja dziesiętna nie jest wymagana. Z kolei typy zmiennoprzecinkowe, takie jak 'float' i 'double', umożliwiają dokładne reprezentowanie wartości niecałkowitych, co jest niezbędne w aplikacjach matematycznych i graficznych. Każdy z tych typów ma swoje zastosowanie w zależności od wymagań projektu.

Pytanie 12

Który z wymienionych etapów w procesie przetwarzania instrukcji przez procesor odbywa się jako pierwszy?

A. Realizacja instrukcji (Execution)
B. Pobranie rozkazu z pamięci (Fetch)
C. Zapis wyników do pamięci (Write Back)
D. Rozkodowanie rozkazu (Decode)
Pierwszą rzeczą, jaką robi procesor, jest pobranie rozkazu z pamięci, co nazywamy Fetch. To bardzo ważny etap w budowie komputera. Normalnie cykl wykonywania instrukcji składa się z trzech głównych kroków: pobierania, dekodowania i wykonania. W fazie Fetch procesor dobiera się do pamięci i ściąga instrukcję, którą zaraz wykona. Do tego używa rejestru wskaźnika instrukcji, czyli Instruction Pointer, który pokazuje, gdzie w pamięci jest następna instrukcja. Jak to działa w praktyce? Można to zobaczyć na przykładzie procesora x86, gdzie CPU na początku cyklu sprawdza pamięć RAM, szukając instrukcji według adresu, który podaje wskaźnik. Standardy takie jak ISA (Instruction Set Architecture) mówią, że ten krok to podstawa, bo to właśnie od niego zaczyna się wszystko, co robi procesor.

Pytanie 13

Z jakiego obiektu można skorzystać, aby stworzyć kontrolkę wskazaną strzałką na ilustracji?

Ilustracja do pytania
A. Windows - dla biblioteki WPF; JFrame - dla biblioteki Swing
B. Text - dla biblioteki WPF; JText - dla biblioteki Swing
C. Box - dla biblioteki WPF; JField - dla biblioteki Swing
D. TextBox - dla biblioteki WPF; JTextField - dla biblioteki Swing
Wybrałeś dokładnie to, co w praktyce programisty jest najważniejsze, czyli TextBox dla WPF i JTextField dla Swinga. Te dwa komponenty to absolutna podstawa, jeśli chodzi o pola do wprowadzania tekstu, zarówno w aplikacjach .NET, jak i Java. W WPF TextBox pozwala na przyjmowanie danych od użytkownika, obsługę zdarzeń, walidację, formatowanie tekstu – ogólnie wszystko, co potrzeba do pracy z tekstem w GUI. W Swingu JTextField jest odpowiednikiem, bardzo intuicyjnym i prostym w użyciu, świetnie się sprawdza przy prostych formularzach czy interfejsach użytkownika. Co ciekawe, oba te komponenty są bardzo elastyczne, można je stylizować, podłączać do systemów walidacji czy nawet rozbudowywać o własne mechanizmy autouzupełniania. Spotkałem się wielokrotnie z sytuacją, gdzie poprawne zastosowanie TextBoxa lub JTextFielda znacząco podnosiło jakość aplikacji – bo jednak wygoda użytkownika i poprawność danych są kluczowe. Takie wybory są zgodne z dokumentacją Microsoftu oraz Oracla, więc trzymasz się dobrych praktyk. Z mojej perspektywy, jeśli chcesz pisać nowoczesne, użytkowe aplikacje desktopowe, znajomość tych kontrolek to absolutny must-have.

Pytanie 14

Co to jest local storage w kontekście aplikacji webowych?

A. Technologia przechowywania danych w pamięci RAM aplikacji
B. Mechanizm pozwalający na przechowywanie danych w przeglądarce użytkownika bez określonego czasu wygaśnięcia
C. Baza danych NoSQL działająca na serwerze aplikacji
D. System plików tymczasowych używany przez przeglądarkę
Odpowiedzi sugerujące, że local storage jest technologią przechowywania danych w pamięci RAM aplikacji, bazą danych NoSQL działającą na serwerze aplikacji lub systemem plików tymczasowych używanym przez przeglądarkę, opierają się na niepoprawnym rozumieniu architektury aplikacji webowych oraz sposobów przechowywania danych. Przechowywanie danych w pamięci RAM jest tymczasowe i nie przetrwa ponownego uruchomienia aplikacji, co czyni je nieodpowiednim dla zastosowań wymagających trwałości. Bazy danych NoSQL, takie jak MongoDB, działają na serwerach i są przeznaczone do złożonego zarządzania danymi, podczas gdy local storage jest prostym mechanizmem dostępnych w przeglądarkach, który nie wymaga skomplikowanej infrastruktury serwerowej. Z kolei systemy plików tymczasowych są stosowane do przechowywania plików, które nie są zamierzane do długoterminowego przechowywania, co stoi w sprzeczności z funkcjonalnością local storage, które pozwala na długotrwałe zachowanie danych. Często mylnie przyjmuje się, że wszystkie metody przechowywania danych w aplikacjach webowych są ze sobą tożsame, co prowadzi do pomyłek w projektowaniu aplikacji. Kluczowe jest zrozumienie różnic pomiędzy tymi podejściami oraz ich odpowiednich zastosowań w kontekście budowy skalowalnych i funkcjonalnych rozwiązań webowych.

Pytanie 15

Co oznacza operator '===' w JavaScript?

A. Porównanie wartości
B. Porównanie wartości i typów
C. Przypisanie wartości
D. Konkatenacja stringów
Operator '===' w JavaScript jest używany do porównania wartości oraz ich typów. To znaczy, że aby dwa elementy uznano za równe, muszą mieć zarówno tę samą wartość, jak i ten sam typ. Przykładowo, porównanie liczby 5 i stringa '5' zwróci false, ponieważ różnią się typem. Używanie '===' jest zalecane w dobrych praktykach programistycznych, ponieważ eliminuje niejednoznaczności związane z równością luźną (operator '=='), która może prowadzić do nieprzewidywalnych wyników. Na przykład, '5' == 5 zwróci true, co może być mylące. Dlatego w sytuacjach, gdzie zależy nam na ścisłym porównaniu, powinno się zawsze stosować '===' dla jasności kodu i uniknięcia błędów. W kontekście profesjonalnego programowania, korzystanie z '===' zapewnia lepszą kontrolę typów danych, co jest kluczowe w większych projektach, gdzie błędy typów mogą prowadzić do poważnych problemów z debugowaniem i utrzymywaniem kodu.

Pytanie 16

Jaki jest wymagany sposób do realizacji algorytmu sortowania bąbelkowego na n-elementowej tablicy?

A. n-liczby warunków
B. dwie pętle działające na najwyżej n-elementach każda
C. jedna pętla operująca na 2n elementach oraz warunek
D. dwie pętle funkcjonujące na co najmniej (n+1) elementach każda
Aby zaimplementować algorytm sortowania bąbelkowego, potrzebne są dwie pętle iteracyjne, które porównują i zamieniają miejscami elementy tablicy. Zewnętrzna pętla iteruje po całej tablicy, natomiast wewnętrzna pętla wykonuje kolejne porównania i przestawia elementy, jeśli są one w nieprawidłowej kolejności. Algorytm sortowania bąbelkowego charakteryzuje się prostotą, ale jego złożoność obliczeniowa wynosi O(n²), co czyni go mało efektywnym dla dużych zbiorów danych. Niemniej jednak, jest to jedno z pierwszych ćwiczeń programistycznych, które wprowadza do zagadnień algorytmicznych i uczy podstaw iteracji oraz manipulacji tablicami. Pomimo swojej niskiej wydajności, sortowanie bąbelkowe jest często wykorzystywane do celów edukacyjnych oraz w przypadkach, gdy prostota implementacji ma większe znaczenie niż szybkość działania.

Pytanie 17

Algorytmy, które są wykorzystywane do rozwiązywania problemów przybliżonych lub takich, które nie mogą być opisane za pomocą algorytmu dokładnego, na przykład w prognozowaniu pogody czy identyfikacji nowych wirusów komputerowych, to algorytmy.

A. iteracyjne
B. heurystyczne
C. rekurencyjne
D. liniowe
Algorytmy heurystyczne są metodami rozwiązywania problemów, które są stosowane w sytuacjach, gdy nie ma jednoznacznego algorytmu dokładnego lub gdy problem jest zbyt skomplikowany, aby można go było rozwiązać w rozsądnym czasie. Przykłady zastosowań algorytmów heurystycznych obejmują przewidywanie pogody, gdzie różne modele atmosferyczne mogą być łączone w celu uzyskania lepszej prognozy, oraz rozpoznawanie nowych wirusów komputerowych, gdzie algorytmy heurystyczne pozwalają na identyfikację wzorców i anomalii w zachowaniu oprogramowania. Algorytmy te różnią się od tradycyjnych algorytmów liniowych, które działają na podstawie z góry określonych kroków oraz algorytmów rekurencyjnych, które polegają na rozwiązywaniu problemu poprzez dzielenie go na mniejsze podproblemy. Heurystyki są bardziej elastyczne, ponieważ pozwalają na zastosowanie intuicji i doświadczenia w procesie rozwiązywania. W praktyce algorytmy heurystyczne często łączą różne podejścia, aby uzyskać wyniki, które są wystarczająco dobre w krótkim czasie, co czyni je idealnymi do zastosowania w dynamicznie zmieniających się dziedzinach, takich jak analiza danych i sztuczna inteligencja.

Pytanie 18

Która z wymienionych sytuacji stanowi naruszenie praw autorskich?

A. Używanie programu typu open-source zgodnie z warunkami licencji
B. Nabycie licencji na oprogramowanie
C. Tworzenie kopii zapasowej legalnie zakupionego programu
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 19

Jaki środek ochronny najlepiej chroni przed hałasem w biurze?

A. Panele akustyczne wygłuszające
B. Mata antypoślizgowa
C. Lampy biurowe o niskim poziomie natężenia światła
D. Okna zamknięte
Maty antypoślizgowe służą do zwiększenia bezpieczeństwa na śliskich powierzchniach, ale nie wpływają na poziom hałasu w miejscu pracy. Zamknięcie okien może ograniczyć hałas z zewnątrz, ale nie jest wystarczającą metodą wygłuszania hałasu generowanego wewnątrz biura. Lampy biurowe o niskim natężeniu światła wpływają na jakość oświetlenia, co poprawia komfort pracy wzrokowej, ale nie mają żadnego związku z redukcją hałasu. Właściwe wygłuszenie wymaga specjalnych materiałów i technologii, takich jak panele akustyczne lub ścianki dźwiękochłonne.

Pytanie 20

Co to jest event bubbling w JavaScript?

A. System powiadomień o błędach w konsoli JavaScript
B. Technika optymalizacji wydajności zdarzeń na stronie
C. Metoda zarządzania kolejką zdarzeń w aplikacjach asynchronicznych
D. Proces, w którym zdarzenie zaczyna się od najbardziej szczegółowego elementu i propaguje w górę hierarchii DOM
Event bubbling to kluczowy mechanizm w modelu zdarzeń JavaScript, który polega na tym, że gdy zdarzenie zostaje wywołane na danym elemencie DOM, propaguje się ono w górę hierarchii DOM, zaczynając od najniższego elementu (czyli elementu, który bezpośrednio wywołuje zdarzenie) i kierując się ku elementom nadrzędnym. To podejście umożliwia efektywne zarządzanie zdarzeniami, gdyż pozwala na przypisanie pojedynczej funkcji obsługi zdarzeń do elementu nadrzędnego, zamiast do każdego z podrzędnych elementów. Na przykład, jeśli mamy listę elementów <li> w <ul>, możemy ustawić jeden nasłuchiwacz zdarzeń na <ul>, co pozwoli na przechwytywanie kliknięć na wszystkich <li>, wykorzystując obiekt Event do określenia, który element został kliknięty. W praktyce, event bubbling przyczynia się do zmniejszenia liczby nasłuchiwaczy zdarzeń i optymalizacji wydajności aplikacji webowych, a także ułatwia organizację kodu. Warto również pamiętać o metodzie stopPropagation(), która może być używana, aby zatrzymać propagację zdarzenia, gdy zajdzie taka potrzeba. Zrozumienie event bubbling jest istotne w kontekście standardów W3C, które definiują zasady dla przetwarzania zdarzeń.

Pytanie 21

Prezentowana metoda jest realizacją algorytmu

public static String fun1(String str) {
    String output = " ";
    for (var i = (str.length()-1); i >= 0; i--)
        output += str.charAt(i);
    return output;
}
A. sprawdzającego, czy dany ciąg jest palindromem
B. sortującego ciąg od znaku o najniższym kodzie ASCII do znaku o najwyższym kodzie
C. odwracającego ciąg
D. wyszukującego literę w ciągu
W tym zadaniu chodziło o rozpoznanie, co właściwie robi metoda fun1. Jeśli przeanalizujesz kod, to widać, że w pętli for program przechodzi przez wszystkie znaki wejściowego łańcucha od końca do początku i dokleja je do zmiennej output. Efekt? Zwracany napis jest po prostu oryginalnym tekstem zapisanym wspak, czyli odwróconym. To bardzo prosty przykład algorytmu odwracania ciągu znaków. W praktyce takie rozwiązania przydają się choćby wtedy, gdy chcemy sprawdzić, czy łańcuch jest palindromem (choć samo odwracanie to tylko pierwszy krok), przy szyfrowaniu prostymi metodami czy podczas manipulacji danymi wejściowymi, na przykład w edytorach tekstu lub różnych parserach. Moim zdaniem, warto pamiętać o dobrych praktykach – w Javie, jeśli masz do czynienia z wieloma operacjami na napisach, lepiej używać StringBuildera zamiast tworzyć nowe Stringi, bo jest to wydajniejsze pod kątem zarządzania pamięcią. Dla ciekawych: w bibliotekach standardowych Javy już istnieją gotowe narzędzia do odwracania ciągów (np. StringBuilder.reverse()), ale znajomość działania takiego algorytmu pozwala lepiej zrozumieć, jak działają operacje na napisach "pod spodem". Z mojego doświadczenia, umiejętność samodzielnego napisania takich prostych funkcji bardzo pomaga przy nauce bardziej zaawansowanych algorytmów tekstowych oraz rozwija wyobraźnię programistyczną.

Pytanie 22

Jaki typ złośliwego oprogramowania funkcjonuje w tle, zbierając dane o wprowadzanych hasłach?

A. Keylogger
B. Spyware
C. Trojan
D. Adware
Keylogger to takie złośliwe oprogramowanie, które działa w tle i rejestruje wszystkie naciśnięcia klawiszy. To naprawdę niebezpieczne, bo może przechwytywać hasła i inne ważne dane osobowe. Keyloggery mogą się dostawać na komputer na różne sposoby, na przykład przez zainfekowane pliki, złośliwe reklamy albo w ramach innych niebezpiecznych programów. Przykładami takich keyloggerów są Spyrix czy Perfect Keylogger, które mogą monitorować, co robisz na komputerze. Z punktu widzenia bezpieczeństwa, standardy takie jak ISO/IEC 27001 mówią, jak ważna jest ochrona informacji. Dlatego tak istotne jest, żeby użytkownicy mieli świadomość zagrożeń, jakie niosą keyloggery i używali dobrego oprogramowania antywirusowego, żeby chronić swoje urządzenia i dane.

Pytanie 23

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

W Android Studio:
<TextView android:text="@{viewmodel.userName}" />
W XAML:
<Label Text="{Binding Source={x:Reference slider2}, Path=Value}" />
A. wiązanie oraz eksportowanie plików z różnych modułów aplikacji
B. wiązać właściwości (property) elementu interfejsu użytkownika z danymi lub właściwością innego obiektu
C. przetwarzanie zdarzeń kontrolek interfejsu użytkownika przez wywoływanie odpowiednich funkcji
D. zarządzanie mechanizmem obietnic (promises) lub obserwatora (observable) w programowaniu asynchronicznym
Wiązanie (binding) w kontekście interfejsów użytkownika, takich jak Android Studio czy XAML, to bardzo kluczowy mechanizm, który pozwala na automatyczne połączenie danych z logiki aplikacji (np. zmiennych, modeli ViewModel) z konkretnymi właściwościami kontrolek na ekranie. Dzięki temu nie trzeba ręcznie programować każdej aktualizacji – wszystko dzieje się „w tle”. Na przykład, jeśli użytkownik zmieni wartość jakiejś kontrolki, takiej jak suwak (Slider), odpowiednia właściwość w klasie ViewModel również się zaktualizuje i na odwrót. To podejście jest zgodne z architekturą MVVM (Model-View-ViewModel), która jest bardzo popularna w aplikacjach mobilnych i desktopowych. Moim zdaniem to ogromna oszczędność czasu i po prostu mniej błędów w kodzie, bo nie trzeba pisać setek linii kodu łączącego UI z danymi. W praktyce binding często umożliwia także walidację danych na bieżąco, reakcje na zmiany oraz poprawia czytelność kodu. Bez tego, nawet proste aplikacje robią się niepotrzebnie skomplikowane i trudne do utrzymania. Przykłady użycia – to chociażby powiązanie tekstu wyświetlanego w TextView z polem w ViewModel, czy automatyczna aktualizacja etykiety, gdy zmienia się wartość suwaka. To jedna z podstawowych rzeczy, które wyróżniają nowoczesne frameworki UI – i szczerze, trudno bez tego wyobrazić sobie dzisiejsze tworzenie aplikacji.

Pytanie 24

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

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

Pytanie 25

Jakie znaczenie ma termin "przesłanianie metody" w kontekście programowania obiektowego?

A. Tworzenie nowej metody w klasie bazowej
B. Zastosowanie tej samej nazwy metody w klasie bazowej i pochodnej, ale z inną implementacją w klasie pochodnej
C. Przenoszenie metod z jednej klasy do drugiej
D. Zmiana metody prywatnej na metodę publiczną
Definiowanie nowej metody w klasie bazowej to zwykła deklaracja metody i nie jest to przesłanianie. Zamiana metody prywatnej na publiczną to zmiana modyfikatora dostępu, a nie przesłanianie. Kopiowanie metod z jednej klasy do innej nie jest związane z przesłanianiem – kopiowanie kodu narusza zasadę DRY (Don't Repeat Yourself) i jest rzadko stosowane w dobrze zaprojektowanych aplikacjach obiektowych.

Pytanie 26

Jaką właściwość ma sieć synchroniczna?

A. Gwarantuje większą elastyczność w przesyłaniu danych
B. Przekazywanie danych zachodzi w sposób niesystematyczny
C. Nie jest konieczna synchronizacja zegarów
D. Transmisja danych odbywa się w wyznaczonych interwałach czasowych
Sieć synchroniczna charakteryzuje się tym, że transmisja danych odbywa się w ustalonych odstępach czasu, co oznacza, że wszystkie urządzenia w sieci są zsynchronizowane do jednego zegara. Taki sposób przesyłania danych pozwala na precyzyjne określenie momentu, w którym dane są wysyłane i odbierane, co redukuje opóźnienia i błędy w komunikacji. Przykładem sieci synchronicznej jest system TDM (Time Division Multiplexing), który dzieli czas na różne sloty, przydzielając każdy slot konkretnemu użytkownikowi lub urządzeniu. Dzięki temu każdy uczestnik sieci ma gwarancję, że w swoim czasie dostanie dostęp do medium transmisyjnego. Standardy takie jak SONET (Synchronous Optical Network) i SDH (Synchronous Digital Hierarchy) są przykładami technologii, które wykorzystują synchronizację do efektywnego przesyłania danych na dużych odległościach. Takie podejście jest powszechnie stosowane w telekomunikacji, gdzie wysoka wydajność i niezawodność transmisji są kluczowe dla jakości usług.

Pytanie 27

Na zaprezentowanych ilustracjach znajduje się okno aplikacji w wersji początkowej oraz po wprowadzeniu danych. Przyjmując, że pole "Dostępne środki" służy do wprowadzania wartości typu rzeczywistego, wskaż elementy struktury, które najlepiej odpowiadają tym danym?

Ilustracja do pytania
A. Kod 3
B. Kod 4
C. Kod 1
D. Kod 2
Dla pola 'Dostępne środki', które powinno przechowywać wartości rzeczywiste, odpowiednią strukturą jest ta zawierająca typ danych float lub double. Są to typy zmiennoprzecinkowe umożliwiające przechowywanie liczb z częścią ułamkową, co jest kluczowe przy operacjach finansowych i precyzyjnych obliczeniach. Wybór odpowiedniej struktury danych gwarantuje dokładność i minimalizuje ryzyko błędów związanych z zaokrągleniami.

Pytanie 28

Jakie jest podstawowe zadanie wykorzystania frameworka Node.js w aplikacjach internetowych?

A. Budowanie aplikacji mobilnych
B. Weryfikacja API
C. Kreowanie graficznego interfejsu użytkownika
D. Zarządzanie aplikacjami serwerowymi i realizacja przetwarzania asynchronicznego
Node.js to w zasadzie takie środowisko, które pozwala na uruchamianie JavaScriptu na serwerze. Dzięki temu można budować różne aplikacje serwerowe i radzić sobie z asynchronicznym przetwarzaniem. Fajnie, że Node.js może obsługiwać wiele połączeń jednocześnie, co sprawia, że nadaje się do aplikacji, które mają dużo użytkowników, jak czaty czy różne API. Jest to dość wydajne rozwiązanie dzięki architekturze opartej na zdarzeniach, więc nie zajmuje za dużo zasobów. Co ciekawe, używając Node.js, można pisać kod zarówno na serwerze, jak i na kliencie, co jest naprawdę dużą oszczędnością czasu.

Pytanie 29

Która z poniższych nie jest cechą architektury mikroserwisów?

A. Autonomia zespołów rozwijających poszczególne usługi
B. Wspólna baza danych dla wszystkich usług
C. Odporność na awarie pojedynczych komponentów
D. Niezależne wdrażanie poszczególnych usług
W architekturze mikroserwisów kluczową cechą jest niezależność każdej usługi, co obejmuje również niezależne zarządzanie danymi. Wspólna baza danych dla wszystkich usług narusza tę zasadę, ponieważ prowadzi do silnych powiązań między usługami, co ogranicza ich autonomię. Przykładem dobrych praktyk w architekturze mikroserwisów jest stosowanie wzorca bazy danych per mikroserwis, co pozwala na niezależne skalowanie, wdrażanie i rozwijanie poszczególnych usług. W praktyce, takie podejście zwiększa elastyczność w rozwoju i ułatwia szybkie wprowadzanie zmian, co jest kluczowe w nowoczesnym świecie IT. Zgodnie z zasadami DevOps i CI/CD, mikroserwisy powinny być w stanie wprowadzać zmiany w sposób autonomiczny, bez wpływu na inne komponenty systemu. Na przykład, jeżeli jedna usługa wymaga zmiany schematu bazy danych, to nie powinno to wpływać na inne usługi, co umożliwia stabilność oraz ciągłość działania całego systemu.

Pytanie 30

Który z wymienionych typów danych należy do typu logicznego?

A. bool
B. char
C. int
D. float
Typ danych 'bool' (boolean) jest typem logicznym, który przechowuje jedną z dwóch wartości: 'true' lub 'false'. Typy logiczne są nieodłącznym elementem programowania, ponieważ umożliwiają implementację warunków i pętli sterujących przepływem programu. Typ 'bool' znajduje zastosowanie w praktycznie każdym języku programowania, w tym C++, Java, Python i C#. Operacje logiczne, takie jak 'AND', 'OR' i 'NOT', opierają się na wartościach typu 'bool', co czyni je podstawą dla algorytmów decyzyjnych i strukturalnych. Zastosowanie typów logicznych zwiększa czytelność kodu i pozwala na efektywne zarządzanie warunkami logicznymi.

Pytanie 31

Wskaż uproszczoną wersję kodu XAML dla elementów w pokazanym oknie dialogowym?

Ilustracja do pytania
A. Kod 3
B. Kod 1
C. Kod 2
D. Kod 4
Dobrze jest znać podstawowe różnice pomiędzy ListBox, ComboBox, CheckBox, RadioButton oraz Label w XAML. W tym oknie dialogowym widać wyraźnie, że po lewej stronie użytkownik ma możliwość wyboru gatunku zwierzęcia spośród kilku opcji wyświetlonych jednocześnie. Takie zadanie najlepiej spełnia ListBox, bo umożliwia wygodną selekcję z widocznej listy. U góry po prawej jest pole tekstowe do wpisania imienia zwierzaka, więc TextBox jak najbardziej pasuje. Poniżej mamy dwa pola wyboru – „Zaszczepiony?” i „Na diecie?” – to są typowe przypadki na CheckBoxy: można zaznaczyć dowolne lub oba naraz. Kluczowe jest to, że CheckBox pozwala użytkownikowi wybrać dowolną kombinację, a nie tylko jedną opcję jak RadioButton. Z mojego doświadczenia często początkujący mylą ComboBox z ListBoxem, ale tu akurat lista jest zawsze widoczna, co jest typowe dla ListBoxa. Stosowanie CheckBoxów dla takich dwustanowych opcji też jest zgodne z dobrymi praktykami UX i standardami opisu formularzy w XAML. W pracy zawodowej często się to wykorzystuje, bo kod jest czytelny i łatwo go rozszerzać. Właśnie taki zestaw – ListBox, TextBox, CheckBox – jest najbardziej przejrzysty i zgodny z zamysłem projektanta interfejsów. Fajnie jest to zapamiętać, bo ta kombinacja pojawia się w wielu firmowych projektach.

Pytanie 32

Jakie informacje zawiera dokumentacja realizacji projektu?

A. Podręcznik użytkownika dla końcowych odbiorców aplikacji
B. Strategia marketingowa aplikacji
C. Dane dotyczące faz wdrożenia aplikacji w środowisku produkcyjnym
D. Zestawienie błędów wykrytych w trakcie testów
Dokumentacja wdrożenia projektu zawiera informacje o etapach implementacji aplikacji w środowisku produkcyjnym. Obejmuje ona szczegółowe procedury instalacji, konfiguracji serwerów, zależności systemowych oraz sposób integracji aplikacji z innymi narzędziami. Tego rodzaju dokumentacja jest niezbędna dla zespołów DevOps i administratorów systemów, ponieważ umożliwia płynne przenoszenie aplikacji z etapu testowego do środowiska produkcyjnego. Zawiera również instrukcje dotyczące kopii zapasowych, planów awaryjnych oraz sposobów monitorowania aplikacji po wdrożeniu. Prawidłowo przygotowana dokumentacja wdrożeniowa minimalizuje ryzyko błędów i przyspiesza proces uruchamiania aplikacji na serwerach produkcyjnych.

Pytanie 33

Która z metod zarządzania projektem jest oparta na przyrostach realizowanych w sposób iteracyjny?

A. Model prototypowy
B. Model wodospadowy (waterfall)
C. Model spiralny
D. Metodyki zwinne (Agile)
Model kaskadowy, znany też jako waterfall, jest trochę inny. Działa sekwencyjnie, więc każda faza projektu musi się skończyć, zanim zaczniemy następną – nie ma tu miejsca na iteracje. Z kolei model prototypowy polega na tworzeniu próbnych wersji aplikacji, ale też nie skupia się na iteracyjnym dostarczaniu funkcjonalności. A model spiralny łączy w sobie aspekty prototypowania i podejścia kaskadowego, przy czym iteracje są długie i bardziej cykliczne, a nie krótkie i dynamiczne, jak w Agile.

Pytanie 34

Który z wymienionych algorytmów sortujących posiada średnią złożoność obliczeniową równą O(n log n)?

A. Sortowanie przez wstawianie
B. Sortowanie bąbelkowe
C. Sortowanie szybkie (QuickSort)
D. Sortowanie przez wybór
QuickSort to naprawdę jeden z najlepszych sposobów na sortowanie. W zasadzie chodzi o to, że dzielimy naszą tablicę na dwie części, z pomocą takiego specjalnego elementu, który nazywamy pivotem. W praktyce działa to tak, że mamy część mniejszą i większą od tego pivota, a potem każdą z tych części sortujemy jeszcze raz, tak jakbyśmy powtarzali cały proces. Myślę, że to działa super, szczególnie na dużych zbiorach danych, i dlatego QuickSort jest naprawdę popularny w różnych programach i aplikacjach.

Pytanie 35

Które z wymienionych stwierdzeń najcelniej opisuje proces uruchamiania aplikacji?

A. Tłumaczenie kodu źródłowego na język pośredni
B. Przetwarzanie kodu źródłowego przez kompilator
C. Generowanie pliku źródłowego
D. Wykonywanie programu na podstawie przetłumaczonego kodu maszynowego
Uruchomienie programu to naprawdę ważny moment, bo w tym czasie procesor zaczyna działać na kodzie maszynowym. Ten kod powstaje podczas kompilacji, która zamienia kod źródłowy na coś, co komputer rozumie. W tym etapie program trafia do pamięci, a także przygotowywane są różne dane do działania. Tak więc, to jest kluczowy krok w całej historii programu, bo decyduje, jak dobrze będzie działać.

Pytanie 36

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

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

Pytanie 37

Jakiego kwalifikatora powinno się użyć dla metody, aby umożliwić do niej dostęp jedynie z wnętrza tej klasy oraz klas dziedziczących, a także, by metoda ta nie była dostępna w żadnej funkcji?

A. private
B. reinterpret_cast
C. protected
D. public
Słowo kluczowe protected to w programowaniu obiektowym zdecydowanie ciekawa sprawa – i, szczerze mówiąc, bardzo przydatne narzędzie, jeśli chodzi o kontrolę dostępu do metod i pól w klasach. Wybierając protected, dajesz znać kompilatorowi, że dana metoda ma być dostępna tylko wewnątrz tej klasy i przez klasy pochodne, czyli dziedziczące. To oznacza, że kod spoza tej hierarchii (na przykład zwykłe funkcje czy metody innych klas) nie będzie mógł się do niej „dobrać”, nawet jeśli bardzo by chciał. W praktyce często korzysta się z protected, gdy projektujesz klasy bazowe i chcesz, żeby pewne operacje były do dyspozycji tylko dla klas dziedziczących, ale już nie dla całego świata. Przykładowo, możesz mieć klasę Figure i w niej metodę protected calculateArea(), którą nadpisują konkretne figury, ale nie chcesz, żeby ktoś poza tym drzewem dziedziczenia się do niej odwołał. To podejście daje większą elastyczność niż private (bo pozwala na dostęp potomkom), ale jednocześnie lepszą kontrolę niż public. Moim zdaniem, stosowanie protected to bardzo dobra praktyka, gdy wiesz, że chcesz zabezpieczyć metody, ale nie chcesz ich zupełnie „zamykać” tylko dla pojedynczej klasy. Warto też pamiętać, że to rozwiązanie promuje tzw. hermetyzację – czyli jedną z kluczowych zasad OOP, co jest mocno doceniane w profesjonalnych projektach.

Pytanie 38

Zapisany kod w języku Python ilustruje

pierwiastki = {"N": "Azot", "O": "Tlen", "P": "Fosfor", "Si": "Siarka"}
A. stos
B. tablicę asocjacyjną (słownik)
C. strukturę
D. kolejkę (LIFO)
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 39

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

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

Pytanie 40

Jakie z wymienionych czynności może zagrażać cyfrowej tożsamości?

A. Aktywacja uwierzytelniania dwuskładnikowego
B. Klikanie w podejrzane linki w wiadomościach e-mail
C. Tworzenie unikalnych oraz mocnych haseł
D. Cykliczna zmiana haseł do kont
Klikanie w podejrzane linki w wiadomościach e-mail to jedno z najczęstszych źródeł infekcji i naruszenia cyfrowej tożsamości. Cyberprzestępcy często wykorzystują phishing, czyli technikę polegającą na wysyłaniu fałszywych wiadomości, które wyglądają na autentyczne. Kliknięcie w link może prowadzić do zainstalowania złośliwego oprogramowania lub przekierowania na stronę wyłudzającą dane logowania. Aby uniknąć tego zagrożenia, zaleca się sprawdzanie adresu nadawcy, unikanie otwierania załączników z nieznanych źródeł i korzystanie z filtrów antyphishingowych.