Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 7 kwietnia 2026 09:54
  • Data zakończenia: 7 kwietnia 2026 10:05

Egzamin zdany!

Wynik: 33/40 punktów (82,5%)

Wymagane minimum: 20 punktów (50%)

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

Jakie środowisko deweloperskie jest najczęściej wykorzystywane do budowy aplikacji na platformę Android?

A. Android Studio
B. Visual Studio
C. PyCharm
D. XCode
Android Studio to oficjalne środowisko programistyczne (IDE) do tworzenia aplikacji na system Android. Zostało opracowane przez Google i zapewnia pełne wsparcie dla języków takich jak Java, Kotlin oraz C++. Android Studio oferuje narzędzia do projektowania interfejsu użytkownika (UI), emulatory urządzeń, a także debugger i profiler, które pozwalają na testowanie i optymalizację aplikacji. IDE to jest zintegrowane z Android SDK, co ułatwia dostęp do API systemu Android oraz narzędzi takich jak ADB (Android Debug Bridge). Android Studio to kluczowe narzędzie dla deweloperów mobilnych, umożliwiające szybkie wdrażanie aplikacji na różne urządzenia oraz publikację w Google Play Store.

Pytanie 2

Jakie narzędzie najlepiej sprawdza się w przekształcaniu liczby szesnastkowej na binarną?

A. Program do arkuszy kalkulacyjnych
B. Kalkulator programisty
C. Aplikacja internetowa
D. Program do edycji tekstu
Kalkulator programisty jest najbardziej odpowiednim narzędziem do konwersji liczby szesnastkowej na binarną ze względu na swoje wyspecjalizowane funkcje matematyczne i programistyczne. Narzędzia te umożliwiają użytkownikom łatwe przekształcanie różnych systemów liczbowych, w tym konwersji z systemu szesnastkowego (hex) na system binarny. Kalkulatory programistyczne często zawierają dedykowane opcje dla konwersji liczbowej, co pozwala na szybkie i dokładne uzyskanie wyników bez potrzeby stosowania skomplikowanych algorytmów lub wzorów. Na przykład, aby przekształcić liczbę szesnastkową '1A' na binarną, użytkownik wprowadza '1A' do kalkulatora, a wynik '00011010' zostaje automatycznie wygenerowany. Dodatkowo, wiele kalkulatorów programistycznych jest zgodnych z międzynarodowymi standardami, co zapewnia ich wiarygodność w obliczeniach. Warto również zauważyć, że kalkulatory programistyczne mogą obsługiwać konwersje z różnych systemów liczbowych, co czyni je wszechstronnym narzędziem w pracy z danymi cyfrowymi i kodowaniem. Dzięki temu, kalkulator programisty stanowi idealne rozwiązanie dla programistów i inżynierów, którzy regularnie pracują z różnymi formatami danych.

Pytanie 3

Jakie środowisko developerskie służy do tworzenia aplikacji na platformę iOS?

A. Eclipse
B. Visual Studio Code
C. Studio Androida
D. XCode
XCode to oficjalne środowisko programistyczne (IDE) firmy Apple, które jest wykorzystywane do tworzenia aplikacji na systemy iOS, macOS, watchOS i tvOS. XCode oferuje pełne wsparcie dla języków Swift i Objective-C oraz narzędzia do projektowania interfejsów użytkownika (Storyboard), debugowania aplikacji, testowania wydajności i optymalizacji kodu. XCode posiada także symulatory urządzeń Apple, co umożliwia testowanie aplikacji na różnych modelach iPhone’ów, iPadów oraz Apple Watch. XCode jest niezbędnym narzędziem dla deweloperów tworzących aplikacje na ekosystem Apple i pozwala na łatwą publikację aplikacji w App Store.

Pytanie 4

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

class KlasaBazowa {
    public:
        virtual void metoda() {
            cout << "Bazowa. ";
        }
};

class KlasaPochodna : public KlasaBazowa {
    public:
        void metoda() {
            cout << "Pochodna. ";
        }
};

int main() {
    KlasaBazowa *bazowa = new KlasaPochodna();
    KlasaPochodna *pochodna = new KlasaPochodna();

    bazowa->metoda();
    pochodna->metoda();
    return 0;
}
A. Bazowa. Bazowa.
B. Pochodna. Bazowa.
C. Bazowa. Pochodna.
D. Pochodna. Pochodna.
Kod wyświetla 'Pochodna. Pochodna.', co wskazuje, że metody klasy pochodnej przejęły kontrolę nad tymi z klasy bazowej. To fajny przykład polimorfizmu, jaki mamy w C++. Tutaj metoda w klasie pochodnej jest lepsza od metody w klasie bazowej. To, jakie wywołanie się wykona, zależy od konkretnego obiektu, a nie od tego, jaką metodę zdefiniowaliśmy w klasie bazowej.

Pytanie 5

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

A. Karta graficzna
B. Kontroler DMA
C. Mostek północny (Northbridge)
D. Zasilacz
Kontroler DMA (Direct Memory Access) to komponent, który umożliwia transfer danych pomiędzy urządzeniami peryferyjnymi a pamięcią RAM bez bezpośredniego zaangażowania procesora. Choć odgrywa on istotną rolę w wydajności systemu, nie jest odpowiedzialny za bezpośrednią komunikację pomiędzy procesorem a pamięcią RAM. Jego zadaniem jest odciążenie procesora, ale nie zastępuje funkcji mostka północnego. Karta graficzna, z kolei, jest odpowiedzialna za renderowanie grafiki i przetwarzanie obrazów, a jej działanie jest ściśle związane z zadaniami wizualnymi, a nie z przesyłaniem danych pomiędzy CPU a RAM. Zasilacz natomiast jest komponentem, który dostarcza energię elektryczną do wszystkich części komputera. Choć niezbędny do funkcjonowania systemu, zasilacz nie ma żadnego wpływu na przesyłanie danych czy komunikację pomiędzy procesorem a pamięcią. W związku z tym, żaden z wymienionych elementów nie może pełnić roli mostka północnego, co czyni je niewłaściwymi odpowiedziami na to pytanie.

Pytanie 6

Po wykonaniu poniższego kodu na konsoli zostanie wyświetlona liczba:

int a = 0x73;
cout << a;
A. 108
B. 115
C. 0
D. 73
Wiele osób myli się, gdy widzi zapis 0x73, uznając, że to po prostu liczba 73 w dziesiętnym, bo tak wygląda najprościej. Jednak w rzeczywistości ten prefiks „0x” informuje kompilator, że mamy do czynienia z liczbą zapisaną w systemie szesnastkowym (heksadecymalnym), a nie dziesiętnym. To jest taki bardzo charakterystyczny zapis w językach programowania (C, C++, Java, czasem nawet Python), który pozwala programiście jasno określić, w jakim systemie podaje liczbę. Zakładając, że ktoś wybierze 108 lub 73, można podejrzewać, że ta osoba nie przeliczyła heksadecymalnej liczby na dziesiętną lub po prostu nie zwróciła uwagi na prefiks. 0x73 to w rzeczywistości (7 * 16) + 3, czyli 112 + 3, co daje 115. Niektórym może się też wydawać, że heksadecymalne 0x73 to 73 dziesiętnie, ale to typowy błąd początkujących. Wybór zera z kolei może wynikać z nieporozumienia – być może ktoś pomyślał, że a nie zostało zainicjalizowane lub kod nie wypisuje nic, ale tutaj jawnie inicjujemy a wartością heksadecymalną. Praktyka pokazuje, że podobne nieporozumienia pojawiają się na początku nauki programowania, szczególnie gdy nie ma jeszcze „wyczucia” systemów liczbowych. Tak naprawdę, jeśli chcemy być profesjonalni, trzeba od razu nauczyć się, że każda liczba z 0x na początku jest heksadecymalna, a cout zawsze wypisze jej dziesiętną reprezentację, o ile nie zmienimy flagi strumienia (std::hex itd.). To takie podstawy, które potem pozwalają pewniej obracać się w kodzie, gdzie często występują maski bitowe czy operacje na rejestrach. Moim zdaniem, wielu początkujących inżynierów właśnie przez nieuwagę na takie detale traci sporo czasu na debugowanie prostych błędów. Warto więc na przyszłość za każdym razem zatrzymać się na chwilę i zastanowić, czy na pewno dobrze rozpoznajemy system liczbowy wykorzystywany w danym fragmencie kodu.

Pytanie 7

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

A. Ograniczenie liczby grafik na stronie
B. Implementacja czytnika ekranu (screen reader)
C. Umożliwienie modyfikacji czcionki
D. Zmiana rozdzielczości ekranu
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 8

Co oznacza pojęcie MVP w kontekście projektowania aplikacji?

A. Most Valuable Program - program uznany za najbardziej wartościowy w organizacji
B. Minimum Viable Product - produkt o minimalnej funkcjonalności zdolny do działania
C. Mobile Virtual Platform - platforma do testowania aplikacji mobilnych
D. Multiple Value Platform - platforma wspierająca wiele typów wartości danych
Mimo że inne odpowiedzi mogą wydawać się interesujące, żadna z nich nie odnosi się do kluczowego pojęcia Minimum Viable Product, które jest fundamentalne w projektowaniu aplikacji. Multiple Value Platform sugeruje, że system jest w stanie obsługiwać różne typy danych, co jest ważne w kontekście integracji systemów, ale nie odnosi się bezpośrednio do strategii wprowadzania produktów. Most Valuable Program wskazuje na programy szczególnie cenione w organizacji, co jest terminem zupełnie odwrotnym do idei MVP, która koncentruje się na minimalnych funkcjonalnościach, a nie na wartości programu. Z kolei Mobile Virtual Platform, chociaż może wydawać się zbliżonym konceptem, odnosi się do środowisk wirtualnych używanych do testowania aplikacji mobilnych, co nie ma związku z procesem definiowania minimalnej wersji produktu na rynku. Kluczowym błędem jest zrozumienie, że MVP nie jest tylko o zredukowanej wersji produktu; to strategiczny sposób na wprowadzenie innowacji, który umożliwia naukę i adaptację, a nie tylko skupienie się na poszczególnych funkcjach czy platformach. Takie nieporozumienie może prowadzić do niewłaściwego podejścia do projektowania i wprowadzania produktów na rynek, co w dłuższej perspektywie może znacząco wpłynąć na sukces projektu.

Pytanie 9

Co będzie wynikiem działania poniższego kodu SQL?

SELECT COUNT(*)
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
A. Błąd składni SQL
B. Średnia pensja wszystkich pracowników
C. Liczba pracowników z najwyższą pensją
D. Liczba pracowników z pensją powyżej średniej
Odpowiedź, że wynik działania zapytania SQL to liczba pracowników z pensją powyżej średniej, jest całkowicie poprawna. Zapytanie to korzysta z funkcji agregującej COUNT(*), która zlicza liczbę rekordów spełniających określony warunek. W tym przypadku warunkiem jest, że pensja pracownika jest większa od średniej pensji wszystkich pracowników, którą obliczamy za pomocą wewnętrznego zapytania (subquery). Tego rodzaju operacje są powszechnie stosowane w analizie danych w bazach danych, gdzie często musimy wykonać porównania względem wartości agregatów, takich jak średnia, mediana czy suma. Przykładowo, w analizie wynagrodzeń w danej firmie, można użyć podobnych zapytań do oceny, jaki odsetek pracowników jest wynagradzanych powyżej średniej, co może być istotne z punktu widzenia polityki płacowej oraz budżetowania. Pamiętaj, że dobre praktyki w pracy z bazami danych obejmują optymalizację zapytań oraz unikanie niepotrzebnych obliczeń, co może wpłynąć na wydajność systemu.

Pytanie 10

Jakie rozwiązanie jest najbardziej odpowiednie przy projektowaniu aplikacji, która ma funkcjonować na różnych systemach operacyjnych?

A. Opracowanie dedykowanego kodu dla każdej platformy
B. Pełne dopasowanie aplikacji do systemu Windows
C. Koncentrowanie się wyłącznie na estetyce aplikacji
D. Wykorzystanie technik responsywnego projektowania interfejsu
Wykorzystanie technik responsywnego projektowania interfejsu to obecnie jedno z najskuteczniejszych rozwiązań, jeśli chodzi o tworzenie aplikacji działających na różnych systemach operacyjnych. Moim zdaniem, to podejście daje największą elastyczność i wygodę zarówno dla użytkownika, jak i dla samego zespołu developerskiego. Responsywność nie sprowadza się tylko do zmiany rozmiaru okna, ale także do automatycznego dostosowania elementów interfejsu do różnych rozdzielczości, DPI czy nawet gestów obsługiwanych przez konkretne urządzenia. Dzięki temu aplikacja może wyglądać i działać spójnie niezależnie od tego, czy uruchamiana jest na Windowsie, MacOS, Linuksie czy nawet na mobilnych systemach operacyjnych. W praktyce często korzysta się z frameworków takich jak Flutter, React Native albo Electron, które już "z pudełka" oferują narzędzia do tworzenia responsywnych, wieloplatformowych aplikacji. Branżowe standardy, szczególnie te, które dotyczą UX/UI (na przykład wytyczne Material Design czy Human Interface Guidelines od Apple), mocno podkreślają wagę responsywności i uniwersalności rozwiązań. Co ciekawe, dobrze zaprojektowana responsywna aplikacja jest też łatwiejsza w utrzymaniu i rozwoju, bo zamiast kilku osobnych wersji kodu, mamy jedną, dobrze przemyślaną bazę. To oszczędza czas, zasoby i minimalizuje ryzyko powstawania błędów. Sam przećwiczyłem wiele takich przypadków i widać, że inżynieria oprogramowania idzie właśnie w stronę uniwersalnych, "adaptacyjnych" rozwiązań.

