Przejdź do głównej treści

Wyniki egzaminu

Nowy egzamin

Informacje o egzaminie

  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Rozpoczęcie: 30 września 2026 11:38
  • Zakończenie: 30 września 2026 11:55 

Egzamin zdany!

Wynik: 33/40 punktów (82,5%)

Wymagane minimum: 20 punktów (50%)

Pewność odpowiedzi

Jako strzał oznaczono 2 odpowiedzi - trafionych: 1.

Z odpowiedzi deklarowanych jako pewne poprawnych było 32 z 38. Trafiony strzał to nie jest wiedza - te pytania warto powtórzyć w pierwszej kolejności.

Twój wynik na tle innych

Twój wynik jest lepszy niż 68% podejść do kwalifikacji INF.04.

Porównanie z 23475 zakończonymi podejściami do tej kwalifikacji (dane zbiorcze, bez wyników indywidualnych).

Zachowaj ten wynik na koncie

Załóż darmowe konto albo zaloguj się - ten egzamin przypiszemy do Twojego konta, więc wrócisz do swoich błędów, będziesz śledzić postęp i dostaniesz powtórki dobrane do Twoich odpowiedzi.

Analiza przebiegu egzaminu - sprawdź przebieg rozwiązywania pytań Przebieg egzaminu

Analiza przebiegu egzaminu

Odtwarzaj przebieg egzaminu krok po kroku i ucz się na własnych błędach - kolejność rozwiązywania, czas nad każdym pytaniem, momenty zmiany odpowiedzi.

  • Suwak czasu - przeglądaj pytania w kolejności rozwiązywania.
  • Tryb nauki - poprawne odpowiedzi i wyjaśnienia.
  • Analiza czasu - ile czasu nad każdym pytaniem.
  • Monitoring focusu - momenty opuszczenia zakładki.

Pochwal się swoim wynikiem!

Szczegółowe wyniki

Pytanie 1

Które z poniższych stwierdzeń jest prawdziwe w kontekście dziedziczenia w języku Java?

A. Dziedziczenie jest niezalecane w języku Java.
B. Klasa pochodna może dziedziczyć po wielu klasach bazowych.
C. Klasa pochodna dziedziczy po jednej klasie bazowej.Twoja odpowiedź
D. Java nie wspiera dziedziczenia.
Poprawna odpowiedź. Dziedziczenie jest jednym z kluczowych mechanizmów programowania obiektowego, a Java wspiera dziedziczenie jednokrotne. Oznacza to, że klasa pochodna może dziedziczyć tylko po jednej klasie bazowej. Jest to zgodne z modelem dziedziczenia stosowanym w wielu językach obiektowych. Dzięki temu mechanizmowi możemy ponownie wykorzystywać kod, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Dziedziczenie pozwala na tworzenie hierarchii klas, gdzie klasa pochodna dziedziczy właściwości i metody klasy bazowej, co ułatwia rozszerzanie funkcjonalności bez konieczności ponownego pisania kodu. Przykład zastosowania to tworzenie klasy 'Samochód', która dziedziczy po klasie 'Pojazd', co pozwala na automatyczne odziedziczenie wszystkich cech pojazdu, takich jak metoda 'uruchom', a jednocześnie dodanie specyficznych funkcji dla samochodu, jak 'otwórz bagażnik'. Dziedziczenie ułatwia zarządzanie złożonymi systemami, umożliwiając organizację kodu w sposób bardziej zrozumiały i zarządzalny.

Pytanie 2

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

let arr = [1, 2, 3, 4, 5];
let result = arr.filter(num => num % 2 === 0);
console.log(result);
A. [2, 4]Twoja odpowiedź
B. [1, 2, 3, 4, 5]
C. [1, 3, 5]
D. 2,4
Poprawna odpowiedź. Wynik działania podanego kodu to [2, 4], ponieważ zastosowana funkcja filter tworzy nową tablicę, w której znajdują się tylko te elementy, które spełniają określony warunek. W tym przypadku warunkiem jest to, że element musi być parzysty (num % 2 === 0). Z tablicy arr, która zawiera liczby od 1 do 5, tylko liczby 2 i 4 spełniają ten warunek. Filtracja danych jest bardzo przydatna w programowaniu, zwłaszcza w kontekście pracy z dużymi zbiorami danych, gdzie można łatwo wyodrębnić interesujące nas elementy. Stosowanie takich metod, jak filter, jest zgodne z zasadami programowania funkcyjnego, które promują użycie funkcji do przetwarzania danych w sposób bardziej zwięzły i czytelny. W praktyce, funkcja filter może być używana do filtrowania danych z API, przetwarzania zbiorów danych w aplikacjach, czy też w analizach danych. Takie podejście zwiększa wydajność i czytelność kodu, co jest istotne w długoterminowym utrzymaniu projektów.

Pytanie 3

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

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

Pytanie 4

W przypadku przedstawionych kodów źródłowych, które są funkcjonalnie równoważne, wartość, która zostanie zapisana w zmiennej b po wykonaniu operacji, to

Python:C++ / C# / Java:
x = 5.96;
b = int(x);
double x = 5.96;
int b = (int)x;
A. 5Twoja odpowiedź
B. 6
C. 596
D. 5.96
Poprawna odpowiedź. W tym zadaniu mamy do czynienia z fajnym przykładem konwersji liczby 5.96 na liczbę całkowitą w różnych językach, takich jak Python czy C++. Kiedy robimy rzutowanie, to po prostu odcinamy część ułamkową, co daje nam 5 w zmiennej b. To jest trochę klasyczne rzutowanie albo konwersja typu, gdzie w większości języków po prostu się to robi. Ciekawostką jest, że w Pythonie działa to przez funkcję int(), która zawsze zaokrągla w dół. A w C++ czy Javie używasz po prostu (int) i efekt jest ten sam. Warto też zwrócić uwagę, że przy liczbach ujemnych rzutowanie działa inaczej, bo zawsze zmierza w stronę zera. Z doświadczenia wiem, że warto być świadomym użycia takich konwersji, bo w niektórych przypadkach, jak operacje finansowe, nawet małe różnice mogą się okazać bardzo istotne.

