Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 20 maja 2025 09:36
  • Data zakończenia: 20 maja 2025 09:48

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

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

Który operator w JavaScript sprawdza zarówno równość wartości jak i typu danych?

A. ===
B. ==
C. !=
D. =
Nieprawidłowe odpowiedzi związane z operatorem == bazują na koncepcji luźnej równości, która w JavaScript działa na zasadzie automatycznego rzutowania typów. Gdy używasz ==, JavaScript konwertuje operandy na ten sam typ, zanim dokona porównania. To może prowadzić do zaskakujących rezultatów. Na przykład, porównując 0 == '0', wynik będzie true, ponieważ łańcuch '0' jest konwertowany na liczbę. Stosowanie tego operatora jest często przyczyną nieprzewidywalnych zachowań, które mogą być trudne do debugowania. Operator = z kolei nie jest operatorem porównania, lecz operatorem przypisania. Używa się go do przypisania wartości do zmiennej, co jest zupełnie inną operacją niż porównanie. Z kolei operator != działa na zasadzie luźnej nierówności i również podlega automatycznemu rzutowaniu typów, co czyni go mniej przewidywalnym. W praktyce, unikanie operatorów == oraz != na rzecz === oraz !== jest zdecydowanie zalecane, aby zredukować ryzyko błędów związanych z typami danych i niejednoznaczną logiką. Wielu doświadczonych programistów zaleca stosowanie operatora === za każdym razem, aby zapewnić najwyższy poziom precyzji i bezpieczeństwa w kodzie. Dobrą praktyką jest również przemyślane podejście do typów danych i ich konwersji, co pozwala na bardziej klarowne i zrozumiałe programowanie.

Pytanie 2

Jakie są kluczowe etapy resuscytacji krążeniowo-oddechowej?

A. 30 uciśnięć klatki piersiowej na przemian z 2 wdechami ratowniczymi
B. 30 wdechów ratowniczych bez uciśnięć
C. 10 uciśnięć klatki piersiowej bez wdechów
D. 20 uciśnięć klatki piersiowej na przemian z 5 wdechami ratowniczymi
30 uciśnięć klatki piersiowej na przemian z 2 wdechami ratowniczymi to standardowy protokół resuscytacji krążeniowo-oddechowej (RKO) zgodny z wytycznymi Europejskiej Rady Resuscytacji (ERC). Uciśnięcia wykonywane są na głębokość około 5-6 cm w tempie 100-120 uciśnięć na minutę. Po 30 uciśnięciach wykonuje się 2 wdechy ratownicze, które powinny być wykonywane z odpowiednią siłą, aby unieść klatkę piersiową poszkodowanego. Taka sekwencja jest podstawą pierwszej pomocy i może uratować życie osoby, u której doszło do zatrzymania akcji serca. Resuscytację należy kontynuować do momentu przybycia służb ratunkowych lub odzyskania przytomności przez poszkodowanego.

Pytanie 3

Jaką wartość zwróci funkcja napisana w języku C++, jeżeli jej argumentem wejściowym jest tablica stworzona w sposób następujący: int tablica[6] = {3,4,2,4,10,0};?

Ilustracja do pytania
A. 23
B. 20
C. 10
D. 0
Zwrócenie wartości największego elementu (10) wymagałoby innego algorytmu, np. wyszukiwania maksimum. Zwrócenie 0 oznaczałoby, że algorytm nie sumuje poprawnie elementów. Wynik 20 mógłby wynikać z nieprawidłowego pominięcia niektórych wartości tablicy podczas iteracji.

Pytanie 4

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

A. Definicja destruktora
B. Deklaracja atrybutów klasy
C. Zastosowanie słowa kluczowego class
D. Definicja funkcji członkowskich klasy
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 5

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

A. ""
B. #
C. !
D. //
Komentarz jednoliniowy w Pythonie rozpoczyna się od znaku '#'. Wszystko, co następuje po tym znaku, jest ignorowane przez interpreter. Używanie komentarzy pomaga dokumentować kod, co zwiększa jego czytelność i ułatwia współpracę w zespołach programistycznych.

Pytanie 6

Z analizy złożoności obliczeniowej różnych algorytmów sortowania na dużych zbiorach danych (przekraczających 100 elementów) wynika, że najefektywniejszą metodą jest algorytm sortowania

sortowanie bąbelkoweO(n2)
sortowanie przez wstawianieO(n2)
sortowanie przez scalanieO(n log n)
sortowanie przez zliczanieO(n)
sortowanie kubełkoweO(n2)

A. kubełkowego
B. przez scalanie
C. przez zliczanie
D. bąbelkowego
Sortowanie bąbelkowe, mimo że jest łatwe do zrozumienia i zaimplementowania, ma złożoność czasową O(n²), co czyni je nieefektywnym dla dużych zbiorów danych, takich jak ponad 100 elementów. Działa poprzez wielokrotne przechodzenie przez listę, porównując sąsiednie elementy i zamieniając je miejscami, jeśli są w niewłaściwej kolejności. To powoduje, że algorytm ten staje się wolny przy większej ilości danych. Sortowanie przez scalanie, choć bardziej wydajne niż bąbelkowe, z złożonością O(n log n), nadal nie dorównuje szybkością sortowaniu przez zliczanie w specyficznych warunkach, gdzie zakres wartości jest ograniczony. Jest to metoda rekurencyjna, która dzieli listę na mniejsze części, sortuje je, a następnie scala w jedną posortowaną listę. Natomiast sortowanie kubełkowe, podobnie jak przez zliczanie, korzysta z dodatkowych struktur danych, lecz jego efektywność zależy od tego, jak elementy są równomiernie rozmieszczone w kubełkach, co może prowadzić do złożoności O(n²) w przypadku złej dystrybucji. Typowe błędy myślowe polegają na przecenianiu prostoty implementacji ponad złożoność czasową, a także niedocenianiu specyfiki danych wejściowych, co jest kluczowe dla wyboru odpowiedniego algorytmu sortującego. Przy rozważaniu wyboru algorytmu należy zawsze brać pod uwagę zarówno jego złożoność, jak i charakterystykę danych, jakie będą przetwarzane, co jest podstawą dobrych praktyk inżynierii oprogramowania.

Pytanie 7

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

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

Pytanie 8

Jakie narzędzie jest wykorzystywane do zgłaszania błędów w projektach IT?

A. Git
B. Blender
C. JIRA
D. Photoshop
JIRA to jedno z najczęściej wykorzystywanych narzędzi do zarządzania projektami i raportowania błędów w projektach informatycznych. JIRA umożliwia śledzenie błędów, zarządzanie zadaniami oraz efektywne monitorowanie postępów prac nad projektem. Dzięki integracji z innymi narzędziami, takimi jak Confluence czy Bitbucket, JIRA stanowi kompleksowe rozwiązanie wspierające zespoły deweloperskie. Raportowanie błędów w JIRA pozwala na łatwe przypisywanie ich do odpowiednich członków zespołu, dodawanie załączników i komentarzy oraz monitorowanie statusu danego problemu, co usprawnia proces zarządzania jakością oprogramowania.

