Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 12 czerwca 2026 07:26
  • Data zakończenia: 12 czerwca 2026 07:27

Egzamin niezdany

Wynik: 18/40 punktów (45,0%)

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Wskaż algorytm sortowania, który nie jest stabilny?

A. sortowanie przez wstawianie
B. sortowanie szybkie
C. sortowanie przez zliczanie
D. sortowanie bąbelkowe
Często podczas nauki algorytmów sortowania pojawia się zamieszanie na temat stabilności. Stabilność w sortowaniu oznacza, że elementy o tych samych kluczach nie zmieniają swojego wzajemnego położenia. W przypadku sortowania bąbelkowego, przez wstawianie i przez zliczanie – wszystkie te techniki są z natury stabilne, o ile ich standardowa implementacja nie została zmodyfikowana. To dość wygodne, bo gdy pracujemy z bardziej złożonymi danymi, np. obiektami z wieloma polami, stabilność pozwala zachować dodatkowe informacje przy kolejnych sortowaniach. Wielu jednak mylnie zakłada, że wszystkie szybkie algorytmy (jak Quick Sort) są stabilne, bo po prostu są bardziej zaawansowane. Niestety, to nie jest prawda – podstawowy Quick Sort nie zachowuje kolejności równych elementów i w praktyce może zamieszać nam w porządku danych. To jest błąd myślowy, który widzę często nawet u doświadczonych programistów. Sortowanie przez zliczanie (Counting Sort) jest stabilne, ponieważ dla każdego elementu dokładnie wiemy, na które miejsce ma trafić i w razie kolizji zawsze wybieramy ten, który był wcześniej. Podobnie klasyczne sortowanie bąbelkowe i przez wstawianie – oba algorytmy podczas przemieszczania elementów nie przestawiają tych samych wartości względem siebie. Moim zdaniem, właśnie ta stabilność jest często niedoceniana w codziennej pracy, a bywa naprawdę kluczowa przy pracy z danymi złożonymi. Warto zawsze, zanim wybierzemy algorytm sortowania, zastanowić się, czy zależy nam na tym, by zachować oryginalną kolejność dla równych wartości – wtedy zdecydowanie lepiej sięgnąć po stabilne podejście, zamiast używać np. Quick Sort. To nie jest tylko teoria, ale praktyczna wskazówka z życia programistycznego.

Pytanie 2

Co to jest BEM w kontekście CSS?

A. Browser Extension Module - moduł rozszerzeń przeglądarki
B. Metodologia nazewnictwa klas CSS: Block, Element, Modifier
C. Bootstrap Element Manager - narzędzie do zarządzania elementami Bootstrap
D. Backend Encryption Method - metoda szyfrowania danych w backendzie
BEM, czyli Block, Element, Modifier, to metodologia służąca do organizacji i strukturyzacji kodu CSS, co znacząco ułatwia zarządzanie i rozwijanie projektów internetowych. W BEM każda klasa CSS jest zbudowana w sposób, który jasno definiuje jej rolę w kontekście całej aplikacji. Na przykład, blok to niezależny komponent, taki jak 'navbar' czy 'button', element to część bloku, która nie ma sensu sama w sobie, jak 'navbar__item', a modyfikator wskazuje na różne stany lub warianty bloku lub elementu, jak 'button--primary' lub 'button--disabled'. Zastosowanie BEM pozwala na lepszą czytelność kodu oraz unikanie konfliktów nazw, co jest kluczowe w dużych projektach. Praktyka ta jest szeroko stosowana w branży, a wiele frameworków CSS, takich jak Bootstrap, przyjmuje zasady BEM dla swoich komponentów, co wspiera stworzenie spójnego i łatwego w utrzymaniu stylu. Zrozumienie BEM jest fundamentem dla programistów front-end, ponieważ pozwala na efektywniejszą współpracę w zespole oraz lepszą organizację kodu.

Pytanie 3

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 wstawianie
D. Sortowanie przez zliczanie
Sortowanie bąbelkowe ma złożoność O(n²), co czyni je nieefektywnym dla dużych zbiorów danych. Algorytm ten polega na wielokrotnym porównywaniu sąsiadujących elementów i zamianie ich miejscami, co jest procesem czasochłonnym przy dużych danych. Sortowanie przez zliczanie (Counting Sort) jest wydajne, ale najlepiej sprawdza się przy zbiorach o ograniczonym zakresie wartości. Sortowanie przez wstawianie działa w czasie O(n²) i jest skuteczne jedynie dla małych zbiorów danych lub tablic wstępnie posortowanych.

Pytanie 4

Co to jest Redux?

A. Biblioteka do zarządzania stanem aplikacji w JavaScript
B. Framework do tworzenia aplikacji mobilnych
C. System kontroli wersji dla projektów JavaScript
D. Narzędzie do optymalizacji wydajności aplikacji React
Redux to biblioteka służąca do zarządzania stanem aplikacji w JavaScript, a szczególnie popularna w kontekście aplikacji opartych na bibliotece React. Umożliwia centralizację stanu, co sprawia, że zarządzanie nim staje się bardziej przewidywalne i łatwiejsze w utrzymaniu. W koncepcji Redux stan aplikacji jest przechowywany w jednym, niezmiennym obiekcie, co pozwala na ścisłe kontrolowanie jego zmian poprzez wysyłanie akcji. Użytkownicy mogą dzięki temu łatwo śledzić, co się dzieje w aplikacji. Przykładem zastosowania może być aplikacja do zarządzania zadaniami, w której użytkownik może dodawać, edytować lub usuwać zadania. Dzięki Redux, wszystkie zmiany w stanie są rejestrowane, a ich historia może być używana do debugowania czy implementacji funkcji cofania zmian. Dobrą praktyką w pracy z Redux jest stosowanie middleware, takiego jak redux-thunk, co pozwala na obsługę asynchronicznych akcji, a także wykorzystanie narzędzi jak Redux DevTools, które wspierają developerów w monitorowaniu stanu aplikacji.

