Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Które z wymienionych stwierdzeń najtrafniej charakteryzuje WPF?

A. Framework umożliwiający zarządzanie urządzeniami IoT
B. Framework przeznaczony do budowy aplikacji stacjonarnych w systemie Windows
C. Biblioteka do obróbki danych w Pythonie
D. Framework przeznaczony do budowy aplikacji internetowych
No dobra, WPF to framework, którego używamy, żeby robić aplikacje na Windowsa. Jest częścią platformy .NET i super się nadaje do tworzenia ładnych interfejsów z użyciem XAML, co jest takim językiem, który pozwala na zaprojektowanie interfejsu. Dzięki WPF możemy korzystać z fajnych animacji i ogólnie mieć niezłe wizualizacje. W dodatku, wspiera model MVVM, co ułatwia rozdzielenie logiki aplikacji od tego, co widzi użytkownik. Także w wielu firmach, gdzie potrzebna jest zaawansowana grafika, WPF jest chętnie wykorzystywane.

Pytanie 2

Jakie z wymienionych narzędzi służy do testowania aplikacji?

A. Photoshop
B. Git
C. WordPress
D. Selenium
Selenium to potężne narzędzie do automatycznego testowania aplikacji webowych. Umożliwia ono symulowanie działań użytkownika na stronie internetowej, takich jak klikanie przycisków, wypełnianie formularzy czy nawigowanie po witrynie. Dzięki Selenium programiści mogą automatyzować testy funkcjonalne i regresyjne, co pozwala na szybkie wykrywanie błędów i sprawdzanie zgodności aplikacji z wymaganiami. Selenium obsługuje wiele języków programowania, takich jak Python, Java, C# czy JavaScript, co czyni je wszechstronnym narzędziem do testowania aplikacji webowych na różnych platformach i przeglądarkach. Jest to jedno z najważniejszych narzędzi w arsenale testerów oprogramowania i deweloperów dbających o jakość swoich produktów.

Pytanie 3

Które z wymienionych poniżej błędów podczas wykonywania programu można obsłużyć poprzez zastosowanie wyjątków?

A. Błąd w składni
B. Błąd kompilacyjny
C. Błąd dzielenia przez zero
D. Niekompatybilność typów danych w kodzie
Błędy składniowe są wykrywane na etapie kompilacji i nie mogą być obsługiwane za pomocą wyjątków – kompilator generuje komunikat o błędzie, zanim program zostanie uruchomiony. Błędy kompilacji, takie jak niezgodność typów danych, również są wychwytywane na etapie kompilacji i wymagają poprawienia kodu źródłowego. Wyjątki są przeznaczone do obsługi błędów, które występują w czasie wykonywania programu, a nie błędów wykrywanych przez kompilator. Dlatego obsługa błędów składniowych i kompilacyjnych wymaga innego podejścia niż mechanizm wyjątków.

Pytanie 4

Jakie cechy powinien posiadać skuteczny negocjator?

A. lojalność, nieśmiałość, uczciwość
B. intuicja, cierpliwość, asertywność
C. dobra reputacja, przekora, porywczość
D. asertywność, pesymizm, buta
Skuteczny negocjator powinien mieć zestaw cech, które pozwolą mu osiągać kompromisy, rozwiązywać konflikty i dążyć do korzystnych rozwiązań dla obu stron. Intuicja pozwala wyczuć nastroje rozmówcy, wychwycić niewerbalne sygnały i przewidywać możliwe zagrożenia czy okazje jeszcze zanim druga strona je wprost zasygnalizuje. Cierpliwość jest kluczowa, bo proces dochodzenia do porozumienia bywa żmudny, a presja czasu często prowadzi do pochopnych decyzji. Często miałem okazję obserwować, że ci, którzy potrafią zaczekać na ruch drugiej strony, zyskują przewagę negocjacyjną. Asertywność natomiast pozwala jasno wyrażać swoje oczekiwania i granice, bez agresji i bez uległości – to klasyka wśród dobrych praktyk negocjacyjnych, choć nadal niedoceniana w wielu branżach. Asertywność pomaga uniknąć niedomówień i manipulacji, a także buduje szacunek. W praktyce, na sali negocjacyjnej czy nawet przy codziennych rozmowach z klientami, zestaw tych trzech cech daje naprawdę mocną pozycję. Moim zdaniem nie ma jednego uniwersalnego szablonu, ale właśnie intuicja, cierpliwość i asertywność pojawiają się prawie zawsze w podręcznikach czy na szkoleniach dedykowanych profesjonalistom. Warto je ćwiczyć na co dzień, nawet poza pracą, bo to się po prostu opłaca.

Pytanie 5

Który fragment kodu ilustruje zastosowanie rekurencji?