Pytanie 9

Które z poniższych pojęć nie jest związane z React.js?

A. JSX
B. Hooks
C. Directives
D. Virtual DOM
Wybór pojęcia, które nie jest związane z React.js, jest bardziej złożony, niż może się wydawać na pierwszy rzut oka. JSX jest jedną z podstawowych cech React, umożliwiającą pisanie komponentów w sposób zbliżony do HTML-a. Pozwala to na łatwiejsze tworzenie interfejsów użytkownika poprzez integrację składni HTML z możliwościami JavaScriptu. Virtual DOM to kolejne kluczowe pojęcie w React, które przyczynia się do wydajności aplikacji. Dzięki Virtual DOM, React minimalizuje operacje na prawdziwym DOM-ie, co prowadzi do szybszego renderowania i lepszej reaktywności aplikacji. Z kolei Hooks są nowoczesnym podejściem do zarządzania stanem i efektami w komponentach funkcyjnych, co umożliwia tworzenie bardziej złożonych interakcji bez konieczności korzystania z komponentów klasowych. Każda z tych koncepcji jest ściśle związana z architekturą React i stanowi fundament w jego ekosystemie. Typowym błędem myślowym, który może prowadzić do niepoprawnych wniosków, jest mylenie frameworków oraz ich specyficznych terminologii. Często deweloperzy mogą założyć, że terminologia z jednego frameworka jest uniwersalna dla wszystkich, co jest błędnym podejściem. Zrozumienie specyfiki React i jego ekosystemu jest kluczowe dla efektywnego wykorzystania tego narzędzia w praktyce.

Pytanie 10

Co to jest wzorzec projektowy Singleton?

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

Pytanie 11

Wykorzystując jeden z dwóch zaprezentowanych sposobów inkrementacji w językach z rodziny C lub Java, można zauważyć, że

Ilustracja do pytania
A. bez względu na zastosowany sposób, w zmiennej b zawsze uzyskamy ten sam rezultat
B. drugi zapis nie jest zgodny ze składnią, co doprowadzi do błędów kompilacji
C. wartość zmiennej b będzie wyższa po użyciu drugiego zapisu w porównaniu do pierwszego
D. tylko przy użyciu pierwszego zapisu, zmienna a zostanie zwiększona o 1
W językach programowania z rodziny C (w tym C++ i Java) istnieją dwie formy inkrementacji: preinkrementacja (++x) i postinkrementacja (x++). Preinkrementacja zwiększa wartość zmiennej przed jej użyciem w wyrażeniu, natomiast postinkrementacja zwiększa ją dopiero po zakończeniu aktualnej operacji. Oznacza to, że w przypadku postinkrementacji, wartość zmiennej przed zwiększeniem zostanie użyta w bieżącym wyrażeniu, a dopiero potem następuje jej zwiększenie o 1. Ta subtelna różnica ma istotne znaczenie, zwłaszcza w pętlach i wyrażeniach logicznych, gdzie każda iteracja wpływa na wynik. W praktyce preinkrementacja jest nieco bardziej efektywna, ponieważ nie wymaga przechowywania kopii pierwotnej wartości zmiennej, co przekłada się na minimalnie lepszą wydajność w niektórych przypadkach.

Pytanie 12

Co to jest zasięg (scope) zmiennej w programowaniu?

A. Ilość pamięci, jaką zmienna zajmuje podczas wykonywania programu
B. Maksymalny zakres wartości, jakie może przyjąć zmienna danego typu
C. Obszar kodu, w którym zmienna jest dostępna
D. Czas życia zmiennej podczas wykonywania programu
Wybór odpowiedzi dotyczącej ilości pamięci, jaką zmienna zajmuje podczas wykonywania programu, jest mylący, ponieważ pojęcie zasięgu zmiennej dotyczy nie przestrzeni pamięci, lecz obszaru kodu, w którym zmienna jest dostępna. Ilość pamięci, jaką zmienna zajmuje, jest kwestią zarządzania pamięcią, która jest niezależna od samego zasięgu. Zmienna może zająć różną ilość pamięci w zależności od typu danych, które reprezentuje, ale to nie definiuje, gdzie ta zmienna może być używana. Na przykład w językach takich jak C++ czy Java, zasięg zmiennej wpływa na jej widoczność, a nie na ilość zajmowanej pamięci. Kolejna niewłaściwa koncepcja dotyczy maksymalnego zakresu wartości, jakie może przyjąć zmienna danego typu. To zagadnienie odnosi się do ograniczeń typów danych, a nie do ich zasięgu w kodzie. Typy danych definiują, jakie wartości mogą być przechowywane, ale nie mają wpływu na to, w jakich częściach programu te zmienne są dostępne. Czas życia zmiennej jest również inną kwestią, która nie odnosi się do zasięgu, a do momentu, w którym zmienna jest aktywna w programie. Zrozumienie tych różnic jest kluczowe dla skutecznego programowania, ponieważ nieprawidłowe zrozumienie pojęcia zasięgu może prowadzić do trudnych do zdiagnozowania błędów w kodzie, takich jak błędy związane z dostępem do zmiennych, które nie są już dostępne w danym kontekście.

Pytanie 13

Co to jest framework?

A. narzędzie przeznaczone do opracowywania, edytowania, testowania i uruchamiania oprogramowania
B. oprogramowanie, które za pomocą metody drag and drop pozwala na stworzenie interfejsu aplikacji
C. platforma programistyczna oferująca określone komponenty oraz narzucająca szkielet lub metodologię tworzenia aplikacji
D. zbiór procedur, danych oraz złożonych typów danych używanych w kodzie źródłowym aplikacji
Framework to platforma programistyczna, która dostarcza gotowe komponenty i narzuca określony sposób tworzenia aplikacji. Ułatwia rozwój oprogramowania, eliminując potrzebę pisania kodu od zera.

Pytanie 14

Jaką strukturę danych można zrealizować, korzystając jedynie z wymienionych metod?

Ilustracja do pytania
A. kolejka FIFO
B. drzewo binarne
C. stos
D. tablica
Kolejka FIFO (First In, First Out) wymaga dodatkowych metod do zarządzania elementami na obu końcach struktury. Tablica pozwala na przechowywanie wielu elementów, ale nie działa na zasadzie LIFO. Drzewo binarne to bardziej skomplikowana struktura danych, wymagająca implementacji rekurencyjnych metod przeszukiwania i dodawania.

