Wyniki egzaminu

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

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

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

Który z wymienionych parametrów dysku twardego ma największy wpływ na jego wydajność?

A. Rodzaj złącza (SATA/PCIe)
B. Pojemność dysku
C. Prędkość obrotowa talerzy (RPM)
D. Ilość pamięci podręcznej (Cache)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prędkość obrotowa talerzy (RPM) jest kluczowym parametrem wpływającym na szybkość dysku twardego. Wyrażana w obrotach na minutę, RPM definiuje, jak szybko talerze dysku mogą obracać się, co z kolei wpływa na czas dostępu do danych. Dyski HDD o wyższej prędkości obrotowej, takie jak 7200 RPM w porównaniu do 5400 RPM, zazwyczaj oferują lepszą wydajność, co przekłada się na szybsze odczyty i zapisy danych. Przykładowo, w zastosowaniach wymagających intensywnego przetwarzania danych, takich jak gry komputerowe czy edycja wideo, wybór dysku o wyższej prędkości obrotowej może znacznie poprawić ogólne wrażenia użytkownika. Warto również zauważyć, że chociaż złącze SATA i PCIe wpływają na szybkość transferu, to w kontekście dysków HDD, RPM pozostaje jednym z najważniejszych czynników. Standardy takie jak SATA III oferują transfery do 6 Gb/s, ale jeśli talerze nie obracają się wystarczająco szybko, potencjał transferu nie zostanie w pełni wykorzystany. Z tego powodu, RPM jest kluczowym wskaźnikiem wydajności w kontekście dysków twardych.

Pytanie 2

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

A. Zakaz korzystania z oprogramowania open-source
B. Nałożenie grzywny lub kary więzienia
C. Unieważnienie umowy licencyjnej użytkownika końcowego
D. Obowiązek zamieszczenia publicznych przeprosin

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Naruszenie prawa autorskiego może skutkować nałożeniem grzywny lub karą więzienia. W zależności od skali naruszenia oraz obowiązujących przepisów, osoba odpowiedzialna za naruszenie może zostać pociągnięta do odpowiedzialności karnej lub cywilnej. Kary mogą obejmować nie tylko grzywny finansowe, ale także konieczność wypłaty odszkodowań na rzecz twórcy lub właściciela praw autorskich. W niektórych przypadkach naruszenie praw autorskich na dużą skalę może prowadzić do kary pozbawienia wolności, co podkreśla wagę przestrzegania przepisów o ochronie własności intelektualnej.

Pytanie 3

Które z wymienionych opcji wspiera osoby niewidome w korzystaniu z witryn internetowych?

A. Implementacja czytnika ekranu (screen reader)
B. Umożliwienie modyfikacji czcionki
C. Zmiana rozdzielczości ekranu
D. Ograniczenie liczby grafik na stronie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dodanie czytnika ekranu (screen reader) jest kluczowym rozwiązaniem, które znacząco ułatwia osobom niewidomym i słabowidzącym korzystanie z serwisów internetowych. Czytniki ekranu to oprogramowanie przekształcające tekst na stronie internetowej na mowę, co pozwala użytkownikom na interakcję z treścią dostępną w internecie. Technologia ta opiera się na standardach dostępności, takich jak WCAG (Web Content Accessibility Guidelines), które zalecają projektowanie stron przyjaznych dla osób z różnymi niepełnosprawnościami. Przykładem działania czytnika ekranu może być program JAWS, który umożliwia użytkownikom nawigację po stronach internetowych poprzez komendy klawiaturowe oraz odczytywanie treści na głos. Dzięki czytnikom ekranu, osoby niewidome mają możliwość dostępu do informacji, komunikacji oraz interakcji w sieci, co wpisuje się w ideę cyfrowej inkluzji i równości szans. Wprowadzenie czytnika ekranu na stronie internetowej to nie tylko techniczne wsparcie, ale również wyraz odpowiedzialności społecznej, mający na celu zapewnienie, że wszyscy użytkownicy mają równe prawo do korzystania z zasobów w sieci.

Pytanie 4

Co oznacza termin 'hoisting' w JavaScript?

A. Technika zarządzania pamięcią polegająca na usuwaniu nieużywanych obiektów
B. Metoda ładowania skryptów z zewnętrznych źródeł
C. Optymalizacja kodu wykonywana przez silnik JavaScript
D. Przenoszenie deklaracji zmiennych i funkcji na górę ich zakresu podczas fazy kompilacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Termin 'hoisting' w JavaScript odnosi się do mechanizmu, który przenosi deklaracje zmiennych oraz funkcji na górę ich zakresu, zanim kod zostanie wykonany. To oznacza, że zmienne i funkcje mogą być używane przed ich faktycznym zadeklarowaniem w kodzie. Dla zmiennych zadeklarowanych za pomocą 'var', ich deklaracja jest unoszona, ale nie inicjalizacja. To oznacza, że można odwołać się do zmiennej przed jej przypisaniem, ale jej wartość będzie 'undefined'. W przypadku funkcji, cała deklaracja jest przenoszona, co pozwala na wywoływanie funkcji przed ich zdefiniowaniem. Przykład takiego działania to: `console.log(a); var a = 5;` - w tym przypadku, logowanie zmiennej 'a' przed przypisaniem zwróci 'undefined'. Zrozumienie hoistingu jest kluczowe dla pisania poprawnego i czytelnego kodu w JavaScript oraz unikania pułapek, które mogą prowadzić do trudnych do wykrycia błędów. Holistyczne podejście do hoistingu zachęca programistów do stosowania deklaracji na początku funkcji lub skryptu, co poprawia przejrzystość i zarządzanie zakresem w kodzie.

Pytanie 5

Jakie metody umożliwiają przesyłanie danych z serwera do aplikacji front-end?