Pytanie 11

Jakie jest wyjście działania kompilatora?

A. Kolekcja instrukcji w języku pośrednim
B. Zestaw błędów występujących w kodzie
C. Plik źródłowy w języku o wyższym poziomie
D. Plik maszynowy gotowy do uruchomienia
Plik maszynowy gotowy do uruchomienia jest wynikiem działania kompilatora. Po przekształceniu kodu źródłowego na język maszynowy tworzony jest plik binarny, który może być uruchomiony na komputerze bez konieczności ponownej kompilacji. Pliki te są szybkie i efektywne, ponieważ kod został wcześniej zoptymalizowany i przetworzony na instrukcje rozumiane przez procesor. Przykłady takich plików to .exe w systemie Windows lub pliki binarne w systemach Linux. Plik maszynowy to ostateczna forma programu, gotowa do dystrybucji i użytkowania.

Pytanie 12

Narzędzie przeznaczone do rozwijania aplikacji w systemie WPf (ang. Windows Presentation Foundation) to

A. Visual Studio
B. NetBeans
C. XamarinStudio
D. PyCharm
Visual Studio to narzędzie, które według mnie jest praktycznie niezbędne do profesjonalnej pracy z WPF (Windows Presentation Foundation). WPF to technologia Microsoftu do budowania nowoczesnych, graficznych interfejsów użytkownika na platformie Windows. Visual Studio posiada wbudowane wsparcie dla projektów WPF – od kreatora nowych aplikacji, przez podpowiedzi składni XAML, aż po graficzny edytor interfejsów, tzw. designer. Na co dzień, gdy projektuję UI w WPF, doceniam funkcje takie jak live preview, debugger XAML czy możliwość natychmiastowego podglądu zmian. Z Visual Studio korzystają praktycznie wszyscy programiści .NET na świecie, bo daje ono dostęp nie tylko do edycji kodu, ale też do narzędzi takich jak NuGet, integracja z systemami kontroli wersji (np. Git), testowanie jednostkowe czy automatyczne refaktoryzacje. Warto wiedzieć, że Microsoft stale rozwija Visual Studio pod kątem WPF, dbając nie tylko o nowości w językach C# i VB.NET, ale też o wygodę pracy z XAML-em oraz wsparcie dla wzorców projektowych, takich jak MVVM. Z praktycznego punktu widzenia, jeśli chcesz tworzyć prawdziwie profesjonalne aplikacje WPF, to Visual Studio jest – moim zdaniem – bezkonkurencyjne. Często nawet początkujący szybko zauważają, jak bardzo przyspiesza ono codzienną pracę i rozwiązywanie problemów typowych dla tej technologii.

Pytanie 13

Dziedziczenie jest używane, gdy zachodzi potrzeba

A. wykorzystania stałych wartości, niezmieniających się w trakcie działania aplikacji
B. sformułowania klasy bardziej szczegółowej niż już stworzona
C. określenia zasięgu dostępności metod i pól danej klasy
D. asynchronicznej realizacji długotrwałych zadań
Dziedziczenie to naprawdę jeden z kluczowych fundamentów programowania obiektowego. Chodzi tu o możliwość stworzenia nowej klasy (tzw. klasy pochodnej), która rozszerza lub precyzuje działanie już istniejącej klasy bazowej. Dzięki temu nie trzeba pisać wszystkiego od nowa – można po prostu przejąć cechy i zachowania ogólnej klasy, a potem dołożyć własne, bardziej szczegółowe funkcjonalności. Przykład? Klasa "Pojazd" może być ogólna, a potem robisz z niej "Samochód", "Rower" czy "Motocykl". Każda z tych klas dziedziczy podstawowe właściwości pojazdu (jak np. liczba kół), ale może mieć swoje dodatkowe pole czy metodę. W praktyce to pozwala na bardzo elastyczne i czytelne projektowanie kodu, no i łatwiejsze zarządzanie nim na dłuższą metę. Według większości standardów branżowych, np. w językach Java, C# czy C++, dziedziczenie jest zalecane właśnie wtedy, gdy chcesz odwzorować relację „jest rodzajem” (is-a). Z mojego doświadczenia, używanie dziedziczenia według tej zasady pozwala uniknąć wielu problemów z powielaniem kodu i z czasem naprawdę oszczędza mnóstwo roboty. Warto pamiętać, że nie wszystko należy dziedziczyć na siłę – czasem lepiej postawić na kompozycję, ale jeśli faktycznie potrzebujesz klasy bardziej szczegółowej, to dziedziczenie to chyba najlepszy wybór.

Pytanie 14

Które z wymienionych praw autorskich nie wygasa po pewnym czasie?

A. Autorskie prawa majątkowe
B. Prawa pokrewne
C. Autorskie prawa osobiste
D. Licencje wolnego oprogramowania
Autorskie prawa osobiste to rodzaj praw autorskich, które nie wygasają po upływie określonego czasu i są bezterminowe. Obejmują one prawo do autorstwa, oznaczania dzieła swoim nazwiskiem oraz sprzeciwiania się wszelkim zmianom, które mogłyby naruszać reputację twórcy. Prawa osobiste są niezbywalne, co oznacza, że nie można ich przenieść na inną osobę ani sprzedać. Nawet po śmierci twórcy, prawo do ochrony integralności jego dzieła jest respektowane. W praktyce oznacza to, że choć prawa majątkowe mogą wygasnąć (np. po 70 latach od śmierci autora), prawo do bycia uznanym za twórcę trwa wiecznie.

Pytanie 15

Jakie stwierdzenie najlepiej tłumaczy cel podziału programu na funkcje (metody)?

A. Gwarantuje automatyczną kompilację programu
B. Umożliwia skrócenie kodu przez eliminację wszelkich komentarzy
C. Ułatwia proces debugowania oraz ponowne wykorzystanie fragmentów kodu
D. Eliminuje potrzebę korzystania ze zmiennych globalnych
Usunięcie komentarzy w kodzie nie ma wpływu na podział programu na funkcje. Komentarze pełnią rolę informacyjną dla programistów i nie wpływają na działanie kodu. Automatyczna kompilacja programu to proces wykonywany przez kompilator i nie ma związku z dzieleniem programu na funkcje – kompilator przetwarza kod niezależnie od tego, czy program jest podzielony na funkcje czy napisany jako jeden blok. Eliminacja zmiennych globalnych to dobra praktyka, ale dzielenie programu na funkcje nie eliminuje automatycznie potrzeby ich stosowania. W rzeczywistości funkcje mogą nadal korzystać ze zmiennych globalnych, jeśli nie zostaną odpowiednio zaprojektowane.