Pytanie 15

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

let i = 0; while (i < 5) { i++; if (i === 3) continue; console.log(i); }

A. 0, 1, 2, 4, 5
B. 0, 1, 2, 3, 4
C. 1, 2, 4, 5
D. 1, 2, 3, 4, 5
W przypadku pozostałych odpowiedzi można zauważyć, że wynikają z nieporozumień dotyczących działania pętli oraz instrukcji sterującej continue. W odpowiedzi sugerującej, że w konsoli zostaną wypisane liczby 0, 1, 2, 4, 5, występuje założenie, że wartość początkowa zmiennej i (czyli 0) również zostanie wypisana, co jest nieprawdziwe. Zmienna i jest zwiększana przed jej wypisaniem, więc jej początkowa wartość nie zostaje uwzględniona. W kolejnej opcji, gdzie podano 1, 2, 3, 4, 5, zauważyć można, że liczba 3 została wypisana, co jest sprzeczne z logiką zastosowaną w kodzie, ponieważ w momencie, gdy i równa się 3, instrukcja continue przerywa bieżącą iterację pętli, pomijając kod wypisujący. Również myśląc o odpowiedzi, która sugeruje, że w konsoli pojawią się liczby 1, 2, 3, 4, 5, można zauważyć, że pominięcie wartości 3 jest kluczowym momentem, który prowadzi do błędnego wniosku. Widać tutaj typowe błędy myślowe, polegające na nieprzemyślanej interpretacji pętli oraz działania instrukcji warunkowych. Aby poprawnie zrozumieć, jak działają pętle i instrukcje w JavaScript, warto poświęcić czas na eksperymentowanie z kodem oraz jego analizowanie, aby dostrzec, jakie konsekwencje mają poszczególne komendy i jakie wartości zmiennych są faktycznie wypisywane.

Pytanie 16

Jakie rezultaty pojawią się po uruchomieniu poniższego kodu napisanego w języku C++?

Ilustracja do pytania
A. Bazowa. Pochodna.
B. Pochodna. Bazowa.
C. Pochodna. Pochodna.
D. Bazowa. Bazowa.
Wyświetlenie 'Bazowa. Pochodna.' wskazywałoby, że tylko jedna z metod została nadpisana, co nie ma sensu w tym przypadku. Znacznik 'Bazowa. Bazowa.' to już totalny brak polimorfizmu, co zupełnie mija się z celem tego kodu. A 'Pochodna. Bazowa.' sugerowałoby, że mamy do czynienia z częściowym nadpisaniem metod, co też nie jest zgodne z tym, co mamy w kodzie.

Pytanie 17

Metoda tworzenia algorytmu polegająca na dzieleniu go na dwa lub więcej mniejszych podproblemów, aż do momentu, gdy ich rozwiązanie stanie się proste, jest techniką

A. heurystyczną
B. komiwojażera
C. najkrótszej ścieżki
D. dziel i zwyciężaj
Pierwsza odpowiedź, która nie jest poprawna, odnosi się do problemu najkrótszej ścieżki. To jest trochę inna bajka, bo mówimy tu o optymalizacji ścieżek w grafach. Algorytmy jak Dijkstra czy Bellman-Ford są super do wyznaczania najkrótszej drogi między węzłami, ale nie są oparte na zasadzie dziel i zwyciężaj. Praca z grafami wymaga zrozumienia całości struktury, a to różni się od lokalnego podejścia. Druga odpowiedź dotyczy problemu komiwojażera, który jest znany z tego, że to problem NP-trudny. Chodzi tu o znalezienie najkrótszej trasy, która odwiedza określone punkty, i chociaż można uciekać się do heurystyk, to nie jest to przykład tej strategii. Na końcu mamy odpowiedź związana z heurystyką, która używa różnych metod przybliżania, by szybko znaleźć jakieś sensowne rezultaty. Ale to też nie ma nic wspólnego z dzieleniem problemu na mniejsze kawałki. Generalnie, te podejścia różnią się od 'dziel i zwyciężaj', dlatego nie pasują do danego pytania.

Pytanie 18

Czym jest ochrona własności intelektualnej?

A. Rejestr plików przechowywanych w chmurze
B. Zestaw przepisów dotyczących ochrony prywatności
C. Zbiór informacji osobowych
D. Koncepcja prawa zabezpieczającego twórczość i innowacje
Własność intelektualna to zbiór praw chroniących twórczość i wynalazki, obejmujący patenty, prawa autorskie, znaki towarowe i wzory przemysłowe. Własność intelektualna pozwala twórcom na zarabianie na swoich dziełach oraz kontrolowanie, kto i w jaki sposób może z nich korzystać. W wielu krajach naruszenie praw własności intelektualnej wiąże się z poważnymi konsekwencjami prawnymi. Dla przedsiębiorstw i innowatorów ochrona własności intelektualnej jest kluczowa dla zabezpieczenia ich inwestycji oraz rozwijania nowych technologii.

Pytanie 19

W programie desktopowym stworzono rozwijaną listę oraz przypisano cztery funkcje do obsługi zdarzeń tej kontrolki. Jaki komunikat pojawi się po dokonaniu wyboru w tej liście?

Ilustracja do pytania
A. Zdarzenie 2
B. Zdarzenie 3
C. Zdarzenie 4
D. Zdarzenie 1
Inne zdarzenia mogą być wywoływane przy inicjalizacji listy (np. 'Zdarzenie 3'), ale nie są związane bezpośrednio z wyborem elementu. 'Zdarzenie 4' i 'Zdarzenie 2' mogą odnosić się do usuwania elementu lub innych operacji na liście, które nie następują podczas standardowego wyboru.

Pytanie 20

Jakie informacje zawiera dokumentacja realizacji projektu?

A. Podręcznik użytkownika dla końcowych odbiorców aplikacji
B. Strategia marketingowa aplikacji
C. Dane dotyczące faz wdrożenia aplikacji w środowisku produkcyjnym
D. Zestawienie błędów wykrytych w trakcie testów
Opis błędów znalezionych podczas testów jest częścią raportu testowego, a nie dokumentacji wdrożeniowej. Plan marketingowy aplikacji dotyczy promocji i wdrożenia na rynku, ale nie obejmuje aspektów technicznych związanych z implementacją. Instrukcja obsługi aplikacji dla użytkowników końcowych skupia się na interfejsie i funkcjonalności, ale nie zawiera informacji na temat procesu wdrażania aplikacji w środowisku produkcyjnym.

Pytanie 21

Aby wykorzystać framework Django, należy pisać w języku

A. JavaScript
B. Java
C. C#
D. Python
Framework Django jest napisany w języku Python. Jest to jeden z najpopularniejszych frameworków do tworzenia aplikacji webowych, oferujący bogatą funkcjonalność, elastyczność i szybki czas realizacji projektów.

