Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 6 maja 2026 14:30
  • Data zakończenia: 6 maja 2026 14:42

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Przedstawione w filmie działania wykorzystują narzędzie

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

Pytanie 2

Wskaż poprawny pod względem składniowym kod dla formatu JSON, który jest używany do wymiany danych między backendem a frontendem aplikacji.

osoby: [
  {imię: 'Anna', wiek: '31' },
  {imię: 'Krzysztof', wiek: '25' }
]
"osoby": [
  {"imię": "Anna", "wiek": 31 },
  {"imię": "Krzysztof", "wiek": 25 }
]
Kod 1Kod 2
<osoby>
  <imie>Anna</imie>
  <wiek>31</wiek>
  <imie>Krzysztof</imie>
  <wiek>25</wiek>
</osoby>
struct osoby {
  imie: {Anna}, wiek:{31};
  imie: {Krzysztof}, wiek:{25}
};
Kod 3Kod 4
A. Kod1
B. Kod2
C. Kod3
D. Kod4
Kod2 jest spoko, bo składnia jest w porządku dla JSON. Używasz odpowiednich znaków i struktur, więc wszystko gra. JSON to taki format do wymiany danych, który często wykorzystuje się w komunikacji między frontendem a backendem. Zgadza się ze standardem ECMA-404. Pamiętaj, że klucze i wartości tekstowe powinny być w podwójnych cudzysłowach, co widać w Kod2. Twój przykładowy kod pokazuje tablicę obiektów, gdzie każdy obiekt ma pary klucz-wartość, a przecinki i nawiasy klamrowe są na swoim miejscu. To naprawdę dobry sposób, bo ułatwia współpracę między różnymi elementami aplikacji. JSON ma ważne zastosowanie w AJAX, bo dzięki niemu możemy dynamicznie aktualizować treści na stronie bez jej przeładowania. To jest mega przydatne w nowoczesnych aplikacjach typu SPA, gdzie JSON odgrywa kluczową rolę w zarządzaniu stanem aplikacji i komunikacji.

Pytanie 3

Które z wymienionych środowisk programistycznych jest rekomendowane do developing aplikacji w języku Python z użyciem frameworka Django?

A. PyCharm
B. Android Studio
C. Unity
D. XCode
PyCharm to jedno z najbardziej zaawansowanych środowisk programistycznych (IDE) dedykowanych do tworzenia aplikacji w języku Python. Jest to narzędzie preferowane przez programistów korzystających z frameworka Django, który jest popularnym rozwiązaniem do budowy aplikacji webowych. PyCharm oferuje rozbudowane wsparcie dla Django, umożliwiając szybkie tworzenie projektów, integrację z bazami danych oraz wygodne debugowanie aplikacji. IDE zapewnia również możliwość uruchamiania serwerów deweloperskich, podglądu zmian w czasie rzeczywistym oraz automatyczne uzupełnianie kodu, co znacząco zwiększa efektywność pracy nad aplikacjami webowymi. Dzięki PyCharm programiści mogą łatwo zarządzać migracjami bazy danych, tworzyć modele i szablony, co sprawia, że jest to narzędzie nieocenione w ekosystemie Django.

Pytanie 4

Co to jest ORM w kontekście programowania?

A. Object-Relational Mapping - technika konwersji danych między systemami typów w relacyjnych bazach danych
B. Organized Resource Model - model organizacji zasobów w aplikacjach webowych
C. Output Rendering Module - moduł renderujący dane wyjściowe w aplikacjach
D. Operational Reliability Management - zarządzanie niezawodnością operacyjną systemów
Object-Relational Mapping (ORM) to technika programistyczna, która pozwala na konwersję danych pomiędzy obiektami w programowaniu obiektowym a relacyjnymi bazami danych. Dzięki ORM, programiści mogą operować na danych w sposób bardziej naturalny, wykorzystując obiekty i ich właściwości zamiast skomplikowanych zapytań SQL. Przykłady popularnych frameworków ORM to Hibernate dla Javy, Entity Framework dla .NET oraz Django ORM dla Pythona. Te narzędzia upraszczają komunikację z bazą danych, co zwiększa wydajność i ułatwia zarządzanie kodem. Dzięki zastosowaniu ORM, programiści mogą również łatwiej stosować zasady programowania obiektowego oraz wzorce projektowe, co prowadzi do lepszej organizacji kodu i jego łatwiejszej konserwacji. Wspierają one również migracje schematów bazy danych oraz zarządzanie relacjami między obiektami, co jest istotne w kontekście złożonych aplikacji webowych i systemów informatycznych.

Pytanie 5

Jakie informacje można uzyskać na temat metod w klasie Point?

public class Point {
    public void Move(int x, int y) {...}
    public void Move(int x, int y, int z) {...}
    public void Move(Point newPt) {...}
}
A. Zawierają błąd, ponieważ nazwy metod powinny być różne.
B. Zawierają przeciążenie operatora.
C. Są przeciążone.
D. Służą jako konstruktory w zależności od liczby argumentów.
Metody klasy Point są przeciążone, co oznacza, że mogą mieć tę samą nazwę, ale różnią się liczbą lub typem parametrów. Przeciążenie metod to jedna z podstawowych technik programowania obiektowego, która pozwala na bardziej elastyczne projektowanie kodu. Dzięki temu programista może tworzyć metody dostosowane do różnych sytuacji, zachowując spójność nazw i intuicyjność użycia. To zwiększa czytelność i utrzymanie kodu, ponieważ wywołania metod o tej samej nazwie, ale różnych parametrach, są łatwe do zrozumienia i odnalezienia.

Pytanie 6

Programista aplikacji mobilnych chce przekwalifikować się na pracownika Full-Stack Developer. Wskaż kurs, który powinien wybrać, aby było to możliwe

