Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Które zdarzenie w JavaScript jest wywoływane po całkowitym załadowaniu strony?

A. window.onload
B. page.complete
C. document.ready
D. window.render
Wszystkie inne odpowiedzi, takie jak "document.ready", "page.complete" oraz "window.render", są niepoprawne w kontekście pytania o zdarzenie wywoływane po całkowitym załadowaniu strony. Odpowiedź "document.ready" odnosi się do jQuery, a nie do czystego JavaScript. To zdarzenie wywoływane jest, gdy DOM jest załadowany, ale niekoniecznie wszystkie zasoby, takie jak obrazy czy arkusze stylów, są już dostępne. Używanie tego zdarzenia może prowadzić do nieporozumień, gdyż programiści mogą zakładać, że strona jest gotowa do pełnej interakcji, gdy w rzeczywistości zachowanie różnych elementów może się różnić w zależności od ładowania zasobów. Z kolei "page.complete" nie jest standardowym zdarzeniem w JavaScript i nie istnieje w dokumentacji, co czyni tę odpowiedź całkowicie błędną. "window.render" również nie jest znanym zdarzeniem w kontekście JavaScript, co może prowadzić do nieporozumień wśród programistów. Używanie niepoprawnych terminów lub zrozumienie ich znaczenia może prowadzić do błędów w kodzie, które z kolei skutkują nieprawidłowym działaniem aplikacji. Dlatego tak ważne jest, aby znać dokładne zdarzenia i ich zastosowanie w kontekście pełnego ładowania strony, co ma kluczowe znaczenie w tworzeniu responsywnych i dobrze działających aplikacji internetowych.

Pytanie 2

W jakiej metodzie zarządzania projektami nacisk kładzie się na ograniczenie marnotrawstwa?

A. Waterfall
B. Prototypowy
C. Scrum
D. Kanban
Kanban to metodologia zarządzania projektem, która koncentruje się na minimalizacji marnotrawstwa i optymalizacji przepływu pracy. Kluczowym elementem Kanbanu jest wizualizacja procesu za pomocą tablicy, na której znajdują się zadania w różnych fazach realizacji. Dzięki temu zespół może łatwo identyfikować wąskie gardła i eliminować zbędne procesy. Kanban promuje ciągłe doskonalenie (kaizen) i pozwala na dostosowywanie się do zmieniających się priorytetów bez konieczności reorganizacji całego projektu. Ta metodologia jest szeroko stosowana w branży IT, produkcji oraz w zespołach operacyjnych, które wymagają dużej elastyczności.

Pytanie 3

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

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

Pytanie 4

Jakie są kluczowe etapy realizacji projektu programistycznego?

A. Planowanie, analiza, implementacja, wdrożenie
B. Analiza, implementacja, testowanie, aktualizacja
C. Planowanie, projektowanie, debugowanie, konserwacja
D. Projektowanie, testowanie, aktualizacja, implementacja
Wybrałeś poprawną sekwencję etapów realizacji projektu programistycznego – to naprawdę ma kluczowe znaczenie w praktyce. Planowanie jest absolutnym fundamentem, bo pozwala zdefiniować cele, wymagania i zakres projektu. Bez porządnego planu łatwo się pogubić już na starcie, a potem robi się tylko drożej i trudniej. Następnie analiza – tutaj wchodzi się głębiej w temat: zbiera się szczegółowe wymagania, analizuje ryzyka i szuka ewentualnych problemów, które mogą pojawić się później. Implementacja to etap, gdzie programiści faktycznie piszą kod, ale – i to warto podkreślić – bez wcześniejszego solidnego planowania i analizy, ten etap bardzo często kończy się chaosem i ciągłymi poprawkami. Wdrożenie oznacza przekazanie gotowego produktu użytkownikom czy klientowi, często połączone z testami akceptacyjnymi i dokumentacją. Takie podejście jest zgodne z klasycznymi metodologiami typu waterfall, ale też w metodykach zwinnych te fazy się pojawiają, choć czasem są bardziej rozmyte – moim zdaniem, nawet w agile trzeba mieć minimum planowania i analizy, żeby nie robić rzeczy na ślepo. W prawdziwych projektach to jest właśnie ten główny szkielet pracy, do którego wszystko się sprowadza – znam sporo przykładów z branży, gdzie pominięcie choćby jednego z tych kroków kończyło się katastrofą. Dobrze jest mieć ten schemat w głowie, bo pomaga zarówno na etapie małych aplikacji, jak i dużych, wieloosobowych przedsięwzięć. Warto też pamiętać, że każdemu z tych etapów towarzyszą różne narzędzia i techniki – np. przy planowaniu często robi się diagramy Gantta, w analizie korzysta się z UML, a podczas wdrożenia dobrze mieć plan migracji i dokumentację użytkownika. Tak po prostu robi się to dobrze w świecie IT.

Pytanie 5

Jakie działania należy podjąć, aby uniknąć nieskończonej rekurencji w danej funkcji?

A. Wykorzystać automatyczny debugger w kompilatorze
B. Dodać warunek zakończenia w funkcji
C. Zastosować iterację zamiast rekurencji
D. Rozszerzyć zakres zmiennych globalnych
Warunek stopu to taki kluczowy element w rekurencji, który właściwie mówi, kiedy funkcja powinna przestać się wywoływać. Jak masz ten warunek, to funkcja wraca z wynikiem zamiast kręcić się w kółko, co mogłoby prowadzić do jakiegoś szaleństwa, tzn. przepełnienia stosu. Myślę, że warto zwrócić uwagę, że dodanie tego warunku to naprawdę podstawowa sprawa w programowaniu, bo bez niego wszystko może się posypać i przestanie działać tak, jak powinno.

Pytanie 6

Co to jest Redux?