Pytanie 5

Która z właściwości przycisków typu Radio-button opisanych w przedstawionym fragmencie dokumentacji jest poprawna?

Radio-button label

... The label can be positioned before or after the radio-button by setting the labelPosition property to 'before' or 'after'.

Radio groups

Radio-buttons should typically be placed inside of an <mat-radio-group> unless the DOM structure would make that impossible ... The radio-group has a value property that reflects the currently selected radio-button inside of the group.

Źródło: https://material.angular.io/components/radio/overview

A. Etykieta (label) może być umieszczona wyłącznie po przycisku radio-button
B. Wartość właściwości value grupy radio przechowuje tekst etykiety dla każdego radio-button
C. Właściwość labelPosition może przyjmować jedną z dwóch opcji
D. Przyciski radio-button są organizowane w elemencie o nazwie <radio-group>
Właściwość labelPosition w przyciskach typu radio-button, szczególnie w popularnych bibliotekach jak Angular Material, naprawdę potrafi ułatwić życie programiście. Jej działanie sprowadza się do tego, że pozwala określić, czy etykieta powinna być wyświetlana przed, czy po elemencie radio. Można ustawić tę właściwość na 'before' albo 'after'. Nie brzmi skomplikowanie, ale znaczenie praktyczne jest ogromne – czasem projekt graficzny wymaga, by tekst pojawił się z lewej strony guzika, a czasem z prawej. Dobre praktyki UX też to uwzględniają, bo zgodność z oczekiwaniami użytkownika poprawia czytelność formularzy. Moim zdaniem, jeśli budujesz interfejs dla internautów z różnych środowisk kulturowych (np. z językiem pisanym od prawej do lewej), ta opcja jest wręcz niezbędna. Warto też pamiętać, że takie ustawienie można łatwo nadpisywać na poziomie pojedynczego przycisku, co daje dużą elastyczność. W większości poważnych frameworków webowych, np. Angularze, ta właściwość jest dokumentowana jako podstawowa, bo daje deweloperowi kontrolę bez grzebania w CSS-ach. Sam nie raz korzystałem z labelPosition, szczególnie w korporacyjnych projektach, gdzie musiałem spełniać szczegółowe wymagania projektantów – dzięki temu oszczędza się czas i nerwy.

Pytanie 6

Jaki jest podstawowy okres ochrony autorskich praw majątkowych w krajach Unii Europejskiej?

A. Bezterminowo
B. 70 lat od zgonu autora
C. 50 lat od chwili pierwszej publikacji utworu
D. 75 lat od daty powstania utworu
Okres 50 lat od pierwszej publikacji utworu odnosi się zazwyczaj do praw pokrewnych, takich jak ochrona nagrań dźwiękowych lub filmowych. Ochrona przez 75 lat od powstania utworu nie jest standardem w UE, choć niektóre kraje mogą mieć takie przepisy w odniesieniu do specyficznych typów dzieł. Bezterminowa ochrona dotyczy wyłącznie autorskich praw osobistych, a nie majątkowych, które zawsze wygasają po określonym czasie.

Pytanie 7

Zamieszczony fragment kodu w Android Studio wdraża metodę nasłuchującą dla obsługi zdarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. naciśnięcia przycisku
B. zmiany stanu kontrolki Switch
C. zmiany w polu tekstowym
D. wybierania daty
W tym fragmencie kodu pojawia się metoda setOnClickListener, która, jeśli się tak chwilę zastanowić, nie jest wykorzystywana do reagowania na zmianę tekstu, wybieranie daty czy też zmianę stanu kontrolki Switch. To właśnie kliknięcia – czyli naciśnięcia przycisku – są tutaj obsługiwane. Spotkałem się już z tym, że osoby zaczynające przygodę z Androidem mylą czasem różne typy listenerów, bo faktycznie jest ich sporo i mają dość podobne nazwy, przez co łatwo się pogubić. Żeby wykryć zmianę w polu tekstowym (np. EditText), trzeba zastosować TextWatcher, gdzie obsługujemy metody jak afterTextChanged czy beforeTextChanged. Z kolei wybieranie daty zwykle wiąże się z użyciem DatePickerDialog, a tam stosujemy DatePickerDialog.OnDateSetListener, który zupełnie inaczej wygląda w kodzie. Jeśli chodzi o kontrolki Switch, to reagowanie na ich stan odbywa się za pomocą setOnCheckedChangeListener, gdzie w metodzie onCheckedChanged dowiadujemy się, czy Switch został włączony czy wyłączony. Typowym błędem jest patrzenie tylko na nazwę metody i przypisywanie jej do obsługi różnych kontrolek bez głębszego zastanowienia. Moim zdaniem warto poświęcić chwilę na przestudiowanie dokumentacji Androida, bo tam dość jasno opisano, które listener’y są przeznaczone do jakich zdarzeń. Ostatecznie, setOnClickListener zawsze oznacza, że obsługujemy kliknięcie – to taki standard branżowy w Androidzie i praktycznie nie stosuje się go do niczego innego niż reakcja na naciśnięcie widoku przez użytkownika.

Pytanie 8

