Wyniki egzaminu

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

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

Jakie są typowe frameworki/biblioteki używane w aplikacjach webowych?

A. ASP.NET Core, Django, Angular, React.js, Node.js
B. ASP.NET Core, jQuery, Joomla!, Wordpress, Angular
C. jquery, Joomla!, Wordpress, android Studio, Xamarin
D. Visual Studio, Eclipse, angular, React.js, Node.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrana grupa frameworków i bibliotek — ASP.NET Core, Django, Angular, React.js, Node.js — to w praktyce jedne z najbardziej rozpoznawalnych i szeroko wykorzystywanych rozwiązań w branży tworzenia aplikacji webowych. Każdy z nich pełni trochę inną rolę, co powoduje, że są stosowane na różnych warstwach aplikacji. Na przykład ASP.NET Core oraz Django to frameworki po stronie serwera, obsługujące backend, logikę biznesową i komunikację z bazą danych. Są bardzo popularne zwłaszcza tam, gdzie liczy się szybkość wdrożenia i bezpieczeństwo. Node.js również zalicza się do backendowych technologii, z tym że pozwala pisać po stronie serwera w JavaScript, co bywa ogromnym plusem, gdy zespół jest mocno frontendowy. Angular i React.js to natomiast narzędzia, które pomagają budować rozbudowane, interaktywne interfejsy użytkownika po stronie klienta. Takie podejście, gdzie backend i frontend są rozdzielone, to obecnie standard — tzw. architektura SPA (Single Page Application) albo nawet JAMstack. Warto pamiętać, że dobrym zwyczajem jest korzystać właśnie z takich nowoczesnych frameworków, bo zapewniają solidne wsparcie społeczności, regularne aktualizacje i kompatybilność z nowymi standardami webowymi. Moim zdaniem, jeżeli myśli się poważnie o pracy jako developer webowy, to znajomość przynajmniej dwóch z wymienionych narzędzi to absolutny must-have. Przy okazji — wiele firm prowadzi projekty wieloplatformowe, więc umiejętność korzystania z tych frameworków można łatwo przenieść również do świata mobilnego czy nawet IoT.

Pytanie 2

Która z poniższych technik NIE jest związana z optymalizacją wydajności strony internetowej?

A. Lazy loading
B. Użycie CDN
C. Deep linking
D. Minifikacja kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Deep linking to technika, która polega na linkowaniu bezpośrednio do określonego miejsca w treści danej strony internetowej, omijając jej stronę główną czy inne interfejsy nawigacyjne. Nie wpływa jednak na optymalizację wydajności strony, ponieważ koncentruje się na poprawie nawigacji i doświadczenia użytkownika, a nie na szybkości ładowania strony czy efektywnym zarządzaniu zasobami. Przykładem zastosowania deep linking może być sytuacja, w której użytkownik klika w link do konkretnego produktu w sklepie internetowym, co pozwala mu od razu zobaczyć interesującą go ofertę bez zbędnych kroków dodatkowych. W praktyce, techniki optymalizacji wydajności, takie jak minifikacja kodu, lazy loading i użycie CDN, koncentrują się na zmniejszeniu rozmiaru plików, opóźnianiu ładowania nieistotnych zasobów oraz dystrybucji treści z najbliższych lokalizacji serwerów, co przyczynia się do szybszego dostarczania zawartości do użytkownika. Dlatego właśnie deep linking jest odpowiedzią, która nie jest związana z wydajnością strony.

Pytanie 3

Użycie modyfikatora abstract w definicji metody w klasie wskazuje, że

A. klasy pochodne nie mogą implementować tej metody
B. dziedziczenie po tej klasie jest niedozwolone
C. trzeba zaimplementować tę metodę w tej klasie
D. klasa ta stanowi podstawę dla innych klas

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator abstract w definicji metody jasno wskazuje, że dana klasa jest przeznaczona do dalszego dziedziczenia i stanowi coś w rodzaju szablonu dla innych klas. W praktyce – jeśli w klasie pojawia się choć jedna metoda abstract, cała klasa musi być także oznaczona jako abstract. To taki sygnał: hej, tej klasy nie da się użyć bezpośrednio, ale możesz po niej dziedziczyć i dopiero tam zaimplementować szczegóły. Moim zdaniem to bardzo wygodne, bo pozwala z góry narzucić kontrakt na klasy pochodne – mają dostarczyć własne wersje abstrakcyjnych metod. W wielu językach obiektowych, jak C# czy Java, stosowanie klas abstrakcyjnych jest powszechną praktyką przy projektowaniu rozbudowanych aplikacji, gdzie ważne jest rozdzielenie ogólnej logiki od szczegółowych implementacji. Daje to sporą elastyczność i chroni przed przypadkowymi błędami, kiedy ktoś próbowałby utworzyć obiekt klasy, która nie ma pełnej funkcjonalności. Często spotyka się to np. przy projektowaniu hierarchii typu Zwierzę → Pies/Kot, gdzie klasa Zwierzę jest abstrakcyjna i zawiera np. metodę abstract WydajDźwięk(). Dzięki temu każde konkretne zwierzę musi zaimplementować własną wersję tej metody, a całość kodu jest czytelniejsza i łatwiej ją rozwijać. Zdecydowanie warto poznać ten mechanizm, bo to fundament nowoczesnego programowania obiektowego i coś, co codziennie przydaje się w pracy programisty.

Pytanie 4

Która z wymienionych cech dotyczy klasy statycznej?

A. Nie może zawierać ani zmiennych, ani metod
B. Może zawierać wyłącznie statyczne pola i metody
C. Jest automatycznie usuwana po zakończeniu działania programu
D. Może być dziedziczona przez klasy potomne

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Klasa statyczna to klasa, która może zawierać tylko statyczne pola i metody. Tego rodzaju klasy są często wykorzystywane do implementacji narzędziowych funkcji, które nie wymagają tworzenia instancji obiektu. Klasy statyczne są typowe dla języków takich jak C# czy Java, gdzie mogą one pełnić rolę kontenerów na metody pomocnicze (np. klasa 'Math' w C#). Główną zaletą klas statycznych jest to, że można je wywoływać bez konieczności tworzenia instancji, co znacząco upraszcza kod i zwiększa jego czytelność. Klasy statyczne zapewniają również bezpieczeństwo w dostępie do danych, ponieważ eliminują ryzyko przypadkowego zmodyfikowania instancji obiektu.