A. Raster and Vector Graphics with Adobe
B. Mastering Cross-platform Developping
C. Ultimate C# Serier from Beginner to Advanced
D. Complete JavaScript React, SQL, Node.js Cource
Wybór kursu "Complete JavaScript React, SQL, Node.js Course" to zdecydowanie najbardziej logiczna opcja, jeśli ktoś myśli poważnie o przejściu na ścieżkę Full-Stack Developera. Full-stack to bardzo specyficzne pojęcie – chodzi tu o umiejętność poruszania się zarówno po stronie front-endu (czyli tego, co widzi użytkownik), jak i back-endu (czyli serwera, bazy danych, logiki biznesowej). Ten kurs obejmuje JavaScript, który jest teraz królem w świecie web developmentu – daje ogromne możliwości i na froncie (np. React), i na backendzie (Node.js). Do tego dochodzi SQL, czyli język zapytań do baz danych, bez którego ciężko sobie wyobrazić jakąkolwiek aplikację z prawdziwego zdarzenia. Przerobienie takiego kursu zapewnia znajomość pełnego cyklu tworzenia aplikacji webowych: od interfejsu użytkownika, przez komunikację z API, aż po operacje na bazach danych. W praktyce, firmy szukające full-stacków oczekują właśnie takiego wachlarza umiejętności, bo to pozwala tworzyć całe systemy praktycznie w pojedynkę lub w małych zespołach. Z mojego doświadczenia, nawet podstawowa znajomość Reacta i Node.js otwiera drzwi do wielu ofert pracy i własnych projektów, bo można szybko stworzyć MVP i sprawnie wdrażać nowe funkcjonalności. Warto też dodać, że technologie te mają świetną dokumentację i aktywne społeczności, gdzie można znaleźć wsparcie i praktyczne porady. Według mnie, to najlepszy kierunek na rynku dla kogoś, kto zna już programowanie mobilne i chce się rozwinąć na pełen stos webowy, bo można wykorzystać wiele dotychczasowych umiejętności, a jednocześnie nauczyć się rzeczy praktycznie wykorzystywanych na co dzień w nowoczesnych firmach IT.

Pytanie 7

Który z wymienionych elementów jest fundamentalny w architekturze klient-serwer?

A. Scentralizowane przechowywanie danych
B. Zdalne wykonywanie aplikacji na urządzeniu klienta
C. Wyłącznie komunikacja synchroniczna
D. Brak podziału na funkcje klienta i serwera
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.

Pytanie 8

W frameworkach do budowy aplikacji mobilnych lub desktopowych znajduje zastosowanie wzorzec MVVM, oznaczający Model-View-ViewModel. Te podejście do programowania oznacza, że

A. interfejs użytkownika oraz logika aplikacji są oddzielone
B. w aplikacji obecny jest jedynie interfejs użytkownika
C. interfejs użytkownika i logika aplikacji są umieszczone w jednym pliku
D. kontrolki i widoki interfejsu użytkownika są zintegrowane z logiką aplikacji
Pierwsza odpowiedź sugeruje, że interfejs użytkownika oraz logika aplikacji są kodowane w jednym pliku. Taki sposób organizacji kodu prowadzi do chaotyczności oraz trudności w zarządzaniu projektem. Łączenie tych dwóch warstw w jednym miejscu nie tylko utrudnia testowanie poszczególnych komponentów, ale również zwiększa ryzyko wprowadzenia błędów, gdyż zmiany w jednej części mogą niezamierzenie wpływać na drugą. Druga odpowiedź wskazuje, że kontrolki i widoki interfejsu użytkownika są zaszyte w logice aplikacji, co jest również sprzeczne z ideą MVVM. Kiedy interfejs jest bezpośrednio związany z logiką, programiści nie mogą łatwo modyfikować lub wymieniać elementów UI, co ogranicza elastyczność aplikacji. Czwarta odpowiedź twierdzi, że w aplikacji występuje tylko interfejs użytkownika, co jest niepoprawne, ponieważ każda dobrze zaprojektowana aplikacja wymaga zarówno logiki, jak i interfejsu do funkcjonowania. W kontekście MVVM, brak modelu i ViewModel prowadzi do zastosowania jedynie warstwy prezentacji, co jest nieefektywne i niezgodne z najlepszymi praktykami programistycznymi, które promują separację odpowiedzialności i modularność.

Pytanie 9

Jakie jest podstawowe środowisko do tworzenia aplikacji desktopowych przy użyciu języka C#?

A. MS Visual Studio
B. PyCharm
C. Eclipse
D. NetBeans
MS Visual Studio to potężne zintegrowane środowisko programistyczne (IDE) zaprojektowane przez firmę Microsoft, które oferuje pełne wsparcie dla języka C#. Dzięki bogatym funkcjom, takim jak IntelliSense, które ułatwia pisanie kodu poprzez podpowiadanie składni oraz dostępność narzędzi do debugowania, programiści mogą efektywnie rozwijać aplikacje desktopowe. MS Visual Studio obsługuje różne frameworki, takie jak .NET Framework oraz .NET Core, co pozwala na budowanie aplikacji o różnej architekturze. W praktyce, programiści mogą tworzyć aplikacje w oparciu o Windows Presentation Foundation (WPF) lub Windows Forms, co umożliwia tworzenie rozbudowanych interfejsów użytkownika. Dodatkowo, MS Visual Studio oferuje szereg narzędzi do współpracy zespołowej, integracji z systemami kontroli wersji oraz wsparcie dla testowania jednostkowego. Jako standard w branży, MS Visual Studio jest często preferowanym wyborem w projektach komercyjnych i korporacyjnych, z uwagi na jego wszechstronność oraz wsparcie ze strony społeczności programistycznej.

Pytanie 10

Która z poniższych metod HTTP jest idempotentna?

A. GET
B. CONNECT
C. PATCH
D. POST
Wybór metod HTTP, które nie są idempotentne, może prowadzić do zamieszania i nieporozumień w aplikacjach webowych. Metoda POST, w przeciwieństwie do GET, jest zazwyczaj stosowana do tworzenia nowych zasobów na serwerze. Każde wywołanie POST może prowadzić do utworzenia nowego wpisu lub zmiany stanu zasobu, co sprawia, że jest to operacja nieidempotentna. Przykładowo, korzystając z metody POST do przesyłania formularzy rejestracyjnych, każdy nowy użytkownik powoduje dodanie nowego wpisu do bazy danych. Z kolei metoda PATCH jest używana do częściowej aktualizacji istniejącego zasobu. W przypadku wielokrotnego zastosowania tej samej poprawki, stan zasobu może się zmieniać, co również klasyfikuje ją jako nieidempotentną. Dodatkowo, metoda CONNECT, służąca do nawiązywania tuneli przez serwer proxy, w typowym użyciu nie może być uznana za idempotentną, ponieważ jej działanie zależy od kontekstu i może prowadzić do różnych rezultatów przy wielokrotnym wywoływaniu. Dlatego, przy projektowaniu API, istotne jest zrozumienie różnicy między metodami idempotentnymi a nieidempotentnymi, aby uniknąć nieprzewidywalnych skutków i zapewnić spójność w interakcji z serwerem.