Który z poniższych opisów najlepiej definiuje kompilator?

A. System monitorujący zmiany w kodzie źródłowym
B. Narzędzie do analizy kodu w czasie rzeczywistym
C. Narzędzie przekształcające kod źródłowy na plik wykonywalny
D. Program łączący dynamiczne biblioteki z kodem źródłowym
Analiza kodu w czasie rzeczywistym to zadanie debuggera, który umożliwia śledzenie i analizowanie działania programu na bieżąco, a nie kompilatora. Program łączący dynamiczne biblioteki to linker, który działa po skompilowaniu kodu źródłowego i łączy pliki obiektowe oraz biblioteki w jeden program wykonywalny. System śledzący zmiany w kodzie źródłowym to system kontroli wersji, jak Git, który monitoruje zmiany w plikach projektu, ale nie zajmuje się tłumaczeniem kodu na język maszynowy.

Pytanie 9

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

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

Pytanie 10

W jaki sposób definiuje się konstruktor kopiujący w ramach klasy?

A. Tworzy nowy obiekt jako wierną kopię innego obiektu
B. Generuje nowy obiekt klasy bez przypisywania wartości
C. Inicjuje obiekt klasy na podstawie klasy dziedziczącej
D. Generuje nowy obiekt i usuwa wcześniejszy
Tworzenie nowego obiektu bez przypisania wartości to zadanie domyślnego konstruktora, który inicjalizuje obiekt, ale nie kopiuje stanu innego obiektu. Tworzenie obiektu na podstawie klasy pochodnej to proces dziedziczenia, a nie kopiowania – w tym przypadku tworzona jest nowa instancja klasy dziedziczącej, ale nie kopiowany jest stan innego obiektu. Usunięcie obiektu i stworzenie nowego nie jest zadaniem konstruktora kopiującego – za usuwanie odpowiada destruktor, który działa automatycznie podczas niszczenia obiektów.

Pytanie 11

Który z poniższych składników NIE jest konieczny do stworzenia klasy w C++?

A. Definicja funkcji członkowskich klasy
B. Deklaracja atrybutów klasy
C. Zastosowanie słowa kluczowego class
D. Definicja destruktora
Deklaracja pól klasy jest niezbędnym elementem definiowania klasy, ponieważ to one przechowują dane i stan obiektu. Metody klasy są równie ważne, ponieważ definiują zachowanie obiektu i umożliwiają manipulowanie jego danymi. Użycie słowa kluczowego 'class' jest podstawowym krokiem w definicji klasy w C++, bez którego kompilator nie rozpozna konstrukcji jako klasy. W praktyce brak któregokolwiek z tych elementów uniemożliwia prawidłowe utworzenie klasy.

Pytanie 12

Liczba A4 w zapisie heksadecymalnym ma odpowiadający jej zapis binarny

A. 1011100
B. 1010100
C. 10100100
D. 10100010
Temat zamiany liczb z systemu szesnastkowego na binarny wraca na różnych etapach nauki elektroniki czy informatyki i z mojego doświadczenia właśnie tutaj pojawia się sporo zamieszania. Problem najczęściej polega na tym, że próbując zamienić liczbę A4 na binarną, niektórzy traktują całość jako liczbę dziesiętną (np. 1010100 to 84 dziesiętnie), nie wiedząc, że każdy znak heksadecymalny to dokładnie cztery bity. Taka pomyłka prowadzi do niepoprawnych wyników – w efekcie powstają binarne reprezentacje za krótkie lub za długie, nieodzwierciedlające rzeczywistego układu bitów. Zdarza się też, że przeliczając ręcznie, ktoś zamienia jedynie ostatnią cyfrę (np. 4 na 100), zapominając, że litery A-F mają swoje konkretne wartości (A=1010). To bardzo częsty błąd, szczególnie na początku nauki, bo intuicyjnie łatwiej pracować tylko z cyframi 0-9. Można też spotkać się z sytuacją, gdy ktoś próbuje połączyć bity w niewłaściwej kolejności, przez co uzyskuje np. 10100010 – to połączenie 1010 (A) i 0010 (2), a nie 0100 (4). Z punktu widzenia profesjonalisty, każda taka pomyłka może skutkować bardzo poważnymi konsekwencjami w praktyce – wystarczy źle zinterpretować adres czy wartości rejestru i cały algorytm się wywraca. Dlatego warto wyrobić nawyk dzielenia każdej cyfry heksadecymalnej na osobne grupy czterech bitów i dopiero potem sklejać całość. Standardy branżowe, np. w dokumentacji układów cyfrowych czy protokołach komunikacyjnych, zawsze prezentują dane w jednym z tych systemów, dlatego bez tej umiejętności trudno przejść na wyższy poziom. Sam kiedyś parę razy na tym poległem i teraz wiem, że warto się zatrzymać i dokładnie przemyśleć każdy krok zamiany.

Pytanie 13

Które słowo kluczowe w C++ służy do definiowania klasy nadrzędnej?

A. virtual
B. public
C. class
D. base
Słowo kluczowe 'class' jest podstawowym elementem języka C++ i służy do deklarowania klasy. Definiuje ono strukturę zawierającą pola (zmienne) oraz metody (funkcje członkowskie), które określają zachowanie obiektu. 'Class' pozwala na enkapsulację danych, co oznacza ukrywanie implementacji wewnętrznej i udostępnianie interfejsu publicznego. Dzięki temu klasy stanowią podstawę programowania obiektowego, umożliwiając organizację kodu w logiczne jednostki. Przykładowa deklaracja klasy w C++ wygląda następująco: 'class Samochod { public: void Jedz(); private: int predkosc; };'.