A. metody POST
B. biblioteki jQuery
C. protokołem SSH
D. formatu JSON

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
JSON, czyli JavaScript Object Notation, to dość lekki format wymiany danych. Jest prosty do zrozumienia zarówno dla ludzi, jak i komputerów. To dlatego jest tak popularny w aplikacjach webowych, gdzie przesyła się dane między serwerem a klientem. Dzięki strukturze klucz-wartość łatwo jest mapować obiekty w JavaScript, co przyspiesza cały proces z danymi. Pomysł na zastosowanie? Na przykład, gdy przesyłasz dane użytkownika z serwera do swojej aplikacji, to często zamieniasz obiekt JavaScript na format JSON i wysyłasz go przez AJAX. A co ważne, JSON jest zgodny z różnymi standardami, więc możesz go używać praktycznie wszędzie. Co ciekawe, w nowoczesnych aplikacjach JSON jest zdecydowanie bardziej popularny niż XML, bo jest prostszy i mniej obciążający dla sieci. To wszystko sprawia, że strony ładują się szybciej, a użytkownicy mają lepsze doświadczenia.

Pytanie 6

Zestaw operatorów przedstawiony poniżej należy do kategorii operatorów:

*      /      ++      --      %
A. arytmetycznych
B. logicznymi
C. porównawczymi
D. przypisania

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Operatorzy tacy jak *, /, ++, -- czy % należą do grupy operatorów arytmetycznych, ponieważ służą bezpośrednio do wykonywania operacji matematycznych na liczbach. To właśnie dzięki nim programista może realizować podstawowe działania, takie jak mnożenie, dzielenie, inkrementacja, dekrementacja oraz obliczanie reszty z dzielenia. W praktyce codziennej, np. przy obliczeniach faktur, przetwarzaniu danych liczbowych czy algorytmach związanych z obliczaniem średnich, te operatory są wręcz niezastąpione. Moim zdaniem bez solidnego zrozumienia operatorów arytmetycznych trudno ruszyć dalej w programowaniu, bo pojawiają się niemal we wszystkich zadaniach, od najprostszych po najbardziej zaawansowane. Warto też pamiętać, że zgodnie ze standardami języków takich jak C++, Java czy Python, te operatory mają swoje określone priorytety i kolejność wykonywania, którą trzeba znać, żeby uniknąć błędów logicznych. Przykładowo, operator ++ jest często wykorzystywany w pętlach do zwiększania wartości liczników, a % pozwala sprawdzić parzystość liczby. Osobiście uważam, że nawet jeśli na początku wydają się proste, to ich niuanse, np. różnice między ++i a i++, potrafią zaskoczyć, szczególnie w bardziej złożonych wyrażeniach.

Pytanie 7

Teoria wyznaczania celów definiuje właściwie sformułowany cel jako SMART, od pierwszych liter słów: specyficzny, Mierzalny, Ambitny, Realny oraz Terminowy. Wskaź, który cel wymaga wysiłku i stanowi wyzwanie dla pracownika?

A. Ambitny
B. Terminowy
C. Mierzalny
D. Specyficzny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź „Ambitny” rzeczywiście najlepiej oddaje ideę celu, który wymaga wysiłku i jest wyzwaniem dla pracownika. Moim zdaniem właśnie to kryterium - bycie ambitnym - odgrywa kluczową rolę w motywowaniu zespołu do podnoszenia swoich umiejętności i przekraczania codziennych ograniczeń. Praktyka pokazuje, że wyznaczanie ambitnych celów, choć może się wydawać nieco ryzykowne, rozwija kreatywność i pozwala wychodzić poza strefę komfortu. Branżowe standardy zarządzania projektami (np. PMI czy PRINCE2) mocno podkreślają wagę ambitnych, ale jednocześnie realistycznych celów – taki balans sprawia, że pracownicy nie popadają w rutynę i są zmotywowani do długotrwałego rozwoju. W codziennych realiach np. produkcyjnych, cel ambitny może oznaczać zwiększenie wydajności o 20% w pół roku, a nie tylko utrzymanie obecnego poziomu. Z mojego doświadczenia wynika, że dobrze sformułowany, ambitny cel uruchamia zdrową rywalizację i buduje poczucie sensu pracy. Warto pamiętać, by ambicja nie prowadziła do nierealnych oczekiwań – tutaj ważna jest rola lidera, żeby dobrze poznać możliwości zespołu. Sumując: ambitny cel to nie tylko wyzwanie, ale też szansa na znaczący rozwój zawodowy i osobisty.

Pytanie 8

Który komponent systemu komputerowego zajmuje się transferem danych pomiędzy procesorem a pamięcią RAM?

A. Mostek północny (Northbridge)
B. Zasilacz
C. Kontroler DMA
D. Karta graficzna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Mostek północny, znany również jako Northbridge, jest kluczowym elementem architektury komputerowej, który odpowiada za komunikację pomiędzy procesorem a pamięcią RAM. Jego głównym zadaniem jest koordynowanie przepływu danych w systemie oraz zapewnienie szybkiego dostępu do pamięci, co jest niezbędne dla wydajności całego systemu. Mostek północny jest odpowiedzialny za zarządzanie magistralami danych, a także interfejsami, takimi jak PCI Express, które łączą różne komponenty. Dzięki zastosowaniu standardów, takich jak DDR (Double Data Rate), mostek północny umożliwia efektywne przesyłanie danych w wysokiej prędkości. Praktycznym przykładem działania mostka północnego jest sytuacja, kiedy procesor potrzebuje załadować dane z pamięci RAM do rejestrów – mostek północny zarządza tym procesem, minimalizując opóźnienia i maksymalizując wydajność. W nowoczesnych systemach komputerowych mostek północny jest często zintegrowany z procesorem, co dodatkowo zwiększa efektywność komunikacji oraz zmniejsza czas dostępu do danych.

Pytanie 9

Czym jest klasa w programowaniu obiektowym?

A. wskaźnik
B. instrukcja
C. typ danych
D. zmienna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Klasa w programowaniu obiektowym to w praktyce taki szablon, według którego tworzymy konkretne obiekty. To coś jak przepis, dzięki któremu programista może zdefiniować własny, złożony typ danych, opisujący realny byt czy problem. Klasa określa, jakie dane (pola, właściwości) oraz zachowania (metody, funkcje) mają mieć obiekty, które potem powstaną na jej podstawie. Programując w językach takich jak Java, C++ czy Python, właśnie klasy pozwalają nam zamknąć logikę i dane w jednym opakowaniu – to jest jeden z filarów OOP (programowania obiektowego). Moim zdaniem nie da się robić sensownych, skalowalnych projektów bez klas, bo to one pozwalają sensownie ogarnąć złożoność. Przykład? W aplikacji bankowej klasa KontoBankowe może mieć pola typu saldo, numer konta i metody do przelewów. Każde nowe konto to osobny obiekt tego typu, ale wszystkie zachowują się spójnie. Warto przy tym pamiętać, że dobra praktyka nakazuje projektować klasy tak, żeby były jak najbardziej uniwersalne, czyli zgodnie z zasadą DRY (Don’t Repeat Yourself) i SOLID. Często spotykam się z opinią, że klasa to „sztywny typ danych”, ale to nieprawda – dzięki dziedziczeniu czy polimorfizmowi można je elastycznie rozszerzać. Podsumowując, klasa to własny, często złożony typ danych stworzony specjalnie pod potrzeby danej aplikacji – i właśnie za to tak się je ceni.