Pytanie 11

Jakie słowa kluczowe są stosowane w języku C++ do zarządzania wyjątkami?

A. throw i handle
B. except i finally
C. try i raise
D. try i catch
Słowa kluczowe 'try' i 'catch' są podstawą obsługi wyjątków w języku C++. Umożliwiają one przechwytywanie i obsługę błędów, które mogą wystąpić podczas wykonywania programu. Blok 'try' zawiera kod, który jest monitorowany pod kątem błędów, a blok 'catch' przechwytuje i przetwarza zgłoszony wyjątek, zapobiegając nieoczekiwanemu zakończeniu programu. Mechanizm ten jest kluczowy dla tworzenia niezawodnego i odpornego na błędy oprogramowania. Dzięki 'try' i 'catch' programista może implementować logikę naprawczą lub logować błędy, co zwiększa stabilność i bezpieczeństwo aplikacji.

Pytanie 12

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

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

Pytanie 13

Jakie informacje zawiera dokumentacja realizacji projektu?

A. Podręcznik użytkownika dla końcowych odbiorców aplikacji
B. Zestawienie błędów wykrytych w trakcie testów
C. Dane dotyczące faz wdrożenia aplikacji w środowisku produkcyjnym
D. Strategia marketingowa aplikacji
Dokumentacja wdrożenia projektu zawiera informacje o etapach implementacji aplikacji w środowisku produkcyjnym. Obejmuje ona szczegółowe procedury instalacji, konfiguracji serwerów, zależności systemowych oraz sposób integracji aplikacji z innymi narzędziami. Tego rodzaju dokumentacja jest niezbędna dla zespołów DevOps i administratorów systemów, ponieważ umożliwia płynne przenoszenie aplikacji z etapu testowego do środowiska produkcyjnego. Zawiera również instrukcje dotyczące kopii zapasowych, planów awaryjnych oraz sposobów monitorowania aplikacji po wdrożeniu. Prawidłowo przygotowana dokumentacja wdrożeniowa minimalizuje ryzyko błędów i przyspiesza proces uruchamiania aplikacji na serwerach produkcyjnych.

Pytanie 14

Która z poniższych technologii nie jest używana do tworzenia aplikacji mobilnych?

A. COBOL
B. React Native
C. Kotlin
D. Flutter
Zarówno Kotlin, React Native, jak i Flutter są nowoczesnymi technologiami używanymi do tworzenia aplikacji mobilnych, co może prowadzić do mylnych wniosków o ich przydatności w tym kontekście. Kotlin to statycznie typowany język programowania zaprojektowany jako nowoczesna alternatywa dla Javy w ekosystemie Androida. Jest w pełni kompatybilny z Javą i oferuje szereg udogodnień, które przyspieszają proces tworzenia aplikacji. React Native to framework stworzony przez Facebooka, który pozwala na budowanie aplikacji mobilnych przy użyciu JavaScriptu i Reacta. Umożliwia on programistom pisanie jednego kodu, który działa zarówno na iOS, jak i na Androida, co znacząco obniża czas i koszty prac rozwojowych. Z kolei Flutter, stworzony przez Google, to framework do budowy interfejsów użytkownika, który wykorzystuje język Dart i pozwala na tworzenie atrakcyjnych aplikacji mobilnych z jednego kodu źródłowego dla obu platform. Typowe błędy myślowe, które mogą prowadzić do pomylenia tych technologii z COBOL-em, polegają na niewłaściwym zrozumieniu ich przeznaczenia oraz kontekstu użycia. COBOL jest językiem, który nie jest dostosowany do wymagań współczesnego rozwoju aplikacji mobilnych, które wymagają elastyczności, szybkości oraz interaktywności, co jest możliwe jedynie dzięki nowoczesnym technologiom. W związku z tym, podczas nauki programowania aplikacji mobilnych, warto skupić się na nowoczesnych narzędziach i językach, które są szeroko stosowane w branży.

Pytanie 15

Co będzie wynikiem wykonania poniższego kodu w języku C#?

string text = "hello world";
var result = string.Join("", text.Split(' ').Select(s => char.ToUpper(s[0]) + s.Substring(1)));
Console.WriteLine(result);
A. HelloWorld
B. Hello World
C. HELLO WORLD
D. helloworld
Wynikiem wykonania kodu nie jest 'HELLO WORLD', a przyczyna tego nieporozumienia tkwi w sposobie przetwarzania tekstu. Warto zauważyć, że kod nie wykonuje prostej konwersji wszystkich liter na wielkie, jak sugeruje ta odpowiedź. Zamiast tego, każda pierwsza litera każdego słowa jest zmieniana na wielką, a pozostałe litery pozostają w oryginalnym stanie, co w przypadku 'hello world' daje wyrażenie 'Hello World'. To zrozumienie jest kluczowe w programowaniu, ponieważ często błędnie zakładamy, że transformacje na tekstach działają w sposób jednorodny. Inną niepoprawną odpowiedzią jest 'helloworld', która również pomija konwersję pierwszych liter na wielkie, co jest kluczowym aspektem działania kodu. Warto rozważyć, że przy pracy z tekstami w C# istotne są szczegóły, takie jak wielkość liter, a dobre praktyki programistyczne wymagają zrozumienia, jak funkcje manipulujące tekstem działają. Niepoprawne odpowiedzi często wynikają z niezrozumienia schematu, jakim jest łączenie, a nie tylko konwersji liter. Użytkownicy powinni zawsze testować swoje założenia poprzez praktyczne próby w kodowaniu, aby unikać takich nieporozumień.

Pytanie 16

Co to jest JWT (JSON Web Token)?