Pytanie 5

Wskaź kod, który spowoduje wyświetlenie okna dialogowego przedstawionego na ilustracji. Dla uproszczenia kodu, zrezygnowano z atrybutów znaczników

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

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź, którą wybrałeś, to kod 2, i nie ma co do tego wątpliwości. Dobrze, że zauważyłeś wszystkie elementy, które były w oknie dialogowym. W tym kodzie masz TextBox na górze, który pozwala na wpisanie tekstu. Dwa CheckBoxy po lewej stronie to te typowe pola wyboru, które też były widoczne. Po prawej stronie masz trzy RadioButtony, które tworzą grupę przycisków - to jest właśnie to, co powinno być. Na dole widoczny jest przycisk Button z napisem Test, co też jest zgodne z obrazkiem. Takie rozmieszczenie to klucz do stworzenia dobrego interfejsu. Wiesz, w praktyce w wielu aplikacjach używa się właśnie tych elementów do prostych formularzy. Jeżeli rozumiesz, jak te komponenty działają i jak je ze sobą łączyć, to naprawdę dobrze ci to pójdzie w przyszłości w tworzeniu ładnych i funkcjonalnych interfejsów.

Pytanie 6

Który z faz cyklu życia projektu wiąże się z identyfikacją wymagań użytkownika?

A. Wdrażanie
B. Etap planowania
C. Analiza
D. Przeprowadzanie testów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Analiza to etap cyklu życia projektu, podczas którego określane są wymagania użytkownika. W tej fazie zespół projektowy przeprowadza badania, konsultacje i warsztaty, aby zrozumieć potrzeby klienta i użytkowników końcowych. Wynikiem analizy jest szczegółowa specyfikacja funkcjonalna i niefunkcjonalna, która stanowi podstawę do projektowania i implementacji. Prawidłowo przeprowadzona analiza minimalizuje ryzyko nieporozumień oraz zapewnia, że finalny produkt będzie odpowiadał na realne potrzeby użytkowników.

Pytanie 7

Co zostanie wypisane w konsoli po wykonaniu poniższego kodu?

let i = 0;
while (i < 5) {
  i++;
  if (i === 3) continue;
  console.log(i);
}
A. 0, 1, 2, 3, 4
B. 1, 2, 4, 5
C. 1, 2, 3, 4, 5
D. 0, 1, 2, 4, 5

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W przedstawionym kodzie mamy do czynienia z pętlą while, która działa, dopóki zmienna i jest mniejsza od 5. Na początku i jest równe 0, a w każdej iteracji pętli i jest zwiększane o 1. Wewnątrz pętli mamy warunek, który sprawdza, czy i jest równe 3. Jeżeli tak, to używamy instrukcji continue, co oznacza, że pomijamy resztę kodu w tej iteracji i wracamy do początku pętli. Przeanalizujmy, co się stanie w kolejnych iteracjach: w pierwszej iteracji i jest 1, więc wypisujemy 1, w drugiej iteracji i jest 2, więc wypisujemy 2. Gdy i osiąga 3, warunek if jest spełniony i przechodzimy do następnej iteracji, nie wypisując nic. Następnie i staje się 4 i 5, które również są wypisywane. W efekcie na konsoli zostanie wypisane 1, 2, 4, 5. Takie podejście pokazuje, jak ważne jest zrozumienie działania pętli i instrukcji sterujących w JavaScript, co jest kluczowe w programowaniu i pozwala na efektywne zarządzanie przepływem kodu.

Pytanie 8

W języku Java wyjątek ArrayIndexOutOfBoundsException występuje, gdy następuje próba dostępu do elementu tablicy, którego

A. indeks jest równy lub większy od rozmiaru tablicy
B. wartość przekracza rozmiar tablicy
C. indeks mieści się w zakresie od 0 do n-1, gdzie n oznacza rozmiar tablicy
D. wartość przewyższa jego indeks

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wyjątek ArrayIndexOutOfBoundsException w Javie to taki klasyk, na który łatwo się naciąć, zwłaszcza gdy operujesz na tablicach dynamicznie lub masz jakieś pętle i zapomnisz o poprawnych granicach. Ta odpowiedź jest prawidłowa, bo w języku Java indeksowanie tablic zaczyna się od 0, a ostatni poprawny indeks to zawsze rozmiar tablicy minus jeden. Jeśli próbujesz dostać się do elementu, którego indeks jest równy lub większy od rozmiaru tablicy, silnik uruchomieniowy Javy od razu rzuci ten wyjątek. Przykład? Masz tablicę int[] t = new int[5]; i próbujesz odwołać się do t[5] albo t[10] – nie zadziała, bo legalne są tylko indeksy 0, 1, 2, 3, 4. Moim zdaniem to jeden z tych wyjątków, które wyraźnie pokazują, jak ważne jest zabezpieczanie kodu i stosowanie praktyk takich jak sprawdzanie długości tablicy przed dostępem do jej elementów. W profesjonalnym kodzie, zwłaszcza komercyjnym, nie zostawia się takich rzeczy przypadkowi – często stosuje się pętle typu for (int i = 0; i < array.length; i++), żeby mieć pewność, że nigdzie nie wyjedziemy poza zakres. Dobra praktyka to też wykorzystywanie narzędzi jak testy jednostkowe, żeby wyłapywać takie błędy. Warto pamiętać, że ten wyjątek jest unchecked, czyli nie musisz go łapać w kodzie, ale dobrze jest rozumieć, że jego pojawienie się oznacza błąd w logice programu. Osobiście uważam, że jeśli ktoś raz się na tym przejedzie, to już zawsze sprawdza rozmiar tablicy przed dostępem – taka nauczka na całe życie programisty.

Pytanie 9

Które z poniższych nie jest wzorcem architektonicznym aplikacji mobilnych?