Pytanie 10

Jakie są różnice między konstruktorem a zwykłą metodą w klasie?

A. Konstruktor jest uruchamiany jedynie przez destruktor
B. Konstruktor można wywołać bez konieczności tworzenia obiektu
C. Konstruktor powinien zwracać jakąś wartość
D. Konstruktor zawsze nosi tę samą nazwę co klasa i nie zwraca wartości

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Konstruktor różni się od zwykłych metod klasy tym, że nosi taką samą nazwę jak klasa i nie zwraca żadnej wartości, nawet `void`. Konstruktor jest wywoływany automatycznie podczas tworzenia obiektu i nie można go wywołać ręcznie jak zwykłą metodę. Jego zadaniem jest inicjalizacja pól obiektu i przygotowanie go do działania. Przykład w C++: `class Samochod { public: Samochod() { marka = "Ford"; } }`. W przeciwieństwie do innych metod konstruktor nie wymaga deklaracji typu zwracanego, co jest jedną z jego najbardziej charakterystycznych cech.

Pytanie 11

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

A. Konsekwentne nazewnictwo
B. Maksymalna złożoność funkcji
C. Samodokumentujący się kod
D. Jedna odpowiedzialność funkcji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Maksymalna złożoność funkcji to pojęcie, które odnosi się do zasady, że funkcje powinny być jak najmniej złożone, aby były zrozumiałe i łatwe w utrzymaniu. Czysty kod promuje ideę, że każda funkcja powinna mieć jasno określoną odpowiedzialność, co w praktyce oznacza ograniczenie jej złożoności. Przykładem może być rozdzielenie złożonej logiki biznesowej na kilka prostszych funkcji, co ułatwia ich testowanie i ponowne wykorzystanie. Warto zwrócić uwagę, że zgodnie z zasadą KISS (Keep It Simple, Stupid) dąży się do prostoty w projektowaniu kodu, co nie tylko zwiększa jego czytelność, ale także minimalizuje ryzyko błędów. Dobrze napisany kod powinien być również samodokumentujący się, co oznacza, że jego struktura i nazwy zmiennych powinny jasno wskazywać na ich funkcjonalność. Przestrzeganie zasady maksymalnej złożoności funkcji jest kluczowe w kontekście długoterminowego utrzymania aplikacji, ponieważ zmniejsza koszty związane z modyfikacjami oraz poprawkami.

Pytanie 12

Co to jest JWT (JSON Web Token)?

A. Biblioteka JavaScript do manipulacji danymi JSON
B. Protokół transferu plików JSON między serwerami
C. Otwarty standard do bezpiecznego przekazywania danych w formacie JSON
D. Format kompresji danych JavaScript i HTML w aplikacjach webowych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 13

Gdzie są przechowywane informacje w sytuacji korzystania z chmury obliczeniowej?

A. Na lokalnym serwerze użytkownika
B. Na dysku twardym użytkownika
C. Na nośnikach optycznych użytkownika
D. Na zdalnych serwerach dostawcy usług

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dane w chmurze obliczeniowej są przechowywane przede wszystkim na zdalnych serwerach dostawcy usług chmurowych. Tego rodzaju przechowywanie danych ma na celu zapewnienie wysokiej dostępności, skalowalności oraz bezpieczeństwa. Dostawcy usług chmurowych, tacy jak Amazon Web Services, Microsoft Azure czy Google Cloud Platform, inwestują w infrastrukturę, która obejmuje centra danych rozmieszczone na całym świecie. Te centra danych są wyposażone w zaawansowane systemy zabezpieczeń, takie jak firewall'e, szyfrowanie danych i systemy detekcji intruzów. Dzięki temu użytkownicy mogą mieć pewność, że ich dane są bezpieczne. Dodatkowo, zdalne serwery oferują elastyczność w zakresie przydzielania zasobów obliczeniowych, co pozwala na dynamiczne reagowanie na zmieniające się potrzeby biznesowe. Warto również wspomnieć o standardach bezpieczeństwa, takich jak ISO 27001 czy SOC 2, które regulują sposób przechowywania i zarządzania danymi w chmurze, zapewniając zgodność z najlepszymi praktykami branżowymi.

Pytanie 14

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

public class Car: Vehicle { ... }
A. jest klasą podstawową (nie dziedziczy po innej klasie)
B. jest zaprzyjaźniona z klasą Vehicle
C. używa pól prywatnych klasy Vehicle
D. odziedzicza po Vehicle

Brak odpowiedzi na to pytanie.

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

Pytanie 15

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

A. SQL
B. CSS
C. JavaScript
D. HTTP

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
SQL, czyli język do zarządzania danymi, to mega ważna rzecz, jeśli chodzi o relacyjne bazy danych. Dzięki niemu można tworzyć, modyfikować, a nawet usuwać tabele. To taki most, który łączy aplikacje webowe z bazą danych. Dzięki SQL programiści mogą łatwo przechowywać i przetwarzać różne informacje na serwerze. Przykłady? Można generować listy produktów, ogarniać użytkowników czy analizować dane z transakcji. Właściwie bez SQL-a nie dałoby się zbudować solidnych aplikacji, na przykład tych, które działają na MySQL, PostgreSQL czy Microsoft SQL Server. Chociaż pewnie o tym wiesz, ale warto to zaznaczyć.

Pytanie 16

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. Właściwość labelPosition może przyjmować jedną z dwóch opcji
B. Przyciski radio-button są organizowane w elemencie o nazwie <radio-group>
C. Wartość właściwości value grupy radio przechowuje tekst etykiety dla każdego radio-button
D. Etykieta (label) może być umieszczona wyłącznie po przycisku radio-button

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 17

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