A. Format zapisu danych w bazach NoSQL
B. Kompaktowy format do bezpiecznego przekazywania informacji między stronami jako obiekt JSON
C. Protokół do przesyłania danych JSON przez sieć
D. Biblioteka JavaScript do manipulacji danymi JSON
JWT (JSON Web Token) to kompaktowy format, który umożliwia bezpieczne przesyłanie informacji pomiędzy różnymi stronami. Główną zaletą tokenów JWT jest ich struktura, która składa się z trzech części: nagłówka, ładunku (payload) oraz podpisu. Nagłówek zazwyczaj wskazuje typ tokena oraz algorytm użyty do podpisania, co pozwala na szybką weryfikację integralności danych. Ładunek zawiera informacje, często nazywane roszczeniami (claims), które mogą dotyczyć użytkownika lub sesji, a podpis zapewnia, że token nie został zmodyfikowany w trakcie przesyłania. W praktyce JWT jest często wykorzystywany w systemach autoryzacyjnych, gdzie po pomyślnym zalogowaniu, użytkownik otrzymuje token, który następnie może być używany do autoryzacji dostępu do różnych zasobów. Standard JWT definiuje sposób kodowania i dekodowania tokenów, a jego stosowanie pozwala na zwiększenie bezpieczeństwa aplikacji webowych oraz mobilnych poprzez ograniczenie konieczności przechowywania sesji na serwerze, co jest zgodne z najlepszymi praktykami w dziedzinie inżynierii oprogramowania.

Pytanie 17

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

A. Obowiązek zamieszczenia publicznych przeprosin
B. Nałożenie grzywny lub kary więzienia
C. Unieważnienie umowy licencyjnej użytkownika końcowego
D. Zakaz korzystania z oprogramowania open-source
Naruszenie prawa autorskiego może skutkować nałożeniem grzywny lub karą więzienia. W zależności od skali naruszenia oraz obowiązujących przepisów, osoba odpowiedzialna za naruszenie może zostać pociągnięta do odpowiedzialności karnej lub cywilnej. Kary mogą obejmować nie tylko grzywny finansowe, ale także konieczność wypłaty odszkodowań na rzecz twórcy lub właściciela praw autorskich. W niektórych przypadkach naruszenie praw autorskich na dużą skalę może prowadzić do kary pozbawienia wolności, co podkreśla wagę przestrzegania przepisów o ochronie własności intelektualnej.

Pytanie 18

Jakie informacje zawiera zestaw instrukcji (ISA) danego procesora?

A. Układ połączeń między procesorem a innymi elementami
B. Metodę obsługi pamięci podręcznej
C. Instrukcje, które procesor jest w stanie wykonać
D. Typy danych, które są trzymane w pamięci
Zestaw instrukcji, znany jako ISA, to taki jakby słownik poleceń, które procesor potrafi zrozumieć i wykonać. To mega ważny element w projektowaniu komputerów, bo to właśnie od niego zależy, jak dobrze i szybko działa system. Mamy różne rodzaje instrukcji, na przykład te do wykonywania działań matematycznych, logicznych, czy do przenoszenia danych. Popularne zestawy jak x86 albo ARM pokazują, jak programy rozmawiają z procesorem. Jak zrozumiesz ISA, to będzie łatwiej pisać lepszy kod i dostosowywać aplikacje do różnych architektur. No i co ważne, ISA też mówi, jak procesor interpretuje te instrukcje i zarządza danymi, co ma ogromny wpływ na to, jak wydajnie wszystko działa.

Pytanie 19

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

A. &lt;movie&gt;
B. &lt;media&gt;
C. &lt;video&gt;
D. &lt;player&gt;
Zastosowanie elementów takich jak &lt;media&gt;, &lt;movie&gt; czy &lt;player&gt; do osadzania wideo wskazuje na pewne nieporozumienie dotyczące struktury HTML5 i jego standardów. Element &lt;media&gt; nie istnieje w specyfikacji HTML5; nie jest to poprawny tag, co może prowadzić do problemów z interpretacją treści przez przeglądarki. Z kolei &lt;movie&gt; również nie jest uznawanym elementem w HTML5. Użytkownicy mogą mylić go z terminologią używaną w programowaniu lub w kontekście multimediów, co może wskazywać na niewłaściwe zrozumienie tematu. Natomiast &lt;player&gt; jest ogólną nazwą, która nie odnosi się do konkretnego elementu HTML, lecz raczej do pojęcia odtwarzacza multimedialnego, który może być zrealizowany w różnorodny sposób, często przy pomocy JavaScript lub zewnętrznych bibliotek. Tworząc strony internetowe, ważne jest stosowanie odpowiednich tagów HTML5, aby zapewnić kompatybilność z różnymi przeglądarkami i urządzeniami. Stosowanie nieistniejących tagów lub nienależycie zdefiniowanych elementów prowadzi do błędów w ładowaniu treści i negatywnie wpływa na doświadczenie użytkownika. Warto dobrze zrozumieć i stosować zalecane praktyki oraz standardy, aby uniknąć nieporozumień i problemów technicznych, które mogą wynikać z użycia niewłaściwych elementów.

Pytanie 20

Który z objawów może sugerować zawał serca?

A. Intensywny ból w klatce piersiowej promieniujący do lewej ręki
B. Spadek nastroju
C. Ból brzucha po spożyciu posiłku
D. Gorączka oraz dreszcze
Silny ból w klatce piersiowej promieniujący do lewej ręki to klasyczny objaw zawału serca (ostrego zespołu wieńcowego). Ból ten często pojawia się nagle, jest intensywny, gniotący lub piekący i może towarzyszyć mu duszność, zawroty głowy, zimne poty i nudności. Zawał serca wynika z zablokowania jednej z tętnic wieńcowych, co prowadzi do niedokrwienia mięśnia sercowego. Szybka reakcja i wezwanie pomocy medycznej mogą uratować życie i zminimalizować uszkodzenia serca. Każda minuta jest kluczowa – nie należy czekać na ustąpienie objawów, lecz natychmiast zadzwonić na numer alarmowy 112 lub udać się do najbliższego szpitala.

Pytanie 21

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

A. Kolejka priorytetowa
B. Tablica
C. Zbiór (Set)
D. Sekwencja
Zbiór, czyli Set, to taki specjalny rodzaj struktury danych, który trzyma tylko unikalne elementy. To znaczy, że nie znajdziesz tam powtórzeń – jak masz listę użytkowników czy tagów, to świetnie, bo zbiór to idealnie rozwiązuje. Jest przy tym bardzo szybki w operacjach jak dodawanie, usuwanie czy wyszukiwanie. To dlatego zbory są używane w różnych algorytmach, zwłaszcza gdy chodzi o przetwarzanie dużych ilości danych i zarządzanie unikalnymi zasobami. Fajna sprawa, nie?