Pytanie 16

Który z frameworków bazuje na budowaniu komponentów przy użyciu języka JavaScript?

A. React.js
B. Node.js
C. ASP.NET Core
D. Django
React.js to popularna biblioteka JavaScript, która opiera się na komponencie jako podstawowym elemencie budowy interfejsu użytkownika. Framework ten umożliwia tworzenie dynamicznych i interaktywnych aplikacji webowych, które cechują się wysoką wydajnością. Dzięki wykorzystaniu komponentów, programiści mogą wielokrotnie wykorzystywać te same elementy interfejsu, co znacznie upraszcza zarządzanie kodem i poprawia jego czytelność. React jest szeroko stosowany w budowie Single Page Applications (SPA) i wspiera technologię Virtual DOM, co minimalizuje liczbę operacji na rzeczywistym DOM i zwiększa szybkość renderowania stron. React jest szczególnie polecany do tworzenia nowoczesnych aplikacji webowych o dynamicznych interfejsach, co czyni go jednym z liderów na rynku frontendowym.

Pytanie 17

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

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

Pytanie 18

Ergonomiczną oraz właściwą pozycję do pracy przy komputerze zapewni fotel, którego

A. oparcie wspiera lordozę w dolnym odcinku pleców
B. podłokietniki znajdują się 20 cm poniżej blatu
C. oparcie w rejonie szyi jest nachylone do przodu o 40ᵒ
D. podłokietniki są 30 cm powyżej blatu
Prawidłowa i ergonomiczna pozycja pracy przy komputerze jest kluczowa dla zdrowia i komfortu użytkownika. Oparcie krzesła, które zapewnia lordozę w odcinku lędźwiowym, jest niezbędne, ponieważ pozwala na zachowanie naturalnej krzywizny kręgosłupa. Lordoza lędźwiowa to naturalne wygięcie kręgosłupa w dolnej części pleców, które wspiera prawidłowe ułożenie ciała podczas siedzenia. Krzesło powinno być zaprojektowane tak, aby oparcie przylegało do krzywizny ciała, co minimalizuje ryzyko bólu pleców oraz przeciążeń. Praktycznym przykładem ergonomicznej pozycji jest ustawienie oparcia w taki sposób, aby jego dolna część była dostosowana do odcinka lędźwiowego. Zgodnie z normami ISO 9241, które dotyczą ergonomii miejsc pracy przy komputerze, krzesło powinno umożliwiać użytkownikowi przyjęcie wygodnej pozycji z podparciem dla dolnej części pleców. W odpowiedniej pozycji stopy powinny spoczywać płasko na podłodze, a kolana powinny być na poziomie bioder, co wspiera prawidłowe krążenie krwi oraz redukuje napięcia mięśniowe.

Pytanie 19

Jakie składniki są kluczowe w dynamicznym formularzu logowania?

A. Tabela w bazie danych
B. Pola tekstowe do wprowadzania danych użytkownika
C. Nagłówek HTTP
D. Plik graficzny
Pola tekstowe do wprowadzania danych użytkownika są kluczowym elementem dynamicznego formularza logowania. Umożliwiają one użytkownikowi wprowadzenie informacji, takich jak nazwa użytkownika i hasło, co jest niezbędne do uwierzytelnienia w systemie. Formularze HTML wykorzystują tagi <input> do tworzenia pól tekstowych, a ich interakcja z użytkownikiem może być wspierana przez JavaScript lub inne technologie frontendowe, które walidują dane i zapewniają bezpieczeństwo procesu logowania. Pola tekstowe mogą być wzbogacone o atrybuty, takie jak 'required', 'pattern' czy 'type', które dodatkowo zabezpieczają formularz i ułatwiają użytkownikowi poprawne wypełnienie danych.

Pytanie 20

Który z wymienionych elementów stanowi przykład złożonego typu danych?

A. bool
B. int
C. char
D. struct
Typ 'struct' w C++ to super sprawa, bo pozwala na trzymanie różnych danych pod jedną nazwą. Dzięki temu można łatwo zorganizować zmienne, które różnią się typami. Wyobraź sobie, że możesz stworzyć strukturę, która będzie reprezentować na przykład samochód z jego marką, rocznikiem i ceną. To naprawdę ułatwia pracę z danymi! Każde pole w strukturze może mieć inny typ, co czyni 'struct' bardzo uniwersalnym narzędziem do modelowania różnych obiektów, jak ludzie czy produkty. W zasadzie, to takie logiczne pudełko, do którego wrzucasz różne informacje i masz do nich szybki dostęp.

Pytanie 21

Który z poniższych elementów HTML5 służy do rysowania grafiki?

A. &lt;graphic&gt;
B. &lt;canvas&gt;
C. &lt;svg&gt;
D. &lt;draw&gt;
Element HTML5 &lt;canvas&gt; jest kluczowym narzędziem do rysowania grafiki w przeglądarkach internetowych. Umożliwia programistom tworzenie dwuwymiarowych i trójwymiarowych grafik w sposób dynamiczny, wykorzystując JavaScript. Przykładem zastosowania &lt;canvas&gt; jest tworzenie gier, animacji, wizualizacji danych oraz interaktywnych wykresów. Dzięki API dla elementu canvas, programiści mają możliwość rysowania kształtów, linii, tekstu oraz obrazów, co otwiera szerokie możliwości w zakresie projektowania interfejsów użytkownika. Warto również zwrócić uwagę na to, że stosowanie &lt;canvas&gt; zgodnie z najlepszymi praktykami programistycznymi, takimi jak efektywne zarządzanie pamięcią i optymalizacja renderowania, pozwala na osiąganie płynnych animacji i wysokiej jakości grafik. Co więcej, &lt;canvas&gt; jest wspierany przez wszystkie nowoczesne przeglądarki, co zapewnia dużą zgodność i dostępność.

Pytanie 22

Kod w bibliotece React.js oraz w frameworku Angular, który został zaprezentowany, ma na celu wyświetlenie