Pytanie 5

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

A. Technologia przechowywania danych w pamięci RAM aplikacji
B. System plików tymczasowych używany przez przeglądarkę
C. Baza danych NoSQL działająca na serwerze aplikacji
D. Mechanizm pozwalający na przechowywanie danych w przeglądarce użytkownika bez określonego czasu wygaśnięciaTwoja odpowiedź
Poprawna odpowiedź. Local storage to mechanizm dostępny w przeglądarkach internetowych, który pozwala na przechowywanie danych w formacie klucz-wartość. W przeciwieństwie do cookies, które mają czas wygaśnięcia, dane w local storage są przechowywane bezterminowo, co oznacza, że pozostają dostępne nawet po zamknięciu przeglądarki. Dzięki temu deweloperzy mogą tworzyć aplikacje webowe, które pamiętają preferencje użytkowników, stany formularzy czy inne istotne informacje. Typowym zastosowaniem local storage może być zapisywanie ustawień użytkownika w grach przeglądarkowych lub aplikacjach do zarządzania zadaniami. Warto również wspomnieć, że local storage ma limit pojemności wynoszący zazwyczaj około 5 MB na domenę, co czyni go odpowiednim dla przechowywania małych ilości danych. Ponadto, korzystając z local storage, deweloperzy powinni pamiętać o kwestiach bezpieczeństwa, takich jak unikanie przechowywania wrażliwych danych, a także o stosowaniu technik takich jak serializacja danych w formacie JSON, co ułatwia ich późniejsze wykorzystanie.

Pytanie 6

Co to jest CORS (Cross-Origin Resource Sharing)?

A. Protokół komunikacji między różnymi bazami danych
B. Mechanizm bezpieczeństwa określający, które domeny mogą uzyskiwać dostęp do zasobów na serwerzeTwoja odpowiedź
C. Metoda kompresji danych w aplikacjach webowych
D. System zarządzania plikami statycznymi w aplikacjach SPA
Poprawna odpowiedź. CORS, czyli Cross-Origin Resource Sharing, to mechanizm bezpieczeństwa, który pozwala kontrolować, które domeny mają dostęp do zasobów na serwerze. Jest to niezwykle ważne w kontekście aplikacji webowych, które często korzystają z zasobów z różnych źródeł. Dzięki CORS serwery mogą definiować, które domeny mogą wysyłać żądania HTTP i uzyskiwać odpowiedzi z ich zasobów. Na przykład, jeśli Twoja aplikacja webowa działa na domenie 'example.com', ale potrzebuje danych z API na 'api.example.org', CORS pozwala na skonfigurowanie serwera API, aby zezwalał na te żądania. CORS jest kluczowy dla bezpieczeństwa aplikacji, ponieważ zapobiega atakom typu cross-site scripting (XSS) i innym nieautoryzowanym dostępom. Praktyczne zastosowanie CORS wprowadza nagłówki HTTP, takie jak 'Access-Control-Allow-Origin', które informują przeglądarki, jakie domeny mają prawo do interakcji z danym zasobem. Korzystanie z CORS jest uznawane za dobrą praktykę w budowaniu bezpiecznych aplikacji webowych, co podkreśla znaczenie jego implementacji.

Pytanie 7

Co to jest choroba związana z wykonywaniem zawodu?

A. Każda choroba, która występuje w czasie pracy
B. Choroba występująca tylko w sektorze przemysłowym
C. Stan zdrowia, który uniemożliwia pracę przez okres krótszy niż tydzień
D. Choroba wynikająca z warunków pracy lub związanych z nimi czynnikówTwoja odpowiedź
Poprawna odpowiedź. Choroba zawodowa to stan zdrowotny spowodowany warunkami pracy lub czynnikami związanymi z wykonywaną profesją. Najczęściej wynika z długotrwałego narażenia na szkodliwe substancje, hałas, promieniowanie, pyły lub wykonywanie powtarzalnych czynności. Przykładem chorób zawodowych są pylica płuc, głuchota zawodowa czy zespół cieśni nadgarstka. Kluczowym elementem w zapobieganiu chorobom zawodowym jest odpowiednia profilaktyka, szkolenia BHP oraz dostosowanie środowiska pracy do zasad ergonomii. Pracodawcy są zobowiązani do monitorowania warunków pracy i wdrażania rozwiązań minimalizujących ryzyko wystąpienia chorób zawodowych.

Pytanie 8

Która z wymienionych sytuacji stanowi naruszenie praw autorskich?

A. Udostępnianie filmu objętego prawami autorskimi bez zgody właścicielaTwoja odpowiedź
B. Nabycie licencji na oprogramowanie
C. Tworzenie kopii zapasowej legalnie zakupionego programu
D. Używanie programu typu open-source zgodnie z warunkami licencji
Poprawna odpowiedź. Publikowanie filmu chronionego prawami autorskimi bez zgody właściciela jest naruszeniem praw autorskich. Prawa autorskie chronią twórców przed nieuprawnionym kopiowaniem, dystrybucją i rozpowszechnianiem ich dzieł. W przypadku filmów, muzyki czy oprogramowania, każde użycie bez odpowiednich licencji lub zgody właściciela jest niezgodne z prawem. Twórcy mają prawo do wynagrodzenia za swoją pracę, a naruszenia mogą skutkować wysokimi grzywnami, a nawet postępowaniem sądowym. Przestrzeganie praw autorskich wspiera rozwój kultury i technologii, chroniąc interesy twórców.

Pytanie 9

Zapis w języku C# przedstawia definicję klasy Car, która:

public class Car: Vehicle { ... }
A. odziedzicza po VehicleTwoja odpowiedź
B. używa pól prywatnych klasy Vehicle
C. jest klasą podstawową (nie dziedziczy po innej klasie)
D. jest zaprzyjaźniona z klasą Vehicle
Poprawna odpowiedź. Słusznie, zapis public class Car : Vehicle { ... } w języku C# oznacza, że klasa Car dziedziczy po klasie Vehicle. To jest tak zwane dziedziczenie, jeden z fundamentalnych mechanizmów programowania obiektowego. Dzięki temu Car odzyskuje wszystkie publiczne i chronione (protected) człony klasy Vehicle, a dodatkowo może wprowadzać własne składowe albo nadpisywać metody bazowe. Przykładowo, jeśli Vehicle ma metodę Start(), to Car również ją posiada, chyba że ją nadpisze słówkiem override. Moim zdaniem, znajomość dziedziczenia ułatwia projektowanie czytelnych oraz rozszerzalnych systemów, zwłaszcza w większych projektach. W praktyce — jeśli tworzysz aplikację zarządzającą różnymi pojazdami, to możesz mieć np. klasę Vehicle z uniwersalnymi funkcjami i kilka pochodnych (takich jak Car, Truck, Motorcycle), co pozwala trzymać wspólną logikę w jednym miejscu. Warto pamiętać, że w C# jest tylko dziedziczenie pojedyncze jeśli chodzi o klasy (w przeciwieństwie do niektórych innych języków). To też zgodne z SOLID, gdzie jedna klasa powinna mieć jasno określoną odpowiedzialność. Ja często spotykam się z tym podejściem w kodzie produkcyjnym – porządek w strukturze to podstawa, a dziedziczenie bardzo w tym pomaga.

Pytanie 10

Która z poniższych technologii nie jest używana do tworzenia aplikacji mobilnych?

A. React Native
B. Kotlin
C. COBOLTwoja odpowiedź
D. Flutter
Poprawna odpowiedź. COBOL, czyli Common Business Oriented Language, jest językiem programowania opracowanym w latach 50. XX wieku, głównie do zastosowań w administracji i biznesie, takich jak systemy bankowe czy zarządzanie danymi. Nie jest on przeznaczony do tworzenia aplikacji mobilnych, które wymagają nowoczesnych technologii i frameworków dostosowanych do dynamicznego rozwoju rynku. W przeciwieństwie do Kotlin, React Native i Flutter, które są współczesnymi technologiami umożliwiającymi tworzenie aplikacji mobilnych, COBOL nie posiada narzędzi ani bibliotek, które wspierałyby rozwój aplikacji na systemy iOS czy Android. W praktyce, programiści wykorzystujący te nowoczesne technologie, mogą tworzyć aplikacje, które są responsywne i działają płynnie na różnych urządzeniach mobilnych, co znacząco wpływa na doświadczenia użytkowników. Warto zatem znać różnice między tymi technologiami, aby dobrze zrozumieć, jakie języki i narzędzia są adekwatne do danego projektu.

Pytanie 11

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

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

Pytanie 12

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. tablicaTwoja odpowiedź
B. drzewo binarne
C. stosPoprawna odpowiedź
D. kolejka FIFO
Niepoprawna odpowiedź. 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 13

Który z wymienionych składników jest charakterystyczny dla środowiska IDE przeznaczonego do tworzenia aplikacji mobilnych?

A. Edytor graficzny, narzędzia analityczne, klient FTP
B. Narzędzia do analizy danych, serwer webowy, przeglądarka internetowa
C. Edytor tekstowy, przeglądarka internetowa, system kontroli wersji
D. Kompilator, debugger, emulator urządzenia mobilnegoTwoja odpowiedź
Poprawna odpowiedź. Kompilator, debugger i emulator urządzenia mobilnego to podstawowe narzędzia w każdym środowisku IDE przeznaczonym do tworzenia aplikacji mobilnych. Kompilator jest odpowiedzialny za przekształcenie kodu źródłowego na plik wykonywalny, co pozwala na uruchomienie aplikacji na urządzeniu. Debugger umożliwia wykrywanie i eliminowanie błędów, co jest kluczowe dla prawidłowego działania aplikacji. Emulator pozwala na symulowanie działania aplikacji na różnych urządzeniach i systemach, co ułatwia testowanie bez potrzeby fizycznego dostępu do wielu modeli telefonów czy tabletów. Taki zestaw narzędzi jest standardem w Android Studio, XCode oraz Visual Studio, co umożliwia pełen cykl tworzenia aplikacji mobilnych – od kodowania, przez testowanie, aż po wdrażanie.

Pytanie 14

Co będzie wynikiem działania poniższego kodu JavaScript?

const obj = {
  name: 'John',
  greet: function() {
    setTimeout(function() {
      console.log(`Hello, ${this.name}`);
    }, 1000);
  }
};
obj.greet();
A. Hello, undefinedTwoja odpowiedź
B. TypeError
C. Hello, null
D. Hello, John
Poprawna odpowiedź. Wynik działania tego kodu to `Hello, undefined`, co jest spowodowane tym, jak działa kontekst `this` w JavaScript. Gdy wywołujemy metodę `greet`, w kontekście tej metody `this` odnosi się do obiektu `obj`. Proszę zauważyć, że metoda `greet` używa funkcji anonimowej w `setTimeout`, a to zmienia kontekst `this`. W momencie, gdy `setTimeout` wywołuje funkcję, `this` nie odnosi się już do obiektu `obj`, lecz do globalnego obiektu (w przeglądarkach jest to `window`), gdzie `name` nie jest zdefiniowane. Dlatego w konsoli widzimy `Hello, undefined`. Takie zachowanie jest typowe dla JavaScript, więc warto zrozumieć, jak można to zmienić, np. używając funkcji strzałkowej (`() => {}`), która nie ma własnego kontekstu `this`, więc po prostu korzysta z kontekstu otaczającego. Użycie strzałek w takich przypadkach jest coraz częściej zalecane w nowoczesnym kodzie.

Pytanie 15

Jakie jest fundamentalne zagadnienie w projektowaniu aplikacji w architekturze klient-serwer?

