Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 17 grudnia 2025 08:10
  • Data zakończenia: 17 grudnia 2025 08:38

Egzamin zdany!

Wynik: 25/40 punktów (62,5%)

Wymagane minimum: 20 punktów (50%)

Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Jaką wydajność posiada sieć, która przesyła 500 MB danych w czasie 10 sekund?

A. 40 Mbps
B. 500 Mbps
C. 50 Mbps
D. 400 Mbps
Na pierwszy rzut oka mogłoby się wydawać, że 50 Mbps to rozsądny wynik, ponieważ 500 MB w 10 sekund to duża ilość danych, ale jeśli przeliczymy jednostki poprawnie, szybko zauważymy błąd. Wynik 50 Mbps oznaczałby, że w ciągu 10 sekund przesyłamy jedynie 500 megabitów, czyli około 62,5 MB danych. To znacznie mniej niż 500 MB, więc taka przepustowość byłaby zdecydowanie zbyt mała, aby przesłać taką ilość danych w podanym czasie. Z kolei odpowiedź 500 Mbps sugeruje przepustowość większą niż w rzeczywistości. Gdyby sieć miała taką wydajność, to w ciągu 10 sekund przesłałaby aż 625 MB danych (500 Mb/s × 10 s = 5000 Mb = 625 MB), czyli więcej niż w zadaniu. Oznacza to, że taka prędkość byłaby zawyżona w stosunku do faktycznej wartości. Natomiast 40 Mbps jest niepoprawne, gdyż oznaczałoby możliwość przesłania jedynie 400 megabitów w 10 sekund, co odpowiada zaledwie 50 MB danych. To prawie dziesięć razy mniej niż rzeczywista ilość danych w zadaniu, więc sieć o takiej przepustowości nie byłaby w stanie wykonać transmisji w podanym czasie. Wszystkie te błędne odpowiedzi wynikają z nieprawidłowego przeliczenia jednostek lub braku uwzględnienia faktu, że bajty należy zamienić na bity przed obliczeniem przepustowości. Tylko wynik 400 Mbps jest zgodny z zasadami i poprawnym przeliczeniem danych.

Pytanie 2

Jakie zagrożenie związane z użytkowaniem cyberprzestrzeni ma wpływ na zdrowie fizyczne?

A. Depresja spowodowana cyberprzemocą
B. Problemy z kręgosłupem wynikające z długotrwałego siedzenia
C. Rozpowszechnianie nieprawdziwych informacji
D. Uzależnienie od gier komputerowych
Problemy z kręgosłupem wynikające z długotrwałego siedzenia to realne zagrożenie związane z użytkowaniem cyberprzestrzeni, które ewidentnie wpływa na zdrowie fizyczne. Dzisiaj, gdy większość naszej pracy, nauki czy rozrywki przenosi się do internetu, coraz częściej zapominamy o tym, że wielogodzinne siedzenie przed komputerem czy z telefonem w ręku odbija się na naszym ciele. Sam kiedyś miałem tak, że po kilku dniach intensywnej nauki online zaczęły mnie boleć plecy i kark. To typowy objaw, bo siedzenie w nieprawidłowej pozycji prowadzi do przeciążenia kręgosłupa, zwłaszcza w odcinku lędźwiowym i szyjnym. Branża IT już od lat podkreśla konieczność stosowania ergonomicznych stanowisk pracy – odpowiednie krzesło, wysokość monitora, przerwy co 45 minut. Standardy BHP bardzo mocno akcentują takie aspekty, zwłaszcza przy pracy zdalnej. Fajnie jest też stosować technikę 20-20-20, czyli co 20 minut patrzymy przez 20 sekund na coś oddalonego o 20 stóp, żeby dać odpocząć oczom i kręgosłupowi. Takie rzeczy naprawdę robią różnicę. Moim zdaniem, wielu ludzi lekceważy ten temat, a skutki siedzącego trybu życia mogą być odczuwalne już po kilku miesiącach. Warto więc od razu wyrobić sobie zdrowe nawyki – to inwestycja w siebie.

Pytanie 3

Jakie jest główne zadanie kontrolera w architekturze MVC (Model-View-Controller)?

A. Obsługa logiki biznesowej i przetwarzanie danych wejściowych od użytkownika
B. Prezentowanie danych użytkownikowi
C. Przechowywanie danych aplikacji
D. Zarządzanie sesją użytkownika
W architekturze MVC kontroler pełni kluczową rolę w procesie przetwarzania danych aplikacji. Jego głównym zadaniem jest obsługa logiki biznesowej oraz przetwarzanie danych, które pochodzą od użytkownika. Kontroler działa jako pośrednik pomiędzy modelem a widokiem, odbierając żądania użytkownika, przetwarzając je (często z wykorzystaniem logiki biznesowej) i decydując, które dane modelu powinny być przekazane do widoku. W praktyce oznacza to, że kontroler interpretuje dane wejściowe, modyfikuje stan modelu na ich podstawie, a następnie wybiera odpowiedni widok do wyświetlenia wyników użytkownikowi. Takie podejście pozwala na lepszą organizację kodu i oddzielenie logiki aplikacji od interfejsu użytkownika, co jest zgodne z dobrymi praktykami projektowania oprogramowania. Dzięki temu aplikacje są bardziej skalowalne i łatwiejsze w utrzymaniu.

Pytanie 4

Jak najlepiej przełożyć oczekiwania klienta na dokumentację techniczną dla programistów?

A. Opracowując wizualne makiety bez dokładnych opisów
B. Rozmawiając wyłącznie z zespołem programistów
C. Tworząc szczegółowy dokument z funkcjami oraz wymaganiami technicznymi
D. Pomijając szczegółowe wymagania techniczne
Sporządzenie szczegółowego dokumentu z funkcjami i wymaganiami technicznymi to najlepszy sposób na przełożenie wymagań klienta na specyfikację techniczną. Dokumentacja techniczna jest podstawą do stworzenia aplikacji zgodnej z oczekiwaniami klienta i pozwala na precyzyjne określenie zakresu prac. Zawiera ona opisy funkcjonalności, diagramy architektury, wymagania dotyczące wydajności oraz harmonogram wdrożenia, co minimalizuje ryzyko błędów i nieporozumień podczas realizacji projektu.