Fragment kodu React.js:
state = {    zm1: 0   };
hanleEv = () => {
    this.setState({zm1: this.state.zm1 + 1});
}
render() {
    return (<div>
        <span>{this.state.zm1}</span>
        <button onClick={this.handleEv}>BTN_1</button>
    </div>);
}
Fragment kodu Angular:
@Component({
    selector: 'sel1',
    template: `<span>{{ zm1 }}</span>
              <button (click)="onBtnCilcked()">BTN_1</button>`
})
export class Licznik1Component {
    zm1 = 0;
    onBtnCilcked() { this.zm1++; }
}
A. wartości 0 po naciśnięciu przycisku
B. wyłącznie przycisku oraz obsłużenie zdarzenia click, które ono generuje
C. tylko napisu BTN_1
D. liczby kliknięć przycisku
Ten kod, zarówno w React.js jak i w Angularze, jest klasycznym przykładem prostego licznika. To, co tu się dzieje, to tak naprawdę zliczanie kliknięć użytkownika w przycisk. Za każdym razem, gdy naciśniesz BTN_1, zmienna (zm1) jest inkrementowana – czyli po prostu zwiększana o jeden. W React za to odpowiada metoda setState, która zmienia stan komponentu – dzięki temu interfejs od razu aktualizuje się bez przeładowywania strony. W Angularze natomiast działa to przez tzw. dwukierunkową komunikację z template’em i automatyczną detekcję zmian – metoda onBtnCilcked w komponencie modyfikuje zmienną, a framework sam aktualizuje widok. Z mojego doświadczenia, takie podejście do zarządzania stanem to podstawa w nowoczesnych aplikacjach, szczególnie jeśli chodzi o responsywność i natychmiastową reakcję na akcje użytkownika. Liczniki są zresztą jednym z pierwszych przykładów, jakie się pisze ćwicząc frameworki frontendowe, bo świetnie pokazują, jak działa przepływ danych i odświeżanie elementów UI. Warto dodać, że trzymanie licznika kliknięć w stanie komponentu (a nie np. jako zmienną globalną) jest zgodne z dobrymi praktykami – bo ogranicza zakres danych i ułatwia zarządzanie większymi aplikacjami. Takie wzorce potem można z powodzeniem przenieść do trudniejszych projektów, na przykład liczników, koszyków, liczby zamówień czy nawet zaawansowanych dashboardów. W praktyce ten mechanizm inkrementowania wartości po kliknięciu użytkownika jest jednym z najczęściej używanych w interaktywnych aplikacjach internetowych.

Pytanie 23

Który z podanych terminów najlepiej odnosi się do składnika statycznego w klasie?

A. Zmienna lokalna wewnątrz danej klasy
B. Pole lub metoda, która jest przypisana do klasy, a nie do jej instancji
C. Funkcja, która wywołuje destruktor danej klasy
D. Metoda z dostępem ograniczonym tylko do tej samej klasy
Metoda z dostępem ograniczonym do tej samej klasy to przykład modyfikatora `private`, a nie cecha składnika statycznego. Funkcja wywołująca destruktor nie jest statycznym składnikiem klasy – destruktory są specyficzne dla każdej instancji obiektu. Zmienna lokalna wewnątrz klasy to zmienna zadeklarowana w metodzie klasy i istnieje tylko w czasie jej wykonywania, co różni się od pól statycznych, które są trwałe i współdzielone przez wszystkie obiekty danej klasy. Składniki statyczne odnoszą się do klasy jako całości, a nie do pojedynczych instancji.

Pytanie 24

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

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

A. Zwiększenie czasu spędzanego na mediach społecznościowych
B. Używanie komputera jedynie w nocy
C. Zainstalowanie większej ilości aplikacji rozrywkowych
D. Wprowadzenie systematycznych przerw od używania urządzeń cyfrowych
Wprowadzenie systematycznych przerw od używania urządzeń cyfrowych to bardzo skuteczna metoda radzenia sobie z uzależnieniem od internetu. Rekomendują ją zarówno psychologowie, jak i specjaliści zajmujący się zdrowiem cyfrowym. W praktyce chodzi o to, żeby regularnie robić świadome przerwy od ekranu – na przykład ustawiając sobie limity czasowe, korzystając z aplikacji blokujących dostęp do określonych stron czy ustalając z góry pory dnia bez używania urządzeń elektronicznych. Takie działania mają mocno pozytywny wpływ na samodyscyplinę i pomagają odzyskać równowagę między życiem offline a online. Zresztą, nawet w poradnikach branżowych dla informatyków czy programistów można znaleźć zalecenia dotyczące odpoczynku od komputera, bo to poprawia koncentrację oraz ogólne samopoczucie. Moim zdaniem, warto przetestować różne sposoby tych przerw – czasem wystarczy wyjść na spacer, zrobić coś rękami albo po prostu porozmawiać z kimś na żywo. Regularność w tych czynnościach naprawdę robi różnicę. A co ciekawe, technika Pomodoro, znana z produktywności, świetnie sprawdza się także tutaj – 25 minut pracy, potem 5 minut przerwy bez żadnych ekranów. Z mojego doświadczenia, takie przerwy pomagają nie tylko ograniczyć korzystanie z internetu, ale też zadbać o swój wzrok i kręgosłup, co jest ważne zwłaszcza dla osób pracujących przy komputerze.

Pytanie 26

Jakie z wymienionych czynności może zagrażać cyfrowej tożsamości?

A. Cykliczna zmiana haseł do kont
B. Klikanie w podejrzane linki w wiadomościach e-mail
C. Tworzenie unikalnych oraz mocnych haseł
D. Aktywacja uwierzytelniania dwuskładnikowego
Klikanie w podejrzane linki w wiadomościach e-mail to jedno z najczęstszych źródeł infekcji i naruszenia cyfrowej tożsamości. Cyberprzestępcy często wykorzystują phishing, czyli technikę polegającą na wysyłaniu fałszywych wiadomości, które wyglądają na autentyczne. Kliknięcie w link może prowadzić do zainstalowania złośliwego oprogramowania lub przekierowania na stronę wyłudzającą dane logowania. Aby uniknąć tego zagrożenia, zaleca się sprawdzanie adresu nadawcy, unikanie otwierania załączników z nieznanych źródeł i korzystanie z filtrów antyphishingowych.

Pytanie 27

Na podstawie definicji zamieszczonej w ramce, wskaż, który z rysunków ilustruje komponent Chip zdefiniowany w bibliotece Angular Material?

Ilustracja do pytania
A. Rysunek 2
B. Rysunek 4
C. Rysunek 3
D. Rysunek 1
Komponent Chip w bibliotece Angular Material to interaktywny element, który reprezentuje fragment informacji, tag lub wybór. Może zawierać tekst, ikonę lub być klikalny, co czyni go niezwykle użytecznym w projektowaniu nowoczesnych interfejsów użytkownika. Komponenty tego typu często wykorzystywane są w formularzach lub systemach tagowania, umożliwiając użytkownikowi intuicyjne dodawanie lub usuwanie elementów. Wyróżnia się swoją minimalistyczną formą i możliwością dostosowania do różnych potrzeb projektowych.

Pytanie 28

Podana deklaracja zmiennych w języku JAVA zawiera