Blok 1:
int fn(int a) {
  if(a==1) return 1;
  return fn(a-1)+2;
}
Blok 2:
int fn(int a) {
  if(a==1) return 1;
  return (a-1)+2;
}
Blok 3:
int fn(int a) {
  if(a==1) return 1;
  return fun(a-1)+2;
}
Blok 4:
int fn(int a) {
  if(a==1) return 1;
  return 2;
}
A. Blok 4
B. Blok 3
C. Blok 2
D. Blok 1
Blok 1 to typowy przykład rekurencji, czyli sytuacji, gdy funkcja wywołuje samą siebie z innym argumentem (tutaj fn(a-1)). Takie podejście pojawia się w programowaniu bardzo często, szczególnie przy rozwiązywaniu problemów, gdzie rozwiązanie można rozbić na mniejsze, podobne zadania. W Bloku 1 mamy tzw. przypadek bazowy (if(a==1) return 1), czyli moment, w którym dalsza rekurencja się zatrzymuje – bez tego każdy program rekurencyjny skończyłby się przepełnieniem stosu i błędem. Moim zdaniem, dobrze rozumiana rekurencja to jedna z podstaw algorytmiki – spotyka się ją choćby przy obliczaniu silni, ciągu Fibonacciego czy w algorytmach przeszukiwania struktur drzewiastych, np. w operacjach na drzewach binarnych. W praktyce branżowej warto wiedzieć, że rekurencja bywa bardzo elegancka i skraca kod, ale trzeba ją stosować z głową – łatwo przekroczyć limity stosu przy zbyt głębokim wywołaniu albo zapomnieć o przypadku bazowym, przez co program nie kończy działania. W standardach wielu języków (np. C, Java) rekurencja jest narzędziem jak każde inne, ale zawsze powinna być projektowana z myślą o czytelności i efektywności rozwiązania. Często spotykam się z sytuacją, gdzie początkujący próbują wszystko rozwiązywać rekurencyjnie, a to nie zawsze jest optymalne – niektóre problemy lepiej rozwiązać iteracyjnie, choćby ze względu na wydajność. W tym konkretnym kodzie zastosowanie rekurencji jest klasyczne i poprawne, więc zdecydowanie jest to dobry wzór do nauki.

Pytanie 6

Zgodnie z informacjami zawartymi w ramce, wskaż, który z rysunków ilustruje element przypisany do klasy Badge określonej w bibliotece Bootstrap?

Ilustracja do pytania
A. A
B. D
C. C
D. B
Wybrałeś wariant B i to zdecydowanie właściwy trop. Badge w Bootstrapie to nic innego jak taki mały, liczbowy wskaźnik – najczęściej widoczny przy nazwach kategorii, powiadomieniach czy komentarzach – który sygnalizuje użytkownikowi ile czegoś się pojawiło albo ile czeka akcji do wykonania. W praktyce, taki element to nie tylko liczba w kolorowym prostokącie czy kółku, ale też bardzo czytelny komunikat do użytkownika, co się ostatnio zmieniło lub co wymaga uwagi. Właśnie dlatego, w przykładzie B, mamy niebieskie prostokąty z liczbami przy różnych sekcjach (News, Comments, Updates) – to klasyczny przykład badge’a w Bootstrapie, często stylowanego klasą .badge i powiązaną kolorystyką. Warto zwrócić uwagę, że takie badge’e są nie tylko wizualne, ale też semantyczne – są rozpoznawalne przez czytniki ekranu, co jest zgodne z dobrymi praktykami dostępności (WCAG). Stosując badge’e, zwiększamy czytelność i dostępność interfejsu użytkownika, bo od razu wiadomo, gdzie coś nowego się pojawiło. Moim zdaniem, korzystanie z badge’y to jeden z prostszych i skuteczniejszych sposobów na poprawę UX – no i są bardzo łatwe do wdrożenia, wystarczy jedna klasa CSS i gotowe.

Pytanie 7

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

A. ==
B. in
C. is
D. and
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 8

Jakiego rodzaju zmiennej użyjesz w C++, aby przechować wartość "true"?

A. tekst
B. bool
C. liczba zmiennoprzecinkowa
D. liczba całkowita
Typ danych 'bool' w języku C++ jest przeznaczony do przechowywania wartości 'true' lub 'false'. Deklaracja 'bool isReady = true;' to przykład poprawnego przypisania wartości logicznej do zmiennej. Typ boolean jest kluczowy w warunkach decyzyjnych, pętlach i operacjach porównawczych. W programowaniu typ 'bool' jest wykorzystywany do kontroli przepływu programu, obsługi wyjątków oraz sprawdzania poprawności danych. Użycie booleanów w kodzie zwiększa jego czytelność i pozwala na bardziej przejrzyste budowanie logiki aplikacji.

Pytanie 9

Do czego służy operator spread (...) w JavaScript?

A. Do konwersji liczby na string
B. Do rozwinięcia tablicy lub obiektu na poszczególne elementy
C. Do łączenia dwóch różnych typów danych
D. Do sprawdzania typu danych
Operator spread (...) w JavaScript jest niezwykle użytecznym narzędziem, które pozwala na łatwe rozwijanie tablic i obiektów do ich poszczególnych elementów lub właściwości. Umożliwia to na przykład przekazywanie elementów tablicy jako argumentów do funkcji lub łączenie wielu obiektów w jeden. Przykładowo, jeśli mamy tablicę `const arr = [1, 2, 3];` to używając operatora spread, możemy przekazać te elementy do funkcji tak: `Math.max(...arr)`, co zwróci 3. Dodatkowo, operator ten jest często używany przy tworzeniu nowych obiektów na podstawie istniejących. Na przykład, mając obiekt `const obj = { a: 1, b: 2 };`, możemy stworzyć nowy obiekt z dodatkową właściwością: `const newObj = { ...obj, c: 3 };` co da `newObj = { a: 1, b: 2, c: 3 };`. Operator spread jest zgodny z ES6 i stał się standardem w praktykach programistycznych, ułatwiając pisanie czystszych i bardziej elastycznych kodów. Warto go stosować, aby poprawić czytelność i efektywność swojego kodu.