Pytanie 5

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

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

Pytanie 6

Przedstawione kody zawierają realizację funkcji oraz jeden zdefiniowany test automatyczny, który weryfikuje działanie funkcji w przypadku, gdy argumentem jest liczba ujemna. W miejsce kropek należy dodać drugi test, który sprawdzi funkcjonalność funkcji, kiedy argumentem jest liczba dodatnia. Który z poniższych kodów jest odpowiedni do tego testu?

export function fun1(number) {
    if (number < 0)
        number = number * (-1);
    return number;
}
describe('fun1', () => {
    it('test1', () => {
        const result = fun1(-1);
        expect(result).toBe(1);
    })
    ...
})
it('test2', () => {
    const result = fun1(1);
    expect(result).toBe(result+1);
})
A.
it('test2', () => {
    const result = fun1(2);
    expect(result).toBe(-2);
})
B.
it('test2', () => {
    const result = fun1(2);
    expect(result).toBe(2);
})
C.
it('test2', () => {
    const result = fun1(1);
    expect(result).toBe(-1);
})
D.
A. Odpowiedź D
B. Odpowiedź C
C. Odpowiedź A
D. Odpowiedź B
Błędne odpowiedzi A B oraz D wynikają z niepoprawnego zrozumienia działania funkcji fun1 która przekształca wartość ujemną na dodatnią ale nie zmienia wartości dodatnich Odpowiedź A sugeruje że funkcja powinna dodać 1 do wartości co nie jest zgodne z jej definicją Funkcja nie wykonuje operacji arytmetycznych poza mnożeniem ujemnych liczb przez -1 co w odpowiedzi A nie ma zastosowania Wynik testu oczekiwany jako result+1 nie odzwierciedla poprawnego działania funkcji Odpowiedź B natomiast błędnie zakłada że funkcja przekształca dodatnie liczby w ujemne co nie jest prawdą Funkcja jedynie zmienia znak dla ujemnych wartości więc test oczekujący że 2 przekształci się w -2 jest niepoprawny Odpowiedź D z kolei zakłada że funkcja zmienia znak liczby dodatniej 1 do wartości -1 co również nie jest zgodne z założeniami funkcji Fun1 powinna zwracać tę samą wartość dla liczby dodatniej Funkcje jednostkowe są kluczowym narzędziem do zapewnienia niezawodności kodu i ich prawidłowe zrozumienie jest niezbędne do skutecznego testowania oprogramowania W kontekście tego pytania jedynie odpowiedź C prawidłowo odzwierciedla poprawne zachowanie funkcji dla wartości dodatnich co jest zgodne z jej implementacją

Pytanie 7

Co to jest ORM w kontekście programowania?

A. Operational Reliability Management - zarządzanie niezawodnością operacyjną systemów
B. Organized Resource Model - model organizacji zasobów w aplikacjach webowych
C. Output Rendering Module - moduł renderujący dane wyjściowe w aplikacjach
D. Object-Relational Mapping - technika konwersji danych między systemami typów w relacyjnych bazach danych
W kontekście programowania istnieje wiele terminów i technik, które mogą wprowadzać w błąd, jeśli zostaną źle zrozumiane. Na przykład, 'Operational Reliability Management' odnosi się do zarządzania niezawodnością operacyjną systemów, co jest ważne, ale nie ma bezpośredniego związku z koncepcją ORM, ponieważ skupia się na zapewnieniu ciągłości działania systemów i minimalizacji przestojów. Kolejna koncepcja, 'Organized Resource Model', sugeruje modelowanie zasobów w aplikacjach webowych, co również nie odnosi się do techniki ORM. ORM skupia się na konwersji danych między obiektami a relacyjnymi bazami danych, a nie na organizacji zasobów. Wreszcie, 'Output Rendering Module' to termin związany z wyświetlaniem danych, co również nie jest związane z ORM, który nie zajmuje się renderowaniem, a jedynie mapowaniem danych. Kluczowym błędem myślowym jest mylenie celów różnych technik i narzędzi w programowaniu. Zrozumienie, że ORM jest konkretną techniką konwersji danych, a nie zarządzania operacyjnego lub modelowania zasobów, to fundament, który pozwala właściwie zinterpretować jego zastosowanie w praktyce programistycznej. Właściwa znajomość tych terminów oraz umiejętność rozróżnienia ich funkcji jest kluczowa w profesjonalnym programowaniu, by unikać nieporozumień i wdrażać odpowiednie rozwiązania w projektach informatycznych.

Pytanie 8

Jaka będzie złożoność czasowa wyszukiwania w posortowanej tablicy przy użyciu algorytmu binarnego?

A. O(log n)
B. O(n²)
C. O(n log n)
D. O(n)
Wybierając inne odpowiedzi, można napotkać typowe błędy w myśleniu o złożoności algorytmów wyszukiwania. Odpowiedź O(n) sugeruje, że czas wyszukiwania rośnie liniowo z liczbą elementów w tablicy, co jest charakterystyczne dla prostego algorytmu liniowego. Taki algorytm przeszukuje każdy element, co jest czasochłonne, zwłaszcza w przypadku dużych zbiorów danych. Z kolei O(n²) reprezentuje złożoność czasową, która mogłaby wystąpić w algorytmach sortujących, takich jak sortowanie bąbelkowe, a nie w wyszukiwaniu. Takie zrozumienie złożoności może prowadzić do nieefektywnych rozwiązań w praktyce. Odpowiedź O(n log n) wskazuje na złożoność czasową algorytmów sortujących, co również nie ma zastosowania w kontekście samego wyszukiwania. Warto zauważyć, że przy wyborze algorytmu do wyszukiwania danych, kluczowe jest zrozumienie, jakie operacje są wykonywane na danych i jakie są ich struktury, co wpływa na wybór najlepszej strategii. Wysoka złożoność algorytmów wyszukiwania może prowadzić do znacznych opóźnień w aplikacjach wymagających szybkiej reakcji. Dlatego tak ważne jest zrozumienie zasadności wykorzystania algorytmu binarnego w odpowiednich kontekstach.