String imie = "Anna";
short wiek = 12;
int i = 0;
char plec = 'K';
boolean jestUczniem = true;
A. dwie zmienne typu tekstowego, dwie całkowite oraz jedną logiczną
B. dwie zmienne o typie strukturalnym
C. jedną zmienną typu tekstowego, jedną rzeczywistą, jedną całkowitą, jedną znakową oraz jedną logiczną
D. jedną zmienną typu tekstowego, dwie całkowite, jedną znakową i jedną logiczną
Analizując podaną deklarację zmiennych w języku Java, widać wyraźnie, że mamy tu do czynienia z pięcioma zmiennymi o różnych typach: String imie = "Anna" – typ tekstowy, short wiek = 12 oraz int i = 0 – dwa typy całkowite (różnią się zakresem wartości), char plec = 'K' – typ znakowy, boolean jestUczniem = true – typ logiczny. Takie zróżnicowanie typów pozwala nie tylko przechowywać różne informacje, ale też lepiej zarządzać pamięcią i logiczną strukturą programu. Z mojej perspektywy, właściwy dobór typów danych to podstawa, bo pomaga unikać wielu późniejszych problemów z kompatybilnością czy błędami wykonania. Java została zaprojektowana tak, by wymuszać jawność typów, co zdecydowanie zwiększa czytelność kodu i zmniejsza liczbę nieoczywistych bugów. Praktycznie, w każdej większej aplikacji spotkamy się z kombinacją typów prostych (jak int, short, boolean czy char) i obiektowych (np. String). Warto pamiętać, że String to typ referencyjny, a nie prosty jak reszta wymienionych. Przy dużych projektach poleca się deklarować zmienne możliwie najwęższego typu (np. short zamiast int, jeśli wystarczy), by oszczędzać zasoby. To jest taka podstawowa wiedza, bez której trudno ruszyć dalej w świecie Javy, bo typy decydują o tym, jak zachowuje się program i co można z danymi zrobić. W rzeczywistych projektach, na przykład przy tworzeniu rejestracji użytkowników czy bazy danych, takie typy jak String, int, char i boolean pojawiają się na każdym kroku.

Pytanie 29

Które z poniższych NIE jest typem wartości zwracanej przez funkcję w języku JavaScript?

A. Number
B. Object
C. Undefined
D. Method
Wybór odpowiedzi związanej z 'Method' jako typem wartości zwracanej przez funkcję w JavaScript może wynikać z nieporozumienia dotyczącego różnicy pomiędzy funkcją a metodą. Warto wiedzieć, że w JavaScript funkcje są obiektami pierwszej klasy, co oznacza, że mogą być przypisywane do zmiennych, przekazywane jako argumenty oraz zwracane z innych funkcji. Wśród typów wartości, które mogą być zwracane przez funkcje, znajdują się obiekty, liczby, stringi oraz typ undefined, co jest wynikiem zachowań typowych dla tego języka. Kiedy funkcja nie zwraca żadnej wartości, domyślnie zwraca undefined. Typowe błędy myślowe pojawiają się, gdy programiści mylą koncepcje funkcji i metod lub mylą pojęcia typów danych. Często mogą założyć, że metoda jest równoważna typowi zwracanemu, co nie jest zgodne z definicjami w programowaniu obiektowym. Obiekt w JavaScript może mieć wiele metod, które są funkcjami, ale to nie czyni metody typem zwracanym. Przykładem tego może być zdefiniowanie obiektu z wieloma funkcjami, które działają na jego danych. To jasno pokazuje, że metody są połączeniem funkcji z obiektami, a nie typami wartości. Ważne jest, aby podczas nauki języka JavaScript skupić się na zrozumieniu struktury języka oraz jego zasad, co pomoże unikać zamieszania związanych z terminologią oraz zastosowaniem tych koncepcji w praktyce.

Pytanie 30

W metodach klasy GoldCustomer dostępne są tylko pola

public class Customer {
    public string Name;
    protected int Id;
    private int Age;
}
public class GoldCustomer: Customer {
    private GoldPoints: int;
}
A. GoldPoints, Name
B. GoldPoints
C. GoldPoints, Name, Id
D. GoldPoints, Name, Id, Age
Ta odpowiedź dobrze pokazuje, jak działa dziedziczenie i modyfikatory dostępu w C#. W klasie GoldCustomer masz dostęp do własnych pól, czyli GoldPoints, oraz do pól odziedziczonych po klasie bazowej Customer. Tutaj kluczowe jest rozumienie, które pola są faktycznie dostępne. Skoro Name jest publiczne, to bez żadnych kombinacji można się do niego dobrać z dowolnego miejsca – nawet spoza klasy. Id jest chronione (protected), więc według zasad OOP dostępne jest w klasie bazowej oraz wszystkich pochodnych – czyli właśnie w GoldCustomer. To bardzo praktyczne, bo często się zdarza, że potrzebujemy pracować na polach z klasy bazowej, ale nie chcemy, żeby były one widoczne na zewnątrz klasy (np. przez innych programistów korzystających z API). Age jest prywatne i tu już nie da się go bezpośrednio użyć w klasie pochodnej. Z mojego doświadczenia korzystanie z protected dla rzeczy, które mają być dostępne tylko w hierarchii dziedziczenia, to codzienność – pozwala zachować elastyczność, ale i bezpieczeństwo enkapsulacji. Praktycznie rzecz biorąc, jak piszesz klasy dziedziczące po innych, zawsze warto zerknąć na poziomy dostępu, bo od nich zależy, do czego masz dostęp i co możesz odziedziczyć. Wzorce projektowe, jak np. Template Method, mocno polegają na mechanizmach dziedziczenia i odpowiedniego ustawienia widoczności pól czy metod. Przemyślany dobór public, protected, private ułatwia utrzymanie kodu oraz chroni przed przypadkowym wykorzystaniem nieodpowiednich elementów klasy, co w większych projektach bywa naprawdę kluczowe.

Pytanie 31

W języku Python, jak nazywa się funkcja, która jest wykonywana automatycznie, gdy obiekt jest niszczony?

A. __del__
B. __repr__
C. __str__
D. __init__
W Pythonie funkcja <code>__del__</code> to metoda destruktora, która jest wywoływana, gdy obiekt jest niszczony. Jest to część procesu zarządzania pamięcią, gdzie interpreter Pythona automatycznie usuwa obiekty, które nie są już potrzebne, aby zwolnić pamięć. <code>__del__</code> pozwala na wykonanie dodatkowych czynności przed ostatecznym usunięciem obiektu, takich jak zamknięcie plików czy połączeń sieciowych. Warto jednak pamiętać, że użycie <code>__del__</code> nie jest zalecane do zarządzania zasobami, ponieważ może prowadzić do trudnych do zdiagnozowania błędów, szczególnie gdy obiekty są usuwane w nieprzewidywalnym momencie. Zamiast tego, lepiej jest używać menedżerów kontekstu (z instrukcją <code>with</code>), które zapewniają bardziej kontrolowane i bezpieczne zwalnianie zasobów. Przykładowo, otwierając plik za pomocą <code>with open('plik.txt', 'r') as f:</code>, masz pewność, że plik zostanie zamknięty poprawnie po zakończeniu bloku kodu, niezależnie od tego, czy wystąpił błąd.

