Wyniki egzaminu

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

Egzamin niezdany

Wynik: 9/40 punktów (22,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Jakie są kluczowe etapy realizacji projektu programistycznego?

A. Projektowanie, testowanie, aktualizacja, implementacja
B. Planowanie, projektowanie, debugowanie, konserwacja
C. Planowanie, analiza, implementacja, wdrożenie
D. Analiza, implementacja, testowanie, aktualizacja
Wiele osób myśli, że wystarczy skupić się na kodzie czy testach i sukces przyjdzie sam, ale w praktyce kluczowe jest zachowanie właściwej sekwencji i kompletności działań. Często spotykam się z przekonaniem, że projektowanie albo debugowanie są najważniejszymi krokami, jednak bez wcześniejszego gruntownego planowania i analizy trudno mówić o efektywności czy przewidywalności rezultatów. Przykładowo, debugowanie to bardzo istotny element pracy programisty, ale samo w sobie nie stanowi etapu realizacji projektu – jest raczej czynnością wykonywaną w toku implementacji i testowania. Z kolei aktualizacja i konserwacja, choć ważne, zaliczają się już do utrzymania systemu po wdrożeniu, a nie do pierwotnego cyklu tworzenia oprogramowania. W niektórych odpowiedziach zabrakło chociażby analizy wymagań, co jest podstawowym etapem według standardów takich jak ISO/IEC/IEEE 12207 czy wytycznych PMBOK. Pominięcie wdrożenia lub zamiana jego kolejności z innym etapem, jak projektowanie albo testowanie, prowadzi do problemów z odpowiedzialnością za przekazanie produktu końcowego. Również połączenie implementacji z aktualizacją to pomieszanie faz projektowych z fazami utrzymania. Takie uproszczenia wynikają często z mylenia faz samego developmentu z późniejszymi procesami eksploatacji. W praktyce, żeby uniknąć błędów takich jak niedopracowana architektura czy chaos przy wdrożeniu, trzeba konsekwentnie stosować pełną sekwencję: planowanie, analiza, implementacja, a na końcu wdrożenie. To jest podejście zgodne i z klasycznym waterfall, i z nowszymi praktykami agile, gdzie nawet jeśli fazy się zazębiają, wciąż mają swoje miejsce. Z mojego doświadczenia, skracanie lub pomijanie tych etapów to prosta droga do kosztownych poprawek i niezadowolenia klienta, dlatego warto je znać i stosować świadomie.

Pytanie 2

Jakie z wymienionych działań jest fundamentalne w modelu kaskadowym?

A. Przeprowadzanie testów systemu po zakończeniu każdej fazy
B. Zakończenie jednej fazy przed rozpoczęciem następnej
C. Równoległe prowadzenie wielu etapów projektu
D. Iteracyjne wprowadzanie modyfikacji na każdym poziomie
Kończenie jednej fazy przed rozpoczęciem kolejnej to kluczowa cecha modelu kaskadowego (Waterfall). W tym podejściu projekt jest realizowany etapami – analiza, projektowanie, implementacja, testowanie i wdrożenie – bez możliwości powrotu do poprzednich faz. Dzięki temu model Waterfall jest przejrzysty i łatwy do zarządzania, szczególnie w projektach o stabilnych wymaganiach. Jednak jego ograniczeniem jest brak elastyczności, co może prowadzić do problemów, jeśli wymagania zmienią się w trakcie trwania projektu.

Pytanie 3

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, 4, 5
B. 1, 2, 4, 5
C. 1, 2, 3, 4, 5
D. 0, 1, 2, 3, 4
W przypadku pozostałych odpowiedzi można zauważyć, że wynikają z nieporozumień dotyczących działania pętli oraz instrukcji sterującej continue. W odpowiedzi sugerującej, że w konsoli zostaną wypisane liczby 0, 1, 2, 4, 5, występuje założenie, że wartość początkowa zmiennej i (czyli 0) również zostanie wypisana, co jest nieprawdziwe. Zmienna i jest zwiększana przed jej wypisaniem, więc jej początkowa wartość nie zostaje uwzględniona. W kolejnej opcji, gdzie podano 1, 2, 3, 4, 5, zauważyć można, że liczba 3 została wypisana, co jest sprzeczne z logiką zastosowaną w kodzie, ponieważ w momencie, gdy i równa się 3, instrukcja continue przerywa bieżącą iterację pętli, pomijając kod wypisujący. Również myśląc o odpowiedzi, która sugeruje, że w konsoli pojawią się liczby 1, 2, 3, 4, 5, można zauważyć, że pominięcie wartości 3 jest kluczowym momentem, który prowadzi do błędnego wniosku. Widać tutaj typowe błędy myślowe, polegające na nieprzemyślanej interpretacji pętli oraz działania instrukcji warunkowych. Aby poprawnie zrozumieć, jak działają pętle i instrukcje w JavaScript, warto poświęcić czas na eksperymentowanie z kodem oraz jego analizowanie, aby dostrzec, jakie konsekwencje mają poszczególne komendy i jakie wartości zmiennych są faktycznie wypisywane.

Pytanie 4

Który z wymienionych mechanizmów pozwala na monitorowanie stanu użytkownika w trakcie sesji w aplikacji internetowej?

A. HTML Forms
B. CSS Selectors
C. Sesje (Sessions)
D. HTTP Headers
Nagłówki HTTP (HTTP Headers) przesyłają podstawowe informacje między klientem a serwerem, ale nie przechowują długoterminowych danych użytkownika ani nie pozwalają na zarządzanie stanem sesji. Formularze HTML (HTML Forms) służą do przesyłania danych na serwer, ale nie zarządzają stanem użytkownika w aplikacji. CSS Selectors to narzędzie służące do stylizacji elementów interfejsu, a nie mechanizm do śledzenia sesji użytkownika, co oznacza, że nie mają zastosowania w zarządzaniu stanem użytkownika w aplikacji webowej.

Pytanie 5

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

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

Pytanie 6

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

A. Mocha
B. Jest
C. Jasmine
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 7

Który protokół jest wykorzystywany do transferu plików między klientem a serwerem?

A. SMTP
B. FTP
C. HTTP
D. POP3
Wybierając odpowiedzi inne niż FTP, można spotkać się z powszechnymi nieporozumieniami dotyczącymi protokołów sieciowych. HTTP (Hypertext Transfer Protocol) jest protokołem używanym głównie do przesyłania treści internetowych, takich jak strony WWW, a jego głównym celem jest umożliwienie komunikacji pomiędzy przeglądarką a serwerem webowym. Chociaż w pewnych okolicznościach może być używane do przesyłania plików, nie jest zoptymalizowane do tego celu i nie jest dedykowane do efektywnego transferu plików. Z drugiej strony, SMTP (Simple Mail Transfer Protocol) jest protokołem przeznaczonym do przesyłania wiadomości email. Jego funkcjonalność skupia się na przesyłaniu wiadomości textowych, a nie na zarządzaniu plikami, co czyni go nieodpowiednim w kontekście transferu plików między klientem a serwerem. Podobnie, POP3 (Post Office Protocol) jest protokołem używanym do odbierania wiadomości email, a nie do ich wysyłania czy transferu plików. Takie pomyłki mogą wynikać z ogólnego zrozumienia funkcji tych protokołów, gdzie użytkownicy mogą mylić ich podstawowe przeznaczenie. Kluczowe jest więc zrozumienie, że każdy z wymienionych protokołów ma swoje specyficzne zastosowanie i nie można ich używać zamiennie. Aby skutecznie zarządzać transferem plików, ważne jest korzystanie z odpowiedniego narzędzia, jakim jest FTP, które zostało stworzone z myślą o tej właśnie funkcjonalności.

Pytanie 8

Jaką nazwę kontrolki powinno się umieścić w początkowej linii kodu, w miejscu <???, aby została ona wyświetlona w podany sposób?

Ilustracja do pytania
A. RatinoBar
B. Switch
C. Spinner
D. SeekBar
SeekBar to element interfejsu użytkownika, który pozwala użytkownikowi wybierać wartości w określonym przedziale, przeciągając uchwyt w lewo lub w prawo, co sprawia, że nadaje się do regulacji parametrów takich jak głośność czy jasność. Mimo że również jest to element interaktywny, jego użycie w kontekście binarnych decyzji byłoby niewłaściwe, ponieważ wymaga od użytkownika wyboru wartości w zakresie zamiast prostego włączania lub wyłączania. Spinner, z kolei, jest używany do prezentacji listy rozwijanej, z której użytkownik może wybrać jedną z dostępnych opcji. Jest to bardziej odpowiednie w kontekście, w którym jest wiele alternatyw do wyboru, a nie tylko dwa stany, jak w przypadku kontrolki Switch. RatinoBar wydaje się być literówką lub nieprawidłową nazwą, prawdopodobnie mylącą z RadioButton, który umożliwia wybór jednej opcji z grupy, podobnie jak Spinner, ale w zupełnie inny sposób. RadioButton nie posiada jednak mechanizmu przełączania w kontekście włączania i wyłączania funkcji, jak to ma miejsce w przypadku Switch. Zrozumienie różnic między tymi kontrolkami jest kluczowe dla projektowania intuicyjnych i efektywnych interfejsów użytkownika, a błędne przypisanie funkcjonalności może prowadzić do dezorientacji użytkownika i obniżenia jakości doświadczenia użytkownika w aplikacji.

Pytanie 9

W jakiej fazie cyklu życia projektu informatycznego następuje integracja oraz testowanie wszystkich modułów systemu?

A. Etap implementacji
B. Faza analizy
C. Faza wdrożenia
D. Etap planowania
Planowanie to faza początkowa, w której określane są cele projektu, harmonogram i zasoby, ale nie jest to etap integracji systemu. Analiza skupia się na zbieraniu wymagań i definiowaniu specyfikacji technicznej, ale nie obejmuje łączenia modułów ani testowania gotowego produktu. Wdrożenie to końcowy etap cyklu życia projektu, który następuje po pełnej integracji i testowaniu – polega na uruchomieniu systemu w środowisku produkcyjnym i udostępnieniu go użytkownikom końcowym.

Pytanie 10

Co to jest JWT (JSON Web Token)?

A. Kompaktowy format do bezpiecznego przekazywania informacji między stronami jako obiekt JSON
B. Protokół do przesyłania danych JSON przez sieć
C. Format zapisu danych w bazach NoSQL
D. Biblioteka JavaScript do manipulacji danymi JSON
Wszystkie błędne odpowiedzi opierają się na nieporozumieniach związanych z zastosowaniem i definicją JWT. Nie jest to protokół do przesyłania danych JSON przez sieć, ponieważ JWT to nie protokół, a format tokena, który jest wykorzystywany do bezpiecznego przesyłania danych pomiędzy stronami. JWT nie jest również formatem zapisu danych w bazach NoSQL; zamiast tego jest to sposób kodowania informacji w formacie JSON, który może być używany w różnych kontekstach, w tym w bazach danych, ale nie jest z nimi bezpośrednio związany. Co więcej, JWT nie jest biblioteką JavaScript ani żadnym narzędziem do manipulacji danymi JSON. To jest zrozumiałe, że często można się pomylić w zrozumieniu kontekstu, w którym używane jest JWT, ale istotą jego funkcjonalności jest przede wszystkim zapewnienie bezpiecznego przesyłania informacji. W praktyce, błędne rozumienie użycia JWT może prowadzić do problemów z bezpieczeństwem aplikacji, gdyż nieprawidłowo zaimplementowane rozwiązania mogą narażać dane użytkowników na nieautoryzowany dostęp. Przy stosowaniu JWT konieczne jest także zrozumienie, jak zabezpieczyć je przed atakami, na przykład przez odpowiednie ustawienie czasu ważności tokena i stosowanie algorytmów szyfrowania, co jest zgodne z najwyższymi standardami bezpieczeństwa w branży IT.

Pytanie 11

Jaką cechą odznacza się framework w porównaniu do biblioteki?

A. Framework zapewnia API do szerszego zestawu funkcji
B. Framework określa strukturę aplikacji i zapewnia jej fundament
C. Framework stanowi zbiór funkcji, które programista ma możliwość wykorzystania
D. Framework oferuje funkcje użyteczne w konkretnej dziedzinie problemu
Biblioteka to zestaw funkcji i klas, które programista może wykorzystywać według własnego uznania, ale to on decyduje o strukturze aplikacji. API dostarcza zestaw metod do komunikacji z innymi aplikacjami, ale nie narzuca architektury. Framework to coś więcej niż zbiór funkcji – określa cały proces tworzenia aplikacji, czego nie można powiedzieć o zwykłej bibliotece lub narzędziach użytkowych.

Pytanie 12

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

A. Konsekwentne nazewnictwo
B. Jedna odpowiedzialność funkcji
C. Samodokumentujący się kod
D. Maksymalna złożoność funkcji
Wszystkie podane odpowiedzi odzwierciedlają zasady czystego kodu, z wyjątkiem maksymalnej złożoności funkcji, która nie jest akceptowaną normą. Samodokumentujący się kod to istotny element, który sprawia, że kod staje się bardziej przystępny i łatwiejszy do zrozumienia dla innych programistów. Użycie odpowiednich nazw zmiennych oraz struktura kodu, która jasno pokazuje, co dany fragment kodu wykonuje, są nieodłącznymi elementami dobrego stylu programowania. Pojęcie jednej odpowiedzialności funkcji (Single Responsibility Principle) utożsamiane jest z tym, że każda funkcja powinna realizować jedną, jasno określoną funkcję. To z kolei prowadzi do lepszej modularności kodu oraz ułatwia jego testowanie i ponowne wykorzystanie. Konsekwentne nazewnictwo zapewnia, że kody są spójne w całym projekcie, co minimalizuje ryzyko nieporozumień i błędów. Typowe błędy myślowe prowadzące do błędnych wniosków mogą wynikać z mylnego przekonania, że złożoność kodu jest oznaką jego zaawansowania. W rzeczywistości, prostota i klarowność są kluczowe dla efektywności programowania i utrzymania jakości kodu w dłuższej perspektywie.

Pytanie 13

Jakie jest główne zadanie debuggera w środowisku programowania?

A. Kompilowanie kodu źródłowego
B. Tworzenie kodu źródłowego
C. Generowanie plików wykonywalnych
D. Analiza i usuwanie błędów w kodzie
Pisanie kodu źródłowego jest podstawową funkcją edytora kodu, a nie debuggera. Tworzenie plików wykonywalnych odbywa się za pomocą kompilatora, a nie debuggera. Kompilowanie kodu to proces tłumaczenia kodu źródłowego na język maszynowy i również nie jest funkcją debuggera, choć debugger może współpracować z kompilatorem w trakcie analizy błędów. Pominięcie debuggera w procesie tworzenia aplikacji mogłoby prowadzić do błędów w finalnym produkcie, dlatego jego rola jest kluczowa na etapie testowania i optymalizacji kodu.

Pytanie 14

Która z poniższych właściwości odnosi się do sieci bezprzewodowej?

A. Nie potrzebuje zabezpieczeń, ponieważ jest domyślnie chroniona
B. Nie funkcjonuje w obszarach z dużą liczbą urządzeń
C. Jest bardziej narażona na zakłócenia w przesyłaniu danych
D. Wymaga zastosowania przewodów do łączenia urządzeń
Pierwsza odpowiedź sugeruje, że sieci bezprzewodowe wymagają użycia kabli do połączenia urządzeń, co jest nieprawdziwe. W rzeczywistości, sieci bezprzewodowe działają niezależnie od kabli, wykorzystując technologie takie jak Wi-Fi czy Bluetooth do komunikacji między urządzeniami bez fizycznego połączenia. Taka technologia pozwala na większą mobilność oraz elastyczność użytkowników, eliminując ograniczenia związane z kablami. Kolejnym nieprawidłowym stwierdzeniem jest to, że sieci bezprzewodowe nie wymagają zabezpieczeń, ponieważ są automatycznie chronione. W rzeczywistości, sieci bezprzewodowe są bardzo narażone na nieautoryzowany dostęp, co czyni implementację odpowiednich zabezpieczeń, takich jak WPA3, niezbędną do ochrony danych użytkowników. Ostatnia niepoprawna odpowiedź stwierdza, że sieci bezprzewodowe nie działają w miejscach z dużą liczbą urządzeń. W rzeczywistości, nowoczesne sieci bezprzewodowe są projektowane z myślą o dużym natężeniu ruchu i mogą obsługiwać wiele jednoczesnych połączeń dzięki technologiom takim jak MU-MIMO (Multi-User Multiple Input Multiple Output). To pozwala na równoczesną obsługę wielu użytkowników, co jest niezwykle ważne w obszarach o dużym zagęszczeniu, takich jak biura czy kawiarnie.

Pytanie 15

Jakie są główne różnice między środowiskiem RAD (Rapid Application Development) a klasycznymi IDE?

A. RAD nie oferuje żadnych narzędzi do debugowania
B. RAD funkcjonuje tylko w systemach operacyjnych Linux
C. RAD pozwala na szybkie tworzenie prototypów i rozwijanie aplikacji przy minimalnej ilości kodu
D. RAD koncentruje się tylko na testowaniu programów
RAD (Rapid Application Development) to metodologia tworzenia oprogramowania, która kładzie nacisk na szybkie prototypowanie i iteracyjne podejście do rozwoju aplikacji, minimalizując czas poświęcany na pisanie kodu od podstaw. Kluczowym aspektem RAD jest możliwość szybkiego dostosowywania aplikacji do zmieniających się wymagań biznesowych oraz ciągła interakcja z klientem. Narzędzia RAD, takie jak Visual Studio, Delphi czy OutSystems, pozwalają na budowanie aplikacji przy użyciu graficznych interfejsów, gotowych komponentów i automatycznego generowania kodu, co znacząco skraca czas wprowadzenia produktu na rynek. RAD doskonale sprawdza się w przypadku projektów o krótkim cyklu życia i wymagających szybkich zmian.

Pytanie 16

Ś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. Android Studio
C. NetBeans
D. React Native
Wybór innego środowiska niż XCode do tworzenia aplikacji mobilnych na urządzenia Apple to dość często spotykany błąd, zwłaszcza na etapie nauki, bo z zewnątrz narzędzia te mogą wydawać się podobne lub uniwersalne. Android Studio kojarzy się z programowaniem na urządzenia mobilne, ale to środowisko jest w pełni dedykowane systemowi Android i nie da się w nim przygotować aplikacji natywnych dla iOS czy macOS – jest to narzędzie stworzone przez Google i opiera się głównie na Javie oraz Kotlinie, które Apple w ogóle nie wspiera w swoim ekosystemie. NetBeans też pojawia się często w rozmowach o programowaniu, bo obsługuje wiele języków, w tym Java, ale nie ma żadnych natywnych narzędzi do budowy iOS-owych aplikacji ani nie zapewnia integracji z narzędziami Apple, takimi jak symulator czy App Store Connect. Jest wykorzystywany głównie do aplikacji desktopowych lub webowych, a nie mobilnych na iOS. Z kolei React Native to całkiem ciekawa opcja, bo pozwala tworzyć aplikacje mobilne „wieloplatformowe” – czyli takie, które działają i na Androidzie, i na iOS-ie, ale nie jest to środowisko natywne. React Native opiera się na JavaScript i renderuje interfejsy za pomocą natywnych komponentów, ale i tak do finalnego budowania aplikacji na iOS zawsze potrzebny jest XCode, bo tylko on umożliwia publikację w App Store czy korzystanie z zaawansowanych funkcji systemowych. Nierzadko osoby zaczynające programowanie myślą, że każde IDE „zadziała” na każdy system, ale Apple od zawsze bardzo pilnuje swojego ekosystemu i wymaga korzystania z własnych narzędzi przy natywnym programowaniu. Nawet jeśli wybierze się narzędzia wieloplatformowe, to ostatecznie bez XCode nie da się złożyć, podpisać cyfrowo ani opublikować aplikacji na iOS. To typowe nieporozumienie wynika często z nieznajomości zasad publikacji w ekosystemie Apple i różnic między platformami.

Pytanie 17

Zaprezentowany wykres ilustruje wyniki przeprowadzonych testów

Ilustracja do pytania
A. funkcjonalności
B. wydajności
C. użyteczności
D. ochrony
Wykres przedstawia czasy odpowiedzi strony internetowej co jest kluczowe w kontekście testów wydajnościowych. Testy wydajnościowe mają na celu zmierzenie jak system radzi sobie pod określonym obciążeniem i jak szybko potrafi odpowiedzieć na zapytania użytkowników. Tego typu analiza pomaga zidentyfikować potencjalne wąskie gardła w infrastrukturze IT. Przykładowo jeżeli czasy odpowiedzi DNS lub połączenia są zbyt długie może to wskazywać na potrzebę optymalizacji serwerów DNS lub infrastruktury sieciowej. Testy te są nieodłącznym elementem zapewnienia jakości oprogramowania a ich prawidłowe wykonanie wpływa na doświadczenia użytkowników końcowych. Dobra praktyka w branży IT zakłada regularne przeprowadzanie testów wydajnościowych w celu monitorowania stabilności systemu w warunkach zbliżonych do rzeczywistych. Warto również zauważyć że narzędzia takie jak JMeter czy LoadRunner są powszechnie używane do przeprowadzania takich testów co umożliwia symulację różnorodnych scenariuszy obciążenia i analizę wyników w czasie rzeczywistym.

Pytanie 18

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

A. 12
B. 14
C. 8
D. 10
Odpowiedzi 8, 12 i 14 są błędne w kontekście konwersji liczby binarnej 1010 na wartość dziesiętną. Liczba 8 w systemie dziesiętnym odpowiada binarnej wartości 1000. W tym przypadku, 1 * 2^3 daje 8, co oznacza, że w zapisie binarnym nie ma cyfr odpowiadających wartościom 2^2, 2^1 oraz 2^0. Liczba 12 w systemie dziesiętnym jest reprezentowana jako 1100 w systemie binarnym, co oznacza, że ma ona 1 na pozycji 2^3, 1 na pozycji 2^2, a 0 na pozycjach 2^1 oraz 2^0. Natomiast liczba 14 jest reprezentowana jako 1110 w systemie binarnym, co wskazuje, że ma 1 na pozycjach 2^3, 2^2 oraz 2^1, a 0 na pozycji 2^0. W każdym z tych przypadków, niepoprawne odpowiedzi wynikają z błędnej interpretacji wartości binarnych oraz ich odpowiedników w systemie dziesiętnym. Zrozumienie systemów liczbowych jest kluczowe w informatyce i inżynierii, ponieważ liczby binarne są podstawą funkcjonowania komputerów oraz cyfrowych systemów obliczeniowych. Dlatego tak ważne jest precyzyjne wykonanie konwersji oraz znajomość reguł związanych z tym procesem.

Pytanie 19

Która z wymienionych metod może pomóc w walce z uzależnieniem od internetu?

A. Zwiększenie czasu spędzanego na mediach społecznościowych
B. Używanie komputera jedynie w nocy
C. Wprowadzenie systematycznych przerw od używania urządzeń cyfrowych
D. Zainstalowanie większej ilości aplikacji rozrywkowych
Wprowadzenie systematycznych przerw od używania urządzeń cyfrowych to bardzo skuteczna metoda radzenia sobie z uzależnieniem od internetu. Rekomendują ją zarówno psychologowie, jak i specjaliści zajmujący się zdrowiem cyfrowym. W praktyce chodzi o to, żeby regularnie robić świadome przerwy od ekranu – na przykład ustawiając sobie limity czasowe, korzystając z aplikacji blokujących dostęp do określonych stron czy ustalając z góry pory dnia bez używania urządzeń elektronicznych. Takie działania mają mocno pozytywny wpływ na samodyscyplinę i pomagają odzyskać równowagę między życiem offline a online. Zresztą, nawet w poradnikach branżowych dla informatyków czy programistów można znaleźć zalecenia dotyczące odpoczynku od komputera, bo to poprawia koncentrację oraz ogólne samopoczucie. Moim zdaniem, warto przetestować różne sposoby tych przerw – czasem wystarczy wyjść na spacer, zrobić coś rękami albo po prostu porozmawiać z kimś na żywo. Regularność w tych czynnościach naprawdę robi różnicę. A co ciekawe, technika Pomodoro, znana z produktywności, świetnie sprawdza się także tutaj – 25 minut pracy, potem 5 minut przerwy bez żadnych ekranów. Z mojego doświadczenia, takie przerwy pomagają nie tylko ograniczyć korzystanie z internetu, ale też zadbać o swój wzrok i kręgosłup, co jest ważne zwłaszcza dla osób pracujących przy komputerze.

Pytanie 20

Jaką strukturę danych można zrealizować, korzystając jedynie z wymienionych metod?

push(arg) – dodaje element
pop() – usuwa ostatnio dodany element
peek() – zwraca ostatnio dodany element bez usuwania
isEmpty() – sprawdza czy istnieją dane w strukturze
A. drzewo binarne
B. kolejka FIFO
C. stos
D. tablica
Każda z błędnych odpowiedzi w tym pytaniu odnosi się do popularnych struktur danych, jednak żadna z nich nie pasuje do zestawu metod, które tutaj pokazano. Zacznijmy od kolejki FIFO – tam główną zasadą jest First In, First Out, czyli pierwszy dodany element wypada jako pierwszy. Aby zrealizować kolejkę, potrzebne są zwykle metody enqueue (dodawanie na koniec) i dequeue (usuwanie z początku), czasem jeszcze peek do podejrzenia pierwszego elementu. Natomiast w prezentowanym zestawie nie mamy operacji rozróżniających początek i koniec – wszystko dzieje się tylko „na górze”, co zupełnie nie oddaje natury kolejki. Tablica z kolei daje dostęp do elementów przez indeksy, można przeskakiwać losowo po jej zawartości, zmieniać konkretne pozycje – czego w ogóle nie da się zrobić, mając tylko push, pop, peek i isEmpty. Dla drzewa binarnego brakuje tu zupełnie kluczowych mechanizmów – nie ma odniesień do lewego czy prawego potomka, nie da się wstawić elementu zgodnie z regułami drzewa, ani przeszukiwać go w odpowiedni sposób. Często na etapie nauki pojawia się taki błąd, że ktoś patrzy na pojedyncze funkcje, a nie dostrzega całej filozofii stojącej za strukturą. W praktyce, żeby dobrze dopasować strukturę do zadania, trzeba zawsze pytać, jakie są zasady dostępu do danych i jakich operacji naprawdę potrzebujemy. Dopiero wtedy można ocenić, czy pasuje nam stos, kolejka, tablica czy drzewo – a w tym przypadku, patrząc na metody, tylko stos jest odpowiedzią zgodną z logiką i branżowymi standardami.

Pytanie 21

Jak zostanie przedstawiony poniższy kod XAML?

Ilustracja do pytania
A. Rysunek 4
B. Rysunek 2
C. Rysunek 1
D. Rysunek 3
Błędy w rozumieniu XAML mogą prowadzić do niepoprawnego renderowania interfejsu użytkownika. W przypadku przedstawionego kodu kluczowym elementem jest zrozumienie struktury StackLayout który domyślnie ustawia elementy w pionie chyba że określono Orientation jako Horizontal jak w przypadku etykiety Zgoda RODO i przełącznika co może być mylące gdyż sugeruje potrzebę zwrócenia uwagi na szczegóły. W innych rysunkach jak na przykład Rysunek 1 brak pola nazwisko wskazuje na błędne zrozumienie struktury kodu gdzie Entry dla nazwiska jest obecne ale nie jest widoczne co wskazuje na potrzebę poprawnego zrozumienia jak StackLayout renderuje elementy. Podobnie Rysunek 3 zawiera dodatkowe przyciski co sugeruje błędne zinterpretowanie przycisków nieobecnych w kodzie. Zrozumienie Slidera jest również kluczowe gdyż jego wartości i kolory wpływają na potencjalne błędne renderowanie suwaka w innych rysunkach. Błędy mogą wynikać z ignorowania tak kluczowych elementów jak IsToggled dla przełącznika co determinuje jego początkowy stan i jest często pomijanym aspektem przez mniej doświadczonych programistów. Stąd istotne jest dokładne zrozumienie jak poszczególne właściwości wpływają na końcowy wygląd interfejsu aby uniknąć typowych błędów projektowych i zapewnić funkcjonalność zgodną z oczekiwaniami użytkownika.

Pytanie 22

Czym jest ochrona własności intelektualnej?

A. Zbiór informacji osobowych
B. Rejestr plików przechowywanych w chmurze
C. Zestaw przepisów dotyczących ochrony prywatności
D. Koncepcja prawa zabezpieczającego twórczość i innowacje
Zbiór danych osobowych dotyczy prywatności użytkowników i ochrony danych, a nie własności intelektualnej. Zestaw ustaw o ochronie prywatności reguluje przetwarzanie danych osobowych, ale nie obejmuje praw autorskich czy patentów. Lista plików przechowywanych w chmurze nie jest związana z własnością intelektualną, ponieważ dotyczy przechowywania danych, a nie ochrony twórczości czy wynalazków.

Pytanie 23

Które z wymienionych narzędzi najlepiej chroni dane na urządzeniach mobilnych?

A. Nieaktualne oprogramowanie
B. Zainstalowanie aplikacji rozrywkowych
C. Szyfrowanie danych na urządzeniu
D. Hasło ustawione na urządzeniu
Nieaktualne oprogramowanie zwiększa ryzyko ataków, ponieważ zawiera luki, które mogą być wykorzystane przez cyberprzestępców. Hasło ustawione na urządzeniu zabezpiecza je jedynie w podstawowym zakresie i nie chroni danych na poziomie dostępu fizycznego – hakerzy mogą je obejść, jeśli nie są one zaszyfrowane. Instalowanie aplikacji rozrywkowych nie wpływa na poziom bezpieczeństwa, a wręcz przeciwnie – może zwiększyć ryzyko infekcji złośliwym oprogramowaniem, jeśli aplikacje pochodzą z niezaufanych źródeł.

Pytanie 24

Jaką funkcję pełni operator "|" w języku C++?

A. Logiczne "lub"
B. Bitowe "lub"
C. Bitowe "xor"
D. Operację przesunięcia bitów w prawo
Operator `||` to operator logiczny `OR`, który działa na wartościach logicznych i zwraca `true`, jeśli przynajmniej jeden z operandów jest prawdziwy, ale nie operuje na poziomie bitów. Operator `^` to operator `XOR` (exclusive or), który zwraca `1` tylko wtedy, gdy jeden z operandów ma wartość `1`, a drugi `0`. Operator `>>` to operator przesunięcia bitowego w prawo, który przesuwa bity liczby w prawo o określoną liczbę miejsc, co skutkuje podzieleniem liczby przez potęgę dwójki. Każdy z tych operatorów działa inaczej niż `|`, który jest operatorem bitowego `OR`.

Pytanie 25

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 przetwarza kod na język maszynowy w momencie jego wykonywania
C. Interpreter tworzy plik wykonywalny, który funkcjonuje niezależnie od otoczenia
D. Kompilator przekształca kod źródłowy na język maszynowy przed uruchomieniem aplikacji
Kompilator nie tłumaczy kodu w trakcie jego działania, bo to już zadanie interpretera. Interpreter przetwarza kod linijka po linijce podczas działania programu. Z tego powodu nie tworzy plików wykonywalnych, program po prostu działa w czasie rzeczywistym, a to sprawia, że działa wolniej. Mówiąc krótko, tłumaczenie kodu przed kompilacją to nie jest to, co się robi – kompilacja to proces, który tworzy plik wykonywalny z kodu źródłowego. Dlatego interpreter nie generuje żadnych niezależnych plików, tylko analizuje i wykonuje kod od razu.

Pytanie 26

Jakie są kluczowe korzyści z wykorzystania frameworków podczas programowania aplikacji desktopowych?

A. Ułatwiają kontrolę nad wersjami systemu operacyjnego
B. Redukują zapotrzebowanie na pamięć operacyjną aplikacji
C. Skracają czas tworzenia aplikacji dzięki gotowym komponentom i narzędziom
D. Gwarantują dostęp do niskopoziomowego kodu systemowego
Zapewnienie dostępu do niskopoziomowego kodu systemowego jest cechą bibliotek i narzędzi takich jak C lub C++, ale frameworki zwykle dostarczają abstrakcję nad systemem, co upraszcza proces programowania. Zarządzanie wersjami systemu operacyjnego to zadanie narzędzi do wirtualizacji i zarządzania środowiskami, a nie cecha frameworków. Minimalizacja zapotrzebowania na pamięć operacyjną to efekt optymalizacji kodu i wydajnego programowania, ale nie jest to główny cel frameworków, które skupiają się na dostarczaniu narzędzi do szybszego tworzenia aplikacji.

Pytanie 27

Który z operatorów w Pythonie umożliwia sprawdzenie, czy dany element należy do listy?

A. is
B. in
C. and
D. ==
Operator `in` w języku Python służy do sprawdzania, czy element należy do listy, zbioru, krotki lub innego obiektu iterowalnego. Przykład: `if 5 in lista` sprawdza, czy liczba 5 znajduje się w liście. Operator `in` jest niezwykle przydatny w przeszukiwaniu danych, a jego zastosowanie skraca kod i zwiększa jego czytelność. W Pythonie jest on szeroko stosowany do iteracji i filtrowania danych, co czyni go jednym z najbardziej intuicyjnych operatorów języka.

Pytanie 28

Jakie jest podstawowe działanie w ochronie miejsca zdarzenia?

A. Zastosowanie sterylnych materiałów opatrunkowych
B. Zagwarantowanie stabilności ciała rannego
C. Zagwarantowanie odpowiedniego oświetlenia
D. Usunięcie niebezpiecznych przedmiotów z otoczenia
Moim zdaniem, zapewnienie stabilności ciała poszkodowanego jest ważne, ale nie można o tym zapominać, że najpierw powinno się zlikwidować zagrożenia. Jasne, że lepsze oświetlenie miejsca wypadku zwiększa widoczność, ale nie jest to najważniejsze, gdy są wokół niebezpieczne przedmioty. No i jasne, że użycie sterylnych materiałów do opatrunków ma znaczenie, ale w tej sytuacji nie pomaga w usuwaniu zagrożeń wokół.

Pytanie 29

Jaki jest zasadniczy cel ataku phishingowego?

A. Zbieranie danych osobowych za pomocą podszywających się stron lub wiadomości
B. Zakłócanie pracy sieci przez nadmiarowe zapytania
C. Kradzież haseł z pamięci operacyjnej urządzenia
D. Uniemożliwienie dostępu do usług internetowych
Atak phishingowy różni się od innych form cyberataków, które również mogą mieć na celu uzyskanie danych, lecz realizowane są w inny sposób. Zakłócenie działania sieci poprzez nadmiar zapytań, znane jako atak DDoS, polega na przesyłaniu ogromnej ilości zapytań do serwera, co skutkuje jego przeciążeniem i niedostępnością dla użytkowników. Tego typu ataki są ukierunkowane na infrastrukturę, a nie na pojedyncze dane osobowe użytkowników. W przypadku wykradania haseł z pamięci operacyjnej urządzenia, technika ta wymaga stosowania złośliwego oprogramowania, które potrafi skanować pamięć RAM i wyłuskiwać informacje. Jest to bardziej złożony proces, który wymaga bezpośredniego dostępu do systemu ofiary, co różni się od prostoty i zasięgu ataku phishingowego. Ostatnia z wymienionych możliwości, blokowanie dostępu do usług online, często jest związana z ransomware, które szyfruje pliki użytkownika i żąda okupu za ich odblokowanie. W przeciwieństwie do phishingu, tego typu ataki są bardziej destrukcyjne i mają na celu zaszkodzenie systemowi, a nie kradzież danych osobowych przez oszustwa. Dlatego też, mimo że wszystkie wymienione metody są niebezpieczne, to jednak ich mechanizmy i cele są zupełnie inne niż w przypadku ataku phishingowego.

Pytanie 30

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

A. 10 uciśnięć klatki piersiowej bez wdechów
B. 20 uciśnięć klatki piersiowej na przemian z 5 wdechami ratowniczymi
C. 30 wdechów ratowniczych bez uciśnięć
D. 30 uciśnięć klatki piersiowej na przemian z 2 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 31

Jakie kwestie związane z percepcją są uwzględnione w rekomendacjach standardu WCAG 2.0?

A. umożliwienia interakcji między elementami użytkownika za pomocą klawiatury
B. zapewnienia odpowiedniego czasu na zapoznanie się i przetworzenie informacji
C. jasności i dokładności w dostarczonych treściach na stronie
D. prezentacji elementów interfejsu użytkownika
Odpowiedzi odnoszące się do zapewnienia odpowiedniego czasu na zapoznanie się z informacjami, umożliwienia interakcji poprzez klawiaturę czy jasności i dokładności treści są ważne w kontekście dostępności stron, ale nie dotyczą bezpośrednio percepcji według standardu WCAG 2.0. Często zdarza się, że osoby uczące się mylą pojęcia percepcji z innymi zasadami WCAG, na przykład zrozumiałością (understandable) czy funkcjonalnością (operable). Percepcja w WCAG skupia się na tym, jak treści są postrzegane przez zmysły – głównie wzrok i słuch, ale czasem też dotyk, gdy mowa np. o wyświetlaczach brajlowskich. Zapewnienie odpowiedniego czasu i interakcji klawiaturą to typowe wymagania dla użytkowników z ograniczeniami motorycznymi, i chociaż są one bardzo istotne, to WCAG klasyfikuje je w innych kategoriach niż percepcja. Jasność i dokładność treści to cecha istotna dla zrozumiałości, jednak nie gwarantuje, że użytkownik w ogóle tę treść zauważy lub rozpozna – do tego potrzebna jest właśnie prawidłowa prezentacja elementów interfejsu. Tu najczęściej pojawia się błąd myślowy: zakłada się, że jak coś jest napisane jasno, to każdy to zobaczy i zrozumie, ale wielu użytkowników ma problemy z odbiorem samych wizualnych aspektów strony. WCAG 2.0 podkreśla, żeby nie polegać tylko na jednym kanale percepcji, np. kolorze, dźwięku czy obrazie. Dopiero dbałość o prezentację elementów interfejsu – kontrast, czytelność, alternatywy tekstowe – sprawia, że strona jest dostępna percepcyjnie. Warto zapamiętać, że kategorie WCAG są celowo podzielone właśnie w ten sposób, aby każda istotna kwestia była rozpatrywana osobno i nie mieszana z innymi.

Pytanie 32

Przedstawiony na filmie kod napisany w języku C++ nie kompiluje się. Co należy zmienić w tym kodzie, aby proces kompilacji wykonał się bez błędów?

A. poprawnie zapisać warunek w instrukcji if w linii 11, np. sprawdz(x)==true
B. zadeklarować zmienną sprawdz przed jej wykorzystaniem w linii 11
C. naprawić błąd w funkcji sprawdz, który polega na braku nawiasów {} w pętli for
D. dodać deklarację funkcji sprawdz przed funkcją main
Wielu początkujących programistów skupia się na szczegółach składniowych lub drobiazgach logicznych, kiedy pojawia się błąd kompilacji w C++. Jednak często przyczyną jest coś bardzo podstawowego, jak brak deklaracji funkcji przed jej użyciem. Jeśli chodzi o zapis warunku w instrukcji 'if', to kompilator nie zgłasza błędu, gdy używamy wyrażenia typu 'if (sprawdz(x))' – to całkowicie poprawna składnia, a dopisywanie '==true' jest redundantne i nie wnosi niczego nowego. Bardzo często widzę, że ktoś skupia się na tym, żeby warunek koniecznie porównywać do true, ale tak naprawdę to kwestia stylu, nie poprawności. Pozostawienie nawiasów klamrowych w pętli for jest oczywiście dobrą praktyką, ale ich brak nie zawsze generuje błąd kompilacji, jeśli pętla ma tylko jedną instrukcję. Kompilator C++ potrafi to rozpoznać i nie zgłasza błędu – sprowadza się to bardziej do czytelności i unikania błędów logicznych niż do samej poprawności kompilacji. Odpowiedź dotycząca deklarowania zmiennej 'sprawdz' to już nieporozumienie – 'sprawdz' to funkcja, a nie zmienna, więc nie deklarujemy jej w ten sposób. Ten błąd pokazuje, jak łatwo pomylić pojęcia w językach programowania, zwłaszcza jeśli dopiero zaczynamy przygodę z kodowaniem. Główna zasada, którą warto tu zapamiętać, to: każda funkcja używana przed jej zdefiniowaniem musi być zadeklarowana – to właśnie tego brakuje w typowym przykładzie z pytania. Bez deklaracji kompilator nie wie, jaką sygnaturę ma funkcja, a to skutkuje błędem już na poziomie kompilacji. Z mojego doświadczenia wynika, że takie drobne rzeczy potrafią skutecznie utrudnić życie, dlatego warto czytać komunikaty kompilatora i znać podstawowe zasady działania języka C++.

Pytanie 33

Jakie jest przeznaczenie dokumentacji wdrożeniowej?

A. Do testowania wydajności aplikacji
B. Do tworzenia zadań w systemie kontroli wersji
C. Do opisania procesu instalacji i konfiguracji aplikacji w środowisku produkcyjnym
D. Do zarządzania bazą danych aplikacji
Zarządzanie bazą danych aplikacji to ważny aspekt administracji systemami, ale dokumentacja wdrożeniowa dotyczy całego procesu przeniesienia aplikacji do środowiska produkcyjnego, a nie tylko jej bazy danych. Testowanie wydajności aplikacji jest częścią procesu jakościowego, ale nie zastępuje dokumentacji wdrożeniowej, która koncentruje się na technicznych aspektach implementacji oprogramowania. Tworzenie zadań w systemie kontroli wersji (np. Git) pomaga śledzić zmiany w kodzie, ale nie jest związane z bezpośrednim wdrażaniem aplikacji w środowisku produkcyjnym.

Pytanie 34

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

A. Typy stałoprzecinkowe wymagają większej ilości pamięci niż typy zmiennoprzecinkowe
B. Typy stałoprzecinkowe przechowują liczby całkowite, a typy zmiennoprzecinkowe przechowują liczby z ułamkami dziesiętnymi
C. Typy zmiennoprzecinkowe przechowują wyłącznie liczby ujemne
D. Typy stałoprzecinkowe obsługują liczby ujemne, natomiast typy zmiennoprzecinkowe tylko dodatnie
Stałoprzecinkowe typy obsługują zarówno liczby dodatnie, jak i ujemne – stwierdzenie, że obsługują tylko liczby dodatnie, jest błędne. Stałoprzecinkowe typy danych nie wymagają więcej pamięci niż zmiennoprzecinkowe – wręcz przeciwnie, typy takie jak 'float' zajmują więcej miejsca ze względu na możliwość przechowywania części ułamkowych. Zmiennoprzecinkowe nie przechowują wyłącznie liczb ujemnych – mogą przechowywać zarówno liczby dodatnie, jak i ujemne, co czyni je bardziej wszechstronnymi w niektórych aplikacjach.

Pytanie 35

Która z dokumentacji funkcji odpowiada przedstawionemu kodowi źródłowemu?

static int Abs(int liczba)
{
    if (liczba < 0)
        liczba *= -1;
    return liczba;
}
Dokumentacja 1:
/*******************
* nazwa: Abs
* opis: liczy wartość bezwzględną
* zwracana: brak
* argumenty: liczba całkowita
*******************/
Dokumentacja 2:
/*******************
* nazwa: Abs
* opis: liczy wartość bezwzględną
* zwracana: wartość bezwzględna z liczby całkowitej
* argumenty: liczba całkowita
*******************/
Dokumentacja 3:
/*******************
* nazwa: Abs
* opis: liczy potęgę liczby
* zwracana: potęga z liczby całkowitej
* argumenty: dwie liczby całkowite
*******************/
Dokumentacja 4:
/*******************
* nazwa: Abs
* opis: liczy potęgę liczby
* zwracana: potęga z liczby całkowitej
* argumenty: liczba całkowita
*******************/
A. Dokumentacja 1
B. Dokumentacja 2
C. Dokumentacja 3
D. Dokumentacja 4
Każda z pozostałych dokumentacji zawiera poważne nieścisłości względem kodu funkcji „Abs”. W przypadku pierwszej dokumentacji kłopotliwa jest sekcja „zwracana: brak”, chociaż kod jasno pokazuje, że funkcja zwraca liczbę całkowitą – to wcale nie jest funkcja typu void, tylko int, więc nie da się tego rozumieć jako „brak zwracanej wartości”. To dość powszechny błąd, szczególnie na początku nauki: mylenie funkcji, które coś zwracają, z tymi, które wykonują operacje bez zwracania wyniku. W praktyce takie niedopasowanie między dokumentacją a kodem potrafi prowadzić do przykrych nieporozumień, a nawet błędów na etapie integracji. Dokumentacja trzecia i czwarta wpadają w kolejną pułapkę: opisują zupełnie inne działanie. Piszą o potęgowaniu (liczeniu potęgi liczby), podczas gdy funkcja Abs absolutnie nie zajmuje się potęgą – jej zadanie to wartość bezwzględna. Dodatkowo, dokumentacja trzecia błędnie twierdzi, że funkcja przyjmuje dwie liczby całkowite, co jest niezgodne z kodem – tam jest tylko jeden parametr. Takie pomieszanie pojęć często wynika z nieuważnego czytania specyfikacji lub mechanicznego kopiowania dokumentacji z innej funkcji. W branży takie rozbieżności są bardzo źle widziane, bo dokumentacja powinna być lustrzanym odbiciem kodu. Osobiście wiele razy widziałem projekty, w których błędna dokumentacja prowadziła do powielania bugów lub niepotrzebnych refaktoryzacji. Dobrym zwyczajem jest zawsze poświęcić chwilę na sprawdzenie, czy opis odpowiada faktycznemu działaniu kodu. Myślę, że ta sytuacja dobrze pokazuje, jak ważna jest precyzja – zarówno w kodowaniu, jak i dokumentowaniu.

Pytanie 36

Który z wymienionych przykładów ilustruje projektowanie interfejsu zgodnego z zasadami user experience (UX)?

A. Przycisk umieszczony w przypadkowym miejscu aplikacji
B. Brak opcji cofnięcia już wykonanej akcji
C. Użycie czytelnych czcionek i intuicyjnego układu elementów
D. Zastosowanie jedynie jednego koloru w całym interfejsie
Użycie czytelnych czcionek i intuicyjnego układu elementów to kluczowe zasady projektowania zgodne z user experience (UX). Przejrzystość i estetyka interfejsu zwiększają komfort użytkownika i ułatwiają korzystanie z aplikacji. Intuicyjny układ elementów pozwala na szybkie odnalezienie potrzebnych funkcji, co redukuje frustrację użytkownika i skraca czas potrzebny na realizację zadania. UX opiera się na badaniach dotyczących zachowań użytkowników i dostosowywaniu projektu do ich potrzeb.

Pytanie 37

Jaki z wymienionych komponentów jest kluczowy do inicjalizacji pola klasy podczas tworzenia instancji obiektu?

A. Konstruktor
B. Metoda statyczna
C. Funkcja zaprzyjaźniona
D. Instrukcja warunkowa
Konstruktor jest niezbędny do inicjalizacji pól klasy podczas tworzenia nowego obiektu. Bez konstruktora obiekt mógłby zostać utworzony w stanie nieokreślonym, co może prowadzić do błędów w działaniu programu. Konstruktor automatycznie przypisuje wartości do pól lub wykonuje inne niezbędne operacje przygotowawcze. Przykład w C++: `class Samochod { public: Samochod() { marka = "Nieznana"; } }`. W tym przypadku konstruktor ustawia domyślną wartość dla pola `marka`, co eliminuje konieczność ręcznego przypisywania wartości po utworzeniu obiektu.

Pytanie 38

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

Ilustracja do pytania
A. 2 osoby
B. 5 osób
C. 1 osobę
D. 4 osoby
Dość często spotykaną trudnością przy analizie wykresów Gantta jest tendencja do przeceniania liczby potrzebnych zasobów – czyli członków zespołu projektowego. Wiele osób zakłada, że suma wszystkich zadań lub nawet liczba wszystkich pozycji w harmonogramie musi się równać liczbie osób, co prowadzi do zawyżonych szacunków i niepotrzebnego rozrostu zespołu. Jednak w praktyce, zgodnie ze standardami zarządzania projektami, np. PMBOK, kluczowe jest maksymalne wykorzystywanie dostępnych kompetencji przez analizę nakładania się zadań. W zadanym przykładzie w żadnym tygodniu nie występuje potrzeba pracy większej liczby osób niż dwie, nawet jeśli na pierwszy rzut oka wydaje się, że pojedyncze zadania wymagają osobnych osób w każdym okresie. Częstym błędem jest nieuwzględnianie faktu, że zadania rozkładają się w czasie i rzadko kiedy wszystkie są realizowane jednocześnie. Zakładanie potrzeby pięciu czy czterech osób wynika zwykle z przekonania, że lepiej „dmuchać na zimne”, ale to prowadzi do nieefektywności i sztucznego zwiększania kosztów – coś, czego w projektach IT bardzo się unika. W praktyce, menedżerowie zawsze starają się dobrać skład zespołu tak, by liczba osób odpowiadała rzeczywistemu zapotrzebowaniu w najbardziej wymagającym okresie, a nie przez cały czas trwania projektu. Z drugiej strony, typowym błędem jest też zbyt optymistyczne założenie, że wystarczy jedna osoba, bo wtedy niektóre zadania musiałby czekać w kolejce, co wydłuża całość projektu. Podsumowując, precyzyjna analiza wykresu Gantta pozwala na optymalizację zasobów i jest kluczową umiejętnością w zarządzaniu zespołami IT – zarówno z punktu widzenia efektywności, jak i kosztów czy terminowości wykonania zlecenia.

Pytanie 39

Co to jest event bubbling w JavaScript?

A. Proces, w którym zdarzenie zaczyna się od najbardziej szczegółowego elementu i propaguje w górę hierarchii DOM
B. Metoda zarządzania kolejką zdarzeń w aplikacjach asynchronicznych
C. Technika optymalizacji wydajności zdarzeń na stronie
D. System powiadomień o błędach w konsoli JavaScript
Zrozumienie koncepcji event bubbling jest kluczowe dla pracy z interaktywnymi aplikacjami webowymi, a nieprawidłowe interpretacje mechanizmu zdarzeń mogą prowadzić do wielu problemów w codziennej pracy programisty. Twierdzenie, że event bubbling jest techniką optymalizacji wydajności zdarzeń na stronie, jest mylące, ponieważ owszem, skuteczne wykorzystanie event bubbling może poprawić wydajność, ale sam mechanizm nie jest techniką optymalizacji. Zamiast tego, jest to naturalna cecha modelu zdarzeń w JavaScript, która umożliwia propagację zdarzeń w hierarchii DOM. Warto również zauważyć, że zarządzanie kolejką zdarzeń w aplikacjach asynchronicznych to zupełnie inny temat, który dotyczy asynchroniczności oraz mechanizmu event loop, a nie procesu przekazywania zdarzeń. Dodatkowo, twierdzenie, że event bubbling jest systemem powiadomień o błędach w konsoli JavaScript, wprowadza w błąd, gdyż event bubbling dotyczy jedynie propagacji zdarzeń interfejsu użytkownika, a nie obsługi błędów czy logowania. Często nieporozumienia te wynikają z braku znajomości podstawowych zasad dotyczących zdarzeń w JavaScript oraz z pomylenia różnych mechanizmów, które wspierają interaktywność aplikacji. Dobrze jest zapoznać się z dokumentacją i przykładami, aby lepiej zrozumieć te kluczowe koncepcje.

Pytanie 40

Jakie z następujących skutków może wystąpić w przypadku naruszenia prawa autorskiego?

A. Obowiązek zamieszczenia publicznych przeprosin
B. Unieważnienie umowy licencyjnej użytkownika końcowego
C. Nałożenie grzywny lub kary więzienia
D. Zakaz korzystania z oprogramowania open-source
Obowiązek opublikowania przeprosin w mediach jest rzadko stosowaną sankcją i zazwyczaj dotyczy naruszeń dóbr osobistych, a nie praw autorskich. Zakaz używania oprogramowania open-source nie wynika z naruszenia prawa autorskiego – licencje open-source pozwalają na szerokie korzystanie z oprogramowania, pod warunkiem przestrzegania ich zapisów. Unieważnienie licencji użytkownika końcowego (EULA) może mieć miejsce w przypadku naruszenia warunków licencji, ale nie jest to standardowa kara za naruszenie praw autorskich.