A. MVC (Model-View-Controller)
B. MVVM (Model-View-ViewModel)
C. Clean Architecture
D. Linear Sequential Flow

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Linear Sequential Flow, znany również jako model kaskadowy, nie jest uznawany za wzorzec architektoniczny aplikacji mobilnych z kilku powodów. Przede wszystkim jest to podejście linearnie sekwencyjne, które zakłada, że wszystkie fazy rozwoju oprogramowania (analiza wymagań, projektowanie, implementacja, testowanie i wdrożenie) są realizowane jedna po drugiej. W praktyce oznacza to, że nie ma możliwości powrotu do wcześniejszych etapów bez znacznych kosztów i czasu. W kontekście aplikacji mobilnych, gdzie wymagania często zmieniają się w trakcie procesu rozwoju, podejście to może prowadzić do poważnych problemów. Zamiast tego, stosuje się bardziej elastyczne wzorce, takie jak MVC (Model-View-Controller), MVVM (Model-View-ViewModel) czy Clean Architecture, które pozwalają na łatwiejsze dostosowywanie się do zmieniających się potrzeb rynku. Przykładem zastosowania MVC może być aplikacja z interfejsem użytkownika, gdzie model odpowiada za dane, widok za interakcję z użytkownikiem, a kontroler łączy te dwa elementy. Oprócz tego, wzorce architektoniczne takie jak MVVM są szczególnie popularne w aplikacjach opartych na JavaScript, co wprowadza jeszcze większą modularność i możliwość testowania poszczególnych komponentów.

Pytanie 10

Jaki tekst zostanie wyświetlony po uruchomieniu jednego z poniższych fragmentów kodu?
Kod w React:

<h2>{2+2}</h2>
Kod w Angular:
<h2>{{2+2}}</h2>
A. {2+2}
B. 4
C. {4}
D. {{2+2}}

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
To pytanie jest świetną okazją, żeby zobaczyć, jak działają wyrażenia w szablonach Reacta i Angulara. Odpowiedź „4” jest prawidłowa, bo zarówno w React, jak i w Angularze, zawarte w nawiasach klamrowych wyrażenie matematyczne 2+2 jest oceniane przez silnik JavaScript podczas renderowania komponentu. Nie jest to zwykły tekst, tylko dynamiczne wyliczenie. Dzięki temu React (w JSX) oraz Angular (w interpolacji {{}}) najpierw obliczają sumę, a potem podstawiają wynik w miejsce wyrażenia – czyli na ekranie pojawia się zwykły tekst „4”. Moim zdaniem to jedna z największych zalet tych frameworków, bo pozwala na bardzo elastyczne budowanie UI, gdzie dynamiczne dane mogą być wstawiane praktycznie wszędzie, bez potrzeby ręcznego tworzenia dodatkowych zmiennych czy długich instrukcji warunkowych. W praktyce często stosuje się takie podejście chociażby do wyświetlania wyników obliczeń, liczników, czy dynamicznych podsumowań. Z mojego doświadczenia, warto pamiętać, że każde wyrażenie w takich miejscach powinno być możliwie proste — złożone logiki lepiej wynieść do funkcji, bo wtedy szablon pozostaje czytelny. Warto też mieć świadomość, że React i Angular automatycznie konwertują wynik na tekst, więc nie trzeba się martwić o jawne rzutowanie. To podejście jest zgodne z dobrymi praktykami branżowymi – prosty, czytelny kod to podstawa w nowoczesnych aplikacjach webowych.

Pytanie 11

Która z wymienionych bibliotek pozwala na obsługę zdarzeń związanych z myszą w aplikacjach desktopowych?

A. TensorFlow
B. Numpy
C. Qt
D. Django

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Qt to jedna z najpopularniejszych bibliotek, która umożliwia obsługę zdarzeń myszy i klawiatury w aplikacjach desktopowych. Dzięki Qt możliwe jest tworzenie interaktywnych aplikacji, które reagują na kliknięcia, przesunięcia kursora oraz inne zdarzenia generowane przez urządzenia wejściowe. Qt oferuje obszerną dokumentację i gotowe klasy, takie jak QPushButton, QLabel czy QSlider, które mogą nasłuchiwać zdarzeń i dynamicznie zmieniać stan aplikacji. Co więcej, Qt pozwala na implementację niestandardowych zdarzeń i tworzenie zaawansowanych interfejsów graficznych, które są w pełni interaktywne i responsywne.

Pytanie 12

Która z poniższych nie jest zasadą czystego kodu (clean code)?

A. Jedna odpowiedzialność funkcji
B. Samodokumentujący się kod
C. Maksymalna złożoność funkcji
D. Konsekwentne nazewnictwo

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Maksymalna złożoność funkcji to pojęcie, które odnosi się do zasady, że funkcje powinny być jak najmniej złożone, aby były zrozumiałe i łatwe w utrzymaniu. Czysty kod promuje ideę, że każda funkcja powinna mieć jasno określoną odpowiedzialność, co w praktyce oznacza ograniczenie jej złożoności. Przykładem może być rozdzielenie złożonej logiki biznesowej na kilka prostszych funkcji, co ułatwia ich testowanie i ponowne wykorzystanie. Warto zwrócić uwagę, że zgodnie z zasadą KISS (Keep It Simple, Stupid) dąży się do prostoty w projektowaniu kodu, co nie tylko zwiększa jego czytelność, ale także minimalizuje ryzyko błędów. Dobrze napisany kod powinien być również samodokumentujący się, co oznacza, że jego struktura i nazwy zmiennych powinny jasno wskazywać na ich funkcjonalność. Przestrzeganie zasady maksymalnej złożoności funkcji jest kluczowe w kontekście długoterminowego utrzymania aplikacji, ponieważ zmniejsza koszty związane z modyfikacjami oraz poprawkami.

Pytanie 13

Co oznacza pojęcie TDD w kontekście programowania?

A. Task Deployment Diagram - schemat wdrażania zadań w projekcie
B. Test-Driven Development - praktyka pisania testów przed implementacją kodu
C. Technical Design Document - dokumentacja techniczna projektu
D. Type Definition Document - dokumentacja typów danych w aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Test-Driven Development (TDD) to metodologia programowania, w której proces tworzenia kodu zaczyna się od pisania testów. TDD polega na cyklicznym podejściu do rozwoju oprogramowania, w którym najpierw definiujemy, jakie funkcjonalności będzie miał nasz kod, a następnie implementujemy tylko te elementy, które są niezbędne do przejścia wcześniej napisanych testów. Dzięki temu, deweloperzy mają możliwość natychmiastowego sprawdzenia poprawności swojego kodu, co sprzyja eliminacji błędów na wczesnym etapie. Przykład zastosowania TDD można zobaczyć w tworzeniu aplikacji webowych, gdzie programista pisze testy jednostkowe dla nowych funkcji, a następnie implementuje te funkcje, poprawiając kod tylko w przypadku, gdy testy nie przechodzą. Takie podejście pozwala na zwiększenie jakości oprogramowania oraz jego łatwiejszą refaktoryzację. Warto również zauważyć, że TDD jest zgodne z praktykami Agile i Continuous Integration, co pozwala na efektywniejsze zarządzanie projektem i dostosowywanie go do wymagań zmieniającego się rynku.