Pytanie 10

Jakie działanie powinno się wykonać w pierwszym kroku, oceniając stan osoby poszkodowanej?

A. Zadbać o własne bezpieczeństwo
B. Wezwać ambulans
C. Rozpocząć resuscytację krążeniowo-oddechową
D. Sprawdzić, czy występuje krwawienie
Właśnie o to chodzi — zadbanie o własne bezpieczeństwo jako pierwszy krok to fundament całej pierwszej pomocy i temat, który się często przecenia, a moim zdaniem jest kluczowy. Chodzi o to, że nawet najlepsze chęci nie mają sensu, jeśli ratujący sam staje się kolejną ofiarą. W praktyce oznacza to, że zanim podejdziesz do poszkodowanego, musisz się zastanowić, czy miejsce wypadku jest bezpieczne. Przykładowo na drodze – trzeba rozejrzeć się, czy nie nadjeżdżają inne samochody, zabezpieczyć teren (trójkąt ostrzegawczy, kamizelka odblaskowa). W przypadku porażenia prądem – odłączyć źródło napięcia. To wcale nie są banały; tego uczą na wszystkich kursach BLS (Basic Life Support) i w zasadzie każda książka ratownicza stawia to na pierwszym miejscu. Często się o tym zapomina, bo emocje biorą górę. Prawda jest taka, że każda akcja ratunkowa zaczyna się od sekundy refleksji: czy ja tu jestem bezpieczny? Dopiero później można oceniać stan poszkodowanego i dalej działać. W sumie jak się o tym pomyśli, to takie myślenie ratuje zdrowie nie tylko nam, ale i tym, którym chcemy pomóc — bo nie zwiększamy liczby poszkodowanych. Niektórym wydaje się, że od razu trzeba robić masaż serca czy wołać karetkę, ale bez oceny zagrożenia można narobić sobie i innym więcej problemów. Takie są realia pracy w terenie, nie tylko w teorii.

Pytanie 11

Która z poniższych technologii służy do tworzenia interfejsu użytkownika zarówno dla aplikacji webowych jak i mobilnych?

A. Angular
B. jQuery
C. React Native
D. Vue.js
React Native to framework stworzony przez Facebook, który pozwala na tworzenie natywnych aplikacji mobilnych przy użyciu JavaScriptu oraz React. Jego największą zaletą jest możliwość współdzielenia kodu pomiędzy aplikacjami mobilnymi a webowymi, co znacząco przyspiesza proces developmentu i redukuje koszty. React Native umożliwia wykorzystanie jednego kodu źródłowego do budowy aplikacji zarówno na systemy iOS, jak i Android, co jest idealnym rozwiązaniem w kontekście rosnącego zapotrzebowania na aplikacje wieloplatformowe. Framework ten korzysta z natywnych komponentów UI, co przekłada się na wysoką wydajność oraz natywne wrażenia użytkownika. Przykłady zastosowania React Native można znaleźć w popularnych aplikacjach, takich jak Instagram czy Airbnb, które z powodzeniem wykorzystują ten framework do tworzenia dynamicznych i responsywnych interfejsów. Dobre praktyki przy używaniu React Native obejmują optymalizację komponentów, stosowanie odpowiednich bibliotek do nawigacji oraz zarządzania stanem aplikacji.

Pytanie 12

Co to jest wzorzec projektowy Singleton?

A. Metoda zabezpieczania aplikacji przed atakami typu SQL Injection
B. Wzorzec do zarządzania komunikacją między komponentami aplikacji
C. Technika optymalizacji kodu poprzez minimalizację liczby obiektów
D. Wzorzec zapewniający istnienie tylko jednej instancji klasy w całej aplikacji
Wzorzec projektowy Singleton to jeden z fundamentalnych wzorców, który zapewnia, że w trakcie działania aplikacji istnieje tylko jedna instancja danej klasy. Przydaje się to w sytuacjach, gdy musimy zarządzać zasobami, które nie powinny być wielokrotnie instancjonowane, na przykład połączenia z bazą danych czy logika globalnych ustawień. Implementacja tego wzorca zakłada zastosowanie prywatnego konstruktora oraz metody statycznej, która odpowiada za utworzenie instancji. Przykładem zastosowania Singletona mogą być klasy zarządzające konfiguracją aplikacji, gdzie zmiana w jednym miejscu może wpłynąć na cały system. Często jest on krytykowany za to, że wprowadza globalny stan, co może prowadzić do trudności w testowaniu i zarządzaniu stanem aplikacji. Dlatego ważne jest, aby stosować go świadomie i tam, gdzie rzeczywiście przynosi korzyści, zgodnie z najlepszymi praktykami inżynieryjnymi.

Pytanie 13

Jaka jest składnia komentarza jednoliniowego w języku Python?