A. Narzędzie do optymalizacji wydajności aplikacji React
B. Framework do tworzenia aplikacji mobilnych
C. Biblioteka do zarządzania stanem aplikacji w JavaScript
D. System kontroli wersji dla projektów JavaScript
Chociaż odpowiedzi związane z frameworkami do tworzenia aplikacji mobilnych, narzędziami do optymalizacji wydajności czy systemami kontroli wersji mogą być interesujące, nie są one związane z funkcją, jaką pełni Redux. Frameworki do tworzenia aplikacji mobilnych, takie jak React Native, pozwalają na rozwijanie aplikacji mobilnych z użyciem JavaScript, ale nie zarządzają one stanem aplikacji w sposób, w jaki robi to Redux. Optymalizacja wydajności aplikacji React nie jest bezpośrednią funkcją Redux; chociaż biblioteka ta może pośrednio przyczynić się do lepszej wydajności przez poprawne zarządzanie stanem, nie jest narzędziem służącym do optymalizacji. Z kolei systemy kontroli wersji, takie jak Git, służą do zarządzania historią zmian w kodzie źródłowym aplikacji, a nie do zarządzania stanem wykonawczej logiki aplikacji. Wybór niewłaściwego narzędzia wynika często z braku zrozumienia ich funkcji oraz zastosowania w procesie tworzenia aplikacji. Aby skutecznie zarządzać stanem w aplikacji, kluczowe jest zrozumienie różnic między tymi narzędziami oraz ich zastosowaniem w architekturze aplikacji, co jest fundamentalnym elementem współczesnego rozwijania oprogramowania.

Pytanie 7

W aplikacji mobilnej, aby określić warianty grafiki w zależności od wielkości ekranu, należy (uwaga: odpowiedzi wariantowe dla dwóch systemów - sugerować się systemem omawianym na zajęciach)

A. iOS: dodać do nazw plików sufiksy @2x, @3x. Android: umieścić grafikę w odpowiednich folderach drawable: -hdpi, -xhpi, xxhdpi
B. iOS: utworzyć katalogi hdpi, lhpi, xhpi i dodać do nich grafiki. Android: utworzyć katalogi 32x32, 64x64, 96x96 i dodać do nich grafiki
C. iOS: dodać do nazw sufiksy oznaczające rozdzielczość, np. 32ppi. Android: umieścić grafikę w odpowiednich katalogach: 32ppi, 64ppi, 96ppi
D. iOS: dodać do nazw sufiksy #2x, #3x. Android: dodać do nazw sufiks rozdzielczości: -32x32, -64x64, -96x96
Lepiej nie używać oznaczeń w stylu 32ppi czy 64ppi, bo to nie pasuje do żadnej z tych platform. To bardziej pasuje do druku, a nie aplikacji mobilnych. Foldery 32x32 czy 64x64 też nie mają sensu w kontekście Androida czy iOS. Jak stworzysz foldery o nazwach lhpi czy 32x32 to może być problem z wyświetlaniem grafiki na różnych urządzeniach. Z mojego doświadczenia, lepiej trzymać się ustalonych standardów, żeby uniknąć błędów.

Pytanie 8

Które z poniższych nie jest rodzajem bazy danych?

A. Grafowa baza danych
B. Relacyjna baza danych
C. Dokumentowa baza danych
D. Routing Database
Pojęcia relacyjnej bazy danych, grafowej bazy danych oraz dokumentowej bazy danych mają swoje fundamenty w różnych modelach przechowywania i organizacji danych. Relacyjne bazy danych wykorzystują struktury tabelaryczne do zarządzania danymi, co pozwala na efektywne wykonywanie zapytań i analizy danych. W tym modelu dane są przechowywane w wierszach i kolumnach, a związki między danymi są ustanawiane dzięki kluczom obcym, co sprzyja integralności danych i ich normalizacji. Zastosowanie relacyjnych baz danych jest szerokie, obejmuje systemy finansowe, aplikacje e-commerce oraz wiele innych systemów wymagających ścisłego zarządzania danymi. Grafowe bazy danych, takie jak Neo4j, opierają się na strukturze grafów, co umożliwia modelowanie bardziej skomplikowanych relacji i hierarchii. Ten typ bazy danych znajduje zastosowanie w analizie sieci społecznych, zarządzaniu danymi o połączeniach i rekomendacjach, gdzie tradycyjne podejścia relacyjne mogą być niewystarczające. Dokumentowe bazy danych, jak MongoDB, przechowują dane w formie JSON, co umożliwia elastyczne modelowanie danych oraz skalowalność w aplikacjach, które potrzebują szybko dostosowywać swoje struktury danych do zmieniających się potrzeb. Wybór odpowiedniego typu bazy danych jest kluczowy w zależności od charakterystyki danych i wymagań aplikacji. Typowe błędy myślowe, które prowadzą do pomyłek w identyfikacji typów baz danych, obejmują mylenie terminologii oraz nieznajomość podstawowych zasad działania różnych modeli. Zrozumienie, że niektóre z terminów są stosowane w kontekście różnych dziedzin, takich jak sieci komputerowe i zarządzanie danymi, jest istotne dla podejmowania właściwych decyzji w projektowaniu systemów informacyjnych.

Pytanie 9

Co to jest JWT (JSON Web Token)?

A. Protokół do przesyłania danych JSON przez sieć
B. Format zapisu danych w bazach NoSQL
C. Kompaktowy format do bezpiecznego przekazywania informacji między stronami jako obiekt JSON
D. Biblioteka JavaScript do manipulacji danymi JSON
JWT (JSON Web Token) to kompaktowy format, który umożliwia bezpieczne przesyłanie informacji pomiędzy różnymi stronami. Główną zaletą tokenów JWT jest ich struktura, która składa się z trzech części: nagłówka, ładunku (payload) oraz podpisu. Nagłówek zazwyczaj wskazuje typ tokena oraz algorytm użyty do podpisania, co pozwala na szybką weryfikację integralności danych. Ładunek zawiera informacje, często nazywane roszczeniami (claims), które mogą dotyczyć użytkownika lub sesji, a podpis zapewnia, że token nie został zmodyfikowany w trakcie przesyłania. W praktyce JWT jest często wykorzystywany w systemach autoryzacyjnych, gdzie po pomyślnym zalogowaniu, użytkownik otrzymuje token, który następnie może być używany do autoryzacji dostępu do różnych zasobów. Standard JWT definiuje sposób kodowania i dekodowania tokenów, a jego stosowanie pozwala na zwiększenie bezpieczeństwa aplikacji webowych oraz mobilnych poprzez ograniczenie konieczności przechowywania sesji na serwerze, co jest zgodne z najlepszymi praktykami w dziedzinie inżynierii oprogramowania.

Pytanie 10

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