A. Użycie serwera jako głównego miejsca przetwarzania danychTwoja odpowiedź
B. Funkcjonowanie aplikacji wyłącznie w trybie offline
C. Przeniesienie wszystkich obliczeń na stronę klienta
D. Brak podziału na role klienta i serwera
Poprawna odpowiedź. Użycie serwera jako centralnego miejsca przetwarzania danych jest kluczowym elementem architektury klient-serwer. Serwer pełni rolę centralnego punktu, który zarządza żądaniami klientów, przechowuje dane i zapewnia odpowiedzi na zapytania. Taki model zapewnia większe bezpieczeństwo danych, ułatwia zarządzanie zasobami i umożliwia skalowanie aplikacji w miarę wzrostu liczby użytkowników. Architektura klient-serwer jest szeroko stosowana w aplikacjach webowych, systemach bankowych oraz usługach chmurowych, gdzie konieczna jest centralizacja danych i ich ochrona.

Pytanie 16

Jaki będzie rezultat operacji logicznej AND dla wartości binarnych 1010 oraz 1100?

A. 1000Twoja odpowiedź
B. 1100
C. 1010
D. 1110
Poprawna odpowiedź. Wynik logicznej operacji AND dla liczb binarnych 1010 i 1100 uzyskuje się poprzez porównywanie odpowiadających sobie bitów obu liczb. W systemie binarnym, operacja AND zwraca 1 tylko wtedy, gdy oba bity są równe 1. W przypadku liczb 1010 (co w systemie dziesiętnym odpowiada 10) oraz 1100 (co w systemie dziesiętnym odpowiada 12), analizujemy każdy bit od prawej do lewej. Pierwszy bit: 0 AND 0 = 0, drugi bit: 1 AND 0 = 0, trzeci bit: 0 AND 1 = 0, czwarty bit: 1 AND 1 = 1. Zatem wynik operacji AND to 1000 (co w systemie dziesiętnym odpowiada 8). Takie operacje logiczne są podstawą działania systemów cyfrowych i stosowane są w programowaniu oraz w projektowaniu układów cyfrowych, gdzie logika binarna jest niezbędna. Operacje AND są również używane w bazach danych oraz w językach programowania, gdzie umożliwiają filtrowanie danych na podstawie logicznych warunków. W kontekście standardów, operacje logiczne są definiowane przez różne normy, takie jak IEEE 754 dla arytmetyki zmiennoprzecinkowej, co podkreśla ich fundamentalne znaczenie w informatyce.

Pytanie 17

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

A. Iteracyjne wprowadzanie modyfikacji na każdym poziomie
B. Zakończenie jednej fazy przed rozpoczęciem następnejTwoja odpowiedź
C. Równoległe prowadzenie wielu etapów projektu
D. Przeprowadzanie testów systemu po zakończeniu każdej fazy
Poprawna odpowiedź. 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 18

Co to jest JWT (JSON Web Token)?

A. Protokół transferu plików JSON między serwerami
B. Otwarty standard do bezpiecznego przekazywania danych w formacie JSONTwoja odpowiedź
C. Format kompresji danych JavaScript i HTML w aplikacjach webowych
D. Biblioteka JavaScript do manipulacji danymi JSON
Poprawna odpowiedź. JWT (JSON Web Token) to otwarty standard, który pozwala na bezpieczne przesyłanie danych między stronami jako obiekt JSON. Token ten składa się z trzech części: nagłówka (header), ładunku (payload) oraz podpisu (signature). Nagłówek określa typ tokenu i używany algorytm szyfrowania, ładunek zawiera dane, które chcemy przekazać, a podpis zapewnia integralność i autentyczność danych. JWT jest powszechnie wykorzystywany w autoryzacji i wymianie informacji między serwerem a klientem, na przykład w aplikacjach webowych, gdzie po zalogowaniu użytkownik otrzymuje token, który może być użyty do uzyskania dostępu do chronionych zasobów. Dzięki temu mechanizmowi, serwer nie musi przechowywać sesji, co zwiększa jego wydajność. Ważnym aspektem JWT jest jego bezstanowość oraz możliwość łatwego skalowania aplikacji, co czyni go popularnym rozwiązaniem w architekturze mikroserwisów. Dobrą praktyką jest stosowanie JWT w połączeniu z HTTPS, aby zapewnić dodatkową warstwę bezpieczeństwa przy przesyłaniu tokenów.

Pytanie 19

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 15Twoja odpowiedź
B. Error: niewłaściwa składnia
C. Suma x i y wynosi 15
D. Suma 5 i 10 wynosi x + y
Poprawna odpowiedź. 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 20

Aplikacje webowe stworzone z użyciem frameworka Angular lub biblioteki React, działające na standardowych portach, można uruchomić na lokalnym serwerze, wpisując w przeglądarkę

A. localhost:8000 (React) lub localhost:49887 (Angular)
B. localhost:3000 (React) lub localhost:4200 (Angular)Poprawna odpowiedź
C. localhost:5001 (React) lub localhost:8080 (Angular)
D. localhost:8080 (React) lub localhost:8000 (Angular)Twoja odpowiedź
Niepoprawna odpowiedź. W branży webowej bardzo łatwo się pogubić z numeracją portów, szczególnie kiedy pracuje się na różnych frameworkach i narzędziach. Częstym błędem jest założenie, że React i Angular korzystają z jakichś uniwersalnych albo zamiennych portów, ale w rzeczywistości te frameworki mają swoje domyślne ustawienia, które są szeroko przyjęte. Przykładowo, React – głównie dzięki create-react-app – zazwyczaj startuje na porcie 3000. Angular natomiast, kiedy uruchamiasz ng serve, domyślnie pojawia się na porcie 4200. Błędne wybranie portu 8000 czy 8080 może wynikać z przyzwyczajeń z pracy z serwerami backendowymi, gdzie te porty rzeczywiście są popularne (np. Pythonowy SimpleHTTPServer czy serwery Node.js, które często startuje się na 8080). Jednak w środowisku front-endu, szczególnie przy pracy z Reactem czy Angularem, te porty są raczej rzadkością, chyba że ktoś zmieni konfigurację ręcznie. Port 49887 czy 5001 to już kompletnie przypadkowe wartości – takich numerów nie spotyka się w domyślnych ustawieniach żadnego z tych narzędzi i ich wybór byłby naprawdę nietypowy. Zdarza się, że ktoś zapamięta porty z innych technologii albo środowisk i potem próbuje je stosować przy frameworkach front-endowych – to jest taki typowy błąd myślowy. Warto też pamiętać, że wpisanie niewłaściwego portu w przeglądarce po prostu nie uruchomi aplikacji, co może prowadzić do niepotrzebnej frustracji. Kluczowe jest więc, żeby znać te standardowe adresy: React na 3000, Angular na 4200. Taka wiedza oszczędza sporo czasu i pozwala uniknąć nieporozumień podczas pracy zespołowej. W sumie, jak dla mnie, dobrze jest zawsze na początku sprawdzić w dokumentacji narzędzia, na jakim porcie ono działa domyślnie – to niby drobiazg, a potrafi ułatwić życie.