Pytanie 14

Aplikacje funkcjonujące w systemach Android do komunikacji z użytkownikiem wykorzystują klasę

A. Activity
B. Windows
C. Screens
D. Fragments

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W systemie Android klasa Activity to absolutna podstawa komunikacji aplikacji z użytkownikiem. To właśnie ona reprezentuje jeden ekran interfejsu użytkownika, coś w stylu okna dialogowego w klasycznych aplikacjach desktopowych. Cały cykl życia aplikacji, obsługa zdarzeń, wyświetlanie elementów graficznych czy reagowanie na akcje użytkownika – wszystko to ogarnia Activity. Bez niej praktycznie żadna aplikacja nie ruszy, bo to właśnie Activity zarządza np. wywołaniem widoku, obsługą kliknięć czy przekazywaniem danych pomiędzy różnymi ekranami. Moim zdaniem, jeśli ktoś chce programować na Androida, najpierw powinien dobrze przyswoić, jak działa Activity i jej cykl życia (onCreate, onStart itd.), bo to pozwala tworzyć aplikacje zgodne z założeniami platformy. W praktyce deweloperzy bardzo często korzystają z dziedziczenia po klasie Activity, aby rozszerzyć funkcjonalność swoich aplikacji, a także używają jej do uruchamiania nowych ekranów oraz zarządzania nawigacją. Warto jeszcze pamiętać, że dobra znajomość Activity pomaga unikać typowych problemów z zarządzaniem pamięcią czy nieprawidłowym obsługiwaniem powrotów do aplikacji po przerwie. Z mojego doświadczenia, zrozumienie działania Activity to taka baza, bez której trudno iść dalej w temacie Androida.

Pytanie 15

Jaką rolę odgrywa program Jira?

A. Produkcja grafik 3D
B. Zarządzanie edycjami systemu operacyjnego
C. Planowanie, śledzenie oraz raportowanie zadań projektowych
D. Modyfikowanie arkuszy kalkulacyjnych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Jira to jedno z najpopularniejszych narzędzi do zarządzania projektami, wykorzystywane głównie w metodykach Agile i Scrum. Umożliwia planowanie, monitorowanie i raportowanie zadań projektowych na różnych etapach ich realizacji. Dzięki elastycznym tablicom kanban i sprintom, Jira pozwala zespołom programistycznym śledzić postępy, zarządzać backlogiem oraz efektywnie przydzielać zasoby. Funkcjonalności takie jak automatyzacja procesów, śledzenie błędów (bug tracking) i integracja z innymi narzędziami (np. GitHub, Bitbucket) sprawiają, że Jira jest wszechstronnym rozwiązaniem do zarządzania nawet najbardziej złożonymi projektami. Dzięki generowanym raportom i wykresom burndown, menedżerowie mogą dokładnie analizować tempo pracy i podejmować decyzje w oparciu o dane.

Pytanie 16

W jaki sposób można ograniczyć problemy społeczne wynikające z nadmiernego używania internetu?

A. Zwiększać czas spędzany przy ekranie
B. Całkowicie wycofać się z aktywności wirtualnych
C. Unikać spotkań z ludźmi w realnym świecie
D. Zachować równowagę pomiędzy relacjami w sieci a tymi w rzeczywistości

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Utrzymywanie równowagi między relacjami online i offline to kluczowy element zapobiegania problemom społecznym wynikającym z nadmiernego korzystania z internetu. Przeplatanie kontaktów wirtualnych z interakcjami twarzą w twarz wzmacnia więzi społeczne i poprawia umiejętności komunikacyjne. Równowaga między życiem cyfrowym a rzeczywistym pozwala unikać izolacji społecznej i wspiera rozwój empatii oraz zdolności interpersonalnych. Jest to szczególnie ważne w kontekście młodzieży, która może być bardziej podatna na negatywne skutki nadmiernej ekspozycji na treści online.

Pytanie 17

Który z podanych terminów najlepiej odnosi się do składnika statycznego w klasie?

A. Funkcja, która wywołuje destruktor danej klasy
B. Metoda z dostępem ograniczonym tylko do tej samej klasy
C. Zmienna lokalna wewnątrz danej klasy
D. Pole lub metoda, która jest przypisana do klasy, a nie do jej instancji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Składnik statyczny klasy to pole lub metoda, która należy do klasy jako całości, a nie do konkretnego obiektu. Oznacza to, że istnieje tylko jedna kopia składnika statycznego współdzielona przez wszystkie obiekty tej klasy. Przykład w C++: `class Licznik { public: static int liczbaObiektow; }`. Zmienna `liczbaObiektow` przechowuje liczbę utworzonych instancji klasy i jest wspólna dla wszystkich obiektów. Składniki statyczne są często używane do implementacji liczników, zarządzania zasobami lub przechowywania danych globalnych w obrębie klasy.

Pytanie 18

Co oznacza akronim IDE w kontekście programowania?

A. Interaktywny Silnik Programistyczny
B. Integrated Development Environment
C. Interaktywny Edytor Debugowania
D. Zintegrowane Środowisko Debugowania

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
IDE, czyli Zintegrowane Środowisko Programistyczne, to naprawdę przydatne narzędzie. Zajmuje się nie tylko edytowaniem kodu, ale łączy w sobie kompilator, debugger i wiele innych rzeczy, które pomagają w tworzeniu oprogramowania. Dzięki IDE można szybciej pisać programy i lepiej ogarniać projekty. A najpopularniejsze z nich, jak Visual Studio, IntelliJ IDEA czy Eclipse, wspierają różne języki programowania, więc są bardzo uniwersalne. Moim zdaniem, korzystanie z IDE to prawie obowiązek dla każdego programisty!

Pytanie 19

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 odwzajemniania się osobie, która nam pomogła
C. do kierowania się zdaniem danej grupy
D. do doprowadzania spraw do końca

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 20

Która z niżej wymienionych pozycji jest ekwiwalentem biblioteki jQuery?