Pytanie 14

Jakie z wymienionych narzędzi służy do emulacji mobilnych urządzeń podczas developowania aplikacji?

A. TensorFlow
B. Genymotion
C. Postman
D. Numpy
Genymotion to jedno z najbardziej zaawansowanych narzędzi do emulacji urządzeń mobilnych podczas tworzenia aplikacji na system Android. Umożliwia symulowanie działania aplikacji na różnych urządzeniach i wersjach systemu Android, co pozwala programistom na testowanie kompatybilności i wydajności aplikacji w różnych warunkach. Genymotion oferuje szybkie emulowanie, obsługę GPS, kamery oraz czujników, co czyni go niezwykle przydatnym narzędziem w procesie rozwoju aplikacji mobilnych. Dzięki wsparciu dla integracji z Android Studio, Genymotion jest popularnym wyborem wśród deweloperów tworzących aplikacje na platformę Android.

Pytanie 15

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

A. 10
B. 1024
C. 100
D. 1000
Odpowiedzi, które wskazują na wartości 10, 100 i 1000 kilobajtów jako równowartość 1 megabajta, są błędne z perspektywy standardów komputerowych. Wartość 10 KB jest zdecydowanie zbyt mała, aby mogła odpowiadać wielkości 1 MB, which is a fundamental misunderstanding of data measurement. Tego rodzaju konwersja wprowadza w błąd, ponieważ nie uwzględnia potęg liczby 2, które są kluczowe w kontekście binarnego systemu liczenia. Z kolei 100 KB również nie jest właściwe, ponieważ jest to zaledwie 1/10 megabajta, co jest dalekie od rzeczywistej konwersji. Ponadto, traktowanie 1000 KB jako równowartości 1 MB jest nawiązaniem do systemu dziesiętnego, który jest używany przez niektóre branże, ale nie jest to standardowe podejście w obliczeniach komputerowych. Z technicznego punktu widzenia, przyjęcie, że 1 MB to 1000 KB, może prowadzić do błędnych obliczeń oraz problemów z zarządzaniem danymi w systemach operacyjnych, które stosują binarny system pomiaru pamięci. Dlatego kluczowe jest, aby zrozumieć różnice między tymi systemami, aby uniknąć nieporozumień w zakresie pojemności danych.

Pytanie 16

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

function Person(name) {
  this.name = name;
}

Person.prototype.sayHello = function() {
  return `Hello, ${this.name}!`;
};

const person = new Person('John');
console.log(person.sayHello());
A. Hello, undefined!
B. Hello, [object Object]!
C. Hello, John!
D. TypeError: person.sayHello is not a function
Wynik działania podanego kodu to 'Hello, John!'. Dzieje się tak, ponieważ tworzony jest obiekt 'person' z konstruktora 'Person', który przypisuje wartość 'John' do właściwości 'name'. Metoda 'sayHello' zdefiniowana w prototypie klasy 'Person' wykorzystuje szablon literowy (template literal), aby zwrócić powitanie, wstawiając wartość 'name' obiektu. To podejście jest zgodne z dobrymi praktykami programowania w JavaScript, ponieważ wykorzystuje prototypy do dzielenia się metodami pomiędzy instancjami obiektów. W praktyce, takie rozwiązania pozwalają na oszczędność pamięci i zwiększają wydajność, gdyż wszystkie instancje korzystają z tej samej metody, a nie mają osobnych kopii. Przykładowo, jeśli chcielibyśmy dodać więcej osób, wystarczy utworzyć nowe instancje 'Person' bez konieczności powielania kodu metody 'sayHello'.

Pytanie 17

Co to jest XSS (Cross-Site Scripting)?

A. Technika optymalizacji kodu JavaScript do zwiększenia wydajności strony
B. Luka bezpieczeństwa pozwalająca na wstrzyknięcie złośliwego kodu do stron przeglądanych przez innych użytkowników
C. Framework do tworzenia responsywnych stron internetowych
D. Protokół komunikacyjny używany w aplikacjach internetowych
Cross-Site Scripting (XSS) to luka bezpieczeństwa, która umożliwia atakującym wstrzykiwanie złośliwego kodu JavaScript do stron internetowych, które są następnie przeglądane przez innych użytkowników. W wyniku tego ataku, złośliwy kod może być wykonany w kontekście przeglądarki ofiary, co może prowadzić do kradzieży sesji, danych osobowych, czy też przejęcia kontroli nad kontem użytkownika. Aby zapobiegać XSS, programiści powinni stosować techniki takie jak walidacja i oczyszczanie danych wejściowych, a także korzystanie z nagłówków HTTP, takich jak Content Security Policy (CSP). Przykładem może być sytuacja, gdy aplikacja webowa przyjmuje dane w formularzach bez odpowiedniego sprawdzenia, co pozwala na umieszczenie skryptu, który zyskuje dostęp do cookies użytkownika. Zrozumienie i zabezpieczenie się przed XSS jest kluczowe w kontekście budowania bezpiecznych aplikacji webowych, co jest zgodne z najlepszymi praktykami branżowymi.

Pytanie 18

Rozpoczęcie tworzenia procedury składowej o nazwie dodajUsera w MS SQL wymaga użycia poleceń