A. //
B. #
C. !
D. ""
Komentarz jednoliniowy w Pythonie zaczynamy od znaku hash, czyli #. To jest taki uniwersalny sposób na szybkie dodanie uwagi lub wyjaśnienia bez wpływu na działanie kodu. Moim zdaniem to bardzo praktyczne – wystarczy po prostu wpisać # i reszta linii jest ignorowana przez interpreter. W dużych projektach często spotyka się krótkie komentarze obok wyrażeń, np. x += 1 # inkrementacja liczby porządkowej. Co ciekawe, Python nie posiada stricte blokowych komentarzy, jak niektóre inne języki (np. /* ... */ w C lub Java), więc hashe naprawdę często się stosuje. To niesamowicie pomaga przy czytelności kodu, szczególnie gdy wracamy do własnych plików po kilku tygodniach albo pracujemy w zespole. PEP 8, czyli oficjalny przewodnik stylu Pythona, zaleca wręcz regularne używanie komentarzy do wyjaśniania „dlaczego” coś robimy, nie tylko „co” robimy. Dobrze napisany komentarz może skrócić czas szukania błędów albo tłumaczenia rozwiązań innym. Z mojego doświadczenia, warto pilnować, by komentarze nie były przestarzałe – łatwo zapomnieć o ich aktualizacji po zmianach w kodzie. Jeśli kiedyś napotkasz kod bez #, a z innymi znakami, to od razu czerwona lampka: to raczej nie jest Python.

Pytanie 14

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

A. Określają globalne stałe programu
B. Zawierają informacje opisujące stan obiektu
C. Zapisują wartości lokalne w funkcjach
D. Umożliwiają przeprowadzanie operacji na obiektach
Pola klasy w programowaniu obiektowym to zmienne, które przechowują dane opisujące stan obiektu. Każdy obiekt posiada swoje własne kopie pól, co oznacza, że różne instancje tej samej klasy mogą przechowywać różne wartości. Przykład w C++: `class Samochod { public: string marka; int przebieg; }`. Pola `marka` i `przebieg` przechowują informacje o konkretnym samochodzie. Pola są kluczowym elementem modelowania rzeczywistych obiektów i umożliwiają przechowywanie oraz modyfikowanie danych w trakcie działania programu. Mogą mieć różne poziomy dostępu (`public`, `private`), co pozwala na lepszą kontrolę nad danymi.

Pytanie 15

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

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

Pytanie 16

Co to jest lazy loading?

A. Algorytm kompresji obrazów w aplikacjach webowych
B. Technika optymalizacji polegająca na ładowaniu zasobów dopiero wtedy, gdy są potrzebne
C. Metoda przechowywania danych w pamięci podręcznej przeglądarki
D. Proces opóźnionego ładowania bibliotek JavaScript
Odpowiedź wskazująca na technikę optymalizacji polegającą na ładowaniu zasobów dopiero wtedy, gdy są one potrzebne, jest prawidłowa, ponieważ lazy loading skutecznie zwiększa wydajność aplikacji webowych. Ta metoda minimalizuje ilość danych przesyłanych na początku ładowania strony, co znacząco poprawia czas ładowania oraz doświadczenie użytkownika. Przykładowo, w przypadku stron z dużą ilością obrazów, lazy loading zapewnia, że grafiki są pobierane tylko wtedy, gdy zbliżają się do obszaru widocznego w przeglądarce. To podejście jest zgodne z najlepszymi praktykami optymalizacji wydajności, jak określone w dokumentach Web Performance Optimization. W praktyce często implementuje się lazy loading za pomocą różnych bibliotek JavaScript, takich jak Intersection Observer API, co pozwala na efektywne zarządzanie zasobami oraz ich asynchroniczne ładowanie. Dzięki temu aplikacje mogą działać bardziej responsywnie, co jest kluczowe w czasie, gdy użytkownicy oczekują szybkiej oraz płynnej interakcji ze stronami internetowymi.

Pytanie 17

Jakie są kluczowe etapy realizacji projektu programistycznego?

A. Planowanie, projektowanie, debugowanie, konserwacja
B. Analiza, implementacja, testowanie, aktualizacja
C. Projektowanie, testowanie, aktualizacja, implementacja
D. Planowanie, analiza, implementacja, wdrożenie
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 18

Który z komponentów interfejsu użytkownika umożliwia użytkownikowi wprowadzanie danych tekstowych?

A. Pole tekstowe
B. Przycisk
C. Pasek narzędziowy
D. Dialog wyboru pliku
Pole tekstowe to element interfejsu użytkownika, który pozwala użytkownikowi na wprowadzanie danych tekstowych. Jest to jeden z najczęściej używanych komponentów UI w aplikacjach desktopowych, mobilnych i webowych. Pole tekstowe umożliwia wprowadzanie haseł, adresów e-mail, wiadomości i innych danych. W nowoczesnych aplikacjach często zawiera walidację, która sprawdza poprawność wpisywanych danych w czasie rzeczywistym. Dzięki swojej elastyczności, pola tekstowe mogą być wykorzystywane w różnorodnych formularzach, ankietach i systemach rejestracji użytkowników, co czyni je nieodzownym elementem aplikacji o dowolnym przeznaczeniu.

Pytanie 19

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