A. Bootstrap
B. TypeScript
C. Lodash
D. Express.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Lodash to popularna biblioteka JavaScript, która dostarcza gotowe funkcje umożliwiające manipulację tablicami, obiektami oraz danymi. Lodash upraszcza wiele złożonych operacji, takich jak filtrowanie, mapowanie, sortowanie i grupowanie danych. Dzięki Lodash programiści mogą efektywnie zarządzać złożonymi strukturami danych, co prowadzi do zwiększenia czytelności i efektywności kodu. Biblioteka jest szeroko stosowana w aplikacjach frontendowych i backendowych, a jej funkcje są zoptymalizowane pod kątem wydajności, co czyni ją nieocenionym narzędziem w dużych projektach. Lodash często bywa porównywany do jQuery, jednak jego głównym celem jest manipulacja danymi, a nie elementami DOM. Dzięki swojej wszechstronności Lodash znajduje zastosowanie w niemal każdym projekcie JavaScript, zarówno w prostych aplikacjach webowych, jak i dużych projektach korporacyjnych.

Pytanie 21

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

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

Brak odpowiedzi na to pytanie.

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

Pytanie 22

Jakie z wymienionych funkcji są typowe dla narzędzi służących do zarządzania projektami?

A. Tworzenie interfejsu użytkownika
B. Opracowywanie diagramów przepływu
C. Przeprowadzanie analizy statystycznej
D. Nadzorowanie postępu realizacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Monitorowanie postępu prac to jedna z kluczowych funkcji narzędzi do zarządzania projektami. Dzięki temu zespoły mogą śledzić realizację zadań, identyfikować opóźnienia oraz efektywnie alokować zasoby. Narzędzia takie jak Jira, Trello czy Asana pozwalają na wizualizację postępów, co ułatwia kontrolowanie harmonogramu oraz planowanie kolejnych etapów projektu. Monitorowanie postępu prac pomaga także w wykrywaniu wąskich gardeł i umożliwia szybkie podejmowanie decyzji, co znacząco zwiększa efektywność całego zespołu. Funkcja ta jest szczególnie istotna w zarządzaniu projektami IT, budowlanymi i kreatywnymi, gdzie koordynacja wielu zadań jest kluczowa dla sukcesu projektu.

Pytanie 23

Które z wymienionych stwierdzeń najtrafniej charakteryzuje klasę dziedziczącą?

A. Klasa, która dzieli swoje pola z klasami zaprzyjaźnionymi
B. Klasa, która nie może posiadać konstruktorów ani destruktorów
C. Klasa, która wykorzystuje pola i metody innej klasy bez ich ponownej definicji
D. Klasa, która umożliwia wielokrotne dziedziczenie pól prywatnych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dziedziczenie w programowaniu obiektowym pozwala na tworzenie nowych klas na podstawie istniejących. Klasa dziedziczona (klasa pochodna) automatycznie uzyskuje dostęp do publicznych i chronionych pól oraz metod klasy bazowej, co eliminuje potrzebę ich ponownego definiowania. Dzięki dziedziczeniu można rozszerzać funkcjonalność istniejących klas, co prowadzi do bardziej efektywnego i modułowego kodu. Przykładem może być klasa 'Pojazd', po której dziedziczy klasa 'Samochód', zachowując wszystkie właściwości pojazdu i dodając specyficzne dla samochodu metody lub pola.

Pytanie 24

Co to jest Continuous Integration (CI)?

A. Technika tworzenia aplikacji mobilnych w sposób przyrostowy
B. Metoda ciągłego monitorowania wydajności aplikacji w produkcji
C. Praktyka automatycznego integrowania kodu w repozytorium wspólnym wraz z testami
D. Protokół komunikacji między różnymi częściami aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Continuous Integration (CI) to praktyka, która ma na celu automatyzację procesu integrowania kodu w repozytorium wspólnym. Główną ideą CI jest to, aby programiści regularnie dodawali swoje zmiany do głównej gałęzi kodu, co pozwala na bieżące testowanie aplikacji. Dzięki temu można szybko wykrywać i naprawiać błędy, zanim staną się one poważnym problemem. Typowym przykładem zastosowania CI jest użycie narzędzi takich jak Jenkins, GitLab CI czy Travis CI, które automatycznie uruchamiają zestaw testów po każdym wprowadzeniu zmian. Takie podejście nie tylko poprawia jakość kodu, ale również przyspiesza cykl wydania oprogramowania, co jest zgodne z najlepszymi praktykami w branży. Warto również zauważyć, że CI jest często częścią szerszego podejścia do DevOps, które integruje rozwój i operacje, aby zwiększyć efektywność całego procesu wytwarzania oprogramowania.

Pytanie 25

Ergonomiczną oraz właściwą pozycję do pracy przy komputerze zapewni fotel, którego

A. podłokietniki znajdują się 20 cm poniżej blatu
B. oparcie w rejonie szyi jest nachylone do przodu o 40ᵒ
C. podłokietniki są 30 cm powyżej blatu
D. oparcie wspiera lordozę w dolnym odcinku pleców

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prawidłowa i ergonomiczna pozycja pracy przy komputerze jest kluczowa dla zdrowia i komfortu użytkownika. Oparcie krzesła, które zapewnia lordozę w odcinku lędźwiowym, jest niezbędne, ponieważ pozwala na zachowanie naturalnej krzywizny kręgosłupa. Lordoza lędźwiowa to naturalne wygięcie kręgosłupa w dolnej części pleców, które wspiera prawidłowe ułożenie ciała podczas siedzenia. Krzesło powinno być zaprojektowane tak, aby oparcie przylegało do krzywizny ciała, co minimalizuje ryzyko bólu pleców oraz przeciążeń. Praktycznym przykładem ergonomicznej pozycji jest ustawienie oparcia w taki sposób, aby jego dolna część była dostosowana do odcinka lędźwiowego. Zgodnie z normami ISO 9241, które dotyczą ergonomii miejsc pracy przy komputerze, krzesło powinno umożliwiać użytkownikowi przyjęcie wygodnej pozycji z podparciem dla dolnej części pleców. W odpowiedniej pozycji stopy powinny spoczywać płasko na podłodze, a kolana powinny być na poziomie bioder, co wspiera prawidłowe krążenie krwi oraz redukuje napięcia mięśniowe.

Pytanie 26

Przedstawiony fragment dotyczy funkcji resize w języku C++. Ta funkcja obniży długość elementu string, gdy wartość parametru

Resize string
Resizes the string to a length of n characters.

If n is smaller than the current string length, the current value is shortened to its first n character, removing the characters beyond the nth.