A. add dodajUsera procedure
B. add procedure dodajUsera
C. create procedure dodajUsera
D. create dodajUsera procedure
Pytanie o polecenie rozpoczynające tworzenie procedury składowej w MS SQL często sprawia trudność, bo w różnych systemach bazodanowych bywa różnie, a niektóre sformułowania mogą się wydawać intuicyjne przez analogię do angielskiego czy innych technologii. W rzeczywistości jednak tylko 'create procedure nazwa' jest akceptowany przez silnik SQL Servera. Użycie słów 'add' lub błędnej kolejności, jak 'add dodajUsera procedure' lub 'add procedure dodajUsera', to typowy błąd wynikający z przenoszenia logiki z innych poleceń SQL, jak 'ALTER TABLE ... ADD COLUMN', gdzie rzeczywiście 'add' służy do dodawania kolumn czy indeksów, a nie procedur. Zdarza się, że ktoś, kto zaczyna naukę, myli pojęcia i traktuje dodawanie procedury jak dodawanie kolumny czy rekordu – niestety, w projektowaniu struktury bazy 'add' nie służy do tworzenia żadnych obiektów typu procedury, funkcje, widoki. Z kolei sformułowanie 'create dodajUsera procedure' wygląda jakby ktoś próbował dosłownie przetłumaczyć z angielskiego, ale nie zachował poprawnej kolejności składniowej. W T-SQL bardzo ważna jest właśnie kolejność słów kluczowych – 'create procedure' jest całościową instrukcją, a nazwa idzie dopiero po tym. W praktyce, jeżeli użyjesz którejkolwiek z tych niepoprawnych form, otrzymasz błąd składniowy. Moim zdaniem warto zawsze sięgać po dokumentację lub IntelliSense w Management Studio – tam od razu widać, co jest obsługiwane przez silnik. Częstym błędem jest też oczekiwanie, że SQL będzie działał jak inne języki programowania, gdzie kolejność czasem nie ma takiego znaczenia – w SQL wszystko musi być zgodne ze ścisłą składnią. Dlatego tak ważne jest wyrobienie sobie nawyku korzystania z poprawnych konstrukcji, bo potem na egzaminach, w pracy czy przy migracjach na inne wersje serwera można wtopić mnóstwo czasu na debugowanie takich drobiazgów.

Pytanie 19

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

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

Pytanie 20

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

A. naprawić błąd w funkcji sprawdz, który polega na braku nawiasów {} w pętli for
B. poprawnie zapisać warunek w instrukcji if w linii 11, np. sprawdz(x)==true
C. dodać deklarację funkcji sprawdz przed funkcją main
D. zadeklarować zmienną sprawdz przed jej wykorzystaniem w linii 11
Odpowiedź jest trafna, bo w języku C++ kompilator musi wiedzieć o istnieniu funkcji zanim zostanie ona użyta w kodzie, np. w funkcji main. Bez wcześniejszej deklaracji, kompilator nie zna sygnatury funkcji i nie potrafi zweryfikować wywołania, co skutkuje błędem typu 'implicit declaration of function'. Deklaracja funkcji to taki sygnał informujący kompilator „hej, taka funkcja będzie i będzie przyjmować takie argumenty, a zwracać taki typ”. Praktycznie rzecz biorąc, przed funkcją main wystarczy wpisać np. 'bool sprawdz(int x);', żeby wszystko grało. To szczególnie ważne przy większych projektach czy pracy w zespołach, gdzie pliki nagłówkowe z deklaracjami funkcji są standardem. Pozwala to na lepszą czytelność i porządek w kodzie – kompilator wie, czego się spodziewać, a Ty unikasz dziwnych, trudnych do znalezienia błędów. Moim zdaniem taka organizacja kodu to podstawa, szczególnie jeśli kiedyś będziesz korzystać z bibliotek lub cudzych funkcji – deklaracje są wtedy wręcz obowiązkowe. To zasada, której trzyma się większość zespołów programistycznych i, szczerze mówiąc, sam kilka razy w młodości zapomniałem o deklaracji, przez co debugowanie trwało wieki. Warto od razu wyrobić sobie taki nawyk, bo to oszczędza sporo nerwów i czasu, a kod staje się solidniejszy i bardziej profesjonalny.

Pytanie 21

Która z poniższych metod najlepiej nadaje się do wizualnego przedstawienia procesu decyzyjnego?

A. Schemat blokowy
B. Lista kroków
C. Drzewo decyzyjne
D. Pseudokod
Niestety, ta odpowiedź nie jest poprawna. Przeanalizujmy, dlaczego żadna z pozostałych opcji nie jest najlepszym wyborem. Schemat blokowy to popularne narzędzie wizualizacji, które może zawierać elementy decyzyjne w postaci rombów symbolizujących warunki. Jednak jego głównym przeznaczeniem jest przedstawianie sekwencji działań i ogólnego przepływu procesu, nie samej struktury decyzji. Schemat blokowy odpowiada na pytanie „jak przebiega proces?", podczas gdy w kontekście procesu decyzyjnego potrzebujemy odpowiedzi na pytanie „jakie mam opcje i dokąd prowadzą?". Pseudokod jest odpowiedzią błędną z fundamentalnego powodu - nie jest metodą wizualną. To tekstowa forma zapisu algorytmu wykorzystująca uproszczoną składnię przypominającą język programowania. Owszem, może opisywać logikę decyzyjną za pomocą instrukcji warunkowych, ale robi to wyłącznie w formie tekstu, bez graficznej reprezentacji. Lista kroków również nie spełnia wymagań pytania. Po pierwsze, jest formą tekstową, nie wizualną. Po drugie, ma strukturę liniową i sekwencyjną, która nie oddaje rozgałęzionej natury procesu decyzyjnego, gdzie różne wybory prowadzą do różnych ścieżek. Poprawną odpowiedzią jest drzewo decyzyjne, zaprojektowane specjalnie do wizualizacji procesów decyzyjnych. Jego hierarchiczna struktura naturalnie oddaje sposób podejmowania wyborów - węzły reprezentują punkty decyzyjne, gałęzie symbolizują dostępne opcje, a liście pokazują końcowe rezultaty. Dzięki temu jednym spojrzeniem można ogarnąć wszystkie możliwe scenariusze i ich konsekwencje.