A. Bitowe "lub"
B. Operację przesunięcia bitów w prawo
C. Logiczne "lub"
D. Bitowe "xor"

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Operator `|` w języku C++ jest operatorem bitowym `OR`, który porównuje bity dwóch liczb i zwraca `1` w pozycji bitu, jeśli przynajmniej jeden z odpowiadających sobie bitów jest `1`. Przykład: `5 | 3` (w notacji binarnej `0101 | 0011`) zwróci `0111`, co odpowiada liczbie `7`. Operatory bitowe są często używane w programowaniu systemowym, kryptografii oraz manipulacji danymi na poziomie bitowym.

Pytanie 18

Który z wymienionych poniżej typów danych stanowi przykład typu stałoprzecinkowego?

A. int
B. float
C. decimal
D. double

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Typ danych 'int' (integer) to przykład typu stałoprzecinkowego, który przechowuje liczby całkowite. Stałoprzecinkowe typy danych są podstawą w programowaniu, ponieważ pozwalają na efektywne przechowywanie wartości bez części ułamkowej, co przyspiesza obliczenia i redukuje zużycie pamięci. Typ 'int' jest szeroko stosowany w językach takich jak C, C++, Java i Python, a jego główną zaletą jest szybkość operacji arytmetycznych oraz przewidywalność wyników. Stałoprzecinkowe typy danych znajdują zastosowanie w algorytmach, systemach sterowania i aplikacjach embedded, gdzie precyzja obliczeń jest kluczowa.

Pytanie 19

Który z wymienionych parametrów określa prędkość procesora?

A. Częstotliwość taktowania
B. Liczba rdzeni
C. Wielkość pamięci podręcznej
D. Rodzaj złącza

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Częstotliwość taktowania procesora, wyrażana najczęściej w gigahercach (GHz), jest kluczowym parametrem opisującym szybkość działania jednostki centralnej. Określa, ile cykli zegara procesor jest w stanie wykonać w ciągu jednej sekundy. Wyższa częstotliwość oznacza większą ilość operacji, które procesor może przetworzyć w danym czasie, co bezpośrednio wpływa na jego wydajność. Przykładowo, procesor o częstotliwości 3,0 GHz może wykonać 3 miliardy cykli na sekundę, co sprawia, że jest w stanie przeprowadzać bardziej skomplikowane obliczenia i efektywniej zarządzać zadaniami. W praktyce jednak sama częstotliwość nie jest jedynym wskaźnikiem wydajności; istotne są też inne czynniki, takie jak architektura procesora, liczba rdzeni czy szybkość pamięci RAM. Standardy, takie jak Intel Core i9 czy AMD Ryzen 5000, dostarczają informacji na temat maksymalnej częstotliwości taktowania, co pozwala konsumentom lepiej dobierać sprzęt do swoich potrzeb. Warto również zauważyć, że wielu nowoczesnych procesorów stosuje technologię Turbo Boost, która pozwala na chwilowe zwiększenie częstotliwości w celu uzyskania lepszej wydajności przy intensywnych obciążeniach.

Pytanie 20

Jakie jest przeznaczenie polecenia "git merge"?

A. Do łączenia zmian z różnych gałęzi
B. Do zakładania nowego repozytorium
C. Do pobierania aktualizacji zdalnego repozytorium
D. Do usuwania zmian w repozytorium

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polecenie "git merge" służy w Git do łączenia zmian z różnych gałęzi. Kiedy pracujemy w zespole i każdy programista rozwija swój fragment kodu na osobnej gałęzi, w pewnym momencie trzeba te zmiany zebrać do kupy, żeby powstała jedna, wspólna wersja projektu. Tu właśnie pojawia się "merge" – pozwala w prosty sposób dołączyć zmiany z jednej gałęzi do drugiej, najczęściej z feature branch do develop albo main. Praktycznie rzecz biorąc, to polecenie sprawdza się zawsze wtedy, gdy chcemy zintegrować efekty pracy kilku osób lub wersje rozwojowe z główną linią kodu. Moim zdaniem, korzystanie z "git merge" to w zasadzie codzienność w projektach zespołowych, bo prawie nikt już nie pracuje tylko na jednej gałęzi. Warto też pamiętać, że merge może czasem prowadzić do konfliktów, jeśli te same fragmenty plików były zmieniane równolegle – wtedy trzeba ręcznie rozwiązać te rozbieżności. W praktyce, dobrą praktyką jest regularne mergowanie, żeby uniknąć lawiny konfliktów na koniec sprintu. Dla mnie "merge" to narzędzie absolutnie kluczowe, bez którego ciężko sobie wyobrazić sensowną pracę z Gitem. No i jeszcze – to nie to samo co "rebase", chociaż oba służą do integracji zmian, ale w różny sposób. Merge zostawia historię połączeń, co ułatwia śledzenie zmian w większych projektach.

Pytanie 21

Co to jest klasa abstrakcyjna?

A. Klasa, która nie może posiadać żadnych metod
B. Klasa, która może zawierać zarówno metody zdefiniowane, jak i niezdefiniowane (czysto wirtualne)
C. Klasa, która może być dziedziczona, ale nie można jej instancjonować
D. Klasa, która zawsze dziedziczy z klasy bazowej

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź „Klasa, która może być dziedziczona, ale nie można jej instancjonować” jest poprawna, ponieważ najtrafniej oddaje istotę klasy abstrakcyjnej w programowaniu obiektowym. Klasa abstrakcyjna służy jako wzorzec lub szablon dla klas pochodnych, określając wspólne cechy i zachowania, które powinny zostać zaimplementowane w klasach dziedziczących. Nie tworzy się z niej bezpośrednio obiektów, ponieważ sama w sobie nie reprezentuje kompletnego bytu, lecz raczej koncepcję lub ogólny typ. Dzięki temu mechanizmowi programista może narzucić strukturę kodu, zwiększyć jego czytelność oraz ułatwić dalsze rozszerzanie aplikacji. Takie podejście sprzyja stosowaniu zasad programowania obiektowego, takich jak dziedziczenie i polimorfizm, a także pomaga w tworzeniu bardziej uporządkowanych i łatwiejszych w utrzymaniu projektów.