If n is greater than the current string length, the current content is extended by inserting at the end as many characters as needed to reach a size of n. If c is specified, the new elements are initialized as copies of c; otherwise, they are value-initialized characters (null characters).

Parameters
n
New string length, expressed in number of characters.
size_t is an unsigned integral type (the same as member type string::size_type).
c
Character used to fill the new character space added to the string (in case the string is expanded).
Źródło: http://www.cplusplus.com/reference/string/string/resize/
A. n jest mniejsza od aktualnej długości łańcucha
B. n jest większa od aktualnej długości łańcucha
C. c jest mniejsza od aktualnej długości łańcucha
D. c jest większa od aktualnej długości łańcucha

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
To jest dokładnie to, o co chodzi w funkcji resize dla std::string w C++. Jeśli podany parametr n jest mniejszy od aktualnej długości łańcucha, to obcinamy stringa do tych właśnie n znaków – reszta znika bezpowrotnie. Moim zdaniem to bardzo wygodne, bo nie trzeba ręcznie wycinać fragmentu czy bawić się w operacje na podłańcuchach. Praktycznie rzecz biorąc, można dzięki temu szybko skrócić dane wejściowe, np. gdy pobieramy z pliku długi tekst, a potrzebujemy tylko jego fragment do dalszego przetwarzania. W branży często się to przydaje – na przykład ograniczając długość nicku użytkownika do określonej liczby znaków lub przytrzymując długość serializowanych danych w protokołach sieciowych. Resize działa wprost i zgodnie ze standardem C++, usuwając znaki od indeksu n wzwyż. Co ciekawe, metoda nie tylko skraca, ale też rozszerza string – wtedy wypełnia go nowymi znakami (np. 'x' czy znakiem pustym), ale to właśnie skracanie jest często pomijane przez początkujących, a jest naprawdę przydatne. No i trzeba pamiętać, że oryginalne znaki spoza zakresu po prostu znikają – nie ma żadnych ostrzeżeń. Z mojego doświadczenia to jedna z tych funkcji, do których z czasem nabiera się szacunku – bo ułatwia życie na co dzień przy operacjach na łańcuchach znaków.

Pytanie 27

Jakie elementy powinny być uwzględnione w dokumentacji testowej aplikacji?

A. Opis procedur testowych oraz rezultaty wykonanych testów
B. Specyfikacje techniczne serwera
C. Zalecenia dotyczące optymalizacji kodu
D. Harmonogram wdrożenia aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Opis procedur testowych i wyników przeprowadzonych testów to kluczowy element dokumentacji testów aplikacji. Tego rodzaju dokumentacja obejmuje szczegółowe instrukcje dotyczące metod testowania, użytych narzędzi oraz kroków niezbędnych do przeprowadzenia testów jednostkowych, integracyjnych i systemowych. W dokumentacji znajdują się również raporty z wynikami testów, które wskazują, czy aplikacja działa zgodnie z wymaganiami oraz jakie błędy zostały wykryte. Testy pozwalają na wczesne wychwycenie problemów i eliminację błędów przed wdrożeniem aplikacji na produkcję, co znacząco zwiększa jakość oprogramowania. Dokumentacja testowa jest także nieocenionym źródłem informacji dla zespołów QA (Quality Assurance), umożliwiając śledzenie historii testów i zapewnienie, że wszystkie elementy aplikacji zostały przetestowane zgodnie z procedurami.

Pytanie 28

Co to jest polimorfizm w programowaniu obiektowym?

A. Proces tworzenia nowej klasy na podstawie istniejącej
B. Zdolność klasy do posiadania wielu konstruktorów
C. Mechanizm ukrywania szczegółów implementacji przed zewnętrznymi klasami
D. Zdolność obiektów różnych klas do reagowania na tę samą metodę w sposób odpowiedni dla ich klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polimorfizm jest fundamentalnym pojęciem w programowaniu obiektowym, które pozwala obiektom różnych klas na reagowanie na tę samą metodę w sposób odpowiedni dla ich konkretnej klasy. Przykładowo, jeśli mamy klasę `Zwierze` z metodą `dźwięk()`, a następnie klasy `Pies` i `Kot`, każda z tych klas może implementować metodę `dźwięk()` w inny sposób: pies może wydawać dźwięk 'Hau', podczas gdy kot 'Miau'. Dzięki temu, gdy wywołujemy `dźwięk()` na obiekcie typu `Zwierze`, a dokładnie na obiekcie, który może być różnego typu, uzyskujemy różne wyniki w zależności od klasy. Polimorfizm zwiększa elastyczność i skalowalność kodu, co jest zgodne z zasadami SOLID, szczególnie z zasadą otwarte-zamknięte. W praktyce polimorfizm umożliwia programistom tworzenie bardziej złożonych systemów, w których obiekty mogą być używane zamiennie, co ułatwia ich rozwój i konserwację.

Pytanie 29

Jak wygląda kod uzupełnienia do dwóch dla liczby -5 w formacie binarnym przy użyciu 8 bitów?

A. 11111101
B. 11111011
C. 10000101
D. 00000101

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Aby obliczyć kod uzupełnieniowy do dwóch dla liczby -5 w zapisie binarnym na 8 bitach, należy najpierw przedstawić liczbę 5 w postaci binarnej, co daje 00000101. Zgodnie z zasadą uzupełnienia do dwóch, aby uzyskać reprezentację liczby ujemnej, najpierw inwertujemy wszystkie bity tej liczby. Inwersja 00000101 prowadzi do 11111010. Następnie dodajemy 1 do wyniku inwersji: 11111010 + 1 = 11111011. Ostatecznie, kod uzupełnieniowy do dwóch dla -5 na 8 bitach to 11111011. Ta metoda jest powszechnie stosowana w systemach komputerowych i umożliwia efektywne operacje arytmetyczne na liczbach całkowitych, w tym na liczbach ujemnych, co jest kluczowe w kontekście programowania i projektowania systemów. Warto zaznaczyć, że standardy takie jak IEEE 754 definiują zasady reprezentacji liczb zmiennoprzecinkowych, ale w przypadku liczb całkowitych, kod uzupełnieniowy do dwóch pozostaje standardem w większości architektur komputerowych.

Pytanie 30

Jakiego typu funkcja jest tworzona poza klasą, ale ma dostęp do jej prywatnych i chronionych elementów?