A. Metoda, która działa wyłącznie dla statycznych pól danej klasy
B. Metoda, która może być przesłonięta w klasie dziedziczącej
C. Metoda, która może być wywoływana tylko przez klasę nadrzędną
D. Metoda, która jest zawsze stosowana w konstruktorach danej klasy
Metoda, która może być wywoływana tylko przez klasę bazową to raczej metoda prywatna lub chroniona, a nie wirtualna. Metody statyczne są związane z klasą, a nie z konkretnymi obiektami, więc nie można ich tak po prostu nadpisać w klasie pochodnej. A tak w ogóle, metody w konstruktorach zazwyczaj nie są wirtualne, bo wywołanie metod wirtualnych w konstruktorze może prowadzić do dziwnych rzeczy – w konstruktorze klasy bazowej składowe klasy pochodnej jeszcze nie są gotowe.

Pytanie 20

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

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success');
  }, 1000);
});

promise
  .then(res => {
    console.log(res);
    return 'first then';
  })
  .then(res => {
    console.log(res);
  });
A. success, first then
B. first then
C. success
D. first then, success
W przypadku błędnych odpowiedzi można zauważyć kilka typowych nieporozumień dotyczących działania obietnic w JavaScript. Odpowiedzi sugerujące, że najpierw zostanie wyświetlony 'first then' lub że będzie tylko jeden wynik, są wynikiem niezrozumienia, jak działa asynchroniczność oraz jak obietnice przetwarzają wyniki. Obietnice w JavaScript są zaprojektowane tak, aby zarządzać operacjami asynchronicznymi, co oznacza, że kod wewnątrz obietnicy nie blokuje wykonania innych operacji. W momencie, gdy obietnica jest utworzona, kod wykonuje się dalej, a funkcja `setTimeout` działa w tle. Gdy po upływie określonego czasu obietnica jest spełniona, następuje przekazanie wyniku do łańcucha `then`, a nie jakiegokolwiek innego miejsca w kodzie. To oznacza, że wyniki są zwracane w kolejności, w jakiej są zadeklarowane, co w tym przypadku prowadzi do wyświetlenia najpierw 'success', a potem 'first then'. Takie podejście do asynchroniczności jest fundamentalne w JavaScript, a jego zrozumienie jest kluczowe dla każdego programisty. Błędne odpowiedzi pochodzą często z mylnego przekonania, że wyniki obietnic są natychmiastowe lub że działają w tej samej kolejności, co kod synchroniczny. Dlatego ważne jest, aby zrozumieć, że asynchroniczność zmienia sposób, w jaki operacje są wykonywane i jak wyniki są zwracane.

Pytanie 21

Jakie wartości może przyjąć zmienna typu boolean?

A. 1, -1
B. O oraz każdą liczbę całkowitą
C. true, false
D. trzy dowolne liczby naturalne
Zmienna typu logicznego (boolowskiego) w językach programowania, takich jak C++, Java czy Python, może przyjmować tylko dwie wartości: true (prawda) oraz false (fałsz). Te wartości są fundamentalne w logice komputerowej, ponieważ umożliwiają podejmowanie decyzji oraz kontrolowanie przepływu programu poprzez struktury warunkowe, takie jak instrukcje if, while czy for. Na przykład, w języku Python, tworząc zmienną logiczną, możemy użyć operatorów porównania, aby określić, czy dwie wartości są równe: is_equal = (5 == 5), co ustawia is_equal na true. Zmienne logiczne są zdefiniowane w standardach programowania, takich jak IEEE 754 dla reprezentacji liczb zmiennoprzecinkowych, gdzie wartość logiczna jest kluczowa dla operacji porównawczych. Dobrze zrozumiana logika boolowska jest niezbędna dla programistów, ponieważ stanowi podstawę algorytmu decyzyjnego oraz wpływa na efektywność kodu.

Pytanie 22

Która z poniższych technologii jest używana do tworzenia interfejsów użytkownika w aplikacjach React?

A. XML
B. YAML
C. JSX
D. Markdown
JSX, czyli JavaScript XML, jest rozbudowanym rozszerzeniem składni JavaScript, które pozwala na pisanie kodu, który przypomina HTML. JSX jest kluczowym elementem w budowaniu interfejsów użytkownika w aplikacjach React, ponieważ łączy logikę z prezentacją. Dzięki JSX można tworzyć komponenty React w sposób bardziej intuicyjny i czytelny, co przyspiesza proces tworzenia aplikacji. Na przykład, zamiast używać funkcji `React.createElement()`, można po prostu zapisać komponent w formie znaczników, co sprawia, że kod jest bardziej zrozumiały. Dodatkowo, JSX umożliwia wstawianie kodu JavaScript bezpośrednio w znacznikach, co pozwala na dynamiczne renderowanie treści. Praktyka korzystania z JSX stała się standardem w ekosystemie React, ponieważ ułatwia zarządzanie stanem i właściwościami komponentów, co jest zgodne z najlepszymi praktykami branżowymi.

Pytanie 23

Jaka będzie zawartość zmiennej filteredItems po wykonaniu poniższego kodu?

const items = [
  { id: 1, name: 'phone', price: 500 },
  { id: 2, name: 'laptop', price: 1000 },
  { id: 3, name: 'tablet', price: 750 }
];

const filteredItems = items.filter(item => item.price > 600)
                          .map(item => item.name);