Pytanie 32

Jakie z wymienionych narzędzi jest szeroko stosowane do debugowania aplikacji internetowych?

A. Blender
B. Chrome DevTools
C. Git
D. Postman
Git jest systemem kontroli wersji, który pomaga zarządzać kodem źródłowym i śledzić zmiany, ale nie służy do debugowania aplikacji webowych. Postman to narzędzie do testowania API, które pozwala na wysyłanie zapytań HTTP, ale nie umożliwia debugowania interfejsów webowych ani modyfikacji DOM. Blender jest narzędziem do modelowania 3D i animacji, nie mającym związku z debugowaniem aplikacji webowych.

Pytanie 33

Co to jest polimorfizm w programowaniu obiektowym?

A. Zdolność klasy do posiadania wielu konstruktorów
B. Zdolność obiektów różnych klas do reagowania na tę samą metodę w sposób odpowiedni dla ich klasy
C. Proces tworzenia nowej klasy na podstawie istniejącej
D. Mechanizm ukrywania szczegółów implementacji przed zewnętrznymi klasami
Polimorfizm jest fundamentalnym pojęciem w programowaniu obiektowym, które pozwala obiektom różnych klas na reagowanie na tę samą metodę w sposób odpowiedni dla ich konkretnej klasy. Przykładowo, jeśli mamy klasę `Zwierze` z metodą `dźwięk()`, a następnie klasy `Pies` i `Kot`, każda z tych klas może implementować metodę `dźwięk()` w inny sposób: pies może wydawać dźwięk 'Hau', podczas gdy kot 'Miau'. Dzięki temu, gdy wywołujemy `dźwięk()` na obiekcie typu `Zwierze`, a dokładnie na obiekcie, który może być różnego typu, uzyskujemy różne wyniki w zależności od klasy. Polimorfizm zwiększa elastyczność i skalowalność kodu, co jest zgodne z zasadami SOLID, szczególnie z zasadą otwarte-zamknięte. W praktyce polimorfizm umożliwia programistom tworzenie bardziej złożonych systemów, w których obiekty mogą być używane zamiennie, co ułatwia ich rozwój i konserwację.

Pytanie 34

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

<h2>{2+2}</h2>
Kod w Angular:
<h2>{{2+2}}</h2>
A. {4}
B. {{2+2}}
C. {2+2}
D. 4
To pytanie jest świetną okazją, żeby zobaczyć, jak działają wyrażenia w szablonach Reacta i Angulara. Odpowiedź „4” jest prawidłowa, bo zarówno w React, jak i w Angularze, zawarte w nawiasach klamrowych wyrażenie matematyczne 2+2 jest oceniane przez silnik JavaScript podczas renderowania komponentu. Nie jest to zwykły tekst, tylko dynamiczne wyliczenie. Dzięki temu React (w JSX) oraz Angular (w interpolacji {{}}) najpierw obliczają sumę, a potem podstawiają wynik w miejsce wyrażenia – czyli na ekranie pojawia się zwykły tekst „4”. Moim zdaniem to jedna z największych zalet tych frameworków, bo pozwala na bardzo elastyczne budowanie UI, gdzie dynamiczne dane mogą być wstawiane praktycznie wszędzie, bez potrzeby ręcznego tworzenia dodatkowych zmiennych czy długich instrukcji warunkowych. W praktyce często stosuje się takie podejście chociażby do wyświetlania wyników obliczeń, liczników, czy dynamicznych podsumowań. Z mojego doświadczenia, warto pamiętać, że każde wyrażenie w takich miejscach powinno być możliwie proste — złożone logiki lepiej wynieść do funkcji, bo wtedy szablon pozostaje czytelny. Warto też mieć świadomość, że React i Angular automatycznie konwertują wynik na tekst, więc nie trzeba się martwić o jawne rzutowanie. To podejście jest zgodne z dobrymi praktykami branżowymi – prosty, czytelny kod to podstawa w nowoczesnych aplikacjach webowych.

Pytanie 35

Jakie informacje przedstawia diagram Gantta?

A. Model przepływu danych
B. Relacje między różnymi projektami
C. Strukturę plików w projekcie
D. Plan działań w projekcie
Diagram Gantta to narzędzie używane do wizualizacji harmonogramu zadań w projekcie. Przedstawia on zadania w układzie osi czasu, co pozwala na łatwe śledzenie terminów, zależności i etapów realizacji projektu. Diagram Gantta jest niezwykle przydatny w dużych projektach, ponieważ ułatwia planowanie zasobów i umożliwia identyfikowanie potencjalnych opóźnień. Dzięki czytelnej formie, managerowie mogą szybko ocenić, które zadania są w trakcie realizacji, a które są opóźnione. Diagramy Gantta są szeroko stosowane w zarządzaniu projektami budowlanymi, IT oraz w planowaniu kampanii marketingowych.

Pytanie 36

Jaki będzie wynik działania poniższego kodu w języku C#?

int x = 5;
int y = 10;
Console.WriteLine($"Suma {x} i {y} wynosi {x + y}");
A. Suma 5 i 10 wynosi 15
B. Error: niewłaściwa składnia
C. Suma x i y wynosi 15
D. Suma 5 i 10 wynosi x + y
Kod w języku C# wykonuje operację dodawania dwóch zmiennych, x i y, oraz wyświetla wynik w sformatowanym ciągu tekstowym. Poprawna odpowiedź to 'Suma 5 i 10 wynosi 15', ponieważ zmienna x ma wartość 5, a zmienna y ma wartość 10. Kiedy dodajemy te dwie liczby, otrzymujemy 15. Warto zwrócić uwagę na wykorzystanie interpolacji ciągów, co jest istotnym elementem w nowoczesnym C#. Umożliwia to w prosty sposób łączyć tekst z wartościami zmiennych, co zwiększa czytelność kodu. Interpolacja jest szczególnie przydatna w kontekście generowania komunikatów użytkownika i raportów. Przykład zastosowania może obejmować aplikacje, które prezentują wyniki obliczeń lub statystyki, gdzie ważne jest, aby w przyjazny sposób przedstawiać dane. Dobre praktyki programistyczne sugerują, aby unikać twardego kodowania wartości zamiast tego używać zmiennych, co ułatwia późniejsze modyfikacje i utrzymanie kodu.

Pytanie 37

Jakie są cechy testów interfejsu?