A. Konstruktor
B. Funkcja zaprzyjaźniona
C. Metoda statyczna
D. Destruktor

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Funkcja zaprzyjaźniona to specjalny typ funkcji, który jest deklarowany jako 'friend' w ciele klasy, co pozwala jej na dostęp do prywatnych i chronionych składowych tej klasy. Chociaż funkcja zaprzyjaźniona jest definiowana poza klasą, może operować na jej wewnętrznych danych, co czyni ją bardzo użytecznym narzędziem w programowaniu obiektowym. Tego rodzaju funkcje są często wykorzystywane w przypadkach, gdy konieczne jest współdziałanie dwóch klas lub funkcji narzędziowych, które muszą manipulować danymi wewnętrznymi klasy, ale nie powinny być jej metodami członkowskimi. Dzięki funkcjom zaprzyjaźnionym można zapewnić elastyczność w dostępie do danych przy jednoczesnym zachowaniu hermetyzacji klasy. Przykładem może być przeciążenie operatorów, np. operator +, który musi mieć dostęp do prywatnych składowych obu operandów.

Pytanie 31

Przedstawione w filmie działania wykorzystują narzędzie

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

Brak odpowiedzi na to pytanie.

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

Pytanie 32

Jakie narzędzie jest wykorzystywane do zgłaszania błędów w projektach IT?

A. Photoshop
B. Blender
C. JIRA
D. Git

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
JIRA to jedno z najczęściej wykorzystywanych narzędzi do zarządzania projektami i raportowania błędów w projektach informatycznych. JIRA umożliwia śledzenie błędów, zarządzanie zadaniami oraz efektywne monitorowanie postępów prac nad projektem. Dzięki integracji z innymi narzędziami, takimi jak Confluence czy Bitbucket, JIRA stanowi kompleksowe rozwiązanie wspierające zespoły deweloperskie. Raportowanie błędów w JIRA pozwala na łatwe przypisywanie ich do odpowiednich członków zespołu, dodawanie załączników i komentarzy oraz monitorowanie statusu danego problemu, co usprawnia proces zarządzania jakością oprogramowania.

Pytanie 33

Co to jest SQL injection?

A. Technika ataku polegająca na wstrzyknięciu złośliwego kodu SQL do zapytania
B. Narzędzie do importowania danych do bazy SQL
C. Metoda optymalizacji zapytań SQL w bazach danych
D. Proces automatyzacji tworzenia zapytań SQL

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
SQL injection to technika ataku, polegająca na wstrzyknięciu złośliwego kodu SQL do zapytań, które są przetwarzane przez aplikacje bazodanowe. Atakujący wykorzystuje luki w zabezpieczeniach aplikacji, aby wprowadzić własne instrukcje SQL, które są następnie wykonywane przez bazę danych. Na przykład, jeśli aplikacja nie waliduje poprawnie danych wprowadzanych przez użytkownika, napastnik może wprowadzić złośliwy kod w miejsce oczekiwanego wejścia. Taki atak może prowadzić do ujawnienia poufnych danych, a nawet pełnej kontroli nad bazą danych. Ważne jest, aby stosować tzw. 'prepared statements' oraz 'parameterized queries', co znacząco obniża ryzyko tego typu ataków. Zgodnie z najlepszymi praktykami bezpieczeństwa, aplikacje powinny być regularnie testowane pod kątem podatności na SQL injection, a także powinny stosować odpowiednie mechanizmy autoryzacji i walidacji, aby minimalizować ryzyko wykorzystania takich technik.

Pytanie 34

W celu wdrożenia w aplikacji internetowej mechanizmu zbierania danych statystycznych na komputerach użytkowników, można użyć

A. formulacje
B. buforowanie
C. ciasteczka
D. sesje

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ciasteczka, czyli tzw. cookies, to naprawdę podstawowy, a zarazem bardzo skuteczny mechanizm wykorzystywany w aplikacjach internetowych właśnie do zbierania i przechowywania danych statystycznych na komputerach użytkowników. Przeglądarki obsługują je praktycznie od zawsze i każda strona, która chce śledzić zachowanie odwiedzających, korzysta z cookies – choćby do zapamiętywania wizyt, identyfikowania użytkowników czy przechowywania preferencji. Co istotne, ciasteczka działają po stronie klienta, więc idealnie nadają się do przechowywania niewielkich ilości informacji bez konieczności ciągłego odpytywania serwera. W praktyce branżowej cookies są fundamentem dla narzędzi analitycznych, takich jak Google Analytics – to właśnie tam są zapisywane unikalne identyfikatory użytkowników, sesji czy kanałów ruchu. Z mojego doświadczenia mogę dodać, że jeśli ktoś kiedyś chciałby zbudować własny system analityczny, to zacznie właśnie od ciasteczek, bo są łatwo dostępne przez JavaScript i bardzo dobrze wspierane przez standardy sieciowe (np. RFC 6265). Warto też pamiętać o kwestiach prywatności i RODO, bo dzisiaj strony muszą informować użytkowników o użyciu cookies. Niemniej, jeśli chodzi o mechanizm zbierania statystyk na komputerze użytkownika, to cookies są wręcz nie do zastąpienia.

Pytanie 35

Jakie jest zadanie interpretera?

A. wykonywanie skryptu krok po kroku
B. analiza składni całego programu przed jego uruchomieniem
C. optymalizacja większej części kodu, aby przyspieszyć jego wykonanie
D. tłumaczenie kodu na kod maszynowy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Interpreter to takie narzędzie, które wykonuje kod linijka po linijce. Działa to tak, że odczytuje program napisany w języku wysokiego poziomu, weryfikuje co tam w nim siedzi i od razu realizuje polecenia, co sprawia, że można fajnie testować kod. Na przykład w Pythonie można łatwo sprawdzić różne fragmenty kodu, co jest mega pomocne przy pisaniu i poprawianiu oprogramowania. Wiesz, od kompilatora różni się tym, że kompilator przetwarza cały kod od razu, tworząc kod maszynowy, który później działa na komputerze. Dzięki temu interpreter jest bardziej elastyczny, można szybko przetestować nowe pomysły, ale z drugiej strony, czasami nie działa tak efektywnie jak skompilowane programy, bo każda linia kodu jest analizowana na bieżąco. Więc w przypadku dużych i wymagających aplikacji lepiej sprawdzają się kompilatory, ale interpreter to skarb, zwłaszcza w nauce i prototypowaniu.

Pytanie 36