Pytanie 22

Jakie znaczenie ma termin "hierarchia dziedziczenia" w kontekście programowania obiektowego?

A. Zespół metod i pól posiadających ten sam modyfikator dostępu
B. Układ klas w strukturę, w której klasy pochodne dziedziczą cechy od klas bazowych
C. Układ klas, który ogranicza występowanie dziedziczenia wielokrotnego
D. Zbiór klas, które nie mają wspólnych powiązań
Zestaw klas bez wspólnego powiązania to niezależne klasy, które nie są częścią hierarchii dziedziczenia. Taki układ nie umożliwia ponownego wykorzystania kodu ani rozszerzania funkcjonalności. Zbiór metod i pól o tym samym modyfikatorze dostępu dotyczy enkapsulacji i nie jest związany z hierarchią dziedziczenia. Struktura klas ograniczająca wielokrotne dziedziczenie to bardziej zaawansowane techniki, takie jak interfejsy lub klasy abstrakcyjne, ale nie stanowią one podstawowej definicji hierarchii dziedziczenia.

Pytanie 23

Która z poniższych struktur danych jest najbardziej odpowiednia do przechowywania unikalnych elementów?

A. Zbiór (Set)
B. Sekwencja
C. Tablica
D. Kolejka priorytetowa
Lista pozwala na dodawanie powtarzających się elementów, więc nie daje ci unikalności. Tablica działa podobnie, bo też trzyma duplikaty, bez jakiegoś mechanizmu, który by je automatycznie usuwał. Kolejka priorytetowa przechowuje rzeczy według określonej kolejności, ale tu znowu nie jest mowa o unikalności. Każda z tych struktur ma swoje zadania, ale żadna nie jest tak dobra jak zbiór, jeśli chodzi o trzymanie unikalnych danych. Dziwne, nie?

Pytanie 24

Która z poniższych nie jest prawidłową metodą zarządzania stanem w React?

A. Context API
B. useState hook
C. React.stateManager
D. Redux
Odpowiedzi, które wskazałeś, takie jak Redux, Context API oraz useState hook, są w rzeczywistości powszechnie uznawanymi metodami zarządzania stanem w React. Redux, jako zewnętrzna biblioteka, usprawnia zarządzanie stanem poprzez wprowadzenie centralnego store'a, który przechowuje wszystkie dane w aplikacji. Dzięki temu, każdy komponent może subskrybować zmiany w stanie, co pozwala na prostą synchronizację danych oraz ich śledzenie. Context API jest wbudowane w React i pozwala na udostępnianie danych między komponentami bez potrzeby przekazywania propsów, co znacząco upraszcza hierarchię komponentów i poprawia ich czytelność. Hook useState natomiast, jest prostym i intuicyjnym rozwiązaniem do zarządzania lokalnym stanem w komponentach funkcyjnych, co jest szczególnie przydatne w mniejszych projektach. Zrozumienie, dlaczego te metody są uznawane za poprawne, jest kluczowe, ponieważ pozwala na efektywne zarządzanie stanem w aplikacjach React. Często błędne wnioski wynikają z nieznajomości narzędzi dostępnych w ekosystemie React lub z mylnego przekonania, że dany sposób zarządzania stanem musi być uniwersalny. W rzeczywistości, najlepsze podejście zależy od skali oraz specyfiki projektu.

Pytanie 25

Który z poniższych elementów nie jest związany z architekturą mikroserwisów?

A. Niezależne wdrażanie usług
B. Skalowalność poszczególnych usług
C. Komunikacja przez API
D. Monolityczny kod źródłowy
Każda z pozostałych odpowiedzi na pytanie odnosi się do kluczowych aspektów architektury mikroserwisów. Niezależne wdrażanie usług jest jednym z głównych założeń mikroserwisów, ponieważ umożliwia autonomiczne aktualizacje i rozwój poszczególnych komponentów systemu bez konieczności przerywania działania całej aplikacji. Komunikacja przez API jest niezbędna dla współpracy między mikroserwisami, ponieważ pozwala na wymianę danych i poleceń w sposób zorganizowany i niezależny. Wreszcie, skalowalność poszczególnych usług oznacza, że można dostosować zasoby do zmieniających się potrzeb i obciążenia systemu, co jest kluczowe w dzisiejszych dynamicznych środowiskach IT. Typowym błędem jest zrozumienie architektury mikroserwisów jako jedynie rozdzielenia kodu. W rzeczywistości wymaga to zmiany podejścia do projektowania, wdrażania i zarządzania systemami. Nieprawidłowa interpretacja tych pojęć może prowadzić do stworzenia systemu, który nie wykorzystuje pełnych korzyści płynących z mikroserwisów, takich jak elastyczność, łatwość w skalowaniu i efektywne zarządzanie zespołami. Zamiast tego można wprowadzić architekturę, która jest jedynie zbiorem monolitów, co nie spełnia oczekiwań nowoczesnych aplikacji internetowych i mobilnych.

Pytanie 26

Jakie narzędzie jest najbardziej odpowiednie do identyfikacji błędów w trakcie działania programu?

A. Linker
B. Kompilator
C. Interpreter
D. Debugger
Debugger to narzędzie przeznaczone do wyszukiwania błędów w czasie wykonywania programu. Pozwala na zatrzymywanie aplikacji w wybranych miejscach, analizowanie wartości zmiennych i śledzenie przepływu sterowania, co umożliwia szybkie wykrywanie błędów logicznych i błędów czasu wykonania. Debugger jest niezbędny w procesie rozwoju oprogramowania, ponieważ pomaga programistom w zrozumieniu, jak ich kod działa w rzeczywistości i jak różne warunki wpływają na jego funkcjonowanie.

Pytanie 27

Która z wymienionych metod może pomóc w walce z uzależnieniem od internetu?

A. Wprowadzenie systematycznych przerw od używania urządzeń cyfrowych
B. Zwiększenie czasu spędzanego na mediach społecznościowych
C. Zainstalowanie większej ilości aplikacji rozrywkowych
D. Używanie komputera jedynie w nocy
Wprowadzenie regularnych przerw od korzystania z urządzeń cyfrowych pomaga przeciwdziałać uzależnieniu od internetu. Regularne odstawienie urządzeń pozwala na regenerację, zmniejsza ryzyko nadmiernej ekspozycji na treści cyfrowe i pozwala na większą interakcję z rzeczywistym otoczeniem. Przerwy te pomagają w utrzymaniu równowagi psychicznej i fizycznej, poprawiają koncentrację oraz jakość snu.

Pytanie 28

Jakie znaczenie ma polimorfizm w programowaniu obiektowym?

