Wyniki egzaminu

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

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Co oznacza pojęcie MVP w kontekście projektowania aplikacji?

A. Mobile Virtual Platform - platforma do testowania aplikacji mobilnych
B. Multiple Value Platform - platforma wspierająca wiele typów wartości danych
C. Minimum Viable Product - produkt o minimalnej funkcjonalności zdolny do działania
D. Most Valuable Program - program uznany za najbardziej wartościowy w organizacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pojęcie Minimum Viable Product (MVP) odnosi się do koncepcji projektowania produktów, która zakłada stworzenie wersji produktu z minimalną funkcjonalnością, zdolnej do spełnienia podstawowych potrzeb użytkowników. Celem MVP jest jak najszybsze wprowadzenie produktu na rynek, co pozwala na zbieranie danych od rzeczywistych użytkowników i dostosowywanie produktu na podstawie ich feedbacku. Tego rodzaju podejście jest zgodne z metodologią Lean Startup, która promuje szybkie cykle iteracyjne i minimalizację ryzyka inwestycyjnego. Przykładem MVP może być aplikacja mobilna, która oferuje tylko najważniejsze funkcje, na przykład możliwość rejestracji i przeglądania treści, zamiast pełnej gamy opcji. Dzięki temu zespół developerski może szybko identyfikować kluczowe potrzeby użytkowników i wprowadzać odpowiednie udoskonalenia. W praktyce MVP pozwala nie tylko na szybsze wprowadzenie produktu na rynek, ale również na optymalizację kosztów i czasów rozwoju, co jest szczególnie istotne w dynamicznie zmieniającym się środowisku technologicznym.

Pytanie 2

Jakie funkcje realizuje polecenie "git clone"?

A. Łączy dwa branche w repozytorium
B. Rejestruje zmiany w historii repozytorium
C. Usuwa zdalne repozytorium
D. Tworzy lokalną kopię już istniejącego repozytorium

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polecenie "git clone" to w zasadzie jedna z pierwszych rzeczy, które poznaje się na początku pracy z Gitem. Służy ono do skopiowania całego istniejącego repozytorium – czyli pobiera zarówno wszystkie pliki, jak i całą historię commitów. To jest ogromnie przydatne, bo nie tylko masz najnowszy kod, ale od razu całą historię zmian, branche, tagi i inne rzeczy. Standardowo używa się tego polecenia, kiedy chcesz zacząć pracę nad projektem, który jest już na jakimś zdalnym serwerze (np. Githubie albo GitLabie). W praktyce wygląda to tak, że podajesz adres repozytorium, wpisujesz "git clone https://adres.repo.git" i po kilku chwilach masz pełną kopię projektu u siebie na dysku. Co ciekawe, narzędzie od razu ustawia Ci zdalne połączenie do pierwotnego repozytorium jako "origin", więc potem możesz spokojnie wykonywać polecenia typu git fetch, git pull czy git push. Moim zdaniem to super wygodne, bo cała struktura repozytorium, nawet z podfolderami czy nietypowymi ustawieniami, zostaje zachowana. Warto pamiętać, że git clone to nie tylko kopiowanie plików – to pobieranie całej bazy danych Git, więc masz możliwość cofania się w historii czy przeglądania wszystkich commitów lokalnie i offline. Z mojego doświadczenia: często nowi użytkownicy nie doceniają jeszcze, jak ważne jest to, żeby zawsze pracować na pełnej kopii, a nie wycinku repo. To podstawa bezpiecznej i efektywnej pracy zespołowej.

Pytanie 3

Co następuje, gdy błąd nie zostanie uchwycony przez blok catch?

A. Program zakończy działanie z błędem
B. Program kontynuuje działanie, pomijając błąd
C. Błąd zostanie zignorowany przez kompilator
D. Instrukcja throw zostanie automatycznie wykreślona

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Jeśli wyjątek nie zostanie przechwycony przez blok 'catch', program zakończy działanie z błędem i wygeneruje komunikat o nieobsłużonym wyjątku. Jest to domyślne zachowanie w C++ i innych językach obsługujących wyjątki, co ma na celu zapobieganie dalszemu wykonywaniu kodu, który mógłby prowadzić do nieprzewidywalnych rezultatów. Obsługa wyjątków jest kluczowym elementem zapewniania stabilności i bezpieczeństwa aplikacji – brak jej implementacji może prowadzić do awarii programu. Dlatego zaleca się, aby zawsze stosować odpowiednie bloki 'try-catch' wokół kodu, który może generować wyjątki.

Pytanie 4

Jakie oznaczenie posiada norma krajowa w Polsce?

A. ISO
B. EN
C. PN
D. IEC

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polska Norma, czyli PN, to taki nasz krajowy znak, który mówi, jakie powinny być standardy jakości i techniczne dla różnych produktów i usług w Polsce. Normy PN są dostosowane do tego, czego potrzebujemy na rynku, ale często są oparte na międzynarodowych normach, takich jak ISO czy europejskich EN. Choć wdrażanie tych norm jest dobrowolne, to w wielu branżach ich przestrzeganie jest wręcz konieczne, jeśli chcemy zdobyć odpowiednie certyfikaty jakości. Warto je znać, bo dzięki nim możemy czuć się bezpieczniej, a jakość produktów staje się lepsza. To też wspiera rozwój nowych technologii w Polsce.

Pytanie 5

Jaką istotną właściwość ma algorytm rekurencyjny?