Pytanie 22

Która z metodologii w zarządzaniu projektami umożliwia łatwe dostosowywanie się do zmieniających się potrzeb klienta?

A. Model Waterfall
B. Model spiralny
C. Scrum
D. Kanban

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Scrum to metodologia zarządzania projektami, która pozwala na elastyczne reagowanie na zmieniające się wymagania klienta. W Scrumie rozwój produktu odbywa się w iteracyjnych sprintach, a na końcu każdego z nich dostarczana jest działająca część aplikacji. Regularne przeglądy i retrospekcje umożliwiają dostosowywanie zakresu prac, co pozwala na bieżąco wprowadzać zmiany i spełniać oczekiwania klienta. Scrum promuje współpracę z interesariuszami, co zwiększa prawdopodobieństwo sukcesu projektu i dostarczenia wartościowego produktu.

Pytanie 23

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest:

A. monitorowanie działań użytkownika oraz generowanie wyjątków
B. dostosowanie interfejsu użytkownika do różnych kategorii użytkowników
C. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
D. informowanie obiektów o modyfikacji stanu innych obiektów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy Obserwator (ang. Observer) to jeden z klasyków ze świata programowania obiektowego i frontendu. Główna jego rola polega na tym, by pozwalać obiektom (obserwatorom) reagować na zmiany stanu innych obiektów (podmiotów) bez sztywnego powiązania tych klas ze sobą. W praktyce, w aplikacjach webowych bardzo często wykorzystuje się ten wzorzec w architekturach typu MVC czy MVVM, gdzie widoki muszą się automatycznie aktualizować po zmianie modelu danych. Przykład: w Reactcie używasz hooka useState lub useEffect – i Twoje komponenty „obserwują” stan aplikacji. Gdy stan się zmienia, komponenty same się przebudowują, a Ty nie musisz ręcznie wywoływać każdej aktualizacji. Podobnie działa np. EventEmitter w Node.js, Redux z subskrypcjami store czy nawet WebSockety, gdzie klient „słucha” na zmiany po stronie serwera. Dzięki temu komunikacja pomiędzy różnymi częściami systemu staje się luźno powiązana, co ułatwia utrzymanie i rozbudowę kodu. Moim zdaniem bez zrozumienia tego wzorca trudno ogarnąć nowoczesny frontend, bo większość bibliotek UI gdzieś pod spodem go wykorzystuje. Przy okazji: Observer to wzorzec zalecany przez GOF (Gang of Four), więc to nie jest tylko „fajna technika”, ale sprawdzony standard branżowy. Warto wiedzieć, że podejście to minimalizuje ryzyko błędów w synchronizacji danych i pozwala naturalnie reagować na zmiany bez pisania stosów callbacków. To spora oszczędność czasu i kodu.

Pytanie 24

Które z poniższych jest podstawowym rodzajem testów używanych w testowaniu jednostkowym?

A. Testy integracyjne
B. Testy systemowe
C. Testy akceptacyjne
D. Testy jednostkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy jednostkowe są kluczowym elementem procesu testowania oprogramowania, szczególnie w kontekście metodologii programowania zwinnego. Polegają one na testowaniu pojedynczych najmniejszych części programu, takich jak funkcje czy metody, w izolacji od reszty systemu. Dzięki temu możemy szybko wykryć błędy i upewnić się, że dany fragment kodu działa zgodnie z oczekiwaniami. W praktyce, testy jednostkowe są często automatyzowane i stanowią podstawę dla procesu ciągłej integracji (CI). Przykładem zastosowania testów jednostkowych może być sprawdzenie, czy funkcja dodająca dwie liczby zwraca poprawny wynik dla różnych zestawów danych wejściowych. Dzięki testom jednostkowym programiści mogą z większą pewnością modyfikować i rozwijać kod, mając pewność, że nie wprowadzają nowych błędów. To właśnie testy jednostkowe pozwalają na szybkie wykrywanie regresji i są fundamentem dla bardziej zaawansowanych form testowania, takich jak testy integracyjne czy systemowe. Dbanie o dobrze zdefiniowany zestaw testów jednostkowych jest uznawane za dobrą praktykę w branży IT i podnosi jakość oprogramowania.

Pytanie 25

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

A. add procedure dodajUsera
B. add dodajUsera procedure
C. create dodajUsera procedure
D. create procedure dodajUsera

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polecenie 'create procedure dodajUsera' to właśnie ten sposób, w jaki w Microsoft SQL Server deklaruje się początek nowej procedury składowanej. Wynika to bezpośrednio ze składni T-SQL, gdzie słowo 'create' inicjuje tworzenie nowego obiektu w bazie danych, a 'procedure' określa typ obiektu – procedurę składowaną. Dalej podaje się nazwę, tu akurat 'dodajUsera'. Moim zdaniem, to jedno z podstawowych, ale i najważniejszych poleceń dla każdego, kto chce serio pracować z SQL Serverem, bo bez zrozumienia tej składni bardzo szybko można się pogubić nawet przy prostych operacjach. T-SQL od lat nie zmienia tej konwencji i to jest bardzo wygodne – można śmiało korzystać z tutoriali czy dokumentacji sprzed kilku wersji serwera, bo tu akurat niewiele się zmienia. Przykład praktyczny: gdybyś chciał dodać prostą procedurę, która wstawia użytkownika do tabeli, zacząłbyś właśnie tak: 'create procedure dodajUsera AS BEGIN --tutaj kod END'. Warto wiedzieć, że dobrym zwyczajem jest zawsze nazywać procedury zgodnie z tym, co robią, a nie jakoś przypadkowo, i też często dodawać prefix, np. 'usp_' (od 'user stored procedure'), żeby potem łatwo było je odróżnić od funkcji czy triggerów. Przy dużym projekcie pozwala to zachować porządek. No i nie można zapominać o wersjonowaniu takich procedur – w firmach często stosuje się repozytoria kodu SQL. Generalnie, w środowisku produkcyjnym, każda nowa procedura powinna zaczynać się właśnie od 'create procedure', bez żadnych skrótów czy zamienników.

Pytanie 26

Jaki jest wymagany sposób do realizacji algorytmu sortowania bąbelkowego na n-elementowej tablicy?