Pytanie 21

Która z metod zarządzania projektami stawia na przejrzystość oraz wizualizację bieżących zadań?

A. Agile
B. KanbanTwoja odpowiedź
C. Scrum
D. Waterfall
Poprawna odpowiedź. Kanban to metodologia zarządzania projektami, która kładzie nacisk na transparentność i wizualizację pracy w toku (work in progress). Tablica Kanban, podzielona na kolumny oznaczające różne etapy realizacji zadań, pozwala na bieżąco śledzić postęp prac i identyfikować ewentualne blokady. Transparentność procesów umożliwia zespołowi optymalizację przepływu zadań i minimalizację zaległości. W Kanbanie ważna jest elastyczność i możliwość dostosowywania liczby zadań w toku (WIP), co pozwala na uniknięcie przeciążenia zespołu i zwiększenie produktywności.

Pytanie 22

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

A. Obowiązek zamieszczenia publicznych przeprosin
B. Nałożenie grzywny lub kary więzieniaTwoja odpowiedź
C. Unieważnienie umowy licencyjnej użytkownika końcowego
D. Zakaz korzystania z oprogramowania open-source
Poprawna odpowiedź. Naruszenie prawa autorskiego może skutkować nałożeniem grzywny lub karą więzienia. W zależności od skali naruszenia oraz obowiązujących przepisów, osoba odpowiedzialna za naruszenie może zostać pociągnięta do odpowiedzialności karnej lub cywilnej. Kary mogą obejmować nie tylko grzywny finansowe, ale także konieczność wypłaty odszkodowań na rzecz twórcy lub właściciela praw autorskich. W niektórych przypadkach naruszenie praw autorskich na dużą skalę może prowadzić do kary pozbawienia wolności, co podkreśla wagę przestrzegania przepisów o ochronie własności intelektualnej.

Pytanie 23

Co należy zrobić w sytuacji silnego krwawienia z rany?

A. Nałożyć elastyczny bandaż bez ucisku
B. Poczekać, aż krwawienie ustanie samoistnie
C. Założyć opatrunek uciskowy oraz unieść kończynę powyżej poziomu sercaTwoja odpowiedź
D. Przepłukać ranę wodą utlenioną i zostawić do wyschnięcia
Poprawna odpowiedź. Założenie opatrunku uciskowego i uniesienie kończyny powyżej poziomu serca to najskuteczniejszy sposób na zatrzymanie silnego krwotoku z rany. Opatrunek uciskowy powoduje mechaniczne zamknięcie naczyń krwionośnych, co spowalnia lub całkowicie zatrzymuje wypływ krwi. Podniesienie kończyny dodatkowo zmniejsza ciśnienie krwi w obszarze rany, co ogranicza krwawienie. Ważne jest, aby nie zdejmować opatrunku, nawet jeśli przesiąknie krwią – należy dołożyć kolejną warstwę materiału. W sytuacjach ekstremalnych, gdy opatrunek uciskowy nie zatrzymuje krwawienia, można zastosować opaskę uciskową (tzw. stazę), ale tylko w ostateczności, gdy inne metody zawiodą. Takie działania mogą zapobiec wstrząsowi krwotocznemu i uratować życie poszkodowanego.

Pytanie 24

Które z wymienionych działań, które są częścią procesu kreowania prostej galerii zdjęć w formie aplikacji mobilnej, powinno być realizowane przez zespół?

A. Stworzenie dokumentacji kodu aplikacjiPoprawna odpowiedź
B. Przygotowanie i konfiguracja repozytorium dla projektuTwoja odpowiedź
C. Wdrożenie funkcji dodajZdjecie()
D. Przygotowanie testu jednostkowego dla funkcji przegladajZdjecia()
Niepoprawna odpowiedź. Pozostałe odpowiedzi są zadaniami, które w większości przypadków mogą być realizowane indywidualnie, co czyni je zadaniami jednostkowymi. Implementacja funkcji dodajZdjecie() dotyczy konkretnego aspektu programistycznego, który może być wykonany przez jednego dewelopera. Wymaga ona znajomości języka programowania oraz logiki potrzebnej do dodawania zdjęć do galerii, co zazwyczaj nie wymaga współpracy z innymi członkami zespołu. Przygotowanie i skonfigurowanie repozytorium dla projektu natomiast to techniczny proces, który również najczęściej realizuje jedna osoba, odpowiedzialna za ustawienie środowiska pracy. Tworzenie testu jednostkowego dla funkcji przegladajZdjecia() to kolejny krok, który można wykonać samodzielnie, koncentrując się na testowaniu konkretnej funkcji w izolacji, bez potrzeby angażowania innych programistów. W przypadku tych zadań, choć mogą one być częścią większego projektu, to ich realizacja nie wymaga współpracy zespołowej, co sprawia, że nie są to zadania zespołowe.

Pytanie 25

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. Error: niewłaściwa składnia
B. Suma 5 i 10 wynosi 15Twoja odpowiedź
C. Suma x i y wynosi 15
D. Suma 5 i 10 wynosi x + y
Poprawna odpowiedź. 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 26