A. Jest podzielony na wiele niezwiązanych funkcji
B. Funkcjonuje tylko w przypadku tablic dynamicznych
C. Wywołuje się wielokrotnie w jednej iteracji
D. Zawiera wywołanie samego siebie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kluczową cechą algorytmu rekurencyjnego jest to, że zawiera on wywołanie samego siebie. Rekurencja pozwala na eleganckie i zwięzłe rozwiązanie problemów, które można podzielić na mniejsze, powtarzające się podproblemy. Każde wywołanie rekurencyjne zmniejsza złożoność problemu, aż do osiągnięcia przypadku bazowego, który kończy dalsze wywołania i rozpoczyna proces zwracania wyników w górę stosu wywołań. Rekurencja znajduje zastosowanie w algorytmach takich jak DFS (przeszukiwanie w głąb), sortowanie szybkie (QuickSort) oraz algorytmy obliczające wartości liczb Fibonacciego i silni.

Pytanie 6

Który element HTML5 służy do wyświetlania zawartości video?

A. <media>
B. <play>
C. <film>
D. <video>

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Element HTML5 <video> jest kluczowym składnikiem do wyświetlania treści wideo w przeglądarkach. Dzięki niemu można łatwo osadzić filmy na stronach internetowych, co sprawia, że są one bardziej interaktywne i atrakcyjne dla użytkowników. Przykład użycia tego tagu wygląda następująco: <video src='film.mp4' controls></video>. Atrybut 'controls' pozwala na dodanie prostych przycisków odtwarzania, pauzy i regulacji głośności, co znacząco poprawia doświadczenia użytkownika. Warto również wspomnieć, że element <video> wspiera różne formaty wideo, takie jak MP4, WebM czy Ogg, co jest istotne w kontekście zgodności z różnymi przeglądarkami i urządzeniami. W praktyce, stosowanie <video> pozwala na łatwe zarządzanie wideo, w tym na dodawanie napisów, ustawienie automatycznego odtwarzania czy loopowania. To sprawia, że jest on niezwykle popularny w tworzeniu nowoczesnych stron internetowych, które chcą dostarczać wartościowe multimedia. Zastosowanie tego elementu jest zgodne z najlepszymi praktykami w zakresie dostępności i użyteczności, co czyni go niezwykle ważnym w dzisiejszym web development.

Pytanie 7

Zamieszczony fragment kodu w Android Studio wdraża metodę nasłuchującą dla obsługi zdarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. zmiany w polu tekstowym
B. zmiany stanu kontrolki Switch
C. naciśnięcia przycisku
D. wybierania daty

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod wykorzystuje metodę setOnClickListener, która jest podstawowym sposobem przypisywania reakcji na kliknięcie przycisku (Button) w Androidzie. To taki klasyczny wzorzec nasłuchiwania zdarzeń, w tym przypadku – kliknięcia użytkownika. Moim zdaniem, ta konstrukcja pojawia się praktycznie w każdym większym projekcie Androidowym, bo trudno sobie wyobrazić interfejs bez przycisków, które coś faktycznie robią. Co ciekawe, korzystając z setOnClickListener, przekazujemy obiekt anonimowej klasy implementującej interfejs View.OnClickListener, a w jej metodzie onClick() umieszczamy kod, który ma się wykonać po naciśnięciu przycisku. To bardzo elastyczne rozwiązanie, bo możemy tu zarówno wyświetlić Toast, przejść do innego activity, wysłać dane do internetu czy nawet ukryć inny widok. Warto pamiętać, że praktycznie wszystkie kontrolki dziedziczące po View mogą mieć własnych listenerów, ale Button to najbardziej naturalny przypadek użycia. To taka podstawa obsługi UI w Android Studio i moim zdaniem każdy, kto chce pisać apki na Androida, powinien mieć to opanowane na pamięć. Dodatkowo, od wersji Android API 26 można używać także lambda expressions, co jeszcze bardziej skraca kod, ale sama idea zostaje ta sama – reagujemy na kliknięcie przycisku.

Pytanie 8

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 9

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

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

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 10

Zajmując się pracą w zespole oraz dbając o jego efektywne funkcjonowanie, nie powinniśmy

A. skupiać się jedynie na własnych korzyściach
B. przyjmować odpowiedzialności za swoje decyzje
C. sumiennie i w ustalonym terminie realizować swoje zadania
D. wspierać się nawzajem

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dokładnie o to chodzi – skupianie się tylko na własnych korzyściach prawie zawsze działa na szkodę zespołu. W praktyce, gdy ktoś patrzy wyłącznie na siebie, najczęściej zaniedbuje współpracę, co prowadzi do napięć i spadku efektywności grupy. W zespole liczy się wspólny cel, a nie indywidualne interesy, bo to właśnie dzięki wzajemnemu wsparciu i otwartej komunikacji można osiągnąć lepsze wyniki. Z mojego doświadczenia wynika, że projekty, w których członkowie współpracowali i dzielili się odpowiedzialnością, szły sprawniej i bez zbędnych spięć. Profesjonalne standardy, np. metodyki Scrum czy Agile, akcentują wartość pracy zespołowej i transparentności – jeśli każdy ciągnie w swoją stronę, cały model współpracy się sypie. Warto pamiętać, że nawet najlepszy specjalista sam nie pociągnie projektu, jeśli nie będzie działał fair wobec innych. Najlepiej się sprawdza takie podejście, gdzie ludzie podchodzą do pracy z otwartością, potrafią poprosić o pomoc i wspólnie świętują sukcesy, a nie tylko skupiają się na własnych liczbach czy bonusach. To naprawdę widać w praktyce – zespoły, gdzie nie liczy się tylko własny interes, mają zwykle znacznie lepsze efekty i atmosferę pracy.

Pytanie 11

Która z poniższych metod tablicowych w JavaScript nie modyfikuje oryginalnej tablicy?