A. n-liczby warunków
B. jedna pętla operująca na 2n elementach oraz warunek
C. dwie pętle funkcjonujące na co najmniej (n+1) elementach każda
D. dwie pętle działające na najwyżej n-elementach każda

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Aby zaimplementować algorytm sortowania bąbelkowego, potrzebne są dwie pętle iteracyjne, które porównują i zamieniają miejscami elementy tablicy. Zewnętrzna pętla iteruje po całej tablicy, natomiast wewnętrzna pętla wykonuje kolejne porównania i przestawia elementy, jeśli są one w nieprawidłowej kolejności. Algorytm sortowania bąbelkowego charakteryzuje się prostotą, ale jego złożoność obliczeniowa wynosi O(n²), co czyni go mało efektywnym dla dużych zbiorów danych. Niemniej jednak, jest to jedno z pierwszych ćwiczeń programistycznych, które wprowadza do zagadnień algorytmicznych i uczy podstaw iteracji oraz manipulacji tablicami. Pomimo swojej niskiej wydajności, sortowanie bąbelkowe jest często wykorzystywane do celów edukacyjnych oraz w przypadkach, gdy prostota implementacji ma większe znaczenie niż szybkość działania.

Pytanie 27

Jaka jest złożoność obliczeniowa poniższego algorytmu?

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            array[i][j][k] = i + j + k;
        }
    }
}
A. O(n log n)
B. O(n²)
C. O(n³)
D. O(n)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Złożoność obliczeniowa przedstawionego algorytmu wynosi O(n³), co wynika z trzech zagnieżdżonych pętli, z których każda iteruje po n elementach. W praktyce oznacza to, że liczba operacji, które algorytm wykonuje, rośnie proporcjonalnie do sześcianu liczby n. Przykładowo, jeśli mamy dwa wymiary, złożoność będzie O(n²), ale w tym przypadku mamy trzy wymiary (i, j, k), co podwyższa złożoność do O(n³). Takie sytuacje zdarzają się często w problemach związanych z przetwarzaniem danych w trzech wymiarach, takich jak grafika komputerowa czy analiza danych 3D. W branży, dobrze jest pamiętać, że złożoność O(n³) może być nieefektywna dla dużych n, dlatego warto analizować algorytmy pod kątem ich wydajności i stosować różne techniki optymalizacji, jak na przykład podział danych czy struktury danych zmniejszające złożoność. Warto również zrozumieć, że dla dużych wartości n, czas wykonania algorytmu może być zauważalnie dłuższy, co wpływa na ogólną efektywność systemu.

Pytanie 28

Jakie informacje mogą być zapisywane w cookies przeglądarki?

A. Dane przechowywane w systemie baz danych
B. Prywatne dane użytkownika, na przykład hasła
C. Preferencje użytkownika, takie jak język lub styl strony
D. Kod źródłowy aplikacji internetowej

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Preferencje użytkownika, takie jak język strony, motyw kolorystyczny lub preferencje dotyczące układu, są typowymi danymi przechowywanymi w ciasteczkach przeglądarki. Mechanizm ciasteczek pozwala na personalizację doświadczenia użytkownika i jest szeroko stosowany w aplikacjach webowych w celu dostosowania interfejsu do indywidualnych potrzeb. Cookies umożliwiają także zapamiętywanie sesji użytkownika, co pozwala uniknąć konieczności wielokrotnego logowania. Informacje te są przechowywane lokalnie w przeglądarce użytkownika i mogą być odczytywane przez aplikację podczas każdej wizyty. Stosowanie ciasteczek zgodnie z przepisami, takimi jak RODO (GDPR), wymaga informowania użytkownika o ich przeznaczeniu oraz uzyskiwania jego zgody na ich przechowywanie, co zapewnia transparentność i zgodność z prawem.

Pytanie 29

Które z wymienionych stanowi przykład struktury dziedziczenia?

A. Klasa Pojazd nie dziedziczy z żadnej klasy
B. Klasa Samochód ma dziedziczenie od klasy Pojazd
C. Klasa Pojazd ma dziedziczenie od klasy Samochód
D. Klasa Samochód i Pojazd nie są ze sobą powiązane

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Hierarchia dziedziczenia to struktura klas, w której klasa pochodna dziedziczy właściwości i metody klasy bazowej. Klasa 'Samochód' dziedzicząca po klasie 'Pojazd' jest przykładem prawidłowej hierarchii dziedziczenia – klasa 'Samochód' rozszerza klasę 'Pojazd', dziedzicząc ogólne właściwości pojazdu, takie jak prędkość czy typ silnika. Dziedziczenie umożliwia rozszerzanie istniejącej funkcjonalności bez konieczności przepisywania tego samego kodu, co jest jednym z fundamentów programowania obiektowego.

Pytanie 30

Który z wymienionych wzorców projektowych jest najbardziej odpowiedni do uproszczenia interfejsu złożonego systemu?

A. Metoda szablonowa (Template method)
B. Kompozyt (Composite)
C. Singleton (Singleton)
D. Fasada (Facade)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy Fasada (Facade) upraszcza interfejs do złożonego systemu poprzez dostarczenie jednolitego punktu dostępu do wielu podsystemów. Dzięki temu klienci mogą korzystać z funkcji systemu za pomocą prostego interfejsu, co zwiększa czytelność kodu i ułatwia jego utrzymanie. Fasada jest szczególnie przydatna w dużych aplikacjach, gdzie wiele modułów wymaga skomplikowanej konfiguracji lub współdziałania. Wprowadzenie fasady ukrywa złożoność wewnętrzną systemu, jednocześnie zapewniając dostęp do niezbędnych funkcjonalności. To rozwiązanie jest często stosowane w systemach z wieloma interfejsami API, w architekturze mikroserwisów oraz przy integracji zewnętrznych bibliotek.

Pytanie 31

Jakie operacje na plikach można uznać za podstawowe?