W zaprezentowanym kodzie ukazano jedno z fundamentalnych założeń programowania obiektowego. Czym ono jest?

public class Owoc {
}

public class Truskawka extends Owoc {
}

public class Jablko extends Owoc {
}
Ilustracja do pytania
A. dziedziczenie
B. hermetyzacja
C. abstrakcja
D. polimorfizm

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
To właśnie jest klasyczny przykład dziedziczenia w programowaniu obiektowym. W tym przypadku mamy bazową klasę 'Owoc', z której dziedziczą klasy 'Truskawka' oraz 'Jablko'. Dzięki temu możemy zdefiniować wspólne cechy i zachowania dla wszystkich owoców w jednej klasie, a potem rozszerzać je w bardziej szczegółowych klasach. Moim zdaniem to jedno z najwygodniejszych założeń OOP, bo pozwala pisać kod, który jest łatwiejszy do utrzymania i rozbudowy. Jeśli kiedyś dołożysz nową funkcjonalność do wszystkich owoców, nie musisz jej wrzucać oddzielnie do każdej odmiany, tylko wystarczy, że zrobisz to raz w klasie 'Owoc'. To bardzo zgodne ze standardami SOLID i ogólnie dobrą praktyką DRY (Don't Repeat Yourself). W realnych aplikacjach, np. systemach do zarządzania magazynem, dziedziczenie pozwala łatwo rozróżnić typy produktów, a jednocześnie trzymać wspólny kod w jednym miejscu. Warto też pamiętać, że dziedziczenie to podstawa do późniejszego korzystania z polimorfizmu. Jeśli chcesz, żeby jakieś metody działały różnie w zależności od konkretnego typu owocu, wystarczy je nadpisać w podklasach. W sumie – nie da się pisać sensownych aplikacji obiektowych bez znajomości dziedziczenia, bo to daje ogromną elastyczność i porządek w kodzie.

Pytanie 37

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. TextBox - dla biblioteki WPF; JTextField - dla biblioteki Swing
C. Box - dla biblioteki WPF; JField - dla biblioteki Swing
D. Text - dla biblioteki WPF; JText - dla biblioteki Swing

Brak odpowiedzi na to pytanie.

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

Które z wymienionych stwierdzeń najtrafniej charakteryzuje klasę bazową?

A. Klasa, która zawsze zawiera metody wirtualne
B. Klasa, która zapewnia wspólne atrybuty i metody dla klas pochodnych
C. Klasa, która nie może być dziedziczona
D. Klasa, która dziedziczy z klasy pochodnej

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Klasa bazowa to klasa, która dostarcza wspólne pola i metody dla klas pochodnych. Definiuje ogólną funkcjonalność, która może być rozszerzana lub modyfikowana przez klasy dziedziczące. Dzięki temu programowanie obiektowe umożliwia wielokrotne wykorzystanie kodu, co prowadzi do jego większej modularności i czytelności. Klasa bazowa często zawiera metody wirtualne, które mogą być nadpisywane przez klasy pochodne, co pozwala na dostosowanie funkcjonalności do konkretnych potrzeb. Przykładem jest klasa 'Pojazd', która posiada metody takie jak 'Jedz()' czy 'Zatrzymaj()', a klasy pochodne, np. 'Samochód' lub 'Rower', rozszerzają tę funkcjonalność.

Pytanie 39

Technika konstruowania algorytmu polegająca na rozbiciu na dwa lub więcej mniejszych podproblemów, aż do momentu, gdy ich części będą wystarczająco proste do bezpośredniego rozwiązania, nosi nazwę:

A. komiwojażera
B. heurystycznej
C. dziel i zwyciężaj
D. najkrótszej trasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Technika „dziel i zwyciężaj” (ang. divide and conquer) to jedno z tych podejść, które moim zdaniem warto naprawdę dobrze rozumieć, bo spotyka się je praktycznie wszędzie w informatyce. Chodzi tutaj o rozbijanie dużego problemu na mniejsze, bardziej strawne kawałki, które rozwiązujemy niezależnie, a potem składamy wyniki w całość. To bardzo eleganckie, bo pozwala np. mocno uprościć złożone zadania, a przy okazji często optymalizuje czas działania algorytmu. Przykładem mogą być sortowanie szybkie (quicksort) czy sortowanie przez scalanie (merge sort). W praktyce branżowej, kiedy pracuje się nad dużymi systemami albo algorytmami operującymi na wielkich zbiorach danych, taki sposób myślenia bardzo się przydaje, bo pozwala łatwo podzielić pracę nawet między kilku programistów. Standardy branżowe, zwłaszcza w kontekście rozwiązań algorytmicznych czy projektowania systemów, promują właśnie takie modularne podejście. Sam kiedyś przekonałem się, że dużo łatwiej jest testować i utrzymywać kod, kiedy trzyma się tej zasady. Fajnie wiedzieć, że często to właśnie „dziel i zwyciężaj” leży u podstaw wielu struktur danych, algorytmów wyszukiwania czy nawet analizy obrazu, nie tylko w typowym programowaniu. Warto pamiętać, że to nie tylko teoria – w codziennej pracy taki styl rozwiązywania problemów pozwala szybciej wychwytywać i naprawiać błędy, a to przecież kluczowe w projektach IT.

Pytanie 40

Które z poniższych twierdzeń najlepiej charakteryzuje metodę wirtualną?

A. Metoda, która działa wyłącznie dla statycznych pól danej klasy
B. Metoda, która jest zawsze stosowana w konstruktorach danej klasy
C. Metoda, która może być wywoływana tylko przez klasę nadrzędną
D. Metoda, która może być przesłonięta w klasie dziedziczącej

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wirtualna metoda to taka, która jest zdefiniowana w klasie bazowej i można ją nadpisać w klasie pochodnej. Fajna sprawa z tą metodą wirtualną jest taka, że działa na zasadzie dynamicznego wiązania, co w praktyce oznacza, że program decyduje w czasie działania, którą wersję metody wywołać. Dzięki temu mamy polimorfizm – możemy użyć różnych wersji tej samej metody, w zależności od typu obiektu, na którym pracujemy. To naprawdę ważny aspekt programowania obiektowego, bo pozwala na większą elastyczność i łatwiejsze rozwijanie kodu. W hierarchiach klas to się sprawdza, bo klasa bazowa ma ogólne metody, a klasy pochodne mogą je dostosować do swoich potrzeb.