A. splice()
B. sort()
C. push()
D. map()

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metoda map() w JavaScript jest funkcją tablicową, która tworzy nową tablicę na podstawie wyników wywołania funkcji podanej jako argument dla każdego elementu oryginalnej tablicy. Kluczowym aspektem tej metody jest to, że nie modyfikuje oryginalnej tablicy, co czyni ją bezpiecznym narzędziem do transformacji danych. Zastosowanie map() jest szczególnie przydatne w sytuacjach, gdy chcemy przekształcić dane, ale zachować oryginał, na przykład w przypadku przetwarzania wyników z API lub operacji na danych wejściowych od użytkownika. Standardowe praktyki zalecają używanie map() w programowaniu funkcyjnym, co pozwala na bardziej deklaratywne podejście do manipulacji danymi. Przykład zastosowania: mając tablicę liczb, możemy użyć map() do stworzenia nowej tablicy, która zawiera tylko ich kwadraty: const numbers = [1, 2, 3]; const squares = numbers.map(num => num * num); W ten sposób oryginalna tablica numbers pozostaje nietknięta, co jest kluczowe w wielu aplikacjach, w których zachowanie stanu jest istotne.

Pytanie 12

Jaka będzie złożoność czasowa wyszukiwania w posortowanej tablicy przy użyciu algorytmu binarnego?

A. O(n log n)
B. O(log n)
C. O(n)
D. O(n²)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Algorytm binarny to efektywny sposób wyszukiwania elementu w posortowanej tablicy, który działa w czasie O(log n). Działa on na zasadzie dzielenia przestrzeni wyszukiwania na pół w każdym kroku. Przykładowo, jeśli mamy tablicę z miliona elementów, to po pierwszym porównaniu możemy wykluczyć połowę z nich, a następnie kontynuować wyszukiwanie w pozostałej części. W praktyce oznacza to, że nawet dla dużych zbiorów danych, czas wyszukiwania pozostaje stosunkowo krótki. Algorytm ten jest powszechnie stosowany w różnych dziedzinach, takich jak programowanie, grafika komputerowa czy bazy danych, gdzie szybkość wyszukiwania jest kluczowa. Warto również wspomnieć, że aby móc zastosować algorytm binarny, tablica musi być wcześniej posortowana, co może wymagać dodatkowego nakładu czasu, ale po posortowaniu, zyskujemy efektywność algorytmu binarnego.

Pytanie 13

W jaki sposób definiuje się konstruktor kopiujący w ramach klasy?

A. Generuje nowy obiekt klasy bez przypisywania wartości
B. Generuje nowy obiekt i usuwa wcześniejszy
C. Inicjuje obiekt klasy na podstawie klasy dziedziczącej
D. Tworzy nowy obiekt jako wierną kopię innego obiektu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Konstruktor kopiujący to specjalny typ konstruktora, który tworzy nowy obiekt będący dokładną kopią innego obiektu tej samej klasy. Jest to niezwykle przydatne, gdy chcemy zduplikować istniejący obiekt, zachowując jego stan i wartości wszystkich składowych. Konstruktor kopiujący przyjmuje jako argument referencję do obiektu tej samej klasy, co pozwala na kopiowanie zarówno podstawowych typów danych, jak i dynamicznie alokowanych zasobów. Jego zastosowanie jest kluczowe w sytuacjach, gdy musimy pracować z obiektami dynamicznymi lub kopiować obiekty zarządzające wskaźnikami, aby uniknąć problemów związanych z wielokrotnym zwalnianiem tej samej pamięci.

Pytanie 14

Czym jest 'refaktoryzacja' w kontekście inżynierii oprogramowania?