A. Otwieranie, zapisywanie, odczytywanie, zamykanie
B. Usuwanie oraz tworzenie nowych plików
C. Jedynie otwieranie oraz zamykanie plików
D. Zmiana rozszerzenia plików podczas działania programu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Podstawowe operacje na plikach obejmują otwieranie, zapisywanie, odczytywanie i zamykanie. Te cztery operacje są fundamentem zarządzania plikami w programowaniu i pozwalają na efektywne przechowywanie oraz przetwarzanie danych. Otwarcie pliku umożliwia dostęp do jego zawartości, zapis pozwala na modyfikację lub tworzenie nowych plików, odczyt umożliwia pobieranie danych, a zamknięcie pliku zapewnia integralność danych i zwalnia zasoby systemowe. W wielu językach, takich jak C++, Java czy Python, operacje te są realizowane za pomocą dedykowanych funkcji i klas, co ułatwia ich implementację w kodzie.

Pytanie 32

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

A. 100
B. 1000
C. 10
D. 1024

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W informatyce jednostki pamięci są często używane do określenia pojemności danych. 1 megabajt (MB) równa się 1024 kilobajtom (KB) w systemie binarnym, który jest podstawowym systemem liczbowym używanym w komputerach. Wynika to z faktu, że komputery operują w systemie binarnym, gdzie wartości są potęgami liczby 2. Z definicji, 1 MB to 2 do potęgi 20 bajtów, co daje 1048576 bajtów. Kiedy dzielimy tę wartość przez 1024, otrzymujemy 1024 kilobajty. W praktyce, ta konwersja jest niezwykle istotna w kontekście zarządzania pamięcią oraz określania rozmiarów plików. Na przykład, przy pobieraniu plików z internetu, znając tę konwersję, można lepiej oszacować czas pobierania oraz zarządzanie przestrzenią dyskową. Warto również zauważyć, że niektóre systemy operacyjne i producenci sprzętu używają systemu dziesiętnego, w którym 1 MB to 1000 KB, co prowadzi do nieporozumień. Dlatego znajomość różnic między systemami binarnym i dziesiętnym jest kluczowa dla zrozumienia pojemności pamięci komputerowej i odpowiednich jednostek.

Pytanie 33

Kolor Pale Green w modelu RGB przedstawia się jako RGB(152, 251, 152). Jaki jest szesnastkowy kod tego koloru?

A. A0 FE A0
B. 98 FB 98
C. A0 FB A0
D. 98 FE 98

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prawidłowa odpowiedź to RGB(152, 251, 152) zapisane w systemie szesnastkowym jako 98 FB 98. To nie jest przypadkowe – konwersja formatu RGB na HEX polega na przekształceniu każdej ze składowych (czerwony, zielony, niebieski) na odpowiadającą wartość heksadecymalną. W tym przypadku: 152 to 98 w systemie szesnastkowym, 251 to FB, a 152 znowu 98. W praktyce, takie zapisy są absolutną podstawą przy projektowaniu stron internetowych, stylów CSS albo aplikacji mobilnych, gdzie kolory opisuje się właśnie kodami HEX. Moim zdaniem, każdy kto chce działać w grafice komputerowej albo frontendzie, powinien mieć ten mechanizm w jednym palcu. Warto wiedzieć, że standardy W3C przewidują właśnie taki sposób zapisu i przyjmują zarówno notację z #, jak i bez spacji, czyli #98FB98. Często spotkasz ten format np. w plikach stylów LESS, SASS czy nawet podczas korzystania z generatorów palet. Sam nieraz miałem sytuację, że szybka konwersja RGB na HEX ratowała projekt, bo klient przesłał kolory tylko w jednym systemie. Dobrą praktyką jest też zawsze sprawdzać, czy konwersja nie zniekształciła zamierzonego koloru – niektóre programy graficzne lub biblioteki mogą dokonywać zaokrągleń, co minimalnie wpływa na odcień. Warto więc nie tylko ufać narzędziom, ale rozumieć manualnie, jak się to liczy. No, i to co ciekawe – Pale Green jest kolorem dość uniwersalnym, często spotykanym w projektowaniu UI, bo jest delikatny i nie męczy wzroku. Szczerze polecam pobawić się konwersją różnych kolorów, bo to po prostu się przydaje.

Pytanie 34

Przedstawione w filmie działania wykorzystują narzędzie

A. generatora kodu java
B. debuggera analizującego wykonujący kod
C. kompilatora dla interfejsu graficznego
D. generatora GUI przekształcającego kod do języka XAML

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrana odpowiedź jest trafna, bo faktycznie narzędzie pokazane w filmie to generator GUI, który potrafi przekształcać kod do języka XAML. XAML (czyli Extensible Application Markup Language) jest powszechnie używany do deklaratywnego opisywania interfejsów użytkownika, na przykład w aplikacjach WPF czy UWP na platformie .NET. Jak dla mnie, korzystanie z takich generatorów to ogromna wygoda, bo pozwala błyskawicznie przenosić projekt graficzny do formatu czytelnego dla platformy Microsoftu. Z mojego doświadczenia, wiele zespołów programistycznych stosuje takie rozwiązania, żeby oszczędzić czas na ręcznym pisaniu XAML-a (co potrafi być naprawdę żmudne przy dużych projektach). Co ciekawe, takie narzędzia bardzo dobrze współpracują z designerskimi edytorami UI i potrafią zautomatyzować konwersję nawet z innych formatów graficznych, np. Sketch czy Adobe XD do XAML-a. Branżowe standardy zalecają, by wykorzystywać generatorów GUI właśnie do tego celu, bo minimalizuje to liczbę błędów, przyspiesza wdrożenie zmian i ułatwia współpracę między programistami a projektantami. Warto pamiętać, że XAML jest bardzo elastyczny i umożliwia potem ręczną edycję wygenerowanego kodu – czasem powstają drobne poprawki, ale ogólnie to naprawdę przydatne narzędzie. Ogólnie – jeśli tylko projektujesz UI pod .NET, to automatyczna konwersja do XAML-a to jest coś, co warto znać i wykorzystywać w praktyce.

Pytanie 35

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

A. Problemy z kręgosłupem wynikające z długotrwałego siedzenia
B. Uzależnienie od gier komputerowych
C. Depresja spowodowana cyberprzemocą
D. Rozpowszechnianie nieprawdziwych informacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 36

Zaproponowany fragment kodu w języku Java wypełnia tablicę elementami:

int[] tablica = new int [10];
int j = 2;