Pytanie 22

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

$x = 5; $y = '5'; var_dump($x == $y); var_dump($x === $y);
A. bool(false) bool(false)
B. bool(false) bool(true)
C. bool(true) bool(true)
D. bool(true) bool(false)
Odpowiedź bool(true) bool(false) jest prawidłowa, ponieważ w PHP porównania używane w tym kodzie różnią się pod względem operatorów. Pierwsze porównanie z użyciem operatora == jest porównaniem luźnym, co oznacza, że PHP dokonuje konwersji typów przed porównaniem. W tym przypadku zmienna $x o wartości 5 (typ integer) jest porównywana z $y, która ma wartość '5' (typ string). Po konwersji typów oba są interpretowane jako liczba 5, więc wynik to true. W drugim porównaniu operator === sprawdza zarówno wartość, jak i typ zmiennych. W tym przypadku $x jest integerem, a $y jest stringiem, więc ich typy się różnią. W związku z tym wynik to false. W praktyce, używanie operatora === jest zalecane, ponieważ pozwala uniknąć niespodzianek związanych z automatyczną konwersją typów, co jest często źródłem błędów w kodzie. Warto mieć to na uwadze przy pisaniu bardziej skomplikowanych skryptów, aby zapewnić, że porównania są jednoznaczne i wiarygodne.

Pytanie 23

Które z podanych logo reprezentuje narzędzie, które nie jest używane do tworzenia aplikacji mobilnych?

Ilustracja do pytania
A. 2
B. 3
C. 1
D. 4
Wybrałeś odpowiedź nr 4, czyli logo Xcode. To rzeczywiście poprawny wybór, bo Xcode to środowisko programistyczne stworzone przez Apple głównie do tworzenia aplikacji na systemy iOS, macOS, watchOS oraz tvOS. W praktyce Xcode jest praktycznie niezbędny, jeśli chodzi o natywny rozwój aplikacji mobilnych na iPhone’a czy iPada – zresztą Apple wymaga używania tego narzędzia do publikowania aplikacji w App Store. Jednak gdy spojrzymy na pozostałe loga: Android Studio (1), Xamarin (3) oraz Angular (2), to tylko Angular nie jest narzędziem do budowy natywnych aplikacji mobilnych. Angular to framework frontendowy, używany głównie do tworzenia aplikacji webowych typu SPA (Single Page Application). Oczywiście, da się użyć Angulara z Cordovą czy Ionicem, żeby zrobić hybrydową aplikację na telefon, ale to nie jest to samo, co pełnoprawny toolchain do mobilnych aplikacji natywnych. W branży panuje przekonanie, że lepiej korzystać z narzędzi dedykowanych platformie, bo to daje lepszą wydajność i stabilność, a Angular to rozwiązanie, które jest bliżej weba niż mobile. Takie rozróżnienie jest ważne zwłaszcza przy podejmowaniu decyzji o technologii przy większych projektach mobilnych.

Pytanie 24

Jaką nazwę nosi framework CSS, który służy do definiowania wyglądu stron internetowych i którego klasy zostały użyte w przedstawionym przykładzie?

<div class="col-sm-3 col-md-6 col-lg-4">
  <button class="btn btn-primary dropdown-toggle" type="button">
</button>
</div>
A. Bootstrap
B. Yaml
C. Angular
D. Symfony
Bootstrap jest jednym z najpopularniejszych frameworków CSS używanych do tworzenia responsywnych aplikacji internetowych. Jest to zestaw narzędzi open-source, który oferuje gotowe klasy CSS oraz komponenty JavaScript, ułatwiające projektowanie interfejsów użytkownika. W podanym przykładzie klasy takie jak 'col-sm-3' 'col-md-6' i 'col-lg-4' odnoszą się do siatki Bootstrapowej, która umożliwia elastyczne rozplanowanie elementów na stronie w zależności od rozmiaru ekranu. Klasa 'btn-primary' stosowana jest w Bootstrapie do stylizacji przycisków w sposób, który pasuje do domyślnych kolorów motywu. Z kolei 'dropdown-toggle' jest używana do obsługi rozwijanych list. Dzięki Bootstrapowi można z łatwością tworzyć nowoczesne i estetyczne aplikacje, które są zgodne z zasadami responsywnego web designu, co jest kluczowym standardem w dzisiejszej branży. Użycie Bootstrapu przyspiesza proces developmentu, pozwalając skupić się na funkcjonalności i logice aplikacji, zamiast na ręcznym stylizowaniu elementów.

Pytanie 25

W zaprezentowanym kodzie stworzono abstrakcyjną klasę figura oraz klasę prostokąta, która dziedziczy po niej, zawierającą zdefiniowane pola i konstruktory. Wskaż minimalną wersję implementacji sekcji /* metody klasy */ dla klasy Prostokat:

abstract class Figura
{
    abstract double Pole();
    abstract double Obwod();
}

public class Prostokat extends Figura
{
    private double a;
    private double b;

    ... /* Konstruktory */
    ... /* Metody klasy */
}
AB
public double Pole() {
    return a * b;
}

public double Obwod() {
    return 2*a + 2*b;
}
public double Pole() {
    return a * b;
}
CD
public double LiczPole()
{
    return a * b;
}

public double LiczObwod()
{
    return 2*a + 2*b;
}
abstract double Pole()
{
    return a * b;
}