Pytanie 22

Która z poniższych metod nie należy do cyklu życia komponentu w React.js?

A. componentWillPublish()
B. componentDidUpdate()
C. componentDidMount()
D. componentWillUnmount()
Metoda componentWillPublish() nie jest częścią cyklu życia komponentu w React.js, co czyni ją poprawną odpowiedzią na to pytanie. W React.js istnieje szereg zdefiniowanych metod cyklu życia, które umożliwiają programistom zarządzanie stanem komponentów w określonych momentach ich istnienia. Do najbardziej istotnych z nich należą: componentDidMount(), componentDidUpdate() oraz componentWillUnmount(). Metoda componentDidMount() jest wywoływana po zamontowaniu komponentu w DOM, co pozwala na inicjalizację danych, takich jak pobieranie danych z API. Z kolei componentDidUpdate() jest wywoływana, gdy komponent zostaje zaktualizowany, co jest doskonałym momentem na reagowanie na zmiany w stanie lub propach. Metoda componentWillUnmount() jest wywoływana tuż przed odmontowaniem komponentu, co jest przydatne do czyszczenia zasobów, takich jak anulowanie subskrypcji lub usuwanie nasłuchiwaczy. Zrozumienie tych metod jest kluczowe dla efektywnego zarządzania cyklem życia komponentów w aplikacjach React, co prowadzi do lepszej wydajności i utrzymania kodu.

Pytanie 23

Który z języków programowania jest powszechnie stosowany do tworzenia interfejsów użytkownika przy użyciu XAML?

A. C#
B. Java
C. Objective-C
D. C++
C++ jest często używany do tworzenia aplikacji desktopowych, ale w przypadku interfejsów użytkownika XAML jest bardziej związany z C#. Java jest językiem wykorzystywanym głównie do tworzenia aplikacji na Androida oraz aplikacji webowych i backendowych, ale nie jest typowo używany do programowania interfejsów w XAML. Objective-C to starszy język programowania dla systemów Apple i nie jest związany z XAML, który jest specyficzny dla technologii Microsoftu.

Pytanie 24

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

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

Pytanie 25

Jakie elementy zostaną wyświetlone w przeglądarce po wykonaniu kodu źródłowego stworzonego za pomocą dwóch funkcjonalnie równoważnych fragmentów? KOD W ANGULAR:

tags: string[] = ['tag1', 'tag2', 'tag3' ];
// ...
<p *ngFor="let tag of tags"> {{tag}} </p>
KOD W REACT.JS:
state = {   tags: ['tag1', 'tag2', 'tag3']   };
// ...   /* w instrukcji return metody render */
<React.Fragment>
  { this.state.tags.map(tag => <p key={tag}>{tag}</p>) }
</React.Fragment>
A. Trzy paragrafy, każdy odpowiadający kolejnemu elementowi tablicy tags.
B. Jeden paragraf zawierający wszystkie elementy tablicy tags w kolejności.
C. Trzy paragrafy, w każdym z nich tekst o treści: {tag}.
D. Jeden paragraf z pierwszym elementem tablicy tags.
Kod generuje trzy paragrafy, każdy z kolejnym elementem tablicy tags. Jest to standardowy sposób iteracji po elementach tablicy i renderowania ich jako oddzielnych elementów HTML. W praktyce, takie podejście jest szeroko stosowane w aplikacjach frontendowych, gdzie dynamicznie tworzone elementy interfejsu użytkownika są generowane na podstawie tablic lub list danych. Każdy element tablicy jest iterowany i osobno przekształcany w znacznik HTML, co pozwala na łatwe zarządzanie i aktualizowanie treści strony w czasie rzeczywistym. To podejście jest zgodne z najlepszymi praktykami dotyczącymi manipulacji DOM i zapewnia wysoką wydajność aplikacji.

Pytanie 26

Który z wymienionych poniżej przykładów stanowi system informacji przetwarzany przez system informatyczny?

A. System zarządzania oświetleniem drogowym
B. System wentylacyjny w biurowcach
C. System PESEL
D. System do monitorowania temperatury serwerów
System wentylacji w biurowcach, system monitorowania temperatury serwerów oraz system sterowania światłami drogowymi, chociaż są przykładami systemów inżynieryjnych, nie stanowią systemów informacji przetwarzanych przez systemy informatyczne w tradycyjnym rozumieniu. System wentylacji w biurowcach to mechanizm regulujący przepływ powietrza, który działa na podstawie fizycznych zasad termodynamiki i wymiany ciepła. W tym przypadku dane są zbierane i przetwarzane w sposób, który nie angażuje intensywnego zarządzania informacjami osobowymi ani gromadzenia danych w skali, jaką obserwuje się w systemach informacyjnych. Z kolei system monitorowania temperatury serwerów służy do zapewnienia odpowiednich warunków pracy sprzętu komputerowego. Choć wykorzystuje technologię informatyczną do zbierania danych, jego funkcjonalność koncentruje się na diagnostyce i bezpieczeństwie sprzętu, a nie na przetwarzaniu informacji o osobach czy instytucjach. Ostatecznie system sterowania światłami drogowymi, mimo że operuje na podstawie zebranych danych o ruchu drogowym, w istocie nie prowadzi złożonych operacji przetwarzania informacji w sensie administracyjnym ani nie gromadzi danych osobowych. Jego działanie opiera się na algorytmach, które reagują na ruch uliczny, a nie na zarządzaniu informacjami w sposób, który jest charakterystyczny dla systemów takich jak PESEL.