Pytanie 9

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

A. Szyfrowanie danych na urządzeniu
B. Hasło ustawione na urządzeniu
C. Zainstalowanie aplikacji rozrywkowych
D. Nieaktualne oprogramowanie
Szyfrowanie danych na urządzeniu przenośnym to jedna z najskuteczniejszych metod zabezpieczania poufnych informacji. Szyfrowanie przekształca dane w formę, która jest nieczytelna dla osób nieposiadających odpowiedniego klucza deszyfrującego. Dzięki temu, nawet jeśli urządzenie zostanie zgubione lub skradzione, dane pozostają zabezpieczone przed nieautoryzowanym dostępem. Szyfrowanie to standardowa praktyka stosowana przez największe firmy technologiczne i jest zalecana we wszystkich urządzeniach przenośnych, takich jak laptopy i smartfony.

Pytanie 10

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

<h2>{2+2}</h2>
Kod w Angular:
<h2>{{2+2}}</h2>
A. {2+2}
B. {4}
C. {{2+2}}
D. 4
Wiele osób trafia na problem, bo te klamry i podwójne klamry wyglądają trochę tajemniczo, zwłaszcza przy pierwszym kontakcie z Reactem albo Angularem. Często pojawia się myślenie, że skoro w szablonie wpisano {2+2} albo {{2+2}}, to właśnie taki tekst zostanie wyświetlony na stronie, dosłownie z klamrami. W praktyce jednak i React (JSX), i Angular traktują klamry jako specjalną składnię do osadzania dynamicznych wartości z JavaScript — to nie jest zwykła dekoracja, tylko wyraźny sygnał dla silnika, że w tym miejscu należy wykonać kod i podstawić wynik. To powoduje, że nie wyświetli się ani „{2+2}”, ani „{{2+2}}”, tylko właśnie wynik tego wyrażenia. Co ciekawe, odpowiedź „{4}” też jest błędna, bo React i Angular nie wyświetlają już klamer w efekcie końcowym — klamry są tylko częścią składni, nie wyniku. Człowiek łatwo może się pomylić, bo w zwykłym HTML czegoś takiego nie ma i klamry są po prostu tekstem. Moim zdaniem często wynika to z niezrozumienia, jak działa tzw. data binding w frameworkach frontendowych. Warto wyrobić sobie nawyk myślenia o klamrach jako narzędziu do „wstrzykiwania” wartości, nie jako części tekstu. To też pokazuje, jak ważne jest czytanie dokumentacji — oficjalne materiały Reacta i Angulara bardzo wyraźnie podkreślają, że klamry służą do oceny JavaScriptu. Jeśli więc widzimy {2+2} w szablonie, przeglądarka zobaczy tylko „4”, bo wszystko, co w klamrach, jest oceniane przed wyświetleniem. Jeśli wpiszemy tam zmienną lub nawet funkcję, efekt będzie podobny — zawsze podstawiona zostanie końcowa wartość, a nie kod czy same klamry. Takie mechanizmy bardzo upraszczają pracę, bo pozwalają łatwo aktualizować widok w zależności od stanu aplikacji.

Pytanie 11

Jakie narzędzie jest używane do automatyzacji testów interfejsu użytkownika aplikacji webowych?

A. JIRA
B. Slack
C. Selenium
D. Trello
Pozostałe odpowiedzi, takie jak JIRA, Slack i Trello, nie są narzędziami przeznaczonymi do automatyzacji testów interfejsu użytkownika. JIRA to popularne narzędzie do zarządzania projektami, które często wykorzystuje się do śledzenia błędów i planowania zadań w zespołach programistycznych. Jest ono nieocenione w kontekście zarządzania cyklem życia aplikacji i usprawniania komunikacji w zespole, ale nie służy do automatyzacji testów. Slack natomiast to narzędzie do komunikacji zespołowej, które umożliwia szybką wymianę informacji i współpracę w czasie rzeczywistym. Choć może być używane do powiadomień o wynikach testów, nie jest narzędziem do ich automatyzacji. Trello, z kolei, to aplikacja do zarządzania projektami, która pomaga w organizacji zadań i pracy zespołowej za pomocą tablic i kart. Choć może wspomagać procesy zarządzania testami poprzez wizualizację postępów, nie jest narzędziem testowym samym w sobie. Często zdarza się, że osoby nowe w branży mylą narzędzia wspomagające zarządzanie projektami z narzędziami do testowania, co może prowadzić do nieporozumień. Warto więc zrozumieć ich różne zastosowania, by skutecznie wykorzystać każde z nich według ich przeznaczenia.

Pytanie 12

Jakiego typu testy są stosowane do sprawdzania funkcjonalności prototypu interfejsu?

A. Testy interfejsu
B. Testy zgodności
C. Testy efektywnościowe
D. Testy obciążeniowe
Testy interfejsu są kluczowe w procesie weryfikacji funkcji prototypu interfejsu użytkownika. Testy te koncentrują się na sprawdzeniu poprawności działania wszystkich elementów graficznych, takich jak przyciski, pola tekstowe, menu rozwijane oraz formularze. Testy interfejsu pozwalają upewnić się, że interakcje użytkownika z aplikacją przebiegają zgodnie z oczekiwaniami i nie powodują błędów w nawigacji. Dzięki nim można wykryć problemy związane z nieprawidłowym rozmieszczeniem elementów, brakiem reakcji na kliknięcia lub nieintuicyjnym działaniem, co pozwala na wczesne wdrożenie poprawek i zwiększenie użyteczności aplikacji.

Pytanie 13

Jakie znaczenie ma deklaracja zmiennej w programowaniu?