A. Dzieli program na klasy oraz obiekty
B. Umożliwia jednej metodzie działać w różnorodny sposób w zależności od klasy, do której należy
C. Ogranicza dostęp do atrybutów klasy
D. Pozwala na tworzenie obiektów z wielu różnych klas równocześnie
Polimorfizm to zdolność obiektów do używania tej samej metody lub interfejsu, ale z różnymi implementacjami, w zależności od klasy obiektu. Dzięki polimorfizmowi można wywołać metodę `obiekt.wyswietl()`, która zachowuje się inaczej w klasie `Samochod` i inaczej w klasie `Motocykl`, mimo że nazwa metody pozostaje taka sama. Polimorfizm ułatwia rozbudowę aplikacji, ponieważ nowe klasy mogą być dodawane bez modyfikacji istniejącego kodu, co zwiększa elastyczność i rozszerzalność programu. Jest to jedna z najważniejszych zasad programowania obiektowego, obok dziedziczenia i hermetyzacji.

Pytanie 29

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

let arr = [1, 2, 3, 4, 5]; let result = arr.filter(num => num % 2 === 0); console.log(result);

A. 2,4
B. [1, 3, 5]
C. [2, 4]
D. [1, 2, 3, 4, 5]
Wybór odpowiedzi [1, 3, 5] lub [2, 4] oraz 2,4 odzwierciedla niezrozumienie działania metody filter w JavaScript. Odpowiedź [1] sugeruje, że program wyświetli wszystkie parzyste liczby, lecz nie uwzględnia, że filter tworzy nową tablicę tylko z liczb spełniających określony warunek, a w tym przypadku tylko liczby parzyste. Ponadto, [3] wskazuje na brak zastosowania filtru, a więc pokazuje wszystkie elementy tablicy, co również jest błędne. Z kolei odpowiedź 2,4 nie jest nawet poprawnym formatem dla JavaScript, gdzie wyniki w konsoli są prezentowane w postaci tablicy z elementami oddzielonymi przecinkami. Takie podejście, aby zapisać wynik w konsoli, a nie odwoływać się do jego struktury, może prowadzić do błędnych interpretacji. Należy pamiętać, że w JavaScript, kluczowym elementem do zrozumienia jest różnica między metodą filter a innymi metodami tablic, takimi jak map czy forEach. Metoda filter zwraca nową tablicę, podczas gdy inne mogą działać na oryginalnych danych bez ich zmiany. Dlatego ważne jest, aby nie tylko znać technikę, ale i jej zastosowanie w kontekście rozwiązania problemu, co jest niezbędne w pracy programisty.

Pytanie 30

Jakie będzie działanie przedstawionych dwóch równoważnych fragmentów kodu źródłowego?

Ilustracja do pytania
A. nadany tytuł każdego elementu HTML: "Egzamin zawodowy"
B. nadany tytuł strony: "Egzamin zawodowy"
C. wyświetlony na stronie tekst w akapicie: "Egzamin zawodowy"
D. wyświetlony na stronie tekst w nagłówku: "Egzamin zawodowy"
W tekście w akapicie rzeczywiście użyjemy tagu