Pytanie 27

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

Co to jest JWT (JSON Web Token)?

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

Pytanie 29

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

A. .bingClass()
B. .toggleClass()
C. .changeClass()
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 30

Na schemacie widoczny jest fragment diagramu blokowego pewnego algorytmu. Ile razy zostanie zweryfikowany warunek n<7?

Ilustracja do pytania
A. 8
B. 6
C. 7
D. 5
Wartość 8 pokazuje, że chyba źle zrozumiałeś, jak działa liczba iteracji. Pojawiły się dodatkowe porównania, które nie powinny się zdarzyć w pętli. A wynik 5 może być przez to, że pętla zakończyła się za szybko, albo myślałeś, że zmienna zaczyna się z innej wartości. Z kolei 7 to już za dużo iteracji, co nie pasuje do standardowego działania pętli warunkowej.

Pytanie 31

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

A. Destruktor
B. Metoda zaprzyjaźniona
C. Metoda statyczna
D. Konstruktor kopiujący
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 32

Który z poniższych formatów jest najczęściej używany do wymiany danych w aplikacjach webowych?

A. CSV
B. JSON
C. XML
D. YAML
JSON (JavaScript Object Notation) jest najczęściej używanym formatem wymiany danych w aplikacjach webowych ze względu na swoją prostotę, czytelność oraz łatwość w integracji z JavaScript. JSON jest lekki i pozwala na szybkie przetwarzanie danych, co czyni go idealnym wyborem w kontekście nowoczesnych aplikacji webowych, które często korzystają z technologii AJAX do komunikacji z serwerem. Przykładem zastosowania JSON może być przesyłanie danych z serwera do przeglądarki w aplikacjach SPA (Single Page Applications), gdzie asynchroniczne żądania wymagają formatu, który można łatwo zdeserializować na obiekt JavaScript. JSON wspiera zagnieżdżone struktury danych i kolekcje, co pozwala na modelowanie złożonych relacji między danymi. Ponadto, jego popularność doprowadziła do rozwoju wielu bibliotek i narzędzi, które ułatwiają pracę z tym formatem, takich jak `JSON.parse()` i `JSON.stringify()` w JavaScript. W związku z tym, JSON stał się de facto standardem dla wymiany danych w ekosystemie webowym, co potwierdzają również standardy takie jak REST, które często wykorzystują właśnie ten format do komunikacji z API.

Pytanie 33

Który z faz cyklu życia projektu wiąże się z identyfikacją wymagań użytkownika?

A. Etap planowania
B. Wdrażanie
C. Analiza
D. Przeprowadzanie testów
Planowanie koncentruje się na ustaleniu harmonogramu, budżetu i alokacji zasobów, ale nie obejmuje dogłębnej analizy wymagań użytkownika. Implementacja to faza, w której kod jest tworzony na podstawie wcześniejszych ustaleń, ale nie jest to etap zbierania wymagań. Testowanie odbywa się po implementacji i służy wykrywaniu błędów, a nie definiowaniu oczekiwań użytkownika wobec produktu.

Pytanie 34

Który z poniższych aspektów najdokładniej określa cel realizacji projektu?

A. Stworzenie harmonogramu działań
B. Zidentyfikowanie technologii, które mogą być zastosowane
C. Określenie problemu i metody jego rozwiązania
D. Ocena postępów w czasie realizacji projektu
Określenie problemu i sposobu jego rozwiązania to fundamentalny cel każdego projektu. Bez jasno zdefiniowanego problemu i sprecyzowanej metody jego rozwiązania, projekt może stać się chaotyczny i nieefektywny. Precyzyjna analiza problemu pozwala na wyznaczenie celów, które prowadzą do stworzenia wartościowego produktu lub usługi. Dzięki temu zespół może skupić się na kluczowych zadaniach i efektywnie zarządzać zasobami. Określenie problemu to pierwszy krok w metodykach Agile i Waterfall, który warunkuje sukces całego przedsięwzięcia.

Pytanie 35

1 terabajt (TB) to ile gigabajtów (GB)?

A. 1000
B. 2048
C. 1024
D. 512
No to fajnie, że trafiłeś w temat! 1 terabajt (TB) to 1024 gigabajty (GB), co wynika z systemu binarnego, który w IT jest najczęściej używany. Trochę technicznie mówiąc, 1 TB to tak naprawdę 2^40 bajtów, co daje nam ogromną liczbę – dokładnie 1 099 511 627 776 bajtów. Jak podzielisz to przez 1 073 741 824 bajtów, które to są 1 GB, to wyjdzie 1024 GB. Warto wiedzieć, że w świecie komputerów i systemów operacyjnych operujemy głównie na tym systemie binarnym. Ale uwaga, bo producenci dysków często podają pojemności w systemie dziesiętnym, i wtedy 1 TB to jakby 1 000 GB. To może wprowadzać zamieszanie, więc dobrze jest sprawdzać specyfikacje i mieć to na uwadze, żeby nie było nieporozumień. Większość systemów, jak Windows czy Linux, działa w tym binarnym, więc warto to znać, gdyż to ułatwia pracę zarówno użytkownikom, jak i fachowcom z branży IT.