A. Zarezerwowanie miejsca w pamięci dla wyników operacji arytmetycznych
B. Stworzenie nowej wartości w bazie danych
C. Przypisanie zmiennej wartości domyślnej
D. Określenie typu oraz nazwy zmiennej w kodzie programu
Deklaracja zmiennej to podstawowy krok w programowaniu, który polega na określeniu typu oraz nazwy zmiennej, zanim zostanie do niej przypisana wartość. W językach takich jak C++, Java, czy C# deklaracja wygląda na przykład tak: `int liczba;`. Określenie typu zmiennej pozwala kompilatorowi lub interpreterowi zarezerwować odpowiednią ilość pamięci oraz kontrolować, jakie operacje mogą być na niej wykonywane. Deklaracja zmiennej zwiększa czytelność kodu, umożliwia wykrywanie błędów na wczesnym etapie kompilacji i jest kluczowa w zarządzaniu zasobami aplikacji.

Pytanie 14

Jaki kod może być związany z treścią wygenerowaną w trakcie działania programu Java?

Exception in thread "main" java.lang.ArithmeticException: / by zero
A. x = x % y;
B. if (x > y) ...
C. x = tablica[6];
D. x = 0;
Kod x = x % y; jest klasycznym przykładem operacji, która może prowadzić do wystąpienia wyjątku ArithmeticException w Javie, szczególnie gdy zmienna y przyjmuje wartość zero. Operator modulo (%) w języku Java nie toleruje dzielenia przez zero – w przeciwieństwie do niektórych innych języków, które mogą zwracać np. NaN lub Infinity, tutaj od razu zostanie zgłoszony wyjątek. Taki wyjątek jest dość powszechny w pracy programisty, zwłaszcza w aplikacjach, gdzie dane wejściowe nie są do końca kontrolowane. Moim zdaniem dobrze jest od razu przyzwyczaić się do zabezpieczania wszystkich operacji dzielenia i modulo poprzez wcześniejsze sprawdzenie wartości dzielnika. Rekomenduje się stosowanie warunków typu if (y != 0) przed wykonaniem takiej instrukcji, co jest zgodne z dobrymi praktykami defensywnego programowania. Dodatkowo, w środowiskach produkcyjnych często otacza się te fragmenty kodu blokiem try-catch, aby elegancko obsłużyć wyjątek i np. wyświetlić użytkownikowi zrozumiały komunikat. Warto pamiętać, że ArithmeticException dziedziczy po RuntimeException, a więc nie musimy jej jawnie obsługiwać, ale nie oznacza to, że powinniśmy ją ignorować – w dobrze napisanym kodzie zawsze należy przewidywać takie sytuacje. Z mojego doświadczenia wynika, że najwięcej błędów z tym związanych pojawia się w aplikacjach przetwarzających dane liczbowe, gdzie nawet niepozorna operacja modulo może „wywalić” cały proces, jeśli nie zostanie odpowiednio zaopiekowana.

Pytanie 15

Zapisany fragment w C# wskazuje na definicję klasy Car, która:

public class Car: Vehicle {     ...   }
A. stanowi klasę bazową (nie dziedziczy po żadnej klasie)
B. jest powiązana z klasą Vehicle
C. dziedziczy po Vehicle
D. używa prywatnych pól klasy Vehicle
W przedstawionym kodzie w języku C# mamy definicję klasy Car, która dziedziczy po klasie Vehicle. Dziedziczenie to fundamentalny mechanizm programowania obiektowego, pozwalający jednej klasie przejąć właściwości i metody innej klasy. W praktyce oznacza to, że klasa Car automatycznie zyskuje dostęp do metod i właściwości publicznych oraz chronionych klasy Vehicle, co umożliwia ponowne użycie kodu i zwiększa jego przejrzystość. Dziedziczenie jest kluczowe w projektowaniu skalowalnych systemów, gdzie umożliwia tworzenie bardziej specyficznych klas na podstawie klas ogólnych, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Przykładowo, jeżeli klasa Vehicle zawiera metody takie jak Start() i Stop(), klasa Car może je wykorzystać bez konieczności ponownego definiowania. Dobre praktyki w programowaniu obiektowym zalecają wykorzystywanie dziedziczenia do tworzenia hierarchii klas, które logicznie odwzorowują relacje „jest-a” pomiędzy obiektami w systemie. Ważne jest też unikanie zbyt głębokiego dziedziczenia, co może prowadzić do skomplikowanego i trudnego w utrzymaniu kodu. Zrozumienie dziedziczenia jest kluczowe dla efektywnego wykorzystania wzorców projektowych, takich jak wzorzec projektowy Adapter czy Dekorator.

Pytanie 16

Jakie aspekty powinny być brane pod uwagę przy tworzeniu zestawów danych?

A. Ilość linii kodu programu
B. Metoda alokacji pamięci dla danych
C. Typ zastosowanego kompilatora
D. Narzędzia do analizy błędów
Sposób alokacji pamięci dla danych to kluczowy element projektowania zestawów danych, ponieważ wpływa na wydajność i efektywność programu. Dynamiczna alokacja pamięci pozwala na tworzenie struktur, których rozmiar jest zmienny i dostosowuje się w trakcie działania aplikacji. Dzięki temu programiści mogą optymalnie zarządzać zasobami systemowymi, unikając marnowania pamięci lub jej niedoboru. Wybór odpowiedniej metody alokacji, np. stosowanie wskaźników, dynamicznych tablic lub struktur danych takich jak lista czy mapa, pozwala na budowanie bardziej skalowalnych i elastycznych aplikacji.

Pytanie 17

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

A. Mechanizm bezpieczeństwa określający, które domeny mogą uzyskiwać dostęp do zasobów na serwerze
B. System zarządzania plikami statycznymi w aplikacjach SPA
C. Metoda kompresji danych w aplikacjach webowych
D. Protokół komunikacji między różnymi bazami danych
CORS to nie protokół komunikacji między różnymi bazami danych, co sugeruje pierwsza z niepoprawnych odpowiedzi. Protokoły takie jak JDBC czy ODBC są odpowiedzialne za komunikację między bazami danych, a nie CORS. CORS nie jest też metodą kompresji danych w aplikacjach webowych, co mogłoby wprowadzać w błąd w kontekście optymalizacji transferu danych. Kompresja danych jest realizowana przez inne technologie, takie jak Gzip, które zmniejszają rozmiar przesyłanych informacji, ale nie mają związku z ograniczeniami dostępu do zasobów. Ponadto, CORS nie ma nic wspólnego z zarządzaniem plikami statycznymi w aplikacjach SPA. W rzeczywistości, pliki statyczne mogą być serwowane z różnych źródeł, a CORS odgrywa kluczową rolę w ustalaniu, czy te źródła mogą być dostępne przez przeglądarkę. To zrozumienie jest kluczowe, ponieważ wiele osób myli pojęcia związane z komunikacją w sieci, co prowadzi do fałszywych przekonań. Zatem ważne jest, aby nie tylko znać definicje, ale także rozumieć, jak różne technologie współdziałają ze sobą w kontekście bezpieczeństwa i dostępu do danych.