A. 1000
B. 1024
C. 100
D. 10
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 11

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

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

Pytanie 12

Środowiskiem dedykowanym do tworzenia aplikacji mobilnych dla urządzeń Apple i wykorzystującym do tego celu różne języki programowania w tym Java i Objective C jest

A. XCode
B. React Native
C. Android Studio
D. NetBeans
XCode to środowisko, które faktycznie jest fundamentem tworzenia aplikacji na urządzenia Apple, czyli iPhone’y, iPady czy nawet MacBooki. Apple od lat inwestuje w rozwój XCode i właśnie tam programiści mogą budować zarówno aplikacje natywne, jak i np. gry – i to z wykorzystaniem różnych języków, takich jak Objective-C i Swift. Co ciekawe, dawniej używano też Objective-C prawie wyłącznie, ale od kilku lat Apple promuje Swift, bo jest nowocześniejszy i dużo przyjemniej się w nim pisze. Moim zdaniem XCode to taki niezbędnik – bez niego praktycznie nie da się pisać porządnych aplikacji na iOS czy macOS. Samo środowisko jest zintegrowane ze wszystkimi narzędziami Apple: symulatorem urządzeń, Interface Builderem do projektowania graficznego oraz narzędziami do debugowania i testowania. Z mojego doświadczenia, jak ktoś zaczyna przygodę z aplikacjami mobilnymi dla Apple, to właśnie XCode jest pierwszym programem, z którym spędzi dużo czasu. I trochę ułatwia życie, bo automatycznie konfiguruje projekty pod standardy Apple, nie trzeba nic ręcznie ustawiać. To też świetne miejsce do nauki, bo dokumentacja jest wprost wbudowana w środowisko. Co ważne, XCode jest wymagany, żeby wrzucić gotową aplikację do App Store – tak jest po prostu zrobiony ekosystem Apple i żadna alternatywa nie daje tyle integracji i wsparcia dla natywnych rozwiązań Apple.

Pytanie 13

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

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

Pytanie 14

Który z wymienionych elementów można zdefiniować jako psychofizyczny?

A. Zanieczyszczenie powietrza
B. Nadmiar światła w miejscu pracy
C. Stres i monotonia pracy
D. Promieniowanie elektromagnetyczne
Czynniki psychofizyczne w środowisku pracy obejmują takie elementy jak stres, monotonia pracy oraz nadmierne obciążenie organizmu. Są to zagrożenia, które mogą prowadzić do wypalenia zawodowego, depresji, spadku koncentracji i zwiększonego ryzyka popełniania błędów. Stres i monotonia pracy to jedne z najczęstszych psychofizycznych zagrożeń, które mogą wpływać nie tylko na zdrowie psychiczne, ale również na fizyczne samopoczucie pracownika. W celu ich minimalizacji organizacje wdrażają programy wsparcia psychologicznego, zapewniają przerwy, rotację obowiązków i dbają o dobrą atmosferę w pracy. Kluczowe jest także odpowiednie zarządzanie czasem pracy i eliminowanie monotonnych zadań na rzecz bardziej zróżnicowanych obowiązków.

Pytanie 15

Jakie narzędzie umożliwia testowanie API w aplikacjach internetowych?

A. Postman
B. Node.js
C. Microsoft Excel
D. Blender
Postman to jedno z najczęściej wykorzystywanych narzędzi do testowania API aplikacji webowych. Umożliwia wysyłanie żądań HTTP, testowanie endpointów oraz monitorowanie odpowiedzi serwera. Dzięki Postmanowi programiści mogą w łatwy sposób analizować dane przesyłane między frontendem a backendem, co jest kluczowe w trakcie budowania nowoczesnych aplikacji opartych na architekturze REST lub GraphQL. Narzędzie oferuje możliwość automatyzacji testów, co przyspiesza proces wykrywania błędów i zwiększa jakość dostarczanych aplikacji. Postman pozwala także na tworzenie skryptów pre-request i testowych, umożliwiając weryfikację poprawności danych oraz sprawdzanie integralności aplikacji na różnych etapach jej rozwoju.

Pytanie 16

Podaj wspólną cechę wszystkich kontrolek umieszczonych w ramce

<Label Text="5" BackgroundColor="Blue" TextColor="Tan" isVisible="True" />
<Stepper BackgroundColor="Blue" Value="5" isVisible="True" />
<Entry TextColor="Tan" BackgroundColor="Blue" Placeholder="5" />
<Slider ThumbColor="Tan" BackgroundColor="Blue" Value="5" isVisible="False" />
A. mają tło w tym samym kolorze
B. wszystkie są widoczne
C. są w nich ustawione te same wartości domyślne
D. mają identyczny kolor czcionki
W tym przypadku wskazałeś/aś, że wszystkie kontrolki mają tło w tym samym kolorze, i to jest faktycznie prawidłowa odpowiedź. Gdy spojrzymy na definicje: Label ma BackgroundColor="Blue", Stepper także BackgroundColor="Blue", Entry również BackgroundColor="Blue", a Slider—no właśnie—też BackgroundColor="Blue". To pokazuje, że niezależnie od typu kontrolki, wszystkie mają ustawione tło na dokładnie ten sam kolor. W praktyce bardzo często spotyka się wymóg zachowania spójności wizualnej interfejsu, szczególnie w aplikacjach profesjonalnych czy korporacyjnych. Ustalanie wspólnego BackgroundColor jest jednym z najprostszych kroków ku temu, by UI wyglądało porządnie i było czytelne dla użytkownika końcowego. Moim zdaniem, kiedy projektuje się cały ekran lub jakąś sekcję UI, warto od razu narzucić style lub korzystać z szablonów (np. Styles w XAML czy resourcach), żeby uniknąć przypadkowych rozbieżności kolorystycznych, które potem tylko irytują i programistów, i użytkowników. W branży jest to uznawane za dobrą praktykę – jednolity background ułatwia szybkie ogarnięcie, które elementy należą do jednej grupy funkcjonalnej. Poza tym, kolor tła bywa często wykorzystywany do komunikowania stanu albo priorytetu (np. alerty na czerwono itp.), więc to naprawdę ważne, żeby takie detale były przemyślane i konsekwentnie stosowane. No i jeszcze taka ciekawostka: nie wszystkie kontrolki domyślnie wyświetlają tło, więc czasem trzeba to jawnie ustawić, żeby efekt był taki sam na każdej platformie.