Pytanie 36

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

A. Rozpocząć resuscytację krążeniowo-oddechową
B. Zadbać o własne bezpieczeństwo
C. Sprawdzić, czy występuje krwawienie
D. Wezwać ambulans
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 37

W zamieszczonej ramce znajdują się notatki testera dotyczące przeprowadzanych testów aplikacji. Jakiego typu testy planuje przeprowadzić tester?

  • zmierzyć czas zalogowania się użytkownika
  • ustalić domyślną liczbę produktów na stronie, dla której renderowanie jest akceptowalne czasowo
  • czy wizualizacja danych na mapie przebiega bez opóźnień?
  • czy czas logowania wzrasta znacznie przy logowaniu 10 użytkowników, 100, 1000?
  • jaka minimalna prędkość pobierania jest wymagana, aby aplikacja była zaakceptowana przez klienta?
A. Bezpieczeństwa
B. Jednostkowe
C. Interfejsu
D. Wydajnościowe
Testy jednostkowe, choć niezwykle ważne, koncentrują się na weryfikacji małych fragmentów kodu, zwykle pojedynczych funkcji lub metod. Mają one na celu upewnienie się, że każdy komponent działa zgodnie z oczekiwaniami. W kontekście pytania, które odnosi się do mierzenia czasu logowania i wydajności pod obciążeniem, testy jednostkowe nie są odpowiednie, ponieważ nie sprawdzają, jak system radzi sobie z różnym obciążeniem. Testy interfejsu koncentrują się na sprawdzaniu, czy użytkownik może wchodzić w interakcje z systemem w sposób intuicyjny i bezbłędny. Nie dotyczą jednak aspektów wydajnościowych, takich jak czas renderowania czy czas logowania przy dużym obciążeniu. Z kolei testy bezpieczeństwa są niezbędne do identyfikacji luk w systemie, które mogłyby być wykorzystane przez atakujących. Skupiają się na takich aspektach jak kontrola dostępu, ochrona danych i odporność na ataki typu DDoS. W pytaniu jednak nie ma odniesienia do kwestii bezpieczeństwa, takich jak czy system jest odporny na eskalację uprawnień czy ataki typu SQL Injection. Często błędnie myśli się, że wystarczy sprawdzić podstawowe funkcje aplikacji, ignorując, jak zachowuje się ona pod obciążeniem, co jest krytycznym aspektem jej rzeczywistej użyteczności w środowisku produkcyjnym. Aby zapewnić pełną jakość aplikacji, konieczne jest przeprowadzanie wszystkich typów testów odpowiednio do ich celu, ale w kontekście pytania tylko testy wydajnościowe bezpośrednio odnoszą się do przedstawionych zagadnień związanych z czasem odpowiedzi i obciążeniem systemowym.

Pytanie 38

Na podstawie treści zawartej w ramce, określ, który z rysunków ilustruje element odpowiadający klasie Badge zdefiniowanej w bibliotece Bootstrap?

Ilustracja do pytania
A. Rysunek 3
B. Rysunek 1
C. Rysunek 2
D. Rysunek 4
Wybór nieprawidłowej odpowiedzi wynika z niezrozumienia specyfiki elementów badge które są kluczowym komponentem bibliotek takich jak Bootstrap Elementy te pełnią rolę wizualnego identyfikatora przypisując liczbowe lub krótkie tekstowe oznaczenia do elementów interfejsu co jest powszechnie stosowane w powiadomieniach i kontrolach liczby nowych elementów w aplikacjach webowych Rysunek 1 przedstawia ikony glyphicon które są elementami graficznymi wykorzystywanymi do wzbogacenia wizualnego interfejsu użytkownika lecz nie spełniają funkcji badge ponieważ nie przedstawiają liczbowych oznaczeń Innym błędnym wyborem mógłby być Rysunek 3 gdzie widzimy elementy alert które służą do informowania użytkowników o różnych stanach w aplikacjach takich jak sukcesy błędy czy ostrzeżenia ale również nie pełnią roli badge Rysunek 4 prezentuje komponenty przycisków stylizowanych w Bootstrapie które choć są kluczowe dla nawigacji i interakcji z użytkownikiem nie mają charakteru liczbowego oznaczenia wskazującego na ilość lub obecność nowych elementów Wybór takich odpowiedzi może wynikać z mylnego utożsamiania wizualnych elementów dekoracyjnych lub informacyjnych z badge które mają ściśle zdefiniowaną funkcję informacyjną w kontekście ilościowym Właściwe rozpoznanie i zastosowanie elementów badge jest niezbędne w tworzeniu klarownych i użytecznych interfejsów webowych zgodnie z dobrymi praktykami UX/UI co przyczynia się do lepszego odbioru i funkcjonalności aplikacji

Pytanie 39

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

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

Pytanie 40

Jaką technologię stosuje się do powiązania aplikacji internetowej z systemem baz danych?

A. JavaScript
B. CSS
C. HTTP
D. SQL
HTTP to protokół, który pozwala na przesyłanie danych między przeglądarką a serwerem, ale to nie to samo, co narzędzie do zarządzania danymi w bazach. CSS się zajmuje stylizowaniem stron i nie ma nic wspólnego z bazami danych. JavaScript z kolei to język do robienia fajnych, interaktywnych rzeczy na stronach, ale sam w sobie nie ogarnie bazy danych. Musisz użyć jakiegoś dodatkowego narzędzia, na przykład Node.js albo ORM.