A. ['laptop', 'tablet', 'phone']
B. ['phone']
C. ['laptop', 'tablet']
D. [{id: 2, name: 'laptop', price: 1000}, {id: 3, name: 'tablet', price: 750}]
Zmienna filteredItems zawiera tylko te elementy, których cena jest większa niż 600. W tym przypadku w tablicy items mamy trzy obiekty: 'phone' z ceną 500, 'laptop' z ceną 1000 oraz 'tablet' z ceną 750. Funkcja filter przeszukuje tablicę items i zwraca tylko te obiekty, które spełniają warunek price > 600, co daje nam 'laptop' oraz 'tablet'. Następnie, metoda map przekształca te obiekty w tablicę ich nazw, co skutkuje finalnym wynikiem ['laptop', 'tablet']. Takie podejście do filtrowania danych i mapowania ich na inne wartości jest niezwykle przydatne w programowaniu, szczególnie w pracy z danymi, gdzie często potrzebujemy wyodrębnić i przekształcić dane w bardziej użyteczne formy. Użycie metod filter i map jest zgodne z najlepszymi praktykami w JavaScript i przyczynia się do bardziej czytelnego oraz zwięzłego kodu.

Pytanie 24

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

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

Pytanie 25

Wzorzec projektowy "Metoda szablonowa" (Template method) stosuje się do:

A. centralizacji zarządzania wieloma instancjami obiektów
B. organizowania obiektów w hierarchiczne struktury drzewiaste
C. gromadzenia obiektów w jednorodnej kolekcji
D. określenia szkieletu algorytmu i pozostawienia szczegółów implementacji dla podklas
Wzorzec projektowy 'Metoda szablonowa' to naprawdę sprytna sprawa, szczególnie w programowaniu obiektowym. Ten wzorzec pozwala zdefiniować ogólną strukturę algorytmu w klasie bazowej, a szczegóły implementacji przekazać do podklas. Brzmi jak coś z teorii, ale w praktyce często się przydaje, bo daje kontrolę nad przepływem działania algorytmu, nie tracąc elastyczności. To taki kompromis: masz szkielet (np. metoda w klasie abstrakcyjnej), ale nie zamykasz drogi na własne pomysły w podklasach. Typowym przykładem może być system obsługi płatności: cała procedura (np. przetwarzanie zamówienia) jest ustalona, ale poszczególne kroki typu 'autoryzuj', 'zrealizuj' czy 'zatwierdź' można nadpisywać. Daje to porządek i spójność kodu, a przy okazji nie zamyka na zmiany. Moim zdaniem, jeśli w projekcie pojawia się powtarzalny schemat postępowania, który tylko w detalach się różni, to Metoda szablonowa jest jednym z najczystszych rozwiązań. Warto pamiętać, że to podejście zgodne z zasadą Hollywood: „Don’t call us, we’ll call you” – to szkielet decyduje, kiedy wywołać szczegóły. Wielu seniorów poleca ten wzorzec, bo upraszcza utrzymanie i rozwijanie kodu, a IDE typu IntelliJ czy Visual Studio świetnie ogarniają takie abstrakcyjne klasy. Szczerze – w wielu firmach to po prostu standard.

Pytanie 26

Jak oddziaływanie monotonnego środowiska pracy może wpłynąć na organizm człowieka?

A. Zwiększenie odporności na stres
B. Obniżenie koncentracji oraz zwiększone ryzyko popełniania błędów
C. Poprawa kondycji fizycznej
D. Wzrost poziomu motywacji
Kiedy w pracy ciągle powtarzamy te same czynności, to może nas to naprawdę zniechęcać. Zauważyłem, że takie monotonne środowisko potrafi sprawić, że gorzej się skupiamy i łatwiej popełniamy błędy. Jeśli pracownicy cały czas robią to samo bez żadnych zmian, to szybko tracą zapał i nie są zadowoleni z tego, co robią. Moim zdaniem, warto czasem zmieniać zadania, żeby wprowadzić trochę świeżości i wyzwań. Dobrze jest też organizować przerwy, bo to pomaga nabrać energii oraz zadbać o fajną atmosferę w pracy.

Pytanie 27

Zalecenia standardu WCAG 2.0 dotyczące percepcji koncentrują się na

A. zrozumieniu i wiarygodności prezentowanych treści na stronie
B. prezentacji elementów interfejsu użytkownika
C. umożliwieniu interakcji między komponentami użytkownika za pomocą klawiatury
D. zapewnieniu odpowiedniej ilości czasu na przeczytanie i zrozumienie treści
Rekomendacje standardu WCAG 2.0 dotyczące percepcji koncentrują się na tym, jak użytkownicy postrzegają i interpretują treści na stronach internetowych, co obejmuje również komponenty interfejsu użytkownika. Standardy te nakładają obowiązek projektowania elementów interaktywnych w sposób, który umożliwia ich łatwe identyfikowanie i zrozumienie przez wszystkich użytkowników, w tym osoby z niepełnosprawnościami. Przykłady obejmują odpowiednie etykietowanie przycisków, stosowanie kontrastujących kolorów oraz zapewnienie wyraźnych granic dla interaktywnych elementów. Komponenty takie jak formularze, menu nawigacyjne czy przyciski akcji muszą być intuicyjnie zrozumiałe i łatwe w obsłudze. Odniesienia do standardów WCAG 2.0, szczególnie do wytycznych związanych z percepcją, podkreślają znaczenie dostosowania treści do różnych percepcyjnych sposobów odbioru, co jest kluczowe dla zapewnienia dostępności. Właściwe zastosowanie tych zasad sprzyja lepszej użyteczności, co przekłada się na pozytywne doświadczenia użytkowników.