abstract double LiczObwod()
A. D
B. A
C. B
D. C
Analizując pozostałe propozycje implementacji, łatwo zauważyć pewne typowe błędy, które pojawiają się podczas pracy z dziedziczeniem i klasami abstrakcyjnymi. Przede wszystkim odpowiedzi, które pomijają implementację jednej z metod abstrakcyjnych zadeklarowanych w klasie Figura (jak w przypadku wariantu B), nie spełniają podstawowego wymogu języka Java – klasa pochodna musi zaimplementować wszystkie metody zadeklarowane jako abstract w klasie bazowej. W odpowiedzi B mamy tylko metodę Pole(), więc przy próbie kompilacji kodu pojawiłby się błąd i konieczność oznaczenia Prostokata jako klasy abstrakcyjnej, co zupełnie mija się z celem. Z kolei odpowiedź C wprowadza metody o innych nazwach (LiczPole, LiczObwod) niż te zadeklarowane w klasie Figura. To bardzo częsty błąd początkujących – niepoprawnie myślą, że wystarczy zaimplementować metody o tej samej funkcjonalności, bez zachowania ich nazw. Tymczasem kontrakt narzucony przez klasę bazową musi być spełniony dokładnie, razem z nazwami, typami argumentów i zwracanym typem. Ignorowanie tych szczegółów prowadzi do niespójności i niekompatybilności klas pochodnych. No i ostatnia propozycja – D – zawiera próbę napisania metody z modyfikatorem abstract w klasie, która już nie jest abstrakcyjna, co jest wprost błędem kompilacji. Dodatkowo, używanie abstract razem z ciałem metody jest niezgodne z językiem – metody abstrakcyjne nie mogą mieć implementacji w klasie abstrakcyjnej, a tym bardziej w pochodnej. To wszystko pokazuje, jak ważne w programowaniu obiektowym jest zrozumienie zasad dziedziczenia, poprawnego nadpisywania metod oraz konsekwentne trzymanie się sygnatur narzucanych przez klasy bazowe. Z praktyki wiem, że takie błędy potrafią zablokować rozwój projektu albo wymusić czasochłonne refaktoryzacje. Warto od początku przyzwyczaić się do czytania kodu bazowego i dokładnego kopiowania sygnatur metod – to oszczędza dużo nerwów i nieporozumień w pracy zespołowej.

Pytanie 26

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

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

Jaki będzie wynik działania poniższego kodu JavaScript?

function foo() { console.log(a); var a = 1; console.log(a); } foo();
A. undefined, undefined
B. ReferenceError, 1
C. undefined, 1
D. 1, 1
Wynik działania podanego kodu to 'undefined, 1', co jest zgodne z zasadami hoisting w JavaScript. Kiedy funkcja 'foo' jest wywoływana, zmienna 'a' jest zadeklarowana przy użyciu 'var'. Zgodnie z zasadą hoisting, deklaracja zmiennej jest przenoszona na początek funkcji, ale przypisanie wartości następuje w miejscu, gdzie znajduje się kod. Dlatego, podczas pierwszego wywołania 'console.log(a)', 'a' nie ma jeszcze przypisanej wartości, co skutkuje wyświetleniem 'undefined'. Następnie, po przypisaniu '1' do 'a', w drugim 'console.log(a)' zmienna ta już ma wartość, więc wyświetlane jest '1'. Zrozumienie hoisting jest kluczowe dla programistów, ponieważ może wpływać na logikę działania kodu i prowadzić do błędów, jeśli nie jest odpowiednio uwzględnione. W praktyce powinno się unikać korzystania z hoisting, preferując inicjalizację zmiennych na początku funkcji, co zwiększa czytelność i utrzymanie kodu.

Pytanie 28

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

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

Pytanie 29

Co to jest Event Loop w JavaScript?

A. Protokół komunikacji między różnymi częściami aplikacji webowej
B. Mechanizm pozwalający na asynchroniczne wykonywanie kodu mimo jednowątkowej natury JavaScript
C. System zarządzania cyklem życia komponentów w Angular
D. Technika obsługi zdarzeń w aplikacjach React
Event Loop w JavaScript to kluczowy mechanizm, który umożliwia asynchroniczne wykonywanie kodu mimo jednowątkowej natury tego języka. JavaScript działa w jednym wątku, co oznacza, że może wykonywać jedną operację w danym czasie. Event Loop pozwala jednak na zarządzanie operacjami asynchronicznymi, takimi jak wywołania API czy operacje na danych, które mogą trwać dłużej. Dzięki temu, zamiast czekać na zakończenie tych operacji, kod może kontynuować wykonywanie innych zadań. W praktyce, gdy operacja asynchroniczna kończy się, jej wynik jest umieszczany w kolejce do przetworzenia, a Event Loop zajmuje się ich przetwarzaniem, kiedy główny wątek jest dostępny. To podejście sprawia, że aplikacje webowe są bardziej responsywne, ponieważ nie blokują interfejsu użytkownika podczas oczekiwania na zakończenie długoterminowych zadań. Dobrą praktyką jest zrozumienie działania Event Loop, ponieważ pozwala to na efektywniejsze zarządzanie asynchronicznością w kodzie JavaScript, co jest niezwykle istotne w przypadku rozwijania nowoczesnych aplikacji webowych.

Pytanie 30

Które narzędzie służy do zarządzania zależnościami w projekcie JavaScript?

A. npm
B. git
C. docker
D. postman
npm, czyli Node Package Manager, jest kluczowym narzędziem w ekosystemie JavaScript, którego głównym celem jest zarządzanie zależnościami projektów. Umożliwia to instalowanie, aktualizowanie oraz usuwanie paczek (modułów), które są niezbędne do budowy aplikacji. Przykładowo, jeśli twój projekt wymaga biblioteki React, możesz ją łatwo zainstalować za pomocą polecenia `npm install react`, co automatycznie dodaje ją do pliku 'package.json', co ułatwia późniejsze zarządzanie wersjami. Dodatkowo, npm wspiera skrypty, co pozwala na automatyzację wielu procesów, takich jak testowanie czy budowanie aplikacji. Stosowanie npm jest zgodne z najlepszymi praktykami, ponieważ pozwala na utrzymanie spójności w projekcie oraz ułatwia współpracę zespołową, ułatwiając innym programistom instalowanie tych samych zależności w identycznych wersjach. Obecnie npm jest standardem wśród menedżerów pakietów dla JavaScript, co czyni go niezbędnym narzędziem dla każdego developera.

Pytanie 31

Który rodzaj kolekcji pozwala na dostęp do elementów w porządku FIFO (First In First Out)?

A. Kolekcja LIFO
B. Sekwencja
C. Kolejka
D. Tablica
Kolejka to struktura danych, która działa na zasadzie FIFO (First In First Out), co oznacza, że element dodany jako pierwszy zostaje usunięty jako pierwszy. Kolejki są szeroko wykorzystywane w zarządzaniu zadaniami, buforowaniu danych oraz w implementacji algorytmów, takich jak BFS (przeszukiwanie wszerz). Struktura ta jest idealna do obsługi zadań w kolejności ich przybycia, co jest kluczowe w aplikacjach takich jak systemy operacyjne, sieci komputerowe i przetwarzanie danych.

Pytanie 32

Wskaż kod, który jest funkcjonalnie równoważny zaprezentowanemu poniżej:

switch(nrTel) {
    case 999: opis = "Pogotowie"; break;
    case 998: opis = "Straż"; break;
    case 997: opis = "Policja"; break;
    default: opis = "Inny numer";
}
Kod 1.
with nrTel {
    if (999) opis = "Pogotowie";
    if (998) opis = "Straż";
    if (997) opis = "Policja";
    else opis = "Inny numer";
}
Kod 2.
if (nrTel == 999)
    opis = "Pogotowie";
else if (nrTel == 998)
    opis = "Straż";
else if (nrTel == 997)
    opis = "Policja";
else opis = "Inny numer";
Kod 3.
if (nrTel == 999)
    opis = "Pogotowie";
if (nrTel == 998)
    opis = "Straż";
if (nrTel == 997)
    opis = "Policja";
else
    opis = "Inny numer";
Kod 4.
Opis =
    if (nrTel == 999) => "Pogotowie";
    else if (nrTel == 998) => "Straż";
    else if (nrTel == 997) => "Policja";
    else => "Inny numer";
A. Kod 2.
B. Kod 3.
C. Kod 1.
D. Kod 4.
W tym przypadku Kod 2 jest dokładnym odpowiednikiem funkcjonalnym dla przedstawionej instrukcji switch. To, co tu widać, to klasyczna zamiana konstrukcji switch-case na strukturę if-else if-else, co jest bardzo częstą praktyką w programowaniu, szczególnie w językach, które nie zawsze posiadają rozbudowaną wersję switch. Kod 2 najpierw sprawdza, czy nrTel to 999, jeśli tak – przypisuje "Pogotowie" i nie sprawdza dalszych warunków. Jeśli nie, przechodzi do kolejnego warunku, czyli nrTel == 998, potem 997, w końcu domyślnie daje "Inny numer". Dokładnie tak samo to działało w switchu – tylko jeden warunek się wykonuje i reszta jest ignorowana, co ma znaczenie np. gdybyśmy później rozbudowywali logikę. Takie podejście jest czytelne, uniwersalne i zgodne z dobrymi praktykami kodowania – łatwo to refaktoryzować, debugować i utrzymywać. W wielu firmowych projektach spotkałem się z preferencją dla if-else zamiast switcha, jeśli liczba przypadków nie jest ogromna, bo łatwiej potem dołożyć dodatkowe warunki (np. złożone, nie tylko proste porównanie wartości). Fajnie też wiedzieć, że takie zamiany to podstawa przy migracji kodu między różnymi językami – nie każdy język ma identycznie działający switch. Moim zdaniem, umiejętność takiego przełożenia to dobra baza do nauki algorytmiki i lepszego rozumienia logiki sterowania przepływem kodu.

Pytanie 33

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

A. Inicjuje obiekt klasy na podstawie klasy dziedziczącej
B. Tworzy nowy obiekt jako wierną kopię innego obiektu
C. Generuje nowy obiekt klasy bez przypisywania wartości
D. Generuje nowy obiekt i usuwa wcześniejszy
Konstruktor kopiujący to specjalny typ konstruktora, który tworzy nowy obiekt będący dokładną kopią innego obiektu tej samej klasy. Jest to niezwykle przydatne, gdy chcemy zduplikować istniejący obiekt, zachowując jego stan i wartości wszystkich składowych. Konstruktor kopiujący przyjmuje jako argument referencję do obiektu tej samej klasy, co pozwala na kopiowanie zarówno podstawowych typów danych, jak i dynamicznie alokowanych zasobów. Jego zastosowanie jest kluczowe w sytuacjach, gdy musimy pracować z obiektami dynamicznymi lub kopiować obiekty zarządzające wskaźnikami, aby uniknąć problemów związanych z wielokrotnym zwalnianiem tej samej pamięci.

Pytanie 34

Aplikacje webowe stworzone z użyciem frameworka Angular lub biblioteki React, działające na standardowych portach, można uruchomić na lokalnym serwerze, wpisując w przeglądarkę

A. localhost:8080 (React) lub localhost:8000 (Angular)
B. localhost:5001 (React) lub localhost:8080 (Angular)
C. localhost:8000 (React) lub localhost:49887 (Angular)
D. localhost:3000 (React) lub localhost:4200 (Angular)
React domyślnie startuje na porcie 3000, a Angular na 4200 – to są takie standardy, które praktycznie wszyscy w branży znają i stosują. Kiedy zaczynasz nowy projekt w React, korzystając na przykład z create-react-app, serwer deweloperski po prostu nasłuchuje na http://localhost:3000. Analogicznie, jak generujesz projekt w Angular CLI i odpalasz ng serve, wtedy aplikacja wystartuje na http://localhost:4200. To są domyślne porty – nie musisz nic specjalnie ustawiać, wystarczy wpisać te adresy w przeglądarce. Z mojego doświadczenia, dobrze jest zapamiętać te ustawienia, bo praktycznie na każdym warsztacie czy bootcampie te adresy padają od ręki. Jeśli chodzi o praktykę, czasami port jest już zajęty i wtedy narzędzie zaproponuje inny, ale te wartości startowe to taka baza. Warto pamiętać, że zmiana portu wynika zazwyczaj z konfliktu, a nie z jakiejś specjalnej potrzeby. Dodatkowo, rozpoznanie tych portów pozwala szybciej debugować problemy z uruchomieniem aplikacji – jak coś nie wstaje na tych adresach, to od razu wiadomo, gdzie szukać. Ogólnie rzecz biorąc, korzystanie z tych domyślnych portów przyspiesza współpracę w zespole, bo każdy wie, gdzie szukać aplikacji, więc nie trzeba się rozpisywać w README, na jakim porcie coś działa. Moim zdaniem, to jeden z tych drobnych szczegółów, które składają się na dobre nawyki programistyczne.

Pytanie 35

Jakie są różnice między kompilatorem a interpretem?