. Jeśli chodzi o tytuł strony, to on jest związany z sekcjąw nagłówku HTML, a nie z treścią, która się wyświetla. A nadanie tytułu każdemu elementowi odnosi się do atrybutu 'title', który raczej pokazuje podpowiedzi, a nie nagłówek. Trochę zamieszania, ale ważne, żeby to rozróżnić. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 31</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="jaka-role-penia-pola-klasy-w-programowaniu-obiekt-379f1fb7" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Jaką funkcję spełniają atrybuty klasy w programowaniu obiektowym?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-danger bg-opacity-10 border-danger text-danger "> <div class="flex-grow-1"> <span>A. Umożliwiają przeprowadzanie operacji na obiektach</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>B. Zapisują wartości lokalne w funkcjach</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. Określają globalne stałe programu</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded bg-success bg-opacity-10 text-success "> <div class="flex-grow-1"> <span>D. Zawierają informacje opisujące stan obiektu</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-danger mb-0"> Zmienne lokalne w metodach przechowują wartości tymczasowe i są usuwane po zakończeniu wykonywania metody, co odróżnia je od pól klasy, które istnieją tak długo, jak istnieje obiekt. Stałe globalne programu są dostępne z każdego miejsca w kodzie, ale nie są związane z konkretną instancją obiektu – ich wartość nie zmienia się dla różnych obiektów. Operacje wykonywane na obiektach są definiowane przez metody klasy, a nie przez pola – pola jedynie przechowują dane, natomiast metody określają zachowanie obiektów i umożliwiają interakcję z nimi. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 32</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="ktory-z-wymienionych-algorytmow-dziaajacych-na-ta-5cf0daa2" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Który z wymienionych algorytmów pracujących na tablicy jednowymiarowej ma złożoność obliczeniową O(n2)?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>A. Wyświetlenie elementów</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-danger bg-opacity-10 border-danger text-danger "> <div class="flex-grow-1"> <span>B. Wyszukiwanie metodą binarną</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. Sortowanie szybkie</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded bg-success bg-opacity-10 text-success "> <div class="flex-grow-1"> <span>D. Sortowanie bąbelkowe</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-danger mb-0"> Wypisanie elementów tablicy ma złożoność O(n), bo po prostu przechodzimy przez tablicę raz. Wyszukiwanie binarne, z drugiej strony, to coś, co ma złożoność O(log n) i działa w posortowanej tablicy – nie ma tu mowy o sortowaniu. A jeśli chodzi o sortowanie szybkie, to jego złożoność to O(n log n) i jest jednym z najszybszych sposobów sortowania. Więc nie pomylić sortowania z wyszukiwaniem, bo to dwie różne bajki. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 33</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="programista-aplikacji-mobilnych-chce-przekwalifiko-3691509b" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Programista aplikacji mobilnych pragnie zmienić swoją ścieżkę kariery na Full-Stack Developera. Wskaż kurs, który powinien wybrać, żeby to osiągnąć?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>A. Mastering Cross-platform Developping</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>B. Raster and Vector Graphics with Adobe</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-success bg-opacity-10 border-success text-success "> <div class="flex-grow-1"> <span>C. Complete JavaScript React, SQL, Node.js Cource</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>D. Ultimate C# Serier from Beginner to Advanced</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-success mb-0"> Kurs 'Complete JavaScript React, SQL, Node.js Course' obejmuje naukę pełnego stosu technologii webowych, umożliwiając przejście z roli developera mobilnego na stanowisko Full-Stack Developer. Kurs ten pokrywa zarówno frontend (React), jak i backend (Node.js, SQL), co jest kluczowe dla pracy full-stack. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 34</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="dane-z-serwera-do-aplikacji-front-end-mozna-przes-9a2a3400" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Jakie metody pozwalają na przesłanie danych z serwera do aplikacji front-end?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-danger bg-opacity-10 border-danger text-danger "> <div class="flex-grow-1"> <span>A. biblioteki jQuery</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>B. metody POST</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. protokołu SSH</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded bg-success bg-opacity-10 text-success "> <div class="flex-grow-1"> <span>D. formatu JSON</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-danger mb-0"> Biblioteka jQuery umożliwia manipulację DOM i wykonywanie zapytań AJAX, ale nie jest formatem przesyłania danych. Protokół SSH służy do bezpiecznej komunikacji z serwerem, natomiast metoda POST to część protokołu HTTP, wykorzystywana do przesyłania danych, ale nie jest formatem danych samym w sobie. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 35</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="ktory-z-ponizszych-opisow-najlepiej-charakteryzuje-97bea162" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Który z poniższych opisów najlepiej definiuje kompilator?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>A. Program łączący dynamiczne biblioteki z kodem źródłowym</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>B. Narzędzie do analizy kodu w czasie rzeczywistym</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-success bg-opacity-10 border-success text-success "> <div class="flex-grow-1"> <span>C. Narzędzie przekształcające kod źródłowy na plik wykonywalny</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>D. System monitorujący zmiany w kodzie źródłowym</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-success mb-0"> Kompilator to narzędzie, które przekształca kod źródłowy napisany w języku programowania na plik wykonywalny (binarny), który może być uruchomiony bez potrzeby ponownej kompilacji. Proces ten obejmuje kilka etapów, takich jak analiza leksykalna, analiza składniowa, optymalizacja kodu oraz generowanie kodu maszynowego. Kompilator jest nieodzownym elementem w językach takich jak C, C++ czy Java. Generowany plik wykonywalny może działać szybciej niż kod interpretowany, ponieważ nie wymaga tłumaczenia w czasie rzeczywistym. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 36</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="ktora-z-ponizszych-metod-http-suzy-do-aktualizacj-9584b23e" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Która z poniższych metod HTTP służy do aktualizacji zasobu?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-danger bg-opacity-10 border-danger text-danger "> <div class="flex-grow-1"> <span>A. POST</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded bg-success bg-opacity-10 text-success "> <div class="flex-grow-1"> <span>B. PUT</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. GET</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>D. DELETE</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-danger mb-0"> Metoda GET jest używana do pobierania danych z serwera, a nie do ich modyfikacji. Często błędnie uważa się, że ponieważ GET może zwracać aktualne dane, to można go użyć do aktualizacji zasobów. Jednakże, zgodnie z zasadami HTTP, GET nie powinien mieć żadnych efektów ubocznych na serwerze, co oznacza, że nie zmienia stanu zasobów. Z kolei metoda POST jest zazwyczaj używana do tworzenia nowych zasobów, a nie do ich aktualizacji. Choć można jej użyć do przesyłania danych, które następnie prowadzą do aktualizacji, nie jest to jej pierwotny cel. POST generuje nowe zasoby i w rezultacie nie jest idempotentny, co oznacza, że wielokrotne użycie tej samej operacji prowadzi do różnych rezultatów. Metoda DELETE, jak sama nazwa wskazuje, służy do usuwania zasobów, a nie ich aktualizacji. Wybierając niewłaściwe metody HTTP, można wprowadzić chaos w interfejsie API, co prowadzi do błędnych operacji oraz trudności w zarządzaniu zasobami. Dlatego ważne jest, aby dobrze zrozumieć, jakie są różnice między tymi metodami oraz jak właściwie je stosować w praktyce programistycznej, aby zapewnić zgodność z najlepszymi praktykami oraz standardami branżowymi. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 37</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="wskaz-jezyk-programowania-w-ktorym-mozna-utworzyc-e3382369" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Wskaż programowanie, w którym możliwe jest stworzenie aplikacji mobilnej dla systemu Android?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>A. C++</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-success bg-opacity-10 border-success text-success "> <div class="flex-grow-1"> <span>B. Java</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. Obiective-C</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>D. Swift</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-success mb-0"> Java jest jednym z najważniejszych języków programowania wykorzystywanych do tworzenia aplikacji mobilnych na platformę Android. Został stworzony przez firmę Sun Microsystems i obecnie jest rozwijany przez Oracle. Java jest językiem obiektowym, co oznacza, że umożliwia programistom tworzenie aplikacji w sposób modularny i zorganizowany. W kontekście Androida, Java jest podstawowym językiem, w którym bazowe API (Application Programming Interface) zostało opracowane. Wysoka wydajność, bogata biblioteka klas oraz wsparcie dla programowania wielowątkowego sprawiają, że Java jest idealnym wyborem dla deweloperów aplikacji mobilnych. Przykładowo, do stworzenia prostego interfejsu użytkownika w aplikacji Android, programista może wykorzystać takie elementy jak TextView czy Button, które są częścią frameworka Android SDK. Współczesne praktyki wskazują również na wykorzystanie Java w połączeniu z Kotlinem, co pozwala na osiągnięcie lepszych rezultatów i zwiększa efektywność w pracy nad projektami mobilnymi. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 38</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="dlaczego-dostosowanie-interfejsu-uzytkownika-do-ro-bc946f98" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Jakie znaczenie ma przystosowanie interfejsu użytkownika do różnych platform?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-success bg-opacity-10 border-success text-success "> <div class="flex-grow-1"> <span>A. Gwarantuje optymalne korzystanie z aplikacji na każdym urządzeniu</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>B. Pozwala na unifikację kodu niezależnie od używanej platformy</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. Usuwa konieczność testowania na różnych platformach</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>D. Umożliwia skoncentrowanie się wyłącznie na funkcjonalności aplikacji</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-success mb-0"> Dostosowanie interfejsu do różnych urządzeń to naprawdę ważna sprawa, żeby wszystko działało jak należy. Aplikacje, które dobrze się przystosowują do różnych ekranów czy systemów, dają lepsze doświadczenie użytkownikom. Użycie takich technik jak responsywny design czy elastyczne układy, jak flexbox czy grid, to super pomysł. Dzięki temu elementy interfejsu same się skalują, a aplikacja wygląda spójnie na telefonach, tabletach i komputerach. Nie ma nic gorszego niż chaotyczny interfejs na różnych urządzeniach, więc to naprawdę kluczowa kwestia. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 39</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="ktory-z-ponizszych-elementow-jest-kluczowy-w-archi-5854ce4a" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Który z wymienionych elementów jest fundamentalny w architekturze klient-serwer?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-danger bg-opacity-10 border-danger text-danger "> <div class="flex-grow-1"> <span>A. Zdalne wykonywanie aplikacji na urządzeniu klienta</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded bg-success bg-opacity-10 text-success "> <div class="flex-grow-1"> <span>B. Scentralizowane przechowywanie danych</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. Wyłącznie komunikacja synchroniczna</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>D. Brak podziału na funkcje klienta i serwera</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-danger mb-0"> Zdalne wykonywanie aplikacji na urządzeniu klienta oznacza model przetwarzania lokalnego, co nie jest główną cechą architektury klient-serwer. Brak podziału na funkcje klienta i serwera narusza podstawową ideę tego modelu, który zakłada rozdzielenie ról pomiędzy te dwie jednostki. Wyłącznie komunikacja synchroniczna ogranicza elastyczność aplikacji i może prowadzić do opóźnień w przetwarzaniu danych. </div> </div> </article> <hr class="my-4"> <article class="mb-4"> <!-- Pytanie --> <div class="mb-3"> <div class="d-flex justify-content-between align-items-start mb-3"> <h6 class="mb-0">Pytanie 40</h6> <div class="d-inline-block"> <button type="button" class="btn btn-sm btn-outline-danger" data-report-question="jakie-sa-podstawowe-fazy-realizacji-projektu-progr-a41d8330" aria-label="Zgłoś błąd"> <i class="fas fa-exclamation-triangle"></i> </button> </div> </div> <!-- Wyświetl pełną treść pytania dla widocznych pytań --> <p>Jakie są kluczowe etapy realizacji projektu programistycznego?</p> </div> <!-- Odpowiedzi --> <div class="mb-3"> <!-- Wyświetl odpowiedzi dla widocznych pytań --> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>A. Projektowanie, testowanie, aktualizacja, implementacja</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-2 bg-danger bg-opacity-10 border-danger text-danger "> <div class="flex-grow-1"> <span>B. Planowanie, projektowanie, debugowanie, konserwacja</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded border border-1 border-secondary "> <div class="flex-grow-1"> <span>C. Analiza, implementacja, testowanie, aktualizacja</span> </div> </div> </div> <div class="mb-3"> <div class="d-flex align-items-start p-2 rounded bg-success bg-opacity-10 text-success "> <div class="flex-grow-1"> <span>D. Planowanie, analiza, implementacja, wdrożenie</span> </div> </div> </div> </div> <!-- Feedback --> <div class="mt-3"> <!-- Wyświetl feedback dla widocznych pytań --> <div class="alert alert-danger mb-0"> Projektowanie i debugowanie to istotne części implementacji, ale nie występują jako odrębne fazy cyklu życia projektu. Testowanie jest istotne, ale stanowi część fazy wdrożenia lub implementacji. Aktualizacja następuje po wdrożeniu i konserwacji systemu, więc nie jest to podstawowa faza w cyklu życia projektu, lecz element utrzymania i rozwoju oprogramowania. </div> </div> </article> <!-- Przyciski nawigacyjne --> <div class="d-grid gap-2 mt-4"> <div class="d-inline-block mb-2"> <a href="/egzamin/?profession=technik-programista&qualification=inf-04" class="btn btn-outline-primary"> <i class="fas fa-redo me-2"></i>Rozpocznij nowy egzamin </a> </div> <div class="d-inline-block"> <a href="/" class="btn btn-outline-secondary"> <i class="fas fa-home me-2"></i>Powrót do strony głównej </a> </div> </div> </div> </div> </div> </main> <!-- Footer --> <footer class="footer mt-auto py-4"> <div class="container"> <div class="row"> <!-- About Section --> <div class="col-lg-4 footer-section"> <h2 class="h5">O Egzaminach Zawodowych</h2> <p> Portal z kompleksową bazą pytań egzaminacyjnych dla uczniów szkół technicznych. Przygotuj się do egzaminu zawodowego z naszymi materiałami. </p> </div> <!-- Popular Qualifications --> <div class="col-lg-4 footer-section"> <h2 class="h5">Losowe kwalifikacje</h2> <div class="row"> <div class="col-6"> <a href="/technik-rachunkowosci/EKA.05/" class="footer-link"> <span>EKA.05</span> <small class="text-muted">(830)</small> </a> </div> <div class="col-6"> <a href="/technik-archiwista/EKA.03/" class="footer-link"> <span>EKA.03</span> <small class="text-muted">(277)</small> </a> </div> <div class="col-6"> <a href="/technik-ochrony-srodowiska/CHM.05/" class="footer-link"> <span>CHM.05</span> <small class="text-muted">(934)</small> </a> </div> <div class="col-6"> <a href="/technik-technologii-zywnosci/SPC.02/" class="footer-link"> <span>SPC.02</span> <small class="text-muted">(290)</small> </a> </div> <div class="col-6"> <a href="/technik-farmaceutyczny/MED.09/" class="footer-link"> <span>MED.09</span> <small class="text-muted">(1 227)</small> </a> </div> <div class="col-6"> <a href="/technik-turystyki-na-obszarach-wiejskich/HGT.10/" class="footer-link"> <span>HGT.10</span> <small class="text-muted">(535)</small> </a> </div> <div class="col-6"> <a href="/technik-rachunkowosci/EKA.07/" class="footer-link"> <span>EKA.07</span> <small class="text-muted">(1 379)</small> </a> </div> <div class="col-6"> <a href="/technik-geodeta/BUD.18/" class="footer-link"> <span>BUD.18</span> <small class="text-muted">(326)</small> </a> </div> <div class="col-6"> <a href="/technik-transportu-drogowego/TDR.01/" class="footer-link"> <span>TDR.01</span> <small class="text-muted">(412)</small> </a> </div> <div class="col-6"> <a href="/technik-renowacji-elementow-architektury/BUD.24/" class="footer-link"> <span>BUD.24</span> <small class="text-muted">(149)</small> </a> </div> </div> </div> <!-- Additional Info --> <div class="col-lg-4 footer-section"> <h2 class="h5">O portalu</h2> <p> Baza pytań do egzaminów zawodowych dla uczniów szkół technicznych i branżowych. Materiały zgodne z wymaganiami CKE. </p> </div> </div> <!-- Copyright & Links --> <hr class="footer-divider"> <div class="row align-items-center"> <div class="col-md-8 text-center text-md-start"> <p class="mb-0">© 2025 <a href="https://brylka.net" class="footer-link" aria-label="brylka.net">brylka.net</a> | <a href="/about-me/" class="footer-link" aria-label="O mnie i zawodowe.edu.pl">Bartosz Bryniarski</a></p> </div> <div class="col-md-4 text-center text-md-end"> <!-- <a href="/sitemap.xml" class="footer-link" aria-label="Mapa strony"> <i class="fas fa-sitemap" aria-hidden="true"></i> <span>Mapa strony</span> </a> --> </div> </div> </div> </footer> <!-- Back to top button --> <button id="backToTop" class="btn btn-outline-primary back-to-top" aria-label="Przewiń do góry strony" style="display: none;"> <i class="fas fa-arrow-up" aria-hidden="true"></i> </button> <!-- Cookie Banner --> <div id="cookieConsent" class="position-fixed start-0 bottom-0 py-3 shadow rounded-end" style="display: none; z-index: 1050; max-width: 50%; background-color: rgba(248, 249, 250, 0.95);"> <div class="container-fluid px-4"> <div class="d-flex flex-column gap-2"> <div> <i class="fas fa-cookie-bite me-2 text-secondary" aria-hidden="true"></i> <span class="small"> Strona wykorzystuje pliki cookies do poprawy doświadczenia użytkownika oraz analizy ruchu. <a href="#" class="footer-link" id="cookieDetails" data-bs-toggle="modal" data-bs-target="#cookieModal"> Szczegóły </a> </span> </div> <div class="d-flex gap-2 justify-content-end"> <button id="cookieAccept" class="btn btn-outline-primary btn-sm">Akceptuję</button> <button id="cookieReject" class="btn btn-outline-secondary btn-sm">Odrzuć</button> </div> </div> </div> </div> <!-- Modal z informacjami o cookies --> <div class="modal fade" id="cookieModal" tabindex="-1" aria-labelledby="cookieModalLabel" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h2 class="modal-title fs-5" id="cookieModalLabel">Polityka plików cookies</h2> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Zamknij"></button> </div> <div class="modal-body"> <h6 class="fw-bold">Czym są pliki cookies?</h6> <p> Cookies to małe pliki tekstowe, które są zapisywane na urządzeniu użytkownika podczas przeglądania stron internetowych. Służą one do zapamiętywania preferencji, śledzenia zachowań użytkowników oraz poprawy funkcjonalności serwisu. </p> <h6 class="fw-bold mt-4">Jakie cookies wykorzystujemy?</h6> <ul class="list-unstyled ps-3"> <li><i class="fas fa-check-circle text-success me-2"></i><strong>Niezbędne cookies</strong> - konieczne do prawidłowego działania strony</li> <li><i class="fas fa-check-circle text-success me-2"></i><strong>Funkcjonalne cookies</strong> - umożliwiające zapamiętanie wybranych ustawień (np. wybrany motyw)</li> <li><i class="fas fa-check-circle text-success me-2"></i><strong>Analityczne cookies</strong> - pozwalające zbierać informacje o sposobie korzystania ze strony</li> </ul> <h6 class="fw-bold mt-4">Jak długo przechowujemy cookies?</h6> <p> Pliki cookies wykorzystywane w naszym serwisie mogą być sesyjne (usuwane po zamknięciu przeglądarki) lub stałe (pozostają na urządzeniu przez określony czas). </p> <h6 class="fw-bold mt-4">Jak zarządzać cookies?</h6> <p> Możesz zarządzać ustawieniami plików cookies w swojej przeglądarce internetowej. Większość przeglądarek domyślnie dopuszcza przechowywanie plików cookies, ale możliwe jest również całkowite zablokowanie tych plików lub usunięcie wybranych z nich. </p> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Zamknij</button> <button type="button" class="btn btn-outline-primary" id="acceptCookiesModal">Akceptuję wszystkie</button> </div> </div> </div> </div> <!-- JavaScript --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" defer></script> <script src="/static/exams/js/code.js" defer></script> <script src="/static/exams/js/report_modal.js" defer></script> <script> document.addEventListener('DOMContentLoaded', function() { // Dodaj obsługę motywów dla banera cookie function updateCookieBannerTheme() { const cookieBanner = document.getElementById('cookieConsent'); const currentTheme = document.body.getAttribute('data-theme'); if (!cookieBanner) return; // Ustaw domyślny jasny styl cookieBanner.style.backgroundColor = 'rgba(248, 249, 250, 0.95)'; cookieBanner.style.color = '#212529'; cookieBanner.classList.remove('border-top', 'border-white'); // Zastosuj style zgodnie z motywem if (currentTheme === 'dark') { cookieBanner.style.backgroundColor = 'rgba(52, 58, 64, 0.95)'; cookieBanner.style.color = '#fff'; } else if (currentTheme === 'high-contrast') { cookieBanner.style.backgroundColor = '#000'; cookieBanner.style.color = '#fff'; cookieBanner.classList.add('border-top', 'border-white'); } } // Sprawdź, czy użytkownik już dokonał wyboru if (!localStorage.getItem('cookieConsent')) { // Jeśli nie, pokaż banner const cookieBanner = document.getElementById('cookieConsent'); if (cookieBanner) { cookieBanner.style.display = 'block'; updateCookieBannerTheme(); // Dostosuj szerokość na małych ekranach function adjustWidth() { if (window.innerWidth < 768) { cookieBanner.style.maxWidth = '100%'; } else { cookieBanner.style.maxWidth = '50%'; } } // Wywołaj przy ładowaniu i przy zmianie rozmiaru okna adjustWidth(); window.addEventListener('resize', adjustWidth); } } // Obsługa zmiany motywu const themeButtons = document.querySelectorAll('.theme-btn'); themeButtons.forEach(btn => { btn.addEventListener('click', function() { setTimeout(updateCookieBannerTheme, 50); }); }); // Obsługa przycisku akceptacji document.getElementById('cookieAccept')?.addEventListener('click', function() { localStorage.setItem('cookieConsent', 'accepted'); document.getElementById('cookieConsent').style.display = 'none'; }); // Obsługa przycisku odrzucenia document.getElementById('cookieReject')?.addEventListener('click', function() { localStorage.setItem('cookieConsent', 'rejected'); document.getElementById('cookieConsent').style.display = 'none'; }); // Obsługa przycisku akceptacji w modalu document.getElementById('acceptCookiesModal')?.addEventListener('click', function() { localStorage.setItem('cookieConsent', 'accepted'); document.getElementById('cookieConsent').style.display = 'none'; // Zamknij modal var cookieModal = bootstrap.Modal.getInstance(document.getElementById('cookieModal')); cookieModal?.hide(); }); }); </script> <!-- Toast messages initialization --> <script> document.addEventListener('DOMContentLoaded', function() { const copyButton = document.getElementById('copy-link-button'); if (copyButton) { copyButton.addEventListener('click', function() { const input = document.getElementById('share-link-input'); input.select(); document.execCommand('copy'); // Zmień tekst przycisku na potwierdzenie const originalText = this.innerHTML; this.innerHTML = '<i class="fas fa-check me-1"></i> Skopiowano!'; // Przywróć oryginalny tekst po 2 sekundach setTimeout(() => { this.innerHTML = originalText; }, 2000); }); } }); </script> </body> </html>