Jaką instrukcję należy wykorzystać do poprawnej deklaracji zmiennej typu string w C++?

A.
string name = "Jan"
Twoja odpowiedź
B.
float name = "Jan"
C.
bool name = "Jan"
D.
int name = "Jan"
Poprawna odpowiedź. Ta deklaracja 'string name = "Jan"' to naprawdę dobry sposób na zdefiniowanie zmiennej łańcuchowej w C++. Wiesz, 'string' to typ danych, 'name' to nazwa tej zmiennej, a 'Jan' to wartość, która jest jej przypisana. Typ 'string' jest częścią biblioteki <string> i daje nam wiele możliwości, gdy pracujemy z tekstem. Możemy łączyć, porównywać i modyfikować różne łańcuchy znaków bez większego problemu. To jest mega ważne w aplikacjach, które mają do czynienia z danymi tekstowymi, interfejsami użytkownika czy analizą danych, które wprowadzamy.

Pytanie 27

Jaką strukturę danych można zrealizować, korzystając jedynie z wymienionych poniżej 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. stosPoprawna odpowiedź
B. drzewo binarne
C. kolejka
D. tablicaTwoja odpowiedź
Niepoprawna odpowiedź. Pomyłka przy tym pytaniu jest dość zrozumiała, bo wiele osób myli dostępne operacje ze strukturą, którą zamierzają użyć. Metody push, pop, peek i isEmpty wskazują wyraźnie na stos, jednak nietrudno ulec wrażeniu, że można je zastosować także w tablicy czy nawet kolejce. Problem w tym, że tablica daje bezpośredni dostęp do dowolnego elementu (indeksowanie), a tych operacji tutaj nie mamy — bez get(index) czy set(index, value) nie da się użyć jej w typowy sposób, więc zamienia się bardziej w zwykły pojemnik, niż prawdziwą tablicę. Kolejka natomiast wymaga operacji typu enqueue (dodanie na koniec) i dequeue (usunięcie z początku), czyli tzw. FIFO (First-In-First-Out), czego tutaj nie zrealizujesz samymi push i pop - one zawsze odnoszą się do końca struktury, nie do jej początku. Drzewo binarne to już zupełnie inna para kaloszy: wymaga rozbudowanych operacji na węzłach i gałęziach, a dostępne tu metody nawet nie zbliżają się do tego typu funkcjonalności — nie ma dodawania dzieci, przeszukiwania czy sprawdzania położenia w strukturze. Typowym błędem jest też utożsamianie samych nazw operacji z ogólną strukturą danych, bez zastanowienia się, jaki dokładnie model dostępu do danych one umożliwiają. Warto zapamiętać, że jeśli dostępne masz tylko push, pop, peek i isEmpty, to jesteś w świecie stosu - i tylko jego.

Pytanie 28

Jaką strukturę danych obrazuje zamieszczony kod w języku C#?

int[,] array = new int[3, 3];
A. tablicę jednowymiarową
B. tablicę dwuwymiarowąTwoja odpowiedź
C. stos
D. listę
Poprawna odpowiedź. Kod, który widzisz, tworzy tablicę dwuwymiarową w języku C#. Zapis int[,] array = new int[3, 3]; oznacza, że deklarujesz strukturę, gdzie każdy element jest dostępny przez dwa indeksy – pierwszy wskazuje wiersz, drugi kolumnę. Tablice dwuwymiarowe są bardzo popularne przy przechowywaniu macierzy, plansz w grach (na przykład szachownicy czy sudoku), a nawet obrazów, gdzie każdy piksel opisuje się przez współrzędne. Moim zdaniem, znajomość takich struktur naprawdę ułatwia tworzenie bardziej złożonych algorytmów, bo niekiedy dostępu do danych nie da się zamknąć w jednej linii, tylko trzeba się poruszać w dwóch wymiarach. Jeżeli chodzi o dobre praktyki, to warto pamiętać, że tablica dwuwymiarowa w .NET jest strukturą "prostokątną", czyli każdy wiersz ma tyle samo kolumn – coś jak klasyczna tabela w Excelu. To różni się od tzw. tablic tablic (ang. jagged arrays), które pozwalają mieć nierówną liczbę elementów w wierszach, ale to już trochę inna bajka. W twoim przykładzie stworzyłeś tablicę o rozmiarze 3x3, czyli 9 elementów, do których odwołujesz się za pomocą array[wiersz, kolumna]. Może się to wydawać proste, ale z mojego doświadczenia to właśnie takie zrozumienie podstawowych konstrukcji pozwala pisać czytelny i wydajny kod. W branży często spotyka się sytuacje, gdzie optymalizacja działania na tablicach – zwłaszcza tych dwuwymiarowych – robi różnicę, więc warto to mieć dobrze opanowane.

Pytanie 29

Który z etapów umożliwia zwiększenie efektywności aplikacji przed jej wydaniem?

A. Optymalizacja koduTwoja odpowiedź
B. Dodawanie komentarzy do kodu
C. Tworzenie interfejsu graficznego
D. Testowanie jednostkowe
Poprawna odpowiedź. Optymalizacja kodu to kluczowy etap poprawy wydajności aplikacji przed jej publikacją. Polega na eliminacji zbędnych operacji, poprawie algorytmów oraz minimalizacji użycia zasobów, co pozwala na szybsze działanie aplikacji i zmniejszenie jej zapotrzebowania na pamięć. Optymalizacja kodu obejmuje również refaktoryzację, czyli przekształcenie kodu w bardziej czytelną i efektywną formę bez zmiany jego funkcjonalności. Dzięki optymalizacji aplikacje działają płynniej, szybciej się ładują i oferują lepsze doświadczenie użytkownika, co ma kluczowe znaczenie dla SEO oraz pozycjonowania aplikacji w wyszukiwarkach. Dodatkowo, zoptymalizowany kod jest łatwiejszy w utrzymaniu i rozwijaniu, co przekłada się na długoterminowe korzyści dla zespołu deweloperskiego.