A. Interpreter konwertuje kod źródłowy na język maszynowy przed jego kompilacją
B. Interpreter tworzy plik wykonywalny, który funkcjonuje niezależnie od otoczenia
C. Kompilator przekształca kod źródłowy na język maszynowy przed uruchomieniem aplikacji
D. Kompilator przetwarza kod na język maszynowy w momencie jego wykonywania
Kompilator zamienia kod źródłowy na język maszynowy zanim program się uruchomi. W efekcie dostajemy plik wykonywalny, taki jak .exe w Windowsie. To fajne, bo po skompilowaniu aplikacja działa samodzielnie i nie potrzeba jej tłumaczyć od nowa. Dzięki temu programy, które są skompilowane, są zazwyczaj dużo szybsze i lepiej zoptymalizowane niż te, które są interpretowane. Warto wiedzieć, że kompilatory są wykorzystywane w językach takich jak C, C++ czy Java. Kompilacja ma też tę zaletę, że można wykrywać błędy jeszcze przed uruchomieniem programu, co jest naprawdę przydatne.

Pytanie 36

Wskaż właściwość charakterystyczną dla metody abstrakcyjnej?

A. zawsze jest prywatna
B. jest pusta w klasie nadrzędnej
C. nie ma implementacji w klasie bazowej
D. jest pusta w klasach dziedziczących
Metoda abstrakcyjna to taki specjalny rodzaj metody, który pojawia się w programowaniu obiektowym, głównie w językach jak Java, C# czy Python (tam nazywa się abstractmethod). Jej kluczową właściwością jest to, że nie ma własnej implementacji w klasie bazowej, czyli tej nadrzędnej. To trochę jakby ktoś powiedział: 'Hej, tutaj powinna być jakaś funkcja, ale jeszcze nie wiem, jak dokładnie ma działać – niech ktoś, kto będzie po mnie dziedziczył po tej klasie, sam ją zdefiniuje.' Dzięki temu daje się klasom pochodnym jasny sygnał, że muszą tę metodę zaimplementować, żeby klasa mogła poprawnie funkcjonować. W praktyce, jeśli próbujesz stworzyć obiekt klasy bazowej zawierającej metody abstrakcyjne, kompilator się obrazi (no, rzuci wyjątkiem albo nawet nie pozwoli na kompilację). Moim zdaniem to bardzo praktyczne podejście, bo wymusza spójność w architekturze kodu – każdy, kto dziedziczy po klasie bazowej, nie może zapomnieć o kluczowych metodach. Standardy branżowe, jak SOLID, promują taką separację odpowiedzialności i abstrakcję, dzięki czemu kod jest czytelniejszy i łatwiejszy do rozbudowy. Przykładowo, jeśli masz klasę abstrakcyjną 'Figura', to metoda obliczPole() nie ma sensu bez konkretnej figury, więc w klasie bazowej zostaje abstrakcyjna, a dopiero w 'Kwadracie' czy 'Kole' dostaje realną implementację. Z mojego doświadczenia, takie podejście bardzo pomaga, kiedy projekt robi się większy, bo jasno wiadomo, co jeszcze trzeba dopisać w klasach pochodnych. Jest to wręcz obowiązkowe w wielu wzorcach projektowych, na przykład w strategii albo szablonie metody.

Pytanie 37

Jakie elementy powinny być zawarte w instrukcji dla użytkownika danej aplikacji?

A. Opis instalacji, konfiguracji oraz obsługi oprogramowania
B. Informacje o narzędziach programistycznych zastosowanych w procesie tworzenia aplikacji
C. Harmonogram realizacji projektu
D. Wyjaśnienie struktur danych wykorzystywanych w kodzie
W instrukcji użytkownika aplikacji warto, żeby był opis tego, jak zainstalować, skonfigurować i korzystać z programu. Taka dokumentacja, pisana krok po kroku, pomaga użytkownikowi przejść przez wszystkie etapy, od pobrania oprogramowania, przez instalację, aż po to, żeby w pełni wykorzystać wszystkie funkcje. Dobrze, żeby były tam też info o wymaganiach systemowych, sposobach radzenia sobie z problemami czy aktualizacjach oprogramowania. Moim zdaniem, taka dokładna instrukcja jest mega ważna, bo zmniejsza szanse na napotkanie kłopotów podczas korzystania z aplikacji i sprawia, że łatwiej jest wdrożyć ją w pracy. Jak użytkownicy mają porządnie napisaną instrukcję, to są bardziej zadowoleni i szybciej przyzwyczajają się do nowego narzędzia.

Pytanie 38

Na ilustracji pokazano fragment emulacji iOS z elementem kontrolnym. Który fragment kodu XAML opisuje ten element?

Ilustracja do pytania
A. <Stepper Increment= "1" />
B. <Switch IsToggled= "true" />
C. <Slider Maximum= "255" />
D. <Entry IsPassword= "true" />
Kontrolka <Switch IsToggled= "true" /> w XAML to taki przełącznik. Ma dwa stany: włączony (true) i wyłączony (false). Można to porównać do zwykłego włącznika, tylko że w aplikacjach. Fajnie się z tego korzysta, bo pozwala szybko zmieniać ustawienia, nie trzeba nic więcej wpisywać. To jest dosyć intuicyjne dla użytkowników, więc można nim łatwo zarządzać funkcjami aplikacji.

Pytanie 39

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

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

Pytanie 40

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

console.log(typeof null);
console.log(typeof undefined);
console.log(typeof []);
console.log(typeof NaN);
A. null, undefined, object, NaN
B. null, undefined, array, number
C. object, undefined, array, number
D. object, undefined, object, number
Typowe błędy związane z błędnymi odpowiedziami wynikają często z mylnych koncepcji dotyczących typów danych w JavaScript. Warto zauważyć, że odpowiedź sugerująca, że null jest typem 'null' nie jest zgodna z rzeczywistością. Null nie jest odrębnym typem, lecz jest klasyfikowany jako obiekt, co jest wynikają z tego, że w JavaScript wszystko jest obiektowe z wyjątkiem prostych typów. Również opinia, że NaN powinien być uznawany za typ 'NaN' jest myląca. NaN jest specjalnym przypadkiem liczby, co można zobaczyć przy użyciu typeof. Tablica z kolei nie ma własnego typu w JavaScript, jest traktowana jako obiekt. To jest powód, dla którego typeof zwraca 'object' dla tablic. Niezrozumienie tych zasad prowadzi do błędnych konkluzji i może wpływać na jakość kodu. W praktyce powinno się zawsze stosować typeof do sprawdzania typów zmiennych, co zapewnia lepszą kontrolę nad danymi i eliminuje potencjalne błędy podczas wykonywania operacji na różnych typach. Warto zwracać uwagę na te aspekty, ponieważ wpływają one na wydajność i stabilność aplikacji.