A. Ulepszają kod aplikacji
B. Weryfikują zgodność aplikacji z przepisami prawnymi
C. Analizują wydajność aplikacji w czasie rzeczywistym
D. Sprawdzają prawidłowość pracy elementów graficznych oraz interakcji użytkownika z aplikacją
Testy interfejsu, znane też jako testy GUI (Graphical User Interface), są niesamowicie istotne w codziennej pracy programisty, zwłaszcza jeśli chodzi o aplikacje z graficznym interfejsem użytkownika. Ich głównym celem jest sprawdzanie, czy wszystkie elementy graficzne, takie jak przyciski, pola tekstowe czy menu działają zgodnie z założeniami oraz czy użytkownik może wchodzić z nimi w interakcję w przewidywany sposób. W praktyce zdarza się, że najwięcej błędów wychodzi właśnie na tym etapie – na przykład, kliknięcie w przycisk nie wywołuje żadnej akcji, albo okna dialogowe są nieczytelne. Moim zdaniem regularne wykonywanie takich testów (często automatycznych przy użyciu narzędzi typu Selenium, Cypress czy Playwright) pozwala wykrywać drobne usterki zanim trafią do rąk klienta, co jest zgodne z dobrymi praktykami Continuous Integration. Często też testy te są weryfikowane pod kątem responsywności, dostępności (WCAG) czy kompatybilności z różnymi przeglądarkami. Z mojego doświadczenia to właśnie testy interfejsu najbardziej pomagają w budowaniu pozytywnych doświadczeń użytkowników, bo pomagają wychwycić nieintuicyjne zachowania aplikacji, które ciężko zauważyć samym kodem. Warto więc o nich pamiętać, bo nawet najlepsza logika aplikacji nie obroni się, gdy UI nie działa poprawnie.

Pytanie 38

Która z poniższych informacji o pojęciu obiekt jest prawdziwa?

A. obiekt jest instancją klasy
B. obiekt to typ złożony
C. obiekt pozwala na zdefiniowanie klasy
D. obiekt oraz klasa są identyczne
Prawidłowo, obiekt w programowaniu obiektowym to konkretny egzemplarz, czyli instancja klasy. Wyobraź sobie klasę jako przepis (np. instrukcja budowy samochodu), a obiekt to już gotowy samochód wyprodukowany według tej instrukcji. W praktyce, kiedy definiujesz klasę w języku takim jak Java, C++ czy Python, tworzysz pewnego rodzaju szablon opisujący, co dany obiekt będzie mógł robić (metody) i jakie będzie miał dane (pola/atrybuty). Dopiero utworzenie instancji tej klasy, czyli wywołanie np. new Car(), powoduje, że powstaje prawdziwy, działający obiekt, z którym możesz coś zrobić – na przykład ustawić mu kolor, zapalić światła czy uruchomić silnik. Z mojego doświadczenia wynika, że właśnie rozróżnienie klasy i obiektu pozwala pisać kod bardziej uniwersalny i czytelny. W dobrych praktykach, na przykład zgodnie z zasadami SOLID, klasa powinna być zrozumiała i opisująca pewien spójny koncept, zaś obiekty powstające na jej podstawie mogą zachowywać się różnie zależnie od wprowadzonych danych. To podejście jest fundamentem programowania nowoczesnych aplikacji, bo pozwala łatwo zarządzać złożonością, testować kod i rozwijać projekty. Warto też pamiętać, że instancja klasy może mieć swój własny, unikalny stan, co odróżnia ją od samej definicji klasy. Bez tworzenia obiektów klasy nie mają praktycznego zastosowania – to właśnie obiekty wykonują zadania w programie.

Pytanie 39

Fragment kodu w języku JavaScript to

let modulo = (x, y) => x % y;
A. Definicja zmiennej typu tablicowego
B. Definicja funkcji strzałkowej
C. Prototyp metody klasy
D. Prototyp interfejsu
Ten fragment kodu w JavaScript to klasyczny przykład funkcji strzałkowej, czyli tzw. arrow function. To funkcja zdefiniowana w bardzo nowoczesny, oszczędny sposób, który pojawił się wraz z ES6 (ECMAScript 2015). Taki zapis pozwala na szybkie tworzenie prostych funkcji anonimowych, bez potrzeby używania słowa kluczowego 'function'. Ma to ogromne znaczenie np. przy pracy z wyrażeniami funkcyjnymi, callbackami albo wszędzie tam, gdzie liczy się zwięzłość kodu. Samo 'let modulo = (x, y) => x % y;' oznacza, że tworzymy zmienną 'modulo', która przechowuje funkcję przyjmującą dwa argumenty i od razu zwracającą resztę z dzielenia x przez y. Co ciekawe, funkcje strzałkowe różnią się od tradycyjnych tym, że nie mają własnego kontekstu this (dziedziczą go z otoczenia). To jest bardzo przydatne np. przy pracy w metodach klas lub obiektach, gdzie nie chcemy nieoczekiwanej zmiany kontekstu. Moim zdaniem warto nawykowo korzystać z tej składni, bo kod robi się dużo czytelniejszy i łatwiejszy w utrzymaniu. W różnych frameworkach (np. React) funkcje strzałkowe są wręcz codziennością – definiuje się tak np. proste event handlery czy filtry. No i jeszcze jedno: taka funkcja jest idealna, gdy chcemy przekazać logikę w jednym krótkim wyrażeniu bez robienia bałaganu w kodzie.

Pytanie 40

Który element HTML5 służy do osadzania wideo na stronie?

A. &lt;video&gt;
B. &lt;movie&gt;
C. &lt;player&gt;
D. &lt;media&gt;
Element HTML5 &lt;video&gt; jest standardowym tagiem służącym do osadzania wideo na stronach internetowych. Umożliwia on integrację multimediów w sposób, który jest zgodny z aktualnymi standardami sieciowymi. W porównaniu do starszych metod, które wymagały użycia zewnętrznych wtyczek, takich jak Flash, &lt;video&gt; pozwala na bezproblemowe odtwarzanie wideo w przeglądarkach nowej generacji, co zwiększa bezpieczeństwo i wydajność. Element ten oferuje wiele atrybutów, takich jak controls, autoplay, loop, preload, oraz width i height, które pozwalają na dostosowanie odtwarzacza do potrzeb użytkownika. Na przykład, używając atrybutu controls, można dodać przyciski odtwarzania, zatrzymywania lub regulacji głośności, co poprawia interaktywność i użyteczność. Dodatkowo, aby zapewnić dostępność treści wideo, warto stosować atrybuty takie jak &lt;track&gt;, który umożliwia dodawanie napisów, co jest szczególnie ważne dla osób z niepełnosprawnościami słuchowymi. Używanie &lt;video&gt; w projektach webowych to najlepsza praktyka, która wspiera rozwój dostępnych i przyjaznych dla użytkownika doświadczeń wizualnych.