Pytanie 30

Jakie są różnice między typem łańcuchowym a typem znakowym?

A. Typ łańcuchowy przechowuje pojedyncze znaki, a znakowy długie ciągi znaków
B. Typ znakowy przechowuje pojedyncze znaki, a łańcuchowy ciągi znakówTwoja odpowiedź
C. Typ znakowy przechowuje dane logiczne, a łańcuchowy tekst
D. Typ łańcuchowy obsługuje liczby całkowite, a znakowy liczby zmiennoprzecinkowe
Poprawna odpowiedź. Typ znakowy (char) przechowuje pojedyncze znaki, natomiast typ łańcuchowy (string) przechowuje ciągi znaków. Różnica ta ma kluczowe znaczenie w programowaniu, ponieważ typ 'char' jest używany do operacji na pojedynczych literach, cyfrze lub symbolu, podczas gdy 'string' umożliwia przechowywanie i manipulowanie całymi wyrazami lub zdaniami. W wielu językach 'string' to bardziej złożona struktura danych, która zawiera tablicę znaków (array of characters), co pozwala na efektywną pracę z tekstem i budowanie interaktywnych aplikacji.

Pytanie 31

Która z operacji logicznych zwróci wartość "true", gdy obie zmienne są sobie równe?

A.
x || y
B.
x != y
C.
x == y
Poprawna odpowiedź
D.
x && y
Twoja odpowiedź
Niepoprawna odpowiedź. Operator `x && y` to operator logiczny `AND`, który zwraca `true` tylko wtedy, gdy zarówno `x`, jak i `y` są prawdziwe (różne od zera). Operator `x || y` to operator `OR`, który zwraca `true`, jeśli przynajmniej jedna z wartości jest prawdziwa. Operator `x != y` to operator nierówności, który zwraca `true`, jeśli wartości `x` i `y` są różne. Żaden z tych operatorów nie służy do porównywania równości dwóch wartości w taki sposób jak `==`.

Pytanie 32

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

A. Zmienna lokalna wewnątrz danej klasyTwoja odpowiedź
B. Pole lub metoda, która jest przypisana do klasy, a nie do jej instancjiPoprawna odpowiedź
C. Funkcja, która wywołuje destruktor danej klasy
D. Metoda z dostępem ograniczonym tylko do tej samej klasy
Niepoprawna odpowiedź. Metoda z dostępem ograniczonym do tej samej klasy to przykład modyfikatora `private`, a nie cecha składnika statycznego. Funkcja wywołująca destruktor nie jest statycznym składnikiem klasy – destruktory są specyficzne dla każdej instancji obiektu. Zmienna lokalna wewnątrz klasy to zmienna zadeklarowana w metodzie klasy i istnieje tylko w czasie jej wykonywania, co różni się od pól statycznych, które są trwałe i współdzielone przez wszystkie obiekty danej klasy. Składniki statyczne odnoszą się do klasy jako całości, a nie do pojedynczych instancji.

Pytanie 33

Sposób deklaracji Klasa2 wskazuje, że

W C++ i C#:
class Klasa2 : Klasa1
W Java:
class Klasa2 extends Klasa1
W Python:
class Klasa2(Klasa1):
A. Klasa1 jest dzieckiem Klasy2
B. Klasa1 dziedziczy od Klasa2
C. Klasa2 stanowi klasę bazową
D. Klasa2 dziedziczy od Klasa1Twoja odpowiedź
Poprawna odpowiedź. Deklaracja Klasa2 jako klasy dziedziczącej po Klasa1 oznacza, że Klasa2 przejmuje wszystkie publiczne i chronione (protected) pola oraz metody klasy bazowej (Klasa1). Dziedziczenie to jeden z filarów programowania obiektowego, który umożliwia ponowne wykorzystanie kodu i rozszerzanie funkcjonalności istniejących klas. Dzięki temu Klasa2 może nie tylko korzystać z metod Klasa1, ale także nadpisywać je, co jest kluczowe dla implementacji polimorfizmu. Dziedziczenie pozwala na budowanie hierarchii klas, co prowadzi do lepszego zarządzania kodem i ułatwia jego skalowalność. Przykładem może być klasa Pojazd, z której dziedziczy klasa Samochod, rozszerzając jej funkcjonalność o dodatkowe cechy i metody specyficzne dla samochodów.

Pytanie 34

Jaką rolę pełni element statyczny w klasie?

A. Ogranicza dostęp do metod publicznych w klasie
B. Automatycznie likwiduje obiekty klasy po zakończeniu działania programu
C. Pozwala na dynamiczne dodawanie nowych metod
D. Zachowuje wspólną wartość dla wszystkich instancji tej klasyTwoja odpowiedź
Poprawna odpowiedź. Składnik statyczny klasy przechowuje wartości współdzielone przez wszystkie obiekty tej klasy. Jest to jedno z najbardziej efektywnych narzędzi w programowaniu obiektowym, pozwalające na ograniczenie zużycia pamięci oraz zapewnienie spójności danych. Główna rola składnika statycznego polega na utrzymaniu jednej kopii zmiennej lub metody, która jest dostępna niezależnie od liczby instancji klasy. To oznacza, że zmiana wartości składowej statycznej jest natychmiast widoczna dla wszystkich obiektów klasy. Przykładem jest licznik instancji klasy lub konfiguracja globalna aplikacji, gdzie statyczność pozwala na scentralizowanie danych i ich jednolite zarządzanie.

Pytanie 35

Który z objawów może sugerować zawał serca?

A. Gorączka oraz dreszcze
B. Intensywny ból w klatce piersiowej promieniujący do lewej rękiTwoja odpowiedź
C. Spadek nastroju
D. Ból brzucha po spożyciu posiłku
Poprawna odpowiedź. Silny ból w klatce piersiowej promieniujący do lewej ręki to klasyczny objaw zawału serca (ostrego zespołu wieńcowego). Ból ten często pojawia się nagle, jest intensywny, gniotący lub piekący i może towarzyszyć mu duszność, zawroty głowy, zimne poty i nudności. Zawał serca wynika z zablokowania jednej z tętnic wieńcowych, co prowadzi do niedokrwienia mięśnia sercowego. Szybka reakcja i wezwanie pomocy medycznej mogą uratować życie i zminimalizować uszkodzenia serca. Każda minuta jest kluczowa – nie należy czekać na ustąpienie objawów, lecz natychmiast zadzwonić na numer alarmowy 112 lub udać się do najbliższego szpitala.