Pytanie 28

Które narzędzie najlepiej nadaje się do analizy wydajności aplikacji JavaScript?

A. Webpack
B. npm
C. Chrome DevTools Performance
D. Babel
Chrome DevTools Performance to potężne narzędzie, które jest integralną częścią przeglądarki Google Chrome i służy do analizy wydajności aplikacji JavaScript. Dzięki niemu możemy monitorować czas ładowania, identyfikować wąskie gardła w kodzie oraz analizować, jak różne elementy strony wpływają na ogólną wydajność. Narzędzie to umożliwia nagrywanie sesji wydajności, co pozwala na szczegółowe zbadanie, jak różne operacje wpływają na czas odpowiedzi aplikacji. Przykładowo, możemy użyć DevTools do analizy, które skrypty zajmują najwięcej czasu lub które zadania blokują wątek główny, co jest kluczowe dla zapewnienia płynności interfejsu użytkownika. Dodatkowo, narzędzie to oferuje różne metryki, takie jak FPS (frames per second), co jest niezbędne do oceny płynności animacji. Warto również podkreślić, że DevTools jest zgodne z najlepszymi praktykami branżowymi, a jego umiejętne wykorzystanie może znacząco poprawić jakość aplikacji.

Pytanie 29

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

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

Pytanie 30

Który z poniższych przykładów stanowi aplikację mobilną wykorzystującą bazę danych?

A. Aplikacja wyświetlająca lokalny czas
B. Aplikacja gromadząca listę kontaktów użytkownika
C. Aplikacja kalkulator
D. Aplikacja do robienia zdjęć
Aplikacja przechowująca listę kontaktów użytkownika korzysta z bazy danych do przechowywania, odczytywania i zarządzania danymi. Tego typu aplikacje mobilne muszą efektywnie zarządzać dużą ilością danych i zapewniać ich szybki dostęp. Bazy danych, takie jak SQLite czy Firebase, są szeroko stosowane w aplikacjach mobilnych, umożliwiając przechowywanie kontaktów, wiadomości, notatek i innych informacji użytkownika. Dzięki bazom danych możliwe jest także synchronizowanie danych pomiędzy urządzeniami i przechowywanie ich w chmurze.

Pytanie 31

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

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

Pytanie 32

Jaki typ złośliwego oprogramowania funkcjonuje w tle, zbierając dane o wprowadzanych hasłach?

A. Spyware
B. Trojan
C. Adware
D. Keylogger
Keylogger to takie złośliwe oprogramowanie, które działa w tle i rejestruje wszystkie naciśnięcia klawiszy. To naprawdę niebezpieczne, bo może przechwytywać hasła i inne ważne dane osobowe. Keyloggery mogą się dostawać na komputer na różne sposoby, na przykład przez zainfekowane pliki, złośliwe reklamy albo w ramach innych niebezpiecznych programów. Przykładami takich keyloggerów są Spyrix czy Perfect Keylogger, które mogą monitorować, co robisz na komputerze. Z punktu widzenia bezpieczeństwa, standardy takie jak ISO/IEC 27001 mówią, jak ważna jest ochrona informacji. Dlatego tak istotne jest, żeby użytkownicy mieli świadomość zagrożeń, jakie niosą keyloggery i używali dobrego oprogramowania antywirusowego, żeby chronić swoje urządzenia i dane.

Pytanie 33

Jakie korzyści płyną z użycia pseudokodu przy tworzeniu algorytmu?

A. Możliwość szybkie zrealizowania algorytmu w którymkolwiek języku
B. Zrozumiałość dla osób nieznających się na programowaniu
C. Łatwość w zmianie kodu maszynowego
D. Generowanie dynamicznych struktur danych
Szybkie wykonanie algorytmu w dowolnym języku wymaga faktycznego napisania kodu, a pseudokod jest jedynie opisem logicznym. Modyfikacja kodu maszynowego jest operacją niskopoziomową i nie ma bezpośredniego związku z pseudokodem. Tworzenie dynamicznych struktur danych to proces realizowany w językach programowania i nie jest celem samego pseudokodu – pseudokod jedynie opisuje sposób implementacji takich struktur na poziomie logicznym.

Pytanie 34

Który z wymienionych algorytmów sortowania jest najskuteczniejszy w przypadku dużych zbiorów danych w przeważającej liczbie sytuacji?

A. Sortowanie szybkie (QuickSort)
B. Sortowanie bąbelkowe
C. Sortowanie przez zliczanie
D. Sortowanie przez wstawianie
QuickSort to algorytm sortowania, który jest najbardziej efektywny dla dużych zbiorów danych, osiągając średnią złożoność obliczeniową O(n log n). Wykorzystuje strategię 'dziel i zwyciężaj', co pozwala na szybkie podzielenie tablicy na mniejsze części wokół elementu zwanego pivotem. Dzięki temu QuickSort jest wyjątkowo szybki, nawet w przypadku dużych i losowo rozłożonych zbiorów danych. Jego zaletą jest niskie zużycie pamięci oraz możliwość sortowania w miejscu (in-place), co oznacza, że nie wymaga dodatkowej przestrzeni poza rekurencyjnym stosowaniem wywołań. Algorytm ten jest szeroko stosowany w aplikacjach bazodanowych, systemach operacyjnych i analizie danych.