Pytanie 17

Który z wymienionych składników wchodzi w skład podstawowego wyposażenia środowiska IDE?

A. Edytor graficzny, przeglądarka kodu, narzędzia analityczne
B. Edytor tekstowy, przeglądarka internetowa, translator
C. Kompilator, edytor kodu, debugger
D. Kompilator, serwer webowy, system kontroli wersji
Edytor tekstowy, przeglądarka internetowa i translator nie są integralnymi komponentami środowiska IDE. Chociaż edytor tekstowy może być używany do pisania kodu, brakuje mu zaawansowanych funkcji dostępnych w edytorach IDE, takich jak podpowiedzi składniowe, automatyczne uzupełnianie kodu czy narzędzia do debugowania. Kompilator, serwer webowy i system kontroli wersji są ważne w środowisku webowym, ale nie wszystkie aplikacje desktopowe wymagają serwera webowego. Edytor graficzny i narzędzia analityczne mogą wspierać rozwój interfejsu, ale nie są to podstawowe narzędzia każdego IDE.

Pytanie 18

Jakie jest oznaczenie komentarza wieloliniowego w języku Java?

A. // ... //
B. /* ... */
C. <!-- ... -->
D. """ ... """
Komentarze wieloliniowe w języku Java zapisuje się właśnie w taki sposób: /* ... */. Taki zapis pozwala na umieszczenie kilku linii tekstu między znakami otwierającym /* i zamykającym */, które kompilator całkowicie ignoruje podczas tłumaczenia kodu. Z mojego doświadczenia to jest najwygodniejsza forma, kiedy trzeba wyłączyć większy fragment kodu – np. część algorytmu, której chwilowo nie chcemy wykonywać lub większy blok dokumentacji. Bardzo często używa się komentarzy wieloliniowych przy pisaniu tzw. docstringów, choć w Javie do dokumentacji API lepiej stosować komentarze JavaDoc z podwójnym ukośnikiem i gwiazdką (/** ... */), ale zwykłe /* ... */ są super uniwersalne – czy to na zajęciach, czy w dużych projektach zespołowych. Moim zdaniem, jeśli uczysz się Javy, warto pamiętać, żeby nie mieszać komentarzy wieloliniowych z jednoliniowymi (// ...), bo to czasem prowadzi do zamieszania, szczególnie przy większych refaktoryzacjach. Co ciekawe, takie same komentarze znajdziesz też w C czy C++, więc jak ktoś zna te języki, to szybko się odnajdzie. W sumie to prosta sprawa, ale zdziwiłbyś się ile osób próbuje stosować inne formaty, które działają w zupełnie innych technologiach. No i jeszcze taka drobna uwaga z praktyki: nigdy nie wstawiaj komentarza wieloliniowego wewnątrz innego; Java tego nie obsługuje i kompilator się pogubi.

Pytanie 19

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

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

Pytanie 20

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

A. Mocha
B. Jasmine
C. Jest
D. Express
Wybór frameworków do testowania w JavaScript, takich jak Mocha, Jest czy Jasmine, może wprowadzać w błąd, jeśli nie rozumie się ich celów i funkcji. Mocha jest elastycznym frameworkiem do testowania, który działa w środowisku Node.js oraz w przeglądarkach, umożliwiając pisanie asynchronicznych testów oraz definiowanie zestawów testowych. Jest z kolei nowoczesnym narzędziem do testowania, które oferuje bogaty zestaw funkcji, w tym wsparcie dla asercji i mockowania, co czyni go bardzo popularnym wśród programistów. Jasmine to framework, który skupia się na zachowaniu aplikacji, pozwalając na pisanie testów w stylu BDD (Behavior-Driven Development). Wybór tych narzędzi do testowania jest zatem uzasadniony i kluczowy dla zapewnienia jakości oprogramowania, jednak odpowiedź wybierająca Express jako framework testowy jest nieprawidłowa, ponieważ Express ma zupełnie inny cel – obsługę serwera i routing w aplikacjach webowych. Często mylone są cele poszczególnych narzędzi, co prowadzi do niepoprawnych wniosków. Zrozumienie, że Express nie jest przeznaczony do testowania, a raczej do budowania aplikacji, jest kluczowe dla efektywnego programowania i testowania. Aspekty te uwypuklają znaczenie znajomości narzędzi oraz ich przeznaczenia w kontekście rozwoju oprogramowania.

Pytanie 21

W przedstawionym filmie ukazano kreator interfejsu użytkownika, dla którego automatycznie powstaje

A. obsługa wciśniętego przycisku
B. obsługa przycisku ekranu dotykowego
C. kod Java
D. kod XML
Kod XML jest obecnie najczęściej stosowanym formatem do definiowania wyglądu interfejsów użytkownika w takich narzędziach jak Android Studio czy różnego rodzaju designery graficzne. Kiedy projektujesz layout aplikacji mobilnej albo desktopowej, duża część nowoczesnych narzędzi tworzy właśnie pliki XML, które następnie są interpretowane przez system w czasie uruchamiania aplikacji. Ułatwia to rozdzielenie logiki aplikacji od jej prezentacji, co wydaje się fundamentalne przy większych projektach. Moim zdaniem takie podejście daje ogromne korzyści – można łatwo modyfikować wygląd bez dotykania kodu źródłowego. W praktyce, jeśli używasz np. Android Studio, zbudujesz interfejs przeciągając przyciski czy pola tekstowe, a pod spodem dostaniesz czytelny plik XML. To przyspiesza pracę, zwiększa czytelność projektu i pozwala na późniejsze automatyczne generowanie dokumentacji albo testów interfejsu. Takie standardy są rekomendowane nie tylko przez Google, ale też szeroko stosowane w innych środowiskach, jak chociażby XAML w Microsoft czy FXML w JavaFX. Przezroczystość działania tych narzędzi sprawia, że łatwiej jest pracować zespołowo, bo każdy może szybko zorientować się w strukturze UI patrząc na XML-a. Samo generowanie kodu XML przez narzędzia graficzne to duży krok w kierunku lepszej organizacji pracy i zgodności ze współczesnymi praktykami branżowymi.

Pytanie 22

Jaką funkcję spełniają atrybuty klasy w programowaniu obiektowym?

A. Zapisują wartości lokalne w funkcjach
B. Określają globalne stałe programu
C. Umożliwiają przeprowadzanie operacji na obiektach
D. Zawierają informacje opisujące stan obiektu
Zmienne lokalne w metodach przechowują wartości tymczasowe i są usuwane po zakończeniu wykonywania metody, co odróżnia je od pól klasy, które istnieją tak długo, jak istnieje obiekt. Stałe globalne programu są dostępne z każdego miejsca w kodzie, ale nie są związane z konkretną instancją obiektu – ich wartość nie zmienia się dla różnych obiektów. Operacje wykonywane na obiektach są definiowane przez metody klasy, a nie przez pola – pola jedynie przechowują dane, natomiast metody określają zachowanie obiektów i umożliwiają interakcję z nimi.

Pytanie 23

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

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

Testy mające na celu identyfikację błędów w interfejsach między modułami bądź systemami nazywane są testami

A. integracyjnymi
B. wydajnościowymi
C. jednostkowymi
D. bezpieczeństwa
Testy integracyjne mają na celu wykrycie błędów w interfejsach i połączeniach między modułami lub systemami. Głównym celem tych testów jest sprawdzenie, czy różne komponenty aplikacji współpracują ze sobą zgodnie z oczekiwaniami. Testy integracyjne są przeprowadzane po testach jednostkowych, ale przed testami systemowymi. W praktyce testy te obejmują scenariusze, w których kilka modułów wymienia dane lub współdziała w ramach wspólnego procesu. Integracja jest kluczowa dla zapewnienia, że cały system działa jako spójna całość, co minimalizuje ryzyko błędów na etapie produkcji i poprawia jakość końcowego produktu. Przykładem może być test komunikacji między modułem autoryzacji użytkowników a modułem płatności w aplikacji e-commerce.

Pytanie 25

Gdzie są przechowywane informacje w sytuacji korzystania z chmury obliczeniowej?

A. Na nośnikach optycznych użytkownika
B. Na dysku twardym użytkownika
C. Na zdalnych serwerach dostawcy usług
D. Na lokalnym serwerze użytkownika
Dane w chmurze obliczeniowej są przechowywane przede wszystkim na zdalnych serwerach dostawcy usług chmurowych. Tego rodzaju przechowywanie danych ma na celu zapewnienie wysokiej dostępności, skalowalności oraz bezpieczeństwa. Dostawcy usług chmurowych, tacy jak Amazon Web Services, Microsoft Azure czy Google Cloud Platform, inwestują w infrastrukturę, która obejmuje centra danych rozmieszczone na całym świecie. Te centra danych są wyposażone w zaawansowane systemy zabezpieczeń, takie jak firewall'e, szyfrowanie danych i systemy detekcji intruzów. Dzięki temu użytkownicy mogą mieć pewność, że ich dane są bezpieczne. Dodatkowo, zdalne serwery oferują elastyczność w zakresie przydzielania zasobów obliczeniowych, co pozwala na dynamiczne reagowanie na zmieniające się potrzeby biznesowe. Warto również wspomnieć o standardach bezpieczeństwa, takich jak ISO 27001 czy SOC 2, które regulują sposób przechowywania i zarządzania danymi w chmurze, zapewniając zgodność z najlepszymi praktykami branżowymi.

Pytanie 26

Jakie są różnice między kompilatorem a interpretem?

A. Interpreter konwertuje kod źródłowy na język maszynowy przed jego kompilacją
B. Kompilator przekształca kod źródłowy na język maszynowy przed uruchomieniem aplikacji
C. Kompilator przetwarza kod na język maszynowy w momencie jego wykonywania
D. Interpreter tworzy plik wykonywalny, który funkcjonuje niezależnie od otoczenia
Kompilator zamienia kod źródłowy na język maszynowy zanim program się uruchomi. W efekcie dostajemy plik wykonywalny, taki jak .exe w Windowsie. To fajne, bo po skompilowaniu aplikacja działa samodzielnie i nie potrzeba jej tłumaczyć od nowa. Dzięki temu programy, które są skompilowane, są zazwyczaj dużo szybsze i lepiej zoptymalizowane niż te, które są interpretowane. Warto wiedzieć, że kompilatory są wykorzystywane w językach takich jak C, C++ czy Java. Kompilacja ma też tę zaletę, że można wykrywać błędy jeszcze przed uruchomieniem programu, co jest naprawdę przydatne.

Pytanie 27

Jakie są kluczowe etapy resuscytacji krążeniowo-oddechowej?

A. 30 uciśnięć klatki piersiowej na przemian z 2 wdechami ratowniczymi
B. 30 wdechów ratowniczych bez uciśnięć
C. 10 uciśnięć klatki piersiowej bez wdechów
D. 20 uciśnięć klatki piersiowej na przemian z 5 wdechami ratowniczymi
30 uciśnięć klatki piersiowej na przemian z 2 wdechami ratowniczymi to standardowy protokół resuscytacji krążeniowo-oddechowej (RKO) zgodny z wytycznymi Europejskiej Rady Resuscytacji (ERC). Uciśnięcia wykonywane są na głębokość około 5-6 cm w tempie 100-120 uciśnięć na minutę. Po 30 uciśnięciach wykonuje się 2 wdechy ratownicze, które powinny być wykonywane z odpowiednią siłą, aby unieść klatkę piersiową poszkodowanego. Taka sekwencja jest podstawą pierwszej pomocy i może uratować życie osoby, u której doszło do zatrzymania akcji serca. Resuscytację należy kontynuować do momentu przybycia służb ratunkowych lub odzyskania przytomności przez poszkodowanego.

Pytanie 28

W środowisku do tworzenia aplikacji, gdzie przedstawiono menu, aby usunąć wszystkie pliki tymczasowe oraz wyniki projektu, należy wybrać opcję

Ilustracja do pytania
A. Build Solution
B. Batch Build
C. Run Code Analysis on Solution
D. Clean Solution
Tematyka usuwania plików tymczasowych i wyników kompilacji to jedno z podstawowych zagadnień w pracy z narzędziami typu Visual Studio. Często można się pogubić, która opcja menu służy do czego, zwłaszcza gdy brzmią podobnie i są w jednym miejscu. „Run Code Analysis on Solution” nie ma nic wspólnego z usuwaniem plików – to narzędzie sprawdzające jakość i poprawność kodu, szukające potencjalnych błędów, naruszeń konwencji lub miejsc wymagających refaktoryzacji. Bardzo przydatne, ale do porządkowania środowiska builda zupełnie niepotrzebne. Z kolei „Batch Build” pozwala uruchomić wiele buildów równocześnie (np. w różnych konfiguracjach), ale nie rusza żadnych plików tymczasowych ani starego outputu. To po prostu sposób na seryjne kompilowanie kilku wariantów projektu, co jest wygodne przy większych rozwiązaniach, lecz nie rozwiązuje problemu zalegających plików. „Build Solution” natomiast wykonuje standardową kompilację – czyli próbuje zaktualizować wynikową wersję plików na podstawie aktualnego kodu, nie przejmując się specjalnie tym, co pozostało po poprzednich buildach. Właśnie dlatego, gdy występują niejasne błędy lub zmieniają się zależności, samo Build Solution często nie wystarczy, bo stare pliki mogą przeszkadzać. Typowym błędem jest założenie, że każdy build „czyści” środowisko – a tak nie jest. Z perspektywy praktyka, to właśnie opcja Clean Solution gwarantuje, że wszystko zaczynamy od zera, a efekt końcowy będzie zgodny z aktualnym stanem kodu i konfiguracji. Błędne wybory często wynikają z automatycznego utożsamiania słowa „build” z całym procesem zarządzania plikami, a przecież w realnych narzędziach to są osobne mechanizmy. Warto to zapamiętać – Clean Solution to Twój najlepszy przyjaciel, gdy chcesz mieć czysto i bez niespodzianek.

Pytanie 29

Zastosowanie typu DECIMAL języka SQL wymaga wcześniejszego zdefiniowania długości (liczby cyfr) przed przecinkiem oraz długości cyfr po przecinku. Jest to zapis:

A. stałoprzecinkowy
B. łańcuchowym
C. zmiennoprzecinkowy
D. logicznym
Typ DECIMAL w SQL bywa mylony z różnymi innymi kategoriami typów, głównie dlatego, że ludzie kojarzą „przecinek” z liczbami zmiennoprzecinkowymi albo traktują wszystko, co ma cyfry, jako coś podobnego do tekstu. W rzeczywistości DECIMAL jest typem stałoprzecinkowym, czyli takim, w którym precyzja i liczba miejsc po przecinku są z góry ustalone przy definicji kolumny. To jest zupełnie inne podejście niż w typach zmiennoprzecinkowych, takich jak FLOAT czy DOUBLE. Tam liczby są przechowywane w formacie binarnym zgodnym mniej więcej ze standardem IEEE 754, a przecinek „pływa”, co prowadzi do drobnych, ale istotnych błędów zaokrągleń. Jeśli ktoś zaznacza odpowiedź zmiennoprzecinkowy, to zwykle wynika z intuicji: skoro jest przecinek, to pewnie float. To jest typowy błąd myślowy. W SQL typy zmiennoprzecinkowe są właśnie po to, by obsługiwać bardzo duże lub bardzo małe wartości kosztem dokładności, np. w obliczeniach naukowych. DECIMAL natomiast ma służyć do obliczeń finansowych i biznesowych, gdzie dokładność jest ważniejsza niż zakres. Z mojego doświadczenia to jedno z częstszych źródeł błędów w młodych projektach: użycie FLOAT do kwot pieniędzy. Odpowiedź logicznym też bywa wybierana trochę „na czuja”, bo ktoś kojarzy, że SQL ma typy TRUE/FALSE, ale DECIMAL nie ma nic wspólnego z logiką boolowską. Typy logiczne przechowują wartości dwustanowe (czasem z NULL jako stanem trzecim), a nie liczby z miejscami po przecinku. Podobnie odpowiedź łańcuchowym wynika z przekonania, że skoro można cyfry zapisać w tekście, to wszystko jedno, czy to tekst, czy liczba. W praktyce typy łańcuchowe (CHAR, VARCHAR, TEXT) nie zapewniają poprawnej arytmetyki, sortowania numerycznego ani kontroli zakresu liczb. Trzymanie wartości liczbowych jako tekst to bardzo zła praktyka: utrudnia indeksowanie, psuje wydajność i powoduje dziwne błędy przy porównaniach (np. '100' < '20' w porządku leksykograficznym). Dobre wzorce projektowania baz danych mówią jasno: liczby trzymaj w typach liczbowych, a wartości wymagające dokładności dziesiętnej w typie stałoprzecinkowym DECIMAL/NUMERIC, z jasno określoną precyzją i skalą.

Pytanie 30

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

A. 11111011
B. 11111101
C. 00000101
D. 10000101
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 31

Który z poniższych jest popularnym systemem zarządzania bazami danych NoSQL?

A. PostgreSQL
B. MySQL
C. Oracle
D. MongoDB
MySQL, PostgreSQL i Oracle to systemy zarządzania bazami danych, które opierają się na tradycyjnym modelu relacyjnym, co oznacza, że są zoptymalizowane do pracy z danymi, które mają ustaloną strukturę, często w postaci tabel. W tym kontekście, ich architektura i sposób przechowywania danych różnią się znacznie od systemów NoSQL, takich jak MongoDB. MySQL i PostgreSQL są znane jako bazy danych SQL, co oznacza, że wykorzystują język zapytań SQL do interakcji z danymi. Dzięki temu są one szczególnie skuteczne w przypadkach, gdzie dane mają ściśle zdefiniowaną strukturę i relacje między nimi są kluczowe, ale mogą być mniej elastyczne w obsłudze danych o zróżnicowanej strukturze. Oracle to z kolei jeden z najbardziej rozbudowanych i kompleksowych systemów zarządzania bazami danych, jednak jego złożoność oraz koszty mogą być barierą dla mniejszych projektów. Wybierając system zarządzania bazą danych, warto zwrócić uwagę na specyfikę wymagań aplikacji oraz rodzaj przechowywanych danych. Przyjęcie błędnych założeń co do modelu danych może prowadzić do trudności w skalowaniu, ograniczonej wydajności oraz większych kosztów utrzymania. Dlatego kluczowe jest zrozumienie, że wybór między systemami SQL a NoSQL powinien być uzależniony od charakterystyki danych i wymagań projektowych.

Pytanie 32

Podstawowym celem środowisk IDE takich jak: IntelliJ IDEA, Eclipse, NetBeans jest programowanie w języku:

A. Python
B. C++
C. Java
D. C#
IDE, czyli Zintegrowane Środowiska Programistyczne, takie jak IntelliJ IDEA, Eclipse czy NetBeans, od lat są uznawane za najważniejsze narzędzia do tworzenia aplikacji w języku Java. Te środowiska zostały od podstaw zaprojektowane właśnie z myślą o programistach Javy – wspierają typowe projekty Java SE, Java EE czy nawet JavaFX. Moim zdaniem, ich integracja z narzędziami takimi jak Maven, Gradle, testami jednostkowymi JUnit albo debuggerami Javy to prawdziwy game-changer. Na co dzień korzysta się tam z podpowiedzi składni, automatycznego refaktoringu, generatorów kodu i systemów kontroli wersji. Przykładowo, większość firm w Polsce, które tworzą oprogramowanie korporacyjne, wybiera właśnie te IDE do pracy z Java Spring Boot czy Hibernate. Nawet podczas nauki w technikum często pierwsze projekty Java robi się właśnie w Eclipse albo IntelliJ. Pewnie, można dorzucić pluginy do innych języków, ale to Java jest sercem tych środowisk i to dla niej są one najbardziej zaawansowane, zgodnie z najlepszymi wzorcami branżowymi. Jak patrzę na ogłoszenia o pracę, to praktycznie każda oferta na programistę Java zakłada znajomość choć jednego z tych IDE. To jasno pokazuje, że ich podstawowym celem jest ułatwienie i przyspieszenie tworzenia oprogramowania właśnie w tym języku.

Pytanie 33

Zaprezentowany symbol odnosi się do

Ilustracja do pytania
A. domeny publicznej
B. Creative Commons
C. prawa cytatu
D. praw autorskich
Wiele osób zaczyna od skojarzenia tego symbolu z prawami autorskimi, Creative Commons albo prawem cytatu, jednak to prowadzi na manowce. Po pierwsze, standardowy symbol praw autorskich to samo „C” w kółku, bez przekreślenia – i on oznacza, że utwór jest objęty ochroną z mocy prawa i wszelkie wykorzystanie wymaga zgody twórcy lub spełnienia warunków ustawowych wyjątków. Natomiast tutaj mamy przekreślone „C”, co jednoznacznie sugeruje brak ochrony. Creative Commons to zupełnie inny zestaw symboli, z typowymi oznaczeniami: CC i różnymi dodatkami jak BY, SA, NC, ND, które precyzują warunki korzystania z utworu. Te licencje nadal wprowadzają ograniczenia, chociaż są dużo bardziej elastyczne niż klasyczne prawa autorskie – ale nigdy nie oznaczają całkowitego braku praw. Prawo cytatu z kolei to wyjątek w ustawie o prawie autorskim, który pozwala na ograniczone wykorzystywanie fragmentów cudzych utworów w określonych sytuacjach, ale nie oznacza, że cały utwór można wykorzystywać dowolnie i bez ograniczeń. Typowy błąd polega na utożsamianiu każdego oznaczenia związanych z literą C z szeroko rozumianą „wolnością” korzystania – a to nieprawda. Domena publiczna jest zupełnie oddzielną kategorią, gdzie utwór jest trwale wyjęty spod ochrony prawnej i można go używać naprawdę dowolnie. W praktyce, nieznajomość tych niuansów może prowadzić do błędów prawnych, np. nieświadomego naruszenia czyichś praw, albo niewłaściwego oznaczenia własnej pracy. W środowisku profesjonalnym bardzo ważne jest właśnie rozróżnianie tych pojęć i symboli – to wpływa na bezpieczeństwo prawne projektów i buduje zaufanie do twórcy.

Pytanie 34

Wskaż termin, który w języku angielskim odnosi się do "testów wydajnościowych"?

A. integration testing
B. unit testing
C. performance testing
D. security testing
Testy wydajnościowe, czyli performance testing, to coś, co naprawdę warto mieć na uwadze. Dzięki nim możemy sprawdzić, jak nasza aplikacja działa pod dużym obciążeniem i jak szybko odpowiada na różne żądania. Moim zdaniem, to kluczowy aspekt, zwłaszcza jeśli planujemy, żeby nasza aplikacja miała wielu użytkowników. W końcu, nikt nie lubi czekać, aż coś się załaduje!

Pytanie 35

Jaką złożoność obliczeniową posiada podany algorytm?
Dane:
Tablica: tab[n]
Index: i = 0, 1, ..., n-1
x: szukana

Algorytm:

// K1: i0
// K2: dopóki i < (n - 1)
    // K3: jeżeli tab[i] = x to wypisz i
    // K4: ii + 1
    // K5: idź do K2
// K6: zakończ
A. O(1)
B. O(n log n)
C. O(n)
D. O(n2)
Analizując podany algorytm, warto zauważyć, że przechodzi on przez każdy element tablicy dokładnie raz, zaczynając od indeksu 0 aż do n-1. To jest klasyczny przykład przeszukiwania liniowego (linear search), które w najgorszym przypadku ma złożoność czasową O(n), gdzie n to liczba elementów w tablicy. Moim zdaniem to jedna z najbardziej podstawowych i jednocześnie często używanych technik, szczególnie tam, gdzie dane nie są posortowane albo kiedy oczekujemy prostoty implementacji. W praktyce taki algorytm stosuje się, gdy nie zależy nam na super efektywności, a raczej na łatwości zrozumienia kodu lub szybkim prototypowaniu, na przykład podczas pisania skryptów narzędziowych lub prostych aplikacji. Branżowe standardy, chociażby w programowaniu niskopoziomowym lub w zastosowaniach embedded, też często bazują na tego typu rozwiązaniach, ponieważ nie wymagają one dodatkowej pamięci ani zaawansowanych struktur danych. Fajnie zwrócić uwagę, że O(n) oznacza, iż czas wykonywania rośnie proporcjonalnie do liczby elementów – czyli dla 1 000 elementów algorytm wykona się około 1 000 razy wolniej niż dla pojedynczego elementu, chociaż w praktyce zależy to oczywiście od wielu czynników sprzętowych. Dobrym zwyczajem jest zawsze na początku próbować rozwiązać problem najprostszym algorytmem, takim jak ten, a dopiero potem – jeśli wydajność zawiedzie – szukać bardziej zaawansowanych rozwiązań, jak wyszukiwanie binarne czy struktury indeksujące.

Pytanie 36

Który z poniższych aspektów najlepiej definiuje działanie e-sklepu?

A. Zarządzanie serwerem e-mail
B. Mechanizm generowania grafiki 3D
C. Dostęp do bazy danych klientów
D. System obsługi koszyka oraz realizacji zamówień
System zarządzania koszykiem i realizacją zamówień to kluczowy element każdej aplikacji e-commerce (sklepu internetowego). Umożliwia użytkownikom dodawanie produktów do koszyka, zarządzanie ich ilością, a następnie finalizację transakcji poprzez proces realizacji zamówienia i płatności. Tego typu funkcjonalność wymaga integracji z bazą danych oraz systemami płatności online, co zapewnia bezpieczeństwo i wygodę użytkownika. Systemy koszyków zakupowych często oferują zaawansowane funkcje, takie jak kupony rabatowe, kody promocyjne czy integracje z magazynami i systemami logistycznymi. Realizacja zamówienia obejmuje procesy takie jak autoryzacja płatności, generowanie faktur oraz śledzenie zamówień, co jest podstawą funkcjonowania nowoczesnych platform e-commerce.

Pytanie 37

Jakie środowisko deweloperskie jest powszechnie wykorzystywane do produkcji aplikacji webowych w języku Java?

A. XCode
B. PyCharm
C. Android Studio
D. Eclipse
Eclipse to jedno z najpopularniejszych środowisk programistycznych (IDE) wykorzystywanych do tworzenia aplikacji webowych w języku Java. Jest to potężne narzędzie, które wspiera zarówno tworzenie aplikacji desktopowych, jak i rozbudowanych systemów backendowych. Eclipse oferuje wiele wtyczek i rozszerzeń umożliwiających integrację z narzędziami do zarządzania bazami danych, serwerami aplikacji oraz systemami kontroli wersji. Dzięki temu programiści mogą efektywnie budować i testować aplikacje webowe napisane w Javie.

Pytanie 38

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

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

Pytanie 39

Kod funkcji "wykonaj()" przedstawiony poniżej weryfikuje, czy

bool wykonaj(int argument)
{
    int T[] = {4, 15, -2, 9, 202};
    for(int i=0; i<5; i++) {
        if(T[i] == argument)
            return true;
    }
    return false;
}
A. w tablicy liczb całkowitych znajdują się jedynie wartości 4, 15, -2, 9, 202
B. konkretny element (argument) jest obecny w tablicy liczb całkowitych
C. wszystkie elementy w tablicy są równe wartości przekazanego argumentu
D. przekazany argument mieści się w zakresie od 0 do 4
Przy interpretowaniu działania funkcji wykonaj() łatwo popełnić błąd, jeśli nie prześledzimy dokładnie jej przebiegu. Niektórzy zakładają, że skoro funkcja używa pętli for, to musi sprawdzać wszystkie elementy w tablicy i wymagać, aby każdy z nich spełniał jakiś warunek – stąd błędny wniosek, że weryfikuje czy wszystkie elementy są równe wartości argumentu. Jednak w rzeczywistości wyrażenie return true jest wykonywane natychmiast po znalezieniu pierwszego pasującego elementu, nie kontynuując sprawdzania reszty. To typowy błąd myślowy, polegający na myleniu operacji „wszystkie” z „dowolny”. Inni mogą odczytać inicjalizację tablicy jako wyznaczenie pełnego zakresu dopuszczalnych wartości i uznać, że funkcja sprawdza, czy argument należy do tego konkretnego zestawu liczb, co jest częściowo prawdą – jednak odpowiedź mówiąca, że w tablicy znajdują się tylko te liczby, nie oddaje istoty działania funkcji. Funkcja nie analizuje zawartości tablicy, tylko obecność argumentu wśród jej elementów – to kolosalna różnica, bo moglibyśmy podać dowolny argument, a odpowiedź zawsze zależy od tego, czy znajduje się on w tym konkretnym zbiorze. Część osób błędnie interpretuje także indeksowanie tablicy, sądząc, że funkcja sprawdza, czy argument mieści się w zakresie od 0 do 4 – co wynika zapewne z zamieszania z długością tablicy oraz mylenia wartości z indeksami. Jednak w kodzie argument porównywany jest z wartością, a nie z indeksem – to fundamentalna różnica. Zresztą, w programowaniu takie subtelności często prowadzą do nieoczekiwanych błędów, dlatego warto zawsze bardzo dokładnie analizować logikę pętli i warunków. Dobra praktyka branżowa podpowiada, że zawsze trzeba zwracać uwagę na to, co dokładnie jest sprawdzane w warunku if, oraz do czego odnosi się każda zmienna. Takie analizy są bardzo przydatne na rozmowach kwalifikacyjnych i w praktycznych zadaniach – szczególnie wtedy, gdy liczy się precyzja i umiejętność czytania cudzego kodu.

Pytanie 40

Który z algorytmów ma złożoność O(n²)?

A. Bubble Sort
B. Dijkstra
C. Binary Search
D. Merge Sort
Bubble Sort to algorytm o złożoności O(n²), co oznacza, że jego czas wykonania rośnie kwadratowo wraz ze wzrostem liczby elementów wejściowych. Algorytm porównuje sąsiadujące elementy i zamienia je miejscami, jeśli są w złej kolejności. Proces ten powtarza się wielokrotnie, aż do uzyskania pełnego posortowania tablicy. Ze względu na swoją prostotę, Bubble Sort jest często wykorzystywany do nauki podstaw algorytmiki, ale w praktyce rzadko stosuje się go do sortowania dużych zbiorów danych, ponieważ jest nieefektywny w porównaniu do bardziej zaawansowanych algorytmów, takich jak QuickSort czy Merge Sort.