Pytanie 36

Jaką rolę pełni debugger w trakcie programowania?

A. Do konwersji kodu źródłowego na język maszynowy
B. Do automatycznego generowania dokumentacji projektu
C. Do wykrywania błędów w czasie działania programuTwoja odpowiedź
D. Do kontrolowania wersji kodu źródłowego
Poprawna odpowiedź. Debugger to takie narzędzie, które pomaga programistom w znajdowaniu błędów i śledzeniu, co się dzieje z programem, kiedy go uruchamiamy. Można go zatrzymać w dowolnym momencie, co nazywamy breakpoints, i wtedy można zobaczyć, jakie zmienne mają jakie wartości. Dzięki temu można łatwiej dostrzegać błędy logiczne czy składniowe. Wydaje mi się, że to naprawdę ważne narzędzie w pracy każdego programisty, bo ułatwia życie!

Pytanie 37Strzał

Jakie informacje zawiera zestaw instrukcji (ISA) danego procesora?

A. Układ połączeń między procesorem a innymi elementamiTwoja odpowiedź
B. Typy danych, które są trzymane w pamięci
C. Metodę obsługi pamięci podręcznej
D. Instrukcje, które procesor jest w stanie wykonaćPoprawna odpowiedź
Niepoprawna odpowiedź. Rodzaje danych, które są trzymane w pamięci, nie są bezpośrednio powiązane z zestawem instrukcji procesora. ISA skupia się bardziej na tym, co procesor może zrobić, a nie na tym, jak dane są zorganizowane w pamięci. Przechowywanie danych to bardziej kwestia zarządzania pamięcią, a nie samej architektury instrukcji. A jeśli chodzi o pamięć podręczną, to już całkiem inna sprawa, bo to dotyczy tego, jak przechowujemy i uzyskujemy dostęp do danych. W tym przypadku mówi się o algorytmach i strategiach, które działają w architekturze procesora, ale nie są częścią zestawu instrukcji. I jeszcze schemat połączeń między procesorem a innymi częściami komputera też nie wchodzi w skład ISA. To już dotyczy całej architektury systemu i tego, jak różne elementy, jak pamięć czy urządzenia wejścia/wyjścia, współpracują ze sobą. Wszystko to jest istotne dla działania systemu komputerowego, ale nie definiuje zestawu instrukcji, który jest kluczowy, żeby procesor mógł przetwarzać dane i robić obliczenia.

Pytanie 38

Aby tworzyć aplikacje desktopowe w języku Java, można wybrać jedno z poniższych środowisk

A. PyCharm
B. SharpDevelop
C. Ms Visual Studio
D. NetBeansTwoja odpowiedź
Poprawna odpowiedź. NetBeans to środowisko IDE, które od lat jest mocno kojarzone z programowaniem w Javie, szczególnie jeśli chodzi o tworzenie aplikacji desktopowych. Moim zdaniem to jedno z wygodniejszych narzędzi dla osób, które chcą się na poważnie zabrać za GUI z użyciem Swinga, JavaFX czy nawet starszego AWT. NetBeans posiada wbudowany kreator graficznych interfejsów użytkownika – to tzw. Matisse, który naprawdę upraszcza projektowanie okienek, przycisków czy pól tekstowych. No i nie trzeba się męczyć z ręcznym ustawianiem każdego komponentu w kodzie – wystarczy przeciągnąć i upuścić. To narzędzie od zawsze stawiało na wsparcie dla Javy: podpowiadanie kodu, debugging, zarządzanie bibliotekami czy automatyczna kompilacja… wszystko tu działa od ręki. W praktyce NetBeans wykorzystywany jest zarówno przez początkujących, jak i przez doświadczonych programistów, bo ułatwia utrzymanie dużych projektów. Przykład z życia: wiele aplikacji administracyjnych, narzędziowych czy nawet systemów do zarządzania firmą powstało właśnie przy użyciu NetBeansa i JavaFX. Co ciekawe, środowisko wspiera też inne języki, ale jego rdzeń zawsze był skupiony na Javie. W branży uważa się, że korzystanie z NetBeansa to dobra praktyka, bo pozwala na szybkie prototypowanie interfejsów i jest zgodny ze standardami Java Enterprise. Jeśli chcesz budować desktopowe aplikacje w Javie – nie ma co się długo zastanawiać, NetBeans jest naprawdę solidnym wyborem.

Pytanie 39

Który z poniższych przypadków stanowi test niefunkcjonalny?

A. Sprawdzenie obsługi formularza rejestracji
B. Weryfikacja poprawności logowania użytkownika
C. Sprawdzenie działania przycisku
D. Testowanie wydajności aplikacji pod dużym obciążeniemTwoja odpowiedź
Poprawna odpowiedź. Testowanie wydajności aplikacji pod dużym obciążeniem to przykład testu niefunkcjonalnego. Jego celem jest ocena, jak aplikacja zachowuje się przy dużej liczbie użytkowników lub operacji jednocześnie. Testy te pozwalają na identyfikację wąskich gardeł i optymalizację kodu oraz infrastruktury serwerowej. W ramach testów obciążeniowych analizowane są parametry takie jak czas odpowiedzi, zużycie zasobów (CPU, RAM) oraz stabilność aplikacji w warunkach skrajnego obciążenia. Testowanie wydajności jest kluczowe w aplikacjach webowych, e-commerce oraz systemach o dużej liczbie transakcji, gdzie każdy przestój może generować straty finansowe i negatywnie wpływać na doświadczenia użytkownika.

Pytanie 40Strzał

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

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