Pytanie 18

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

A. Mechanizm pozwalający na przechowywanie danych w przeglądarce użytkownika bez określonego czasu wygaśnięcia
B. Technologia przechowywania danych w pamięci RAM aplikacji
C. Baza danych NoSQL działająca na serwerze aplikacji
D. System plików tymczasowych używany przez przeglądarkę
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 19

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

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

Pytanie 20

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

A. Technika optymalizacji ładowania zasobów statycznych
B. Mechanizm bezpieczeństwa, który określa, które domeny mogą uzyskiwać dostęp do zasobów na serwerze
C. Protokół komunikacji między różnymi bazami danych
D. Metoda udostępniania API dla aplikacji mobilnych
CORS, czyli Cross-Origin Resource Sharing, to mechanizm bezpieczeństwa stosowany w aplikacjach internetowych, który reguluje, które zewnętrzne domeny mają prawo uzyskiwać dostęp do zasobów na serwerze. Jest to szczególnie istotne w kontekście aplikacji klienckich działających w przeglądarkach, gdzie zapytania do różnych źródeł (tzw. cross-origin requests) mogą prowadzić do problemów z bezpieczeństwem, takich jak ataki typu CSRF (Cross-Site Request Forgery) czy XSS (Cross-Site Scripting). Przykładowo, jeśli aplikacja internetowa hostowana na domenie A próbuje uzyskać dane z API na domenie B, serwer na domenie B może poprzez nagłówki CORS określić, czy i jakie żądania od domeny A będą honorowane. Przy odpowiedniej konfiguracji, serwer może zezwolić na dostęp tylko dla zaufanych źródeł, co zapobiega nieautoryzowanym operacjom. W praktyce, stosowanie CORS przyczynia się do stworzenia bezpieczniejszych aplikacji webowych, zgodnych z aktualnymi standardami bezpieczeństwa w sieci, takimi jak W3C i OWASP.

Pytanie 21

Podejście obiektowe w rozwiązywaniu problemów obejmuje między innymi:

A. zmienne, procedury oraz funkcje
B. klasy, obiekty oraz hermetyzację
C. pola, metody, rekurencję oraz kwerendy
D. wyzwalacze i polimorfizm
Wielu początkujących programistów często myli typowe konstrukcje znane z innych paradygmatów programowania z kluczowymi elementami podejścia obiektowego. W odpowiedziach pojawiły się takie pojęcia jak pola, metody, rekurencja czy kwerendy – wszystkie one są jak najbardziej spotykane w programowaniu, jednak nie są one zarezerwowane wyłącznie dla OOP. Na przykład pola i metody występują też w programowaniu strukturalnym, a rekurencja jest po prostu techniką algorytmiczną, wykorzystywaną niezależnie od stylu programowania. Kwerendy natomiast pojawiają się głównie w kontekście baz danych i nie należą do kanonu OOP. Wyzwalacze również są charakterystyczne raczej dla baz danych niż dla podejścia obiektowego. Polimorfizm to jedna z zasad OOP, ale występuje obok klas, obiektów i hermetyzacji, nie zamiast nich. Odpowiedzi typu zmienne, funkcje oraz procedury są bardziej domeną tradycyjnego programowania proceduralnego, np. w języku C czy Pascal. Bardzo łatwo pomylić się, bo te wszystkie 'cegiełki' spotyka się w różnych językach, ale tylko klasy, obiekty i hermetyzacja tworzą fundament programowania obiektowego. Programista, który nie odróżnia tych paradygmatów, może mieć potem problem z projektowaniem elastycznych i skalowalnych systemów – z mojego doświadczenia wynika, że takie pomyłki prowadzą do niepotrzebnych komplikacji w kodzie i utrudniają wdrażanie dobrych praktyk branżowych. OOP wymusza inne myślenie o problemie: nie skupiamy się na krokach algorytmu (jak w programowaniu proceduralnym), tylko na modelowaniu obiektów, które mają swoje stany i zachowania. Branżowe standardy, takie jak GRASP czy wzorce projektowe GoF, podkreślają, że tylko konsekwentne stosowanie klas, obiektów oraz hermetyzacji pozwala w pełni wykorzystać zalety tego podejścia.

Pytanie 22

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']
B. ['phone']
C. [{id: 2, name: 'laptop', price: 1000}, {id: 3, name: 'tablet', price: 750}]
D. ['laptop', 'tablet', 'phone']
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 23

Co to jest event bubbling w JavaScript?

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

Pytanie 24

Co oznacza akronim IDE w kontekście programowania?

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

Pytanie 25

Jednym z elementów, które mają zostać zaimplementowane w aplikacji, jest możliwość cofnięcia ostatnich działań do 20 operacji wstecz (undo). Struktura danych, która jest odpowiednia do tego celu i pozwala na dostęp tylko do ostatnio dodanego elementu, to:

A. stos
B. drzewo
C. tablica
D. kolejka
Kolejka to struktura danych działająca na zasadzie FIFO (First In, First Out), co oznacza, że pierwszy dodany element jest pierwszym, który zostaje usunięty. Tego rodzaju organizacja danych nie nadaje się do implementacji funkcji cofania, ponieważ nie umożliwia łatwego dostępu do ostatnich operacji. W kontekście aplikacji umożliwiającej cofnięcie działań, kolejka nie zaspokaja potrzeb użytkownika, gdyż nie pozwala na usunięcie najnowszej operacji. Drzewo, jako bardziej złożona struktura, jest używane głównie do organizacji danych w hierarchicznej formie. Chociaż drzewa mogą być skuteczne w wyszukiwaniu i porządkowaniu danych, nie są odpowiednie do realizacji funkcji cofania ostatnich operacji, ponieważ nie oferują prostego dostępu do ostatnio dodanych elementów. Wreszcie, tablica jest statyczną strukturą danych, która przechowuje elementy w sekwencyjnej kolejności. Mimo że można by używać tablicy do przechowywania operacji, ich ograniczenia dotyczące rozmiaru i elastyczności sprawiają, że są mniej efektywne w porównaniu do stosu w kontekście cofania operacji. W związku z tym, ani kolejka, ani drzewo, ani tablica nie są odpowiednimi wyborami dla funkcjonalności cofania w aplikacji, co czyni stos jedynym logicznym rozwiązaniem.

Pytanie 26

Która metoda w obrębie klasy jest uruchamiana automatycznie podczas tworzenia kopii obiektu?

A. Konstruktor kopiujący
B. Destruktor
C. Metoda zaprzyjaźniona
D. Metoda statyczna
Metoda statyczna jest związana z klasą, a nie z jej obiektami, więc nie wywołuje się automatycznie, gdy kopiujemy obiekt. Destruktor to kolejna metoda, która odpowiada za usuwanie obiektu i zwalnianie zasobów, ale jego rola pojawia się dopiero na końcu życia obiektu, a nie podczas samego kopiowania. Co do metody zaprzyjaźnionej, to ona ma dostęp do prywatnych i chronionych elementów klasy, ale też nie jest wywoływana automatycznie w procesie kopiowania. Tylko konstruktor kopiujący robi to właściwie, tworząc kopie obiektów.

Pytanie 27

Które z wymienionych pól klasy można zainicjalizować przed stworzeniem obiektu?

A. Publiczne pole
B. Chronione pole
C. Prywatne pole
D. Static pole
Pole statyczne można zainicjować przed utworzeniem obiektu klasy, ponieważ należy ono do samej klasy, a nie do jej instancji. Statyczne pola są inicjalizowane tylko raz, w momencie pierwszego użycia klasy lub jej statycznych metod. Dzięki temu można przechowywać dane wspólne dla wszystkich obiektów danej klasy, co jest kluczowe w optymalizacji pamięci i kodu. Przykładem może być licznik instancji klasy, który zwiększa swoją wartość za każdym razem, gdy tworzony jest nowy obiekt.

Pytanie 28

Jaką rolę odgrywa program Jira?

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

Pytanie 29

Jaką rolę odgrywa destruktor w definicji klasy?

A. Usuwa instancje i zwalnia pamięć
B. Realizuje testy jednostkowe klasy
C. Ustawia wartości pól klasy
D. Generuje nowe instancje klasy
Destruktor to specjalna metoda klasy, która jest automatycznie wywoływana w momencie, gdy obiekt przestaje być używany. Jego zadaniem jest zwalnianie zasobów, takich jak pamięć dynamiczna, uchwyty do plików lub połączenia sieciowe. Destruktor ma tę samą nazwę co klasa, poprzedzoną symbolem `~` w C++ (`~Samochod()`). Destruktor zapobiega wyciekom pamięci i zapewnia, że wszystkie zasoby są poprawnie zwalniane po zakończeniu pracy obiektu. Jest to kluczowy element zarządzania cyklem życia obiektu w językach takich jak C++.

Pytanie 30

Błędy w interpretacji kodu stworzonego za pomocą React.js lub Angular można wykryć dzięki

A. wbudowanemu debuggerowi w danym środowisku
B. konsoli przeglądarki internetowej
C. kompilatorowi języka JavaScript
D. narzędziom zainstalowanym po stronie serwera aplikacji
Konsola przeglądarki to naprawdę super narzędzie do śledzenia błędów w JavaScript, a szczególnie przydatna jest, gdy piszemy coś w React.js albo Angular. Dzięki niej możesz łatwo sprawdzać logi i błędy, a nawet na żywo testować różne fragmenty swojego kodu. To naprawdę szybki sposób, żeby znaleźć problemy, bez potrzeby grzebania w całym kodzie aplikacji.

Pytanie 31

Która z metod zarządzania projektami jest najbardziej odpowiednia, gdy w początkowej fazie projektu zakres nie jest w pełni określony, wymagania mogą zmieniać się podczas realizacji, a także mogą wystąpić nowe potrzeby?

A. Model V
B. Model kaskadowy
C. PRINCE2
D. Agile
Agile to podejście, które w mojej ocenie świetnie sprawdza się właśnie w sytuacjach, kiedy zakres projektu nie jest jasny od samego początku albo wymagania klienta mogą się zmieniać w trakcie prac. To nie tylko teoria – branża IT, ale i coraz więcej innych, korzysta z Agile'a tam, gdzie nie da się wszystkiego przewidzieć. Główna zaleta to iteracyjność i elastyczność. Zamiast jednego dużego planu, praca dzieli się na krótkie sprinty lub iteracje, gdzie co chwilę można coś poprawić, zmienić, dodać nową funkcjonalność albo wycofać się z pomysłu, który okazał się nietrafiony. W praktyce, jak klient zmienia zdanie albo rynek wymusza inne podejście – Agile pozwala szybko reagować bez katastrofalnych opóźnień. Moim zdaniem to właśnie dlatego standardy, takie jak Scrum czy Kanban (oba w duchu Agile), są dziś tak popularne nie tylko w software, ale nawet w marketingu czy budowlance. Co ciekawe, Agile promuje współpracę całego zespołu z klientem na każdym etapie, więc ryzyko, że coś zostanie źle zrozumiane i pójdzie do produkcji, jest dużo mniejsze niż w klasycznych podejściach. Warto pamiętać, że to nie jest model totalnego chaosu – są tu zasady i dobre praktyki, ale największym atutem jest właśnie ta adaptacyjność do zmieniających się warunków projektu.

Pytanie 32

Algorytm zaprezentowany w zadaniu można zrealizować w języku Java wykorzystując instrukcję