A. Dodawanie nowych funkcji do istniejącego kodu
B. Proces modyfikowania kodu w celu poprawy jego struktury bez zmiany funkcjonalności
C. Optymalizacja wydajności poprzez zmianę algorytmów
D. Usuwanie niepotrzebnych funkcji z kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Refaktoryzacja to kluczowy proces w inżynierii oprogramowania pozwalający na modyfikację istniejącego kodu, aby poprawić jego strukturę bez zmieniania zewnętrznego zachowania programu. To podejście jest niezwykle istotne, ponieważ kod, podobnie jak każdy inny twór ludzki, z czasem może stać się trudny do zrozumienia i utrzymania. Refaktoryzacja pomaga utrzymać kod w czystości i zrozumiałości, co jest kluczowe dla długoterminowego rozwoju projektu. Praktyczne przykłady refaktoryzacji obejmują takie działania jak eliminacja powtórzeń w kodzie, zmiana nazw zmiennych na bardziej opisowe, czy też rozdzielanie dużych funkcji na mniejsze, bardziej zrozumiałe fragmenty. Ten proces jest zgodny z zasadami KISS (Keep It Simple, Stupid) i DRY (Don't Repeat Yourself), które są fundamentami dobrych praktyk programistycznych. Moim zdaniem, regularna refaktoryzacja jest jak sprzątanie biurka - początkowo może wydawać się niepotrzebna, ale w dłuższej perspektywie znacznie ułatwia pracę. Warto dodać, że narzędzia takie jak IntelliJ IDEA czy Visual Studio oferują wsparcie dla automatycznej refaktoryzacji, co czyni ten proces bardziej efektywnym.

Pytanie 15

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 16

Co to jest lazy loading w kontekście aplikacji webowych?

A. Strategia optymalizacji, która opóźnia ładowanie zasobów do momentu, gdy są faktycznie potrzebne
B. Technika przechowywania danych w pamięci podręcznej przeglądarki
C. Narzędzie do testowania wydajności ładowania strony
D. Metoda kompresji obrazów na stronach internetowych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Lazy loading to technika optymalizacji wydajności, która polega na opóźnieniu ładowania zasobów, takich jak obrazy, filmy czy skrypty, do momentu, gdy są one rzeczywiście potrzebne. Dzięki temu zwiększa się szybkość ładowania strony, co jest szczególnie ważne w kontekście doświadczeń użytkowników i SEO. Przykładem zastosowania lazy loading może być strona z długą listą produktów, gdzie obrazy dla produktów znajdujących się poza ekranem są ładowane dopiero, gdy użytkownik przewinie stronę w dół. Praktyka ta nie tylko poprawia czas reakcji strony, lecz także redukuje zużycie pasma, co jest korzystne dla użytkowników na urządzeniach mobilnych. Stosując lazy loading, warto pamiętać o dobrych praktykach, takich jak użycie odpowiednich bibliotek JavaScript, które wspierają tę technikę, oraz zapewnienie odpowiednich fallbacków dla starszych przeglądarek. Wprowadzenie lazy loading jest zgodne z zaleceniami optymalizacji wydajności publikowanymi przez Google, które podkreślają znaczenie ładowania tylko niezbędnych zasobów i poprawę UX.

Pytanie 17

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

A. Pobranie rozkazu z pamięci (Fetch)
B. Rozkodowanie rozkazu (Decode)
C. Zapis wyników do pamięci (Write Back)
D. Realizacja instrukcji (Execution)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 18

Zaprezentowany kod zawiera pola danej klasy. Które pole (pola) mogą być dostępne z poziomu głównego programu poprzez odwołanie w formie nazwaObiektu.nazwaPola?

private int p1;
private short p2;
public string p3;
protected string p4;
protected float p5;
A. p3 i p4
B. p1
C. jedynie p3
D. wyłącznie p3, p4, p5

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
To jest właśnie sedno sprawy z modyfikatorami dostępu w programowaniu obiektowym, szczególnie w językach takich jak Java czy C#. Kiedy masz pole oznaczone jako public, jak w przypadku p3, to znaczy, że możesz się do niego odwołać z poziomu dowolnego innego kodu, czyli np. z głównego programu poprzez konstrukcję nazwaObiektu.nazwaPola. To jest bardzo wygodne, choć uczciwie mówiąc, nie zawsze bezpieczne – branżowo najczęściej rekomenduje się stosowanie enkapsulacji, czyli raczej private i dostęp przez gettery/settery. Moim zdaniem lepiej rozumieć, dlaczego public coś udostępnia, a protected czy private już nie. Protected pozwala na dostęp tylko w klasach pochodnych, więc w samym głównym programie (po prostu mając obiekt tej klasy) nie masz do niego dostępu. Private – to już w ogóle, jedynie sama klasa może się dobrać do własnych pól, cała reszta odpada. To, co często zaskakuje, to fakt, że nawet jeśli coś jest protected, to nie zrobisz obiekt.protectedPole w zwykłym programie – musiałbyś pisać klasę dziedziczącą. Praktycznie public daje największą swobodę, ale z mojego doświadczenia, jeśli nie musisz, nie rób wszystkiego na public. W tym przykładzie jedynie p3 można bezpośrednio wywołać z głównego programu przez nazwaObiektu.p3 – reszta jest ukryta przez modyfikatory dostępu, i to jest zdecydowanie zgodne ze sztuką programowania obiektowego i zasadą hermetyzacji.

Pytanie 19

Metodyka zwinna (ang. agile) opiera się na

A. podzieleniu projektu na kolejne etapy: planowanie, programowanie, testowanie, z ciągłym oszacowaniem ryzyka projektu
B. dekompozycji przedsięwzięcia na elementy, które są niezależnie projektowane, wytwarzane i testowane w krótkich iteracjach
C. przygotowaniu testów dla całego projektu, a następnie wprowadzaniu kolejnych jego fragmentów
D. zaplanowaniu całej aplikacji na początku projektu i jej tworzeniu na przemian z testowaniem

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metodyka zwinna (agile) polega na podziale projektu na mniejsze części (iteracje), które są projektowane, implementowane i testowane w krótkich cyklach. Takie podejście pozwala na szybkie reagowanie na zmieniające się wymagania klientów i wprowadzanie poprawek na bieżąco. Agile promuje bliską współpracę z klientem, co minimalizuje ryzyko nieporozumień i zwiększa szanse na stworzenie produktu spełniającego jego oczekiwania. Zamiast czekać na zakończenie całego projektu, poszczególne części aplikacji są dostarczane i testowane stopniowo, co skraca czas wdrożenia i umożliwia szybkie wykrycie błędów. Popularnymi frameworkami bazującymi na Agile są Scrum i Kanban, które organizują pracę zespołu w iteracyjne sprinty lub zadania wizualizowane na tablicach Kanban.

Pytanie 20

Jakie działanie wykonuje polecenie "git pull"?

A. Pobiera zmiany z zdalnego repozytorium i scala je z lokalnym
B. Eliminuje plik z repozytorium
C. Zachowuje zmiany w lokalnym repozytorium
D. Tworzy nową gałąź w repozytorium

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polecenie 'git pull' pobiera najnowsze zmiany ze zdalnego repozytorium i scala je z lokalnym repozytorium. Jest to jedno z podstawowych poleceń w Git, pozwalające na synchronizację lokalnej kopii projektu z wersją przechowywaną w chmurze lub na serwerze. Dzięki 'git pull' programiści mogą na bieżąco aktualizować swoje repozytoria i unikać konfliktów, które mogłyby wyniknąć z pracy na nieaktualnej wersji kodu. Proces ten automatycznie łączy pobrane zmiany, co eliminuje konieczność ręcznego kopiowania plików lub komend.

Pytanie 21

Programista umieścił poniższą linię kodu w pliku HTML, aby

<script src="jquery-3.5.1.min.js"></script>
A. skorzystać z funkcji biblioteki jQuery, która była wcześniej pobrana i zapisana lokalnie
B. pobrać z Internetu w momencie otwierania strony i użyć biblioteki jQuery
C. zadeklarować własną funkcję JavaScript o nazwie min.js
D. wstawić kod JavaScript pomiędzy znacznikami &lt;script&gt;&lt;/script&gt;

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod HTML jest często używany do włączania zewnętrznych bibliotek JavaScript, takich jak jQuery, które zostały wcześniej pobrane i zapisane lokalnie na serwerze. W tym przypadku atrybut src w znaczniku script wskazuje na lokalnie przechowywany plik jQuery, co oznacza, że przeglądarka załaduje bibliotekę z serwera, na którym znajduje się nasza strona. Korzystanie z lokalnych kopii bibliotek jest dobrą praktyką w przypadku ograniczonego lub niestabilnego dostępu do internetu, ponieważ gwarantuje dostępność bibliotek niezależnie od zewnętrznych źródeł. Zaletą tego rozwiązania jest redukcja potencjalnych opóźnień w ładowaniu strony, ponieważ plik jest już dostępny na tym samym serwerze. Użycie lokalnych plików jest również korzystne z punktu widzenia bezpieczeństwa, gdyż pozwala kontrolować dokładną wersję załadowanej biblioteki i uniknąć potencjalnych zagrożeń wynikających z modyfikacji zewnętrznych plików. W praktyce, programiści często łączą lokalne i zdalne zasoby, wybierając odpowiednią metodę w zależności od potrzeb projektu i dostępnych zasobów sieciowych.

Pytanie 22

Który z frameworków bazuje na budowaniu komponentów przy użyciu języka JavaScript?

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

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
React.js to popularna biblioteka JavaScript, która opiera się na komponencie jako podstawowym elemencie budowy interfejsu użytkownika. Framework ten umożliwia tworzenie dynamicznych i interaktywnych aplikacji webowych, które cechują się wysoką wydajnością. Dzięki wykorzystaniu komponentów, programiści mogą wielokrotnie wykorzystywać te same elementy interfejsu, co znacznie upraszcza zarządzanie kodem i poprawia jego czytelność. React jest szeroko stosowany w budowie Single Page Applications (SPA) i wspiera technologię Virtual DOM, co minimalizuje liczbę operacji na rzeczywistym DOM i zwiększa szybkość renderowania stron. React jest szczególnie polecany do tworzenia nowoczesnych aplikacji webowych o dynamicznych interfejsach, co czyni go jednym z liderów na rynku frontendowym.

Pytanie 23

Przedstawione w filmie działania wykorzystują narzędzie

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

Brak odpowiedzi na to pytanie.

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

Pytanie 24

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

$x = 5;
$y = '5';
var_dump($x == $y);
var_dump($x === $y);
A. bool(true) bool(false)
B. bool(false) bool(true)
C. bool(false) bool(false)
D. bool(true) bool(true)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź bool(true) bool(false) jest prawidłowa, ponieważ w PHP porównania używane w tym kodzie różnią się pod względem operatorów. Pierwsze porównanie z użyciem operatora == jest porównaniem luźnym, co oznacza, że PHP dokonuje konwersji typów przed porównaniem. W tym przypadku zmienna $x o wartości 5 (typ integer) jest porównywana z $y, która ma wartość '5' (typ string). Po konwersji typów oba są interpretowane jako liczba 5, więc wynik to true. W drugim porównaniu operator === sprawdza zarówno wartość, jak i typ zmiennych. W tym przypadku $x jest integerem, a $y jest stringiem, więc ich typy się różnią. W związku z tym wynik to false. W praktyce, używanie operatora === jest zalecane, ponieważ pozwala uniknąć niespodzianek związanych z automatyczną konwersją typów, co jest często źródłem błędów w kodzie. Warto mieć to na uwadze przy pisaniu bardziej skomplikowanych skryptów, aby zapewnić, że porównania są jednoznaczne i wiarygodne.

Pytanie 25

Programem służącym do monitorowania błędów oraz organizacji projektów jest:

A. Git
B. Jira
C. Bugzilla
D. Jasmine

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Jira to narzędzie, które zdecydowanie wyróżnia się w kwestii zarządzania projektami programistycznymi oraz monitorowania błędów. Z mojego doświadczenia wynika, że praktycznie każda większa firma IT używa Jiry do śledzenia zgłoszeń, tzw. ticketów, które mogą dotyczyć zarówno zadań, jak i błędów do naprawienia. Co istotne, Jira pozwala na bardzo rozbudowaną konfigurację – można tworzyć workflow, automatyzować przypisania zadań, integrować ją z repozytoriami kodów (np. GitHub, Bitbucket), testami automatycznymi, a nawet narzędziami do continuous integration. Standardem branżowym jest prowadzenie rejestru błędów (bug tracker) i backlogu zadań właśnie w Jirze, bo wszystko odbywa się w jednym miejscu, a zespół ma przejrzysty widok postępów. Bardzo fajna jest opcja generowania raportów – łatwo można sprawdzić, ile błędów zostało naprawionych, ile czeka na poprawki czy jak poszczególni członkowie zespołu realizują swoje zadania. Jira jest też zgodna z metodykami Agile, np. Scrum czy Kanban, co dodatkowo ułatwia zarządzanie sprintami, planowanie i retrospektywy. Uważam, że znajomość tego narzędzia to podstawa dla każdego, kto myśli o pracy w branży IT na poważnie. Warto też wiedzieć, że Jira obsługuje zarówno małe zespoły, jak i międzynarodowe projekty, bo jest bardzo skalowalna i można ją dostosować praktycznie do każdego procesu.

Pytanie 26

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest:

A. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
B. informowanie obiektów o modyfikacji stanu innych obiektów
C. monitorowanie działań użytkownika oraz generowanie wyjątków
D. dostosowanie interfejsu użytkownika do różnych kategorii użytkowników

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy Obserwator (ang. Observer) to jeden z klasyków ze świata programowania obiektowego i frontendu. Główna jego rola polega na tym, by pozwalać obiektom (obserwatorom) reagować na zmiany stanu innych obiektów (podmiotów) bez sztywnego powiązania tych klas ze sobą. W praktyce, w aplikacjach webowych bardzo często wykorzystuje się ten wzorzec w architekturach typu MVC czy MVVM, gdzie widoki muszą się automatycznie aktualizować po zmianie modelu danych. Przykład: w Reactcie używasz hooka useState lub useEffect – i Twoje komponenty „obserwują” stan aplikacji. Gdy stan się zmienia, komponenty same się przebudowują, a Ty nie musisz ręcznie wywoływać każdej aktualizacji. Podobnie działa np. EventEmitter w Node.js, Redux z subskrypcjami store czy nawet WebSockety, gdzie klient „słucha” na zmiany po stronie serwera. Dzięki temu komunikacja pomiędzy różnymi częściami systemu staje się luźno powiązana, co ułatwia utrzymanie i rozbudowę kodu. Moim zdaniem bez zrozumienia tego wzorca trudno ogarnąć nowoczesny frontend, bo większość bibliotek UI gdzieś pod spodem go wykorzystuje. Przy okazji: Observer to wzorzec zalecany przez GOF (Gang of Four), więc to nie jest tylko „fajna technika”, ale sprawdzony standard branżowy. Warto wiedzieć, że podejście to minimalizuje ryzyko błędów w synchronizacji danych i pozwala naturalnie reagować na zmiany bez pisania stosów callbacków. To spora oszczędność czasu i kodu.

Pytanie 27

Przykład wywołania funkcji zamien w języku C++ może wyglądać w następujący sposób:

void zamien(int *a, int *b) {
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
A. zamien(&a, &b); // a, b - zmienne całkowite
B. zamien(*a, *b); // a, b - zmienne całkowite
C. zamien(m, n); // m, n - zmienne całkowite
D. zamien(12, 34)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tym przypadku wywołanie zamien(&a, &b); jest prawidłowe, bo funkcja zamien oczekuje wskaźników do zmiennych całkowitych, nie samych wartości tych zmiennych ani ich referencji. Przekazując adresy przez &a i &b, pozwalamy funkcji modyfikować oryginalne zmienne, a nie ich kopie. To jest fundament operacji wskaźnikowych w C++. Takie podejście umożliwia tzw. przekazywanie przez adres, które jest wykorzystywane wszędzie tam, gdzie trzeba w funkcji podmienić faktyczną zawartość zmiennej, a nie tylko jej kopię. W praktyce, na przykład podczas sortowania tablic czy zamiany miejscami dwóch wartości, korzysta się właśnie z takiego mechanizmu. Przekazywanie wskaźników jest bardzo uniwersalne – pozwala nie tylko zmieniać wartości, ale też np. przekazywać duże struktury bez kopiowania całej ich zawartości, co przyspiesza program i zmniejsza zużycie pamięci. Moim zdaniem warto też zauważyć, że użycie wskaźników jest jednym z filarów programowania na niskim poziomie w C i C++. Wielu początkujących programistów boi się wskaźników (nie wiem czemu, chyba przez te wszystkie historie o błędach i segfaultach), ale jak się już zrozumie, dlaczego i jak przekazywać adresy zmiennych, to potem dużo łatwiej korzystać z bardziej zaawansowanych mechanizmów np. dynamicznej alokacji pamięci czy tablic wskaźników. Standard C++ wręcz zaleca, by wszędzie tam, gdzie funkcja ma zmienić przekazane wartości, używać wskaźników lub referencji. W tym przypadku wskaźniki są idealne, bo dokładnie tego wymaga deklaracja funkcji. Dobrze jest też znać różnicę między przekazywaniem przez wartość, wskaźnik i referencję, bo to pozwala świadomie projektować interfejsy funkcji.

Pytanie 28

Co to jest API w kontekście programowania?

A. Narzędzie do testowania interfejsu użytkownika aplikacji
B. Metoda kompresji danych w aplikacjach webowych
C. System zarządzania relacyjnymi bazami danych
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.

Pytanie 29

Wskaż typy numeryczne o stałej precyzji

A. bool char, string
B. long long, long double
C. float, double
D. int, short, long

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Typy numeryczne o stałej precyzji (czyli tzw. typy całkowite) to na przykład int, short, long – dokładnie te, które wskazałeś. Działają one trochę jak liczniki – przechowują liczby całkowite w określonym zakresie, bez przecinka. Moim zdaniem to podstawa, jeśli chodzi o reprezentowanie wartości typu liczba sztuk, indeks, identyfikator – wszędzie tam, gdzie nie potrzebujemy części ułamkowej. Ich precyzja wynika z tego, że są zdefiniowane w standardzie (np. w C++ czy Javie) jako liczby całkowite reprezentowane przez określoną liczbę bitów. Dla przykładu, 32-bitowy int zawsze pomieści wartości od -2 147 483 648 do 2 147 483 647 i każdy bit jest tu ważny. W praktyce, programując mikrokontrolery albo systemy wbudowane, właściwy wybór typu o stałej precyzji potrafi decydować o stabilności i wydajności całego programu. Warto też wiedzieć, że typy te – int, short, long – nie mają błędu zaokrągleń, co często zdarza się przy operacjach na liczbach zmiennoprzecinkowych. No i jeszcze takie małe spostrzeżenie: dobrym zwyczajem jest wybieranie najmniejszego typu całkowitego, który pokryje wymagany zakres, żeby zoptymalizować zużycie pamięci. Takie podejście mocno się przydaje, zwłaszcza jak się pracuje nad większym projektem, gdzie każda optymalizacja jest na wagę złota.

Pytanie 30

Które z wymienionych pól klasy można zainicjalizować przed stworzeniem obiektu?

A. Prywatne pole
B. Publiczne pole
C. Static pole
D. Chronione pole

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pole statyczne można zainicjować przed utworzeniem obiektu klasy, ponieważ należy ono do samej klasy, a nie do jej instancji. Statyczne pola są inicjalizowane tylko raz, w momencie pierwszego użycia klasy lub jej statycznych metod. Dzięki temu można przechowywać dane wspólne dla wszystkich obiektów danej klasy, co jest kluczowe w optymalizacji pamięci i kodu. Przykładem może być licznik instancji klasy, który zwiększa swoją wartość za każdym razem, gdy tworzony jest nowy obiekt.

Pytanie 31

W jakiej sytuacji kolekcja typu lista okaże się bardziej wydajna niż tablica?

A. Gdy mamy pewność co do dokładnego rozmiaru kolekcji przed kompilacją
B. Gdy liczba elementów w kolekcji jest niezmienna
C. Gdy liczba elementów w kolekcji zmienia się dynamicznie
D. Gdy chcemy uzyskać dostęp do elementów przy pomocy indeksu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Lista to dynamiczna struktura danych, która pozwala na efektywne dodawanie i usuwanie elementów, zwłaszcza gdy liczba elementów zmienia się w trakcie działania programu. Listy są bardziej elastyczne niż tablice, ponieważ mogą dynamicznie dostosowywać swoją wielkość bez potrzeby alokacji dodatkowej pamięci. W przypadku dynamicznych operacji, takich jak częste wstawianie i usuwanie elementów, listy są znacznie bardziej wydajne niż tablice, które wymagają przesunięcia wszystkich elementów po każdej operacji. Listy świetnie sprawdzają się w implementacji kolejek, stosów oraz w strukturach, które muszą rosnąć i kurczyć się podczas działania aplikacji.

Pytanie 32

Które z poniższych nie jest narzędziem do zarządzania stanem w aplikacjach React?

A. Context API
B. MobX
C. Redux
D. Webpack

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Webpack to narzędzie do budowania, które służy do zarządzania zasobami w projekcie, a nie do zarządzania stanem aplikacji. Jego głównym celem jest przekształcanie i optymalizacja plików, takich jak JavaScript, CSS czy obrazy, przed ich wdrożeniem na produkcję. Dzięki Webpackowi można tworzyć modułowe aplikacje, które pozwalają na łatwe zarządzanie zależnościami. Przykładem użycia Webpacka może być skonfigurowanie go do kompresji plików JavaScript oraz CSS w celu zwiększenia wydajności aplikacji. W praktyce, Webpack jest szeroko stosowany w projektach React, aby efektywnie łączyć i optymalizować kod z różnych źródeł, co przekłada się na szybsze ładowanie się aplikacji. Standardy dotyczące zarządzania projektami przewidują, że narzędzia do budowania, takie jak Webpack, powinny być odpowiednio skonfigurowane w celu zapewnienia najlepszych praktyk dotyczących wydajności i organizacji kodu.

Pytanie 33

Jakie elementy powinny być ujęte w dokumentacji programu?

A. Opis funkcji, klas i zmiennych w kodzie
B. Zestawienie błędów zidentyfikowanych w trakcie testów
C. Strategia marketingowa aplikacji
D. Szczegóły dotyczące konfiguracji serwera

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Opis funkcji, klas i zmiennych w kodzie to kluczowy element dokumentacji programu. Tego rodzaju dokumentacja pozwala na lepsze zrozumienie struktury aplikacji, jej logiki biznesowej oraz wzajemnych zależności pomiędzy poszczególnymi komponentami. Dokumentacja techniczna obejmuje szczegółowe informacje na temat implementacji, interfejsów API, schematów baz danych oraz sposobów integracji z innymi systemami. Dzięki niej programiści mogą szybciej wdrażać się w projekt, a błędy i niejasności są minimalizowane. Kompleksowa dokumentacja zawiera także przykłady użycia poszczególnych funkcji, co dodatkowo ułatwia rozwój i rozbudowę aplikacji. W dobrze prowadzonym projekcie dokumentacja kodu jest na bieżąco aktualizowana, co zwiększa jego przejrzystość i wspiera proces refaktoryzacji.

Pytanie 34

Resuscytacja krążeniowo-oddechowa polega na realizowaniu

A. 30 ucisków klatki piersiowej oraz 2 oddechy ratunkowe
B. 10 ucisków klatki piersiowej oraz 5 oddechów ratunkowych
C. 20 ucisków klatki piersiowej oraz 1 oddech ratunkowy
D. 15 ucisków klatki piersiowej oraz 3 oddechy ratunkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Resuscytacja krążeniowo-oddechowa (RKO) w obecnych wytycznych Europejskiej Rady Resuscytacji polega właśnie na wykonywaniu 30 ucisków klatki piersiowej na przemian z 2 oddechami ratunkowymi. Taki schemat jest rekomendowany zarówno dla dorosłych, jak i dzieci (poza niemowlętami i sytuacjami szczególnymi), bo zapewnia optymalną perfuzję mózgu i serca, a jednocześnie daje szansę na dostarczenie tlenu do organizmu. Gdyby skrócić liczbę ucisków albo oddechów, efektywność spada, a szansa przeżycia jest mniejsza. Ja zawsze powtarzam, że praktyka czyni mistrza – jak ćwiczyliśmy na fantomach, to właśnie ten rytm: 30 ucisków, potem 2 szybkie oddechy, bez zbędnych przerw. Praktycznie, w stresie łatwo się pogubić, ale jak sobie utrwalicie ten schemat, działa automatycznie. Warto wiedzieć, że uciski muszą być na głębokość około 5–6 cm u dorosłych, z częstotliwością co najmniej 100–120 na minutę – to jest kluczowe dla skuteczności. Z mojego doświadczenia wynika, że najczęściej popełnianym błędem jest zbyt płytkie uciskanie i zbyt długie przerwy na oddechy, warto to poćwiczyć. Kiedy nie chce się robić oddechów (np. obawa przed zakażeniem), można prowadzić tylko uciski, ale pełne RKO daje największe szanse. Takie podejście jest sprawdzone praktycznie na całym świecie i jak dla mnie, nie ma sensu kombinować z innymi proporcjami.

Pytanie 35

Które z podanych logo reprezentuje narzędzie, które nie jest używane do tworzenia aplikacji mobilnych?

Ilustracja do pytania
A. 2
B. 3
C. 4
D. 1

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrałeś odpowiedź nr 4, czyli logo Xcode. To rzeczywiście poprawny wybór, bo Xcode to środowisko programistyczne stworzone przez Apple głównie do tworzenia aplikacji na systemy iOS, macOS, watchOS oraz tvOS. W praktyce Xcode jest praktycznie niezbędny, jeśli chodzi o natywny rozwój aplikacji mobilnych na iPhone’a czy iPada – zresztą Apple wymaga używania tego narzędzia do publikowania aplikacji w App Store. Jednak gdy spojrzymy na pozostałe loga: Android Studio (1), Xamarin (3) oraz Angular (2), to tylko Angular nie jest narzędziem do budowy natywnych aplikacji mobilnych. Angular to framework frontendowy, używany głównie do tworzenia aplikacji webowych typu SPA (Single Page Application). Oczywiście, da się użyć Angulara z Cordovą czy Ionicem, żeby zrobić hybrydową aplikację na telefon, ale to nie jest to samo, co pełnoprawny toolchain do mobilnych aplikacji natywnych. W branży panuje przekonanie, że lepiej korzystać z narzędzi dedykowanych platformie, bo to daje lepszą wydajność i stabilność, a Angular to rozwiązanie, które jest bliżej weba niż mobile. Takie rozróżnienie jest ważne zwłaszcza przy podejmowaniu decyzji o technologii przy większych projektach mobilnych.

Pytanie 36

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 37

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

A. do uległości wobec autorytetów
B. do kierowania się zdaniem danej grupy
C. do doprowadzania spraw do końca
D. do odwzajemniania się osobie, która nam pomogła

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Reguła zaangażowania i konsekwencji, o której tu mowa, faktycznie odnosi się do potrzeby doprowadzania spraw do końca. To jedna z podstawowych zasad psychologicznych wykorzystywanych w wpływaniu na decyzje i zachowania ludzi, szczególnie w sprzedaży czy negocjacjach. Kiedy już się na coś zgodzimy lub podejmiemy pierwsze, nawet drobne zobowiązanie, automatycznie pojawia się w nas silna potrzeba zachowania spójności z wcześniejszymi deklaracjami — tak po prostu działa ludzka psychika. Z mojego doświadczenia wynika, że firmy bardzo często to wykorzystują, np. prosząc klienta o drobną przysługę, podpis czy mikroakceptację, bo potem jest większa szansa, że pójdzie za ciosem i zdecyduje się na większy krok. W psychologii społecznej ten mechanizm uznaje się za bardzo skuteczny – zresztą Robert Cialdini w swoich książkach szeroko o tym pisze. Na rynku pracy też to widać, bo pracodawcy chętniej powierzają ważne zadania osobom, które mają zwyczaj kończyć to, co zaczęły. W praktyce, jeśli ktoś raz się w coś zaangażuje — nawet formalnie nie podpisując żadnej umowy — to potem z dużym prawdopodobieństwem wytrwa przy swojej decyzji. Dlatego znajomość tej zasady jest nie tylko teoretycznie ciekawa, ale daje konkretne narzędzia do skuteczniejszego działania w relacjach międzyludzkich, marketingu czy zarządzaniu projektami.

Pytanie 38

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 39

Która zasada zwiększa bezpieczeństwo w sieci?

A. Korzystanie z mocnych, unikalnych haseł
B. Zaniedbywanie aktualizacji systemu operacyjnego
C. Pobieranie plików z niepewnych źródeł
D. Dzielnie się hasłami z przyjaciółmi

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Używanie silnych, unikalnych haseł jest fundamentalną zasadą poprawiającą bezpieczeństwo w sieci. Silne hasło to takie, które składa się z co najmniej 12 znaków, zawiera wielkie i małe litery, cyfry oraz znaki specjalne. Takie hasła są trudne do złamania przez ataki brute force, które wykorzystują algorytmy do próbowania różnych kombinacji znaków. Przykładem silnego hasła może być 'P@ssw0rd!2023', które łączy różnorodne typy znaków. Używanie unikalnych haseł dla różnych kont jest równie ważne, ponieważ w przypadku naruszenia bezpieczeństwa jednego konta, inne pozostają zabezpieczone. Standardy takie jak NIST (National Institute of Standards and Technology) zalecają tworzenie haseł w sposób, który ogranicza ich przewidywalność. Narzędzia do zarządzania hasłami, takie jak LastPass czy 1Password, mogą pomóc w generowaniu i przechowywaniu silnych haseł, co dodatkowo redukuje ryzyko. Stosowanie tej zasady jest kluczowe w kontekście ochrony danych osobowych oraz zapobiegania kradzieży tożsamości.

Pytanie 40

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

A. sortowanie bąbelkowe
B. sortowanie przez wstawianie
C. sortowanie przez zliczanie
D. sortowanie szybkie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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.