Pytanie 35

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

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

Pytanie 36

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

A. HTTP
B. FTP
C. SMTP
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 37

Która metoda cyklu życia komponentu w React.js jest wywoływana tuż po zamontowaniu komponentu w DOM?

A. componentWillMount()
B. componentWillUnmount()
C. componentDidUpdate()
D. componentDidMount()
Odpowiedź 'componentDidMount()' jest poprawna, ponieważ jest to metoda cyklu życia komponentu w React, która jest wywoływana tuż po zamontowaniu komponentu w DOM. To oznacza, że w tym momencie komponent jest już dostępny w drzewie DOM i możemy bezpiecznie wykonywać operacje, które wymagają dostępu do elementów DOM. Przykładem zastosowania tej metody może być wykonywanie zapytań do API w celu pobrania danych, które następnie będą renderowane w komponencie. Dobrą praktyką jest umieszczanie logiki inicjalizacyjnej, takiej jak ustawienie stanu komponentu na podstawie danych z API, w tej metodzie, co pozwala na odpowiednie zarządzanie cyklem życia komponentu. Dodatkowo, 'componentDidMount()' jest także idealnym miejscem do dodawania subskrypcji do zewnętrznych źródeł danych, takich jak sockety lub WebSocket, co również wymaga, aby komponent był zamontowany. Warto pamiętać, że metody cyklu życia są kluczowym elementem architektury React i mają istotny wpływ na wydajność oraz czytelność kodu.

Pytanie 38

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

let a = { value: 10 };
let b = a;
b.value = 20;
console.log(a.value);
A. ReferenceError
B. 10
C. 20
D. undefined
Wykonując podany kod JavaScript, otrzymujemy wynik 20 w konsoli. Dzieje się tak, ponieważ obiekt `a` jest przypisany do zmiennej `b`, co oznacza, że obie zmienne wskazują na ten sam obiekt w pamięci. Kiedy zmieniamy właściwość `value` obiektu za pomocą zmiennej `b`, zmiana ta wpływa również na obiekt `a`, ponieważ oba odwołują się do tej samej instancji obiektu. Wartości w JavaScript mogą być przekazywane przez referencję, co oznacza, że manipulując jedną referencją, wpływamy na obiekt, do którego ta referencja odnosi się. Przykład ten ilustruje, jak ważne jest zrozumienie różnicy między typami prymitywnymi (przekazywanymi przez wartość) a obiektami (przekazywanymi przez referencję). W praktyce, taka wiedza jest kluczowa przy pracy z obiektami w JavaScript, zwłaszcza w kontekście zarządzania stanem aplikacji, gdzie modyfikacje obiektów mogą mieć szeroki wpływ na cały system.

Pytanie 39

Co to jest WebSocket?

A. Biblioteka JavaScript do tworzenia dynamicznych formularzy
B. Narzędzie do testowania aplikacji webowych
C. Standard zapisu danych w formacie binarnym
D. Protokół komunikacyjny zapewniający komunikację dwukierunkową przez pojedyncze połączenie TCP
WebSocket to protokół komunikacyjny, który umożliwia dwukierunkową, interaktywną komunikację między klientem a serwerem przez pojedyncze połączenie TCP. Dzięki WebSocket możliwe jest przesyłanie danych w czasie rzeczywistym, co jest szczególnie istotne w aplikacjach wymagających natychmiastowej wymiany informacji, takich jak czaty, gry online czy aplikacje do monitorowania. W przeciwieństwie do tradycyjnych protokołów HTTP, które wymagają wielokrotnych połączeń dla każdej interakcji, WebSocket utrzymuje stałe połączenie, co minimalizuje opóźnienia oraz obciążenie serwera. Technologia ta opiera się na standardach IETF, a także jest szeroko wspierana przez większość nowoczesnych przeglądarek, co czyni ją idealnym rozwiązaniem dla aplikacji webowych. Dobrą praktyką jest również obsługa protokołu HTTPS, co zapewnia bezpieczeństwo wymiany danych. Przykładem zastosowania WebSocket jest aplikacja finansowa, w której użytkownicy muszą na bieżąco śledzić zmiany cen akcji.

Pytanie 40

Jakie określenie w programowaniu obiektowym odnosi się do "zmiennej klasy"?

A. Pole
B. Konstruktor
C. Obiekt
D. Metoda
Pole (ang. field) to zmienna należąca do klasy, która przechowuje dane opisujące stan obiektu. Jest to integralna część definicji klasy, a każde wystąpienie klasy (obiekt) ma swoje własne kopie pól. Przykład w C++: `class Osoba { public: string imie; int wiek; }`. W tym przypadku `imie` i `wiek` to pola klasy `Osoba`, które opisują właściwości każdej osoby. Pola mogą mieć różne poziomy dostępu (`public`, `private`, `protected`), co umożliwia kontrolowanie, które części programu mają do nich dostęp. Dzięki polom obiekty przechowują swój stan i mogą zmieniać go podczas działania programu.