Ilustracja do pytania
A. try
B. while
C. switch
D. if
Pętla while w języku Java jest idealna do implementacji algorytmów, które wymagają wielokrotnego wykonywania bloku kodu dopóki określony warunek logiczny pozostaje prawdziwy. W przedstawionym schemacie blokowym widzimy iteracyjny proces, który zaczyna się od przypisania wartości 2 do zmiennej number, a następnie kontynuuje dodawanie 2 do tej zmiennej tak długo, jak długo jej wartość nie osiągnie 10. Struktura ta jest typowym przykładem problemu, który najlepiej rozwiązać za pomocą pętli while. Wyrażenie warunkowe number != 10 jest sprawdzane przed każdą iteracją pętli, co umożliwia zakończenie pętli w momencie, gdy warunek przestaje być prawdziwy. To podejście jest zgodne z dobrymi praktykami programistycznymi, które zalecają minimalizowanie niepotrzebnych obliczeń i zwiększanie czytelności kodu. Pętle while są często stosowane w sytuacjach, gdy liczba iteracji nie jest z góry znana i zależy od dynamicznie zmieniających się warunków, co czyni je wszechstronnym narzędziem w wielu aplikacjach, od przetwarzania danych po kontrolę przepływu w symulacjach komputerowych. Praktyczna znajomość pętli pozwala na efektywne rozwiązywanie problemów w złożonych projektach informatycznych.

Pytanie 33

Jakie jest podstawowe działanie w ochronie miejsca zdarzenia?

A. Zagwarantowanie stabilności ciała rannego
B. Zagwarantowanie odpowiedniego oświetlenia
C. Zastosowanie sterylnych materiałów opatrunkowych
D. Usunięcie niebezpiecznych przedmiotów z otoczenia
Z mojego doświadczenia, usunięcie niebezpiecznych rzeczy z miejsca, gdzie doszło do wypadku, to naprawdę kluczowa sprawa. Dzięki temu zmniejszamy szanse na dodatkowe obrażenia i możemy lepiej pomóc poszkodowanemu, nie narażając siebie na ryzyko. Na przykład, warto odsunąć ostre narzędzia, wyłączyć działające maszyny czy podnieść ciężkie przedmioty, które mogłyby kogoś zranić. Takie działania są istotne w każdej sytuacji, czy to wypadek na drodze, czy w pracy.

Pytanie 34

Podana deklaracja zmiennych w języku JAVA zawiera

String imie = "Anna";
short wiek = 12;
int i = 0;
char plec = 'K';
boolean jestUczniem = true;
A. dwie zmienne typu tekstowego, dwie całkowite oraz jedną logiczną
B. jedną zmienną typu tekstowego, dwie całkowite, jedną znakową i jedną logiczną
C. dwie zmienne o typie strukturalnym
D. jedną zmienną typu tekstowego, jedną rzeczywistą, jedną całkowitą, jedną znakową oraz jedną logiczną
Zależnie od odpowiedzi, pojawiają się różne błędne założenia dotyczące typów danych w języku Java. W pierwszej opcji pada stwierdzenie o dwóch zmiennych tekstowych – to nie jest prawda, bo tylko jedna zmienna (imie) została zadeklarowana jako String. Również liczba zmiennych całkowitych jest tutaj przeceniona, gdyż short oraz int to dwa różne typy całkowite, ale są tylko dwa, nie więcej. Przypisanie plec do kategorii tekstowych to częsty błąd – char w Javie to typ znakowy, nie tekstowy, co widać po pojedynczym apostrofie wokół litery. To typ bardzo specyficzny, używany głównie do przechowywania pojedynczego znaku, a nie całych tekstów. W drugiej odpowiedzi pojawia się sformułowanie o typach strukturalnych – w kontekście Javy jest to nieprecyzyjne i raczej błędne, bo typy strukturalne (w sensie struktur znanych np. z języka C) nie występują w tej formie w Javie. String jest co prawda klasą, a więc typem referencyjnym, ale nie jest to struktura w klasycznym rozumieniu. W czwartej odpowiedzi podano jedną zmienną rzeczywistą, co zupełnie nie ma odzwierciedlenia w kodzie – typy rzeczywiste w Javie to float lub double, a żadna z zadeklarowanych zmiennych takiego typu nie posiada. W moim odczuciu te pomyłki bardzo często wynikają z mylenia typów podstawowych z typami referencyjnymi albo z braku znajomości podstawowej składni języka. Czasami też uczniowie utożsamiają pojedynczy znak z tekstem, bo w potocznym rozumieniu to przecież "litera". Jednak w programowaniu ta precyzja jest kluczowa, bo od różnicy między char i String zależą metody, które możemy użyć oraz ilość zajmowanej pamięci. Warto za każdym razem dokładnie sprawdzać, jakiego typu używamy, bo to rzutuje na cały późniejszy kod i możliwości jego rozwoju. Praktyka pokazuje, że błędne założenia na tym etapie mogą bardzo utrudnić pracę nad większym projektem, a korekta typów nie zawsze jest szybka i bezbolesna.

Pytanie 35

Co to jest WebSocket?

A. Narzędzie do testowania aplikacji webowych
B. Standard zapisu danych w formacie binarnym
C. Biblioteka JavaScript do tworzenia dynamicznych formularzy
D. Protokół komunikacyjny zapewniający komunikację dwukierunkową przez pojedyncze połączenie TCP
Zrozumienie podstawowych różnic między protokołami komunikacyjnymi jest kluczowe w kontekście nowoczesnych technologii webowych. Wiele osób myli WebSocket z narzędziami do testowania aplikacji webowych, co prowadzi do nieporozumień. Narzędzia te, choć niezbędne w procesie rozwijania i testowania aplikacji, nie zajmują się rzeczywistą komunikacją między klientem a serwerem, a raczej służą do analizy i debugowania interakcji. Innym powszechnym błędnym wyobrażeniem jest mylenie WebSocket z formatami zapisu danych, co jest całkowicie innym zagadnieniem. Protokół WebSocket nie definiuje sposobu, w jaki dane są zapisywane, ale raczej sposób, w jaki te dane są przesyłane w czasie rzeczywistym. Co więcej, pomysł, że WebSocket jest biblioteką JavaScript do tworzenia dynamicznych formularzy, jest również nieprawidłowy. WebSocket jest protokołem, który wymaga implementacji zarówno po stronie serwera, jak i klienta, a nie tylko narzędzi do interakcji z formularzami. W związku z tym, brak świadomości dotyczącej tych różnic może prowadzić do nieefektywnego projektowania aplikacji, w których kluczowym elementem jest efektywna komunikacja w czasie rzeczywistym. Aby skutecznie wdrożyć nowoczesne rozwiązania webowe, warto zrozumieć, jak WebSocket współdziała z innymi technologiami, takimi jak AJAX czy REST, zamiast skupiać się na mylonych koncepcjach, które mogą wprowadzać w błąd podczas projektowania systemów.