for (int i = 0; i < 10; i++) {
    tablica[i] = j;
    j += 2;
}
A. 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
B. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
C. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
D. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ten fragment kodu w języku Java rzeczywiście tworzy tablicę o 10 elementach i wypełnia ją kolejnymi liczbami parzystymi, zaczynając od 2. Wynika to bezpośrednio z działania pętli for oraz zmiennej j, która startuje z wartością 2 i w każdym przebiegu pętli jest zwiększana o 2. Dzięki temu do każdej komórki tablicy trafia kolejna liczba parzysta: 2, 4, 6, 8 itd., aż do 20. Takie rozwiązanie jest bardzo często spotykane przy algorytmach, które generują lub przetwarzają sekwencje liczb wg określonego wzorca czy postępu arytmetycznego. Co ciekawe, ten schemat można łatwo modyfikować, np. zmieniając wartość początkową lub krok, żeby tablica wypełniała się liczbami nieparzystymi albo dowolnym innym ciągiem. W profesjonalnych projektach, gdy mamy do czynienia z większymi zbiorami danych, lepiej korzystać z metod typu Arrays.fill() lub streamów, jednak zrozumienie takiej manualnej pętli jest fundamentem nauki programowania. Z mojego doświadczenia, taki kod najlepiej obrazuje, jak działa indeksowanie tablic i inkrementacja wartości. Warto przećwiczyć podobne zadania, żeby utrwalić sobie podstawowe operacje na strukturach danych, bo potem przy bardziej złożonych algorytmach wszystko staje się prostsze. Takie rzeczy są wręcz codziennością w pracy programisty – czy to podczas inicjalizowania danych testowych, czy podczas przygotowywania danych wejściowych do algorytmów.

Pytanie 37

Jakie narzędzie służy do zarządzania wersjami?

A. Trello
B. Git
C. Bugzilla
D. Jira

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dokładnie tak – Git to obecnie najpopularniejsze narzędzie do zarządzania wersjami kodu źródłowego. Wykorzystuje się go praktycznie w każdej większej firmie IT, a nawet w małych zespołach projektowych. Git pozwala śledzić wszelkie zmiany w projekcie, przywracać starsze wersje plików czy nawet łączyć pracę wielu osób nad tym samym kodem bez ryzyka konfliktów. Największą przewagą Gita nad starszymi systemami jak SVN jest rozproszony charakter – każdy programista ma lokalną kopię całej historii projektu i może pracować offline, a dopiero potem synchronizować zmiany. Z mojego doświadczenia przechodzenie na Gita wymaga chwili nauki, ale to narzędzie daje ogromną kontrolę nad kodem i bezpieczeństwo – nie ma się co bać eksperymentowania, bo zawsze można wrócić do wcześniejszej wersji. W praktyce, na przykład na Githubie czy GitLabie, Git jest podstawą do pracy zespołowej, code review i automatycznych testów. Warto też wspomnieć, że znajomość Gita jest już niemal wymaganiem na rynku pracy, nie tylko wśród programistów, ale też administratorów, testerów czy nawet projektantów dokumentacji. Generalnie, jeśli chodzi o zarządzanie wersjami – Git to złoty standard.

Pytanie 38

Jaką funkcję pełnią mechanizmy ciasteczek w aplikacjach internetowych?

A. Do zapisywania danych użytkownika na serwerze
B. Do zapisywania danych użytkownika w przeglądarce
C. Do generowania dynamicznych interfejsów dla użytkowników
D. Do przechowywania informacji w bazie danych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Mechanizm ciasteczek (cookies) w aplikacjach webowych służy do przechowywania danych użytkownika bezpośrednio w przeglądarce. Ciasteczka mogą przechowywać różnego rodzaju informacje, takie jak preferencje językowe, identyfikatory sesji czy dane logowania, co pozwala na personalizację doświadczenia użytkownika oraz śledzenie jego aktywności na stronie. Dzięki ciasteczkom aplikacje webowe mogą zapamiętać użytkownika i dostosować treści do jego potrzeb przy kolejnych wizytach. Cookies są nieodłącznym elementem zarządzania stanem w aplikacjach stateless, takich jak te oparte na protokole HTTP. Mogą być one również wykorzystywane w systemach reklamowych i analitycznych do monitorowania zachowań użytkowników. Prawidłowe zarządzanie ciasteczkami i stosowanie odpowiednich polityk prywatności są kluczowe dla zgodności z przepisami RODO oraz regulacjami dotyczącymi ochrony danych osobowych.

Pytanie 39

Która z metod zarządzania projektem jest oparta na przyrostach realizowanych w sposób iteracyjny?

A. Model spiralny
B. Model prototypowy
C. Metodyki zwinne (Agile)
D. Model wodospadowy (waterfall)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metodyki zwinne, czyli Agile, są naprawdę ciekawe, bo stawiają na iteracyjne podejście. To znaczy, że po trochu, krok po kroku realizujemy projekt, a każda iteracja dostarcza nam kawałek działającego produktu. Dzięki temu możemy łatwo dostosować się do zmieniających się wymagań klienta. W moim doświadczeniu, to świetny sposób na rozwijanie aplikacji, bo pozwala nam regularnie testować i wprowadzać zmiany. W Agile najważniejsza jest współpraca z klientem i szybkie dostarczanie wartości, co czyni ten model bardzo efektywnym, zwłaszcza w szybko zmieniających się warunkach.

Pytanie 40

W którym przypadku algorytm sortowania bąbelkowego działa z optymalną wydajnością?

A. Dla tablicy losowej
B. Dla tablicy z dużą liczbą powtórzeń
C. Dla tablicy uporządkowanej malejąco
D. Dla tablicy uporządkowanej rosnąco

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Algorytm sortowania bąbelkowego działa z optymalną wydajnością w przypadku, gdy tablica jest już posortowana rosnąco. W takiej sytuacji algorytm wykona jedynie jedno przejście przez tablicę, bez konieczności dokonywania zamian, co sprawia, że jego złożoność wynosi O(n). To znacząco zwiększa jego efektywność w przypadku niemal posortowanych danych, choć nadal pozostaje mniej wydajny niż algorytmy takie jak QuickSort czy MergeSort dla dużych zbiorów. Sortowanie bąbelkowe jest jednak łatwe do zrozumienia i implementacji, co czyni je popularnym narzędziem edukacyjnym.