Pytanie 36

Wykorzystanie typu DECIMAL w MySQL wymaga wcześniejszego określenia długości (liczby cyfr) przed oraz po przecinku. Jak należy to zapisać?

A. logiczny
B. stałoprzecinkowy
C. łańcuchowy
D. zmiennoprzecinkowy
Typ DECIMAL w języku MySQL jest używany do przechowywania liczb dziesiętnych z określoną precyzją. Przy definiowaniu tego typu danych wymagane jest określenie dwóch głównych parametrów: długości całkowitej liczby, czyli liczby cyfr przed przecinkiem, oraz długości części dziesiętnej, czyli liczby cyfr po przecinku. Taki zapis ma postać DECIMAL(M, D), gdzie M to maksymalna liczba cyfr, a D to liczba cyfr po przecinku. Przykład zastosowania to: DECIMAL(10, 2), co oznacza, że liczba może mieć maksymalnie 10 cyfr, z czego 2 cyfry będą po przecinku. Typ DECIMAL jest szczególnie przydatny w aplikacjach finansowych, gdzie precyzja obliczeń jest kluczowa, aby uniknąć błędów zaokrągleń, które mogą występować w przypadku typów zmiennoprzecinkowych. Standardy dotyczące typów danych w SQL, takie jak SQL:2008, również uznają znaczenie precyzyjnych reprezentacji liczbowych, co sprawia, że DECIMAL jest preferowany w wielu zastosowaniach. Warto dodać, że MySQL pozwala na elastyczność w definiowaniu długości, co umożliwia optymalne dostosowanie do specyficznych wymagań aplikacji.

Pytanie 37

Który z wymienionych algorytmów jest algorytmem opartym na iteracji?

A. DFS (przeszukiwanie w głąb)
B. Fibonacci (rekurencyjnie)
C. QuickSort
D. BubbleSort
QuickSort to algorytm rekurencyjny wykorzystujący podejście 'dziel i zwyciężaj' i działa znacznie szybciej niż Bubble Sort. Rekurencyjna wersja algorytmu obliczania Fibonacciego jest klasycznym przykładem rekurencji, a nie iteracji. DFS (Depth First Search) to algorytm przeszukiwania grafów, który może być zarówno rekurencyjny, jak i iteracyjny, ale nie jest algorytmem sortowania, co odróżnia go od Bubble Sort.

Pytanie 38

Która funkcja z biblioteki jQuery w JavaScript służy do naprzemiennego dodawania oraz usuwania klasy z elementu?

A. .changeClass()
B. .toggleClass()
C. .bingClass()
D. .switchClass()
Wybrałeś .toggleClass() i to jest strzał w dziesiątkę pod względem praktycznego stosowania jQuery. Funkcja .toggleClass() dokładnie odpowiada na potrzebę dynamicznej zmiany wyglądu elementu — pozwala jednym wywołaniem dodać klasę, jeśli jej nie ma, albo usunąć, jeśli już istnieje. To niesamowicie przydatne, zwłaszcza przy tworzeniu efektów interaktywnych, takich jak menu rozwijane, animacje kliknięcia, czy zmiany stanów przycisków. W praktyce wygląda to często tak: $('div').toggleClass('active'), gdzie po każdym kliknięciu div otrzymuje lub traci klasę 'active'. Warto zauważyć, że .toggleClass() obsługuje też opcjonalny drugi argument typu boolean, więc możesz wymusić dodanie lub usunięcie klasy zależnie od logiki — to takie jQuery’owe „sprytne przełączanie”. Z mojego doświadczenia, ta metoda jest zdecydowanie jednym z fundamentów, kiedy chodzi o szybkie prototypowanie i pisanie kodu front-endowego zgodnego z zasadami DRY (Don’t Repeat Yourself). Dobrą praktyką jest też, żeby nie nadużywać tej funkcji do zbyt skomplikowanych operacji, bo wtedy łatwo się pogubić w logice klas CSS. No i jak patrzę na projekty w branży, to .toggleClass() jest stosowane praktycznie wszędzie tam, gdzie chodzi o responsywną zmianę interfejsu klienta bez potrzeby pisania rozbudowanego JavaScriptu.

Pytanie 39

Jakie mogą być konsekwencje długotrwałego narażenia na hałas w pracy?

A. Wzrost efektywności pracy
B. Obniżenie ostrości wzroku
C. Choroby skórne
D. Uszkodzenie słuchu i zmęczenie
Długotrwały hałas w miejscu pracy może prowadzić do poważnych konsekwencji zdrowotnych, takich jak uszkodzenie słuchu oraz przewlekłe zmęczenie. Stała ekspozycja na hałas o wysokim natężeniu może powodować stopniową utratę słuchu, szumy uszne, a także zwiększać poziom stresu i obniżać koncentrację. Zmęczenie wynikające z hałasu wpływa negatywnie na produktywność i samopoczucie pracowników, prowadząc do spadku efektywności oraz wzrostu ryzyka popełniania błędów. W celu ochrony przed hałasem zaleca się stosowanie środków ochrony indywidualnej, takich jak nauszniki lub zatyczki do uszu, a także instalowanie ekranów dźwiękochłonnych i ograniczenie źródeł hałasu w środowisku pracy.

Pytanie 40

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

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