Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 7 grudnia 2025 16:43
  • Data zakończenia: 7 grudnia 2025 16:51

Egzamin zdany!

Wynik: 29/40 punktów (72,5%)

Wymagane minimum: 20 punktów (50%)

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

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

let i = 0;
while (i < 5) {
  i++;
  if (i === 3) continue;
  console.log(i);
}
A. 0, 1, 2, 3, 4
B. 1, 2, 4, 5
C. 1, 2, 3, 4, 5
D. 0, 1, 2, 4, 5
W przedstawionym kodzie mamy do czynienia z pętlą while, która działa, dopóki zmienna i jest mniejsza od 5. Na początku i jest równe 0, a w każdej iteracji pętli i jest zwiększane o 1. Wewnątrz pętli mamy warunek, który sprawdza, czy i jest równe 3. Jeżeli tak, to używamy instrukcji continue, co oznacza, że pomijamy resztę kodu w tej iteracji i wracamy do początku pętli. Przeanalizujmy, co się stanie w kolejnych iteracjach: w pierwszej iteracji i jest 1, więc wypisujemy 1, w drugiej iteracji i jest 2, więc wypisujemy 2. Gdy i osiąga 3, warunek if jest spełniony i przechodzimy do następnej iteracji, nie wypisując nic. Następnie i staje się 4 i 5, które również są wypisywane. W efekcie na konsoli zostanie wypisane 1, 2, 4, 5. Takie podejście pokazuje, jak ważne jest zrozumienie działania pętli i instrukcji sterujących w JavaScript, co jest kluczowe w programowaniu i pozwala na efektywne zarządzanie przepływem kodu.

Pytanie 2

Jakie środowisko jest natywne do tworzenia aplikacji desktopowych w języku C#?

A. NetBeans
B. PyCharm
C. Eclipse
D. MS Visual Studio
MS Visual Studio to zdecydowanie najczęściej wykorzystywane środowisko do tworzenia aplikacji desktopowych w języku C#. Moim zdaniem, trudno znaleźć lepsze narzędzie, jeśli chodzi o wsparcie dla Windows Forms, WPF czy nawet najnowszego .NET MAUI. Visual Studio zapewnia nie tylko bardzo wygodny edytor kodu, ale też bogaty zestaw narzędzi do projektowania interfejsów, debugowania i testowania aplikacji. To właśnie tutaj Microsoft wdraża wszystkie najnowsze funkcje związane z platformą .NET – co daje przewagę pod kątem zgodności i stabilności projektu. Z własnego doświadczenia mogę powiedzieć, że Visual Studio pozwala szybko budować nawet bardziej zaawansowane aplikacje desktopowe, korzystając z gotowych szablonów oraz podpowiedzi, które realnie ułatwiają życie programistom. Warto też dodać, że VS współpracuje z NuGetem, więc bez problemu można doinstalować popularne biblioteki czy frameworki. Profesjonaliści z branży zalecają właśnie to IDE, bo gwarantuje najlepszą integrację z narzędziami Microsoftu, jak choćby SQL Server czy Azure. W pracy zespołowej funkcje kontroli wersji (np. Git) też są dobrze wbudowane. Dzięki temu środowisku można dość szybko przejść od pomysłu do działającej aplikacji gotowej do wdrożenia na Windows. Nie ma się co oszukiwać – Visual Studio to po prostu standard dla .NET i C#.

Pytanie 3

Zaproponowany fragment kodu w Android Studio realizuje metodę nasłuchującą do obsługi wydarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. wybór daty
B. naciśnięcia przycisku
C. zmiany w polu tekstowym
D. zmiany stanu kontrolki Switch
Metoda OnClickListener, to coś, co na pewno warto znać, gdy pracujesz z aplikacjami na Androida. Gdy użytkownik klika przycisk, wywoływana jest metoda onClick. I tu możesz zrobić różne rzeczy, jak na przykład przejść do innego ekranu, zapisać dane albo uruchomić jakąś akcję w tle. To jest dobry przykład wzorca projektowego zwanego Delegacja, który pomaga oddzielić to, co widzisz w interfejsie, od tego, co dzieje się w aplikacji. Dzięki temu łatwiej zarządzać kodem i wprowadzać zmiany. Fajnie jest, gdy logikę umieszczasz w osobnych metodach, bo wtedy testowanie całej aplikacji staje się prostsze. Przykłady? Możesz na przykład użyć OnClickListenera, żeby zrobić logowanie po kliknięciu przycisku lub wysłać formularz. Pamiętaj też, żeby unikać ciężkich operacji w metodzie onClick, żeby aplikacja działała płynnie.

Pytanie 4

Jaką rolę odgrywa destruktor w definicji klasy?

A. Realizuje testy jednostkowe klasy
B. Usuwa instancje i zwalnia pamięć
C. Ustawia wartości pól klasy
D. Generuje nowe instancje klasy
Destruktor to specjalna metoda klasy, która jest automatycznie wywoływana w momencie, gdy obiekt przestaje być używany. Jego zadaniem jest zwalnianie zasobów, takich jak pamięć dynamiczna, uchwyty do plików lub połączenia sieciowe. Destruktor ma tę samą nazwę co klasa, poprzedzoną symbolem `~` w C++ (`~Samochod()`). Destruktor zapobiega wyciekom pamięci i zapewnia, że wszystkie zasoby są poprawnie zwalniane po zakończeniu pracy obiektu. Jest to kluczowy element zarządzania cyklem życia obiektu w językach takich jak C++.

Pytanie 5

Która z wymienionych sytuacji stanowi naruszenie praw autorskich?

A. Używanie programu typu open-source zgodnie z warunkami licencji
B. Tworzenie kopii zapasowej legalnie zakupionego programu
C. Udostępnianie filmu objętego prawami autorskimi bez zgody właściciela
D. Nabycie licencji na oprogramowanie
Publikowanie filmu chronionego prawami autorskimi bez zgody właściciela jest naruszeniem praw autorskich. Prawa autorskie chronią twórców przed nieuprawnionym kopiowaniem, dystrybucją i rozpowszechnianiem ich dzieł. W przypadku filmów, muzyki czy oprogramowania, każde użycie bez odpowiednich licencji lub zgody właściciela jest niezgodne z prawem. Twórcy mają prawo do wynagrodzenia za swoją pracę, a naruszenia mogą skutkować wysokimi grzywnami, a nawet postępowaniem sądowym. Przestrzeganie praw autorskich wspiera rozwój kultury i technologii, chroniąc interesy twórców.

Pytanie 6

W zaprezentowanym wideo przedstawiono narzędzie do tworzenia interfejsu użytkownika, dla którego automatycznie generuje się

A. obsługa przycisku ekranu dotykowego
B. obsługa wciśniętego przycisku
C. kod XML
D. kod Java
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 7

Który z poniższych metod najlepiej zabezpiecza dane karty płatniczej podczas zakupów online?

A. Przechowywanie numeru karty w przeglądarce internetowej
B. Używanie wirtualnych kart płatniczych lub jednorazowych kodów
C. Podawanie informacji o karcie w odpowiedzi na wiadomość e-mail od nieznajomego
D. Udostępnianie danych karty na platformach internetowych
Korzystanie z wirtualnych kart płatniczych lub jednorazowych kodów to skuteczny sposób na ochronę danych karty płatniczej podczas transakcji internetowych. Wirtualne karty mają ograniczony okres ważności i są powiązane z określoną kwotą, co minimalizuje ryzyko kradzieży całego konta bankowego. Jednorazowe kody płatności wygasają po jednorazowym użyciu, co uniemożliwia ich ponowne wykorzystanie przez osoby trzecie. Dzięki tym metodom użytkownicy znacznie redukują ryzyko oszustw i nieautoryzowanych transakcji.

Pytanie 8

Jak zrealizować definiowanie własnego wyjątku w języku C++?

A. Wykorzystać blok try z pustym blokiem catch
B. Automatycznie wywołać funkcję throw
C. Skorzystać z domyślnej metody obsługi błędów
D. Utworzyć klasę, która dziedziczy po std::exception
Aby zdefiniować własny wyjątek w języku C++, należy stworzyć klasę dziedziczącą po standardowej klasie 'std::exception' lub jednej z jej pochodnych. Klasa ta może zawierać własne metody i pola, dostosowując obsługę błędów do specyficznych potrzeb aplikacji. Dziedziczenie z 'std::exception' umożliwia korzystanie z funkcji takich jak 'what()', która zwraca opis błędu. Dzięki temu programista może precyzyjnie określić typ i przyczynę wyjątku, co prowadzi do bardziej czytelnego i łatwiejszego w utrzymaniu kodu. Tworzenie własnych wyjątków jest szczególnie przydatne w dużych projektach, gdzie występuje potrzeba kategoryzacji i obsługi różnych typów błędów w zależności od ich źródła.

Pytanie 9

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

A. Unity
B. Android Studio
C. PyCharm
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 10

Który z poniższych opisów najlepiej charakteryzuje system informatyczny?

A. Oprogramowanie wspierające jedynie zarządzanie danymi osobowymi
B. Zbiór urządzeń technicznych używanych w pracy biurowej
C. Sieć komputerowa, która umożliwia komunikację pomiędzy użytkownikami
D. Zespół ludzi, procedur, oprogramowania i sprzętu służący do przetwarzania danych
System informatyczny to kompleksowy zbiór elementów, który obejmuje ludzi, procedury, oprogramowanie oraz sprzęt, mający na celu przetwarzanie danych w sposób efektywny i zorganizowany. Kluczowym aspektem systemu informatycznego jest jego zdolność do integracji różnych komponentów w celu realizacji określonych zadań i osiągania wyznaczonych celów. Przykładem może być system ERP (Enterprise Resource Planning), który integruje finanse, produkcję, sprzedaż oraz zarządzanie zasobami ludzkimi w jednym środowisku. Takie zintegrowane podejście umożliwia nie tylko efektywne zarządzanie danymi, ale również generowanie raportów, analizę trendów oraz podejmowanie informowanych decyzji. Standardy, takie jak ITIL (Information Technology Infrastructure Library) czy CMMI (Capability Maturity Model Integration), podkreślają znaczenie procedur i zarządzania w kontekście systemów informatycznych, co wpływa na jakość usług i zadowolenie użytkowników. Systemy informatyczne są wykorzystywane w różnych branżach, od finansów po opiekę zdrowotną, gdzie przetwarzanie i zarządzanie danymi jest kluczowe dla efektywności operacyjnej.

Pytanie 11

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest

A. dostosowanie interfejsu użytkownika do różnych typów odbiorców
B. informowanie obiektów o modyfikacji stanu innych obiektów
C. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
D. monitorowanie interakcji użytkownika i wysyłanie wyjątków
Wzorzec Obserwator, znany również jako Observer, jest fundamentem programowania związanego z aplikacjami webowymi, szczególnie w kontekście architektury MVC (Model-View-Controller). Jego głównym celem jest umożliwienie obiektom (zwanym obserwatorami) subskrybowania zmian stanu innych obiektów (zwanych obserwowanymi). Kiedy stan obiektu obserwowanego ulega zmianie, wszystkie powiązane obiekty obserwujące są automatycznie powiadamiane o tej zmianie. Takie podejście jest szczególnie użyteczne w aplikacjach, gdzie interfejs użytkownika musi być dynamicznie aktualizowany w odpowiedzi na zmiany danych, na przykład w przypadku aplikacji do zarządzania danymi w czasie rzeczywistym. Przykładem może być aplikacja czatu, w której nowe wiadomości są automatycznie wyświetlane użytkownikom, gdy tylko są dodawane przez innych. Wzorzec ten jest również zgodny z zasadami SOLID, zwłaszcza z zasadą otwarte-zamknięte, umożliwiając rozwijanie aplikacji bez konieczności modyfikowania istniejących klas. W różnych technologiach webowych, takich jak JavaScript z użyciem frameworków takich jak React czy Angular, wzorzec Obserwator jest implementowany przez mechanizmy takie jak stany komponentów, co przyczynia się do lepszej organizacji kodu i zachowania jego czytelności.

Pytanie 12

W przedstawionych funkcjonalnie równoważnych kodach źródłowych po przeprowadzeniu operacji w zmiennej b zostanie zapisany wynik:

Python:C++/C#/Java:
x = 5.96;
b = int(x);
double x = 5.96;
int b = (int)x;
A. 5.96
B. 5
C. 596
D. 6
Odpowiedź 5 jest prawidłowa, bo w większości popularnych języków programowania, takich jak Python, C++, C#, czy Java, rzutowanie liczby zmiennoprzecinkowej (czyli typu float lub double) na typ całkowity (int) powoduje odcięcie części ułamkowej, a nie zaokrąglenie. To jest bardzo ważne, bo wiele osób intuicyjnie spodziewa się zaokrąglenia, a tu po prostu wszystko po przecinku ląduje w koszu. W przypadku podanego przykładu zmienna x ma wartość 5.96, ale po rzutowaniu na int, zarówno w Pythonie poprzez funkcję int(), jak i w pozostałych językach przez klasyczne rzutowanie (int)x, zostaje tylko 5. Dokładnie tak działa konwersja: odcina się część po przecinku niezależnie od tego, jak blisko liczba jest kolejnej całości. To niesamowicie przydatne np. podczas pracy z indeksami tablic albo gdy chcemy szybko zamienić wynik dzielenia na liczbę całkowitą. W praktyce, warto pamiętać, że takie rzutowanie nie wykonuje żadnej walidacji ani sprawdzania – jeśli liczba jest ujemna, to po prostu też odcina część ułamkową w kierunku zera, więc int(-5.96) da -5. Z mojego doświadczenia bardzo często spotyka się błąd w kodzie, kiedy ktoś oczekuje zaokrąglenia i nie otrzymuje go, bo rzutowanie zawsze odcina, nie zaokrągla. Warto znać tę różnicę przy projektowaniu algorytmów i korzystać np. z funkcji round() jeśli potrzebujemy zaokrąglenia, a nie odcinania. To takie małe niuanse, ale potem wchodzą w nawyk i bardzo ułatwiają życie podczas kodowania.

Pytanie 13

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

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

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

const person = new Person('John');
console.log(person.sayHello());
A. TypeError: person.sayHello is not a function
B. Hello, undefined!
C. Hello, John!
D. Hello, [object Object]!
Pierwsza z niepoprawnych odpowiedzi sugeruje, że wynik to 'Hello, undefined!'. To wynika z błędnego założenia, że właściwość 'name' nie jest prawidłowo przypisana do obiektu. W kodzie właściwość 'name' jest poprawnie ustawiona przez konstruktor, więc nie ma podstaw do uznania, że zwróci 'undefined'. Warto zauważyć, że 'undefined' pojawia się, gdy zmienne nie zostały zainicjowane lub gdy nie odnajdujemy właściwości w obiekcie. Z kolei opcja, która wskazuje na 'TypeError: person.sayHello is not a function', jest oparta na błędnym założeniu, że metoda 'sayHello' nie istnieje w obiekcie 'person'. Metoda ta została zdefiniowana w prototypie, więc każda instancja obiektu 'Person' ma do niej dostęp i nie spowoduje to błędu typu. Ostatnia z odpowiedzi, sugerująca, że wynik to 'Hello, [object Object]!', jest efektem niepoprawnego użycia konwersji obiektu do stringa. Gdybyśmy próbowali zwrócić 'this' jako obiekt bez odpowiedniego przetworzenia, zwróciłoby to domyślną reprezentację obiektu. Kluczowym błędem w myśleniu jest nieuwzględnienie, że metody są częścią prototypów i obiekty dziedziczą je, co jest fundamentalnym założeniem obiektowego paradygmatu programowania w JavaScript. Warto zwrócić uwagę na te koncepcje, aby lepiej zrozumieć działanie prototypów w tym języku.

Pytanie 14

Programista może wykorzystać framework Angular do realizacji aplikacji:

A. mobilnej
B. rodzaju back-end
C. na komputerze
D. rodzaju front-end
Angular to świetne narzędzie do tworzenia aplikacji front-endowych. Chodzi o to, że odpowiada za to, co widzi użytkownik i jak może z tym interagować. Dzięki Angular możemy budować dynamiczne i responsywne aplikacje webowe. Z tego co widzę, używamy tam komponentów, modułów i rzeczy typu dwukierunkowe wiązanie danych, co naprawdę ułatwia życie. Bez wątpienia, Angular jest jednym z najpopularniejszych frameworków do robienia interfejsów użytkownika, co tylko potwierdza jego efektywność.

Pytanie 15

Co to jest Redux?

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

Pytanie 16

Pierwszym krokiem w procesie tworzenia aplikacji jest

A. wybór zestawu typów i zmiennych dla aplikacji
B. opracowanie architektury systemu
C. stworzenie przypadków testowych
D. analiza wymagań klienta
Analiza wymagań klienta to taki trochę fundament całego procesu tworzenia aplikacji. Bez niej ciężko ruszyć dalej, bo nie wiadomo, co właściwie trzeba zbudować i jakie cele ma spełniać projekt. Z mojego doświadczenia wynika, że rozmowy z klientem potrafią odkryć wiele niewypowiedzianych oczekiwań – czasem nawet takie, o których sam klient nie pomyślał, ale są kluczowe dla sukcesu produktu. Bez szczegółowego zrozumienia, czego dokładnie potrzebuje użytkownik końcowy, łatwo wpaść w pułapkę budowania funkcjonalności na ślepo lub tworzenia rozwiązań, które nikomu się nie przydadzą. W branży IT mówi się, że im lepsza analiza na starcie, tym mniej poprawek i niespodzianek później w trakcie realizacji. Standardy takie jak IEEE 830 czy metodyki typu Agile i Scrum mocno podkreślają rolę rozmów z klientem oraz dokumentowania wymagań, zanim przejdzie się dalej. Praktycznie każda większa firma najpierw zbiera wymagania – czy to poprzez warsztaty, wywiady, czy analizę procesów biznesowych. Takie podejście pozwala lepiej zaplanować zakres projektu, oszacować koszty i ustalić priorytety. Bez tego nawet najlepsza architektura czy testy nie uratują projektu przed nieporozumieniami i opóźnieniami.

Pytanie 17

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

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

Pytanie 18

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

A. Visual Studio
B. Android 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 19

Co oznacza termin 'polimorfizm' w programowaniu obiektowym?

A. Ustanowienie tylko jednego typu dla klasy
B. Dziedziczenie metod z klasy bazowej
C. Zdolność do przyjmowania wielu form przez obiekt
D. Ograniczenie do jednej formy dla obiektu
Polimorfizm to jedno z fundamentalnych pojęć w programowaniu obiektowym, które pozwala na tworzenie elastycznych i skalowalnych aplikacji. Dzięki polimorfizmowi możemy pisać kod, który operuje na obiektach, nie znając ich dokładnego typu w momencie kompilacji. To bardzo przydatne, gdy mamy do czynienia z hierarchią klas, gdzie różne klasy dziedziczą po jednej bazowej. Praktycznym przykładem może być system, w którym mamy klasę bazową 'Zwierzę' i klasy pochodne, takie jak 'Pies' i 'Kot'. Dzięki polimorfizmowi możemy stworzyć funkcję, która przyjmuje parametr typu 'Zwierzę', a następnie wywołuje metodę, która jest specyficzna dla danej klasy pochodnej. To umożliwia nam pisanie bardziej ogólnego i mniej związanego z konkretnymi typami kodu. Polimorfizm pozwala również na wdrażanie wzorców projektowych, takich jak strategia czy fabryka, które zwiększają modularność i reużywalność kodu. Korzystanie z polimorfizmu jest zgodne z zasadami SOLID, szczególnie zasadą podstawienia Liskov, która mówi, że obiekty klasy bazowej mogą być zastępowane obiektami klasy pochodnej bez wpływu na poprawność działania programu.

Pytanie 20

Która grupa typów zawiera wyłącznie typy złożone?

A. class, struct, union
B. class, struct, float
C. char, struct, union
D. unsigned, struct, float
W tej odpowiedzi trafiłeś w sedno, bo class, struct oraz union to typowe przykłady typów złożonych w językach programowania takich jak C++ czy C. Każdy z nich służy do przechowywania bardziej skomplikowanych struktur danych niż zwykłe typy proste jak int czy float. Klasa (class) to podstawa programowania obiektowego. Pozwala łączyć dane i funkcje w jeden byt – obiekt. Z mojego doświadczenia korzystanie z klas daje ogromne możliwości, bo można ukrywać szczegóły implementacji czy stosować dziedziczenie – co jest nieocenione przy większych projektach. Struktura (struct) to taki trochę prostszy wariant klasy, szczególnie w C, gdzie nie obsługuje ona metod czy hermetyzacji, ale w C++ różnice się zacierają. Union natomiast pozwala na oszczędność pamięci – kilka pól dzieli ten sam obszar pamięci, czyli tylko jedno z nich jest aktywne w danej chwili. To się przydaje np. w programowaniu niskopoziomowym, obsłudze różnych protokołów czy pracy z rejestrami sprzętowymi. Według standardów ISO/IEC dla języka C++ (np. 14882:2017), właśnie te trzy typy należą bezdyskusyjnie do grupy złożonych, bo są zbudowane z innych typów i pozwalają lepiej modelować rzeczywistość. Warto pamiętać, że typy złożone są podstawą nowoczesnych technik projektowania oprogramowania. W praktyce, nawet w prostych aplikacjach, korzystanie z tych struktur podnosi czytelność i ułatwia przyszłą rozbudowę kodu.

Pytanie 21

Co to jest ESLint?

A. Framework do testowania aplikacji napisanych w JavaScript
B. Kompilator kodu ECMAScript do starszych wersji JavaScript
C. Narzędzie do statycznej analizy kodu i identyfikacji problemów w kodzie JavaScript
D. System zarządzania zależnościami w projektach Node.js
Wybór odpowiedzi, która nie odnosi się do statycznej analizy kodu, wskazuje na pewne nieporozumienia dotyczące roli różnych narzędzi w ekosystemie JavaScript. Na przykład, kompilatory kodu ECMAScript, które są używane do przekształcania nowoczesnego JavaScriptu na jego wcześniejsze wersje, nie są odpowiednikiem narzędzi analitycznych, takich jak ESLint. Kompilacja to proces, który syntaktycznie przekształca kod, co odgrywa kluczową rolę w utrzymaniu kompatybilności z różnymi środowiskami wykonawczymi, ale nie pomaga w ocenie jakości i stylu kodu. Również frameworks do testowania aplikacji, takie jak Jest czy Mocha, służą do weryfikacji poprawności działania kodu poprzez pisanie testów jednostkowych, a nie do analizy samego kodu. Z drugiej strony, systemy zarządzania zależnościami, takie jak npm czy Yarn, koncentrują się na kontroli i instalacji zewnętrznych bibliotek wykorzystywanych w projektach, co również jest odrębnym zagadnieniem od analizy statycznej. Często można natknąć się na błędne przekonanie, że wszystkie te technologie mają podobny cel, co prowadzi do mylnego postrzegania ich funkcji. W rzeczywistości, każde z tych narzędzi pełni swoją unikalną rolę i zrozumienie ich specyfiki jest kluczowe dla efektywnego korzystania z ekosystemu JavaScript. Właściwe podejście do wyboru narzędzi pomaga w opracowaniu bardziej wydajnych, czytelnych i łatwych w utrzymaniu aplikacji.

Pytanie 22

Jakie metody można wykorzystać do przechowywania informacji o użytkownikach w aplikacji mobilnej na systemie Android?

A. W rejestrze systemu
B. Tylko w pamięci RAM
C. Wyłącznie w zewnętrznych bazach danych
D. Za pomocą plików SharedPreferences
SharedPreferences to jedno z najprostszych i najczęściej stosowanych narzędzi do przechowywania danych użytkownika w aplikacjach mobilnych na Androidzie. SharedPreferences umożliwia zapisywanie małych porcji danych w postaci par klucz-wartość. Jest to idealne rozwiązanie do przechowywania ustawień użytkownika, preferencji aplikacji oraz stanów interfejsu. Dane przechowywane w SharedPreferences są zapisywane w plikach XML i pozostają na urządzeniu nawet po zamknięciu aplikacji, co czyni je doskonałym narzędziem do przechowywania trwałych informacji. Deweloperzy cenią SharedPreferences za prostotę implementacji i wydajność, co sprawia, że jest to jedno z najbardziej uniwersalnych narzędzi do lokalnego przechowywania danych w aplikacjach mobilnych.

Pytanie 23

Jakie informacje przedstawia diagram Gantta?

A. Relacje między różnymi projektami
B. Plan działań w projekcie
C. Strukturę plików w projekcie
D. Model przepływu danych
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 24

Co oznacza termin 'immutability' w programowaniu funkcyjnym?

A. Funkcje mogą być przypisywane do zmiennych
B. Kod może być wykonywany równolegle
C. Stan obiektu nie może być modyfikowany po jego utworzeniu
D. Obiekty są automatycznie usuwane z pamięci
W programowaniu istnieje wiele koncepcji, które mogą być mylone z ideą immutability, jednak żadna z pozostałych opcji nie oddaje jej istoty. Możliwość przypisywania funkcji do zmiennych, choć istotna w wielu językach programowania, nie ma bezpośredniego związku z immutability. To zjawisko jest bardziej związane z dynamicznymi właściwościami języków, które pozwalają na traktowanie funkcji jako obiektów pierwszej klasy. W przypadku równoległego wykonywania kodu, choć jest to ważna cecha programowania, nie można jej utożsamiać z niemodyfikowalnością obiektów. Równoległość i współbieżność są efektem zarządzania złożonymi procesami, ale sama możliwość modyfikacji stanu obiektów pozostaje niezależna. Ostatnia koncepcja, dotycząca automatycznego usuwania obiektów z pamięci, odnosi się do zarządzania pamięcią i mechanizmów takich jak garbage collection. To również nie jest związane z immutability, ponieważ nawet obiekty, które są automatycznie usuwane, mogą być modyfikowalne. Kluczowym błędem w rozumieniu immutability jest mylenie go z innymi cechami obiektów, co prowadzi do nieporozumień w implementacji i projektowaniu aplikacji. W praktyce, zrozumienie immutability jako koncepcji pozwala na lepsze zarządzanie stanem oraz redukcję liczby błędów związanych z równoległym przetwarzaniem danych.

Pytanie 25

Jakie działania mogą przyczynić się do ochrony swojego cyfrowego wizerunku w sieci?

A. Weryfikacja ustawień prywatności na platformach społecznościowych
B. Dzieleni się swoimi danymi dostępowymi z przyjaciółmi
C. Niepotwierdzanie źródeł publikowanych informacji
D. Zamieszczanie wszystkich szczegółów dotyczących swojego życia prywatnego
Publikowanie wszystkich informacji o życiu prywatnym naraża użytkownika na kradzież tożsamości, stalking i inne zagrożenia cyfrowe. Udostępnianie danych logowania znajomym jest niebezpieczne i może prowadzić do utraty kontroli nad kontem. Nieweryfikowanie źródeł publikowanych treści może prowadzić do rozpowszechniania fałszywych informacji i utraty wiarygodności w sieci, co negatywnie wpływa na cyfrowy wizerunek użytkownika.

Pytanie 26

Która metoda wyszukiwania potrzebuje posortowanej listy do prawidłowego działania?

A. Wyszukiwanie sekwencyjne
B. Wyszukiwanie z hashem
C. Wyszukiwanie binarne
D. Wyszukiwanie liniowe
Wyszukiwanie binarne wymaga posortowanej tablicy do działania, co pozwala na dzielenie tablicy na pół przy każdym kroku, redukując liczbę operacji do O(log n). Algorytm ten działa poprzez porównanie poszukiwanego elementu ze środkowym elementem tablicy – jeśli element jest mniejszy, wyszukiwanie kontynuuje w lewej części tablicy, a jeśli większy, w prawej. Dzięki tej efektywności, wyszukiwanie binarne jest szeroko stosowane w bazach danych, systemach plików oraz aplikacjach, które operują na dużych zbiorach danych. Wyszukiwanie binarne jest prostym, ale potężnym algorytmem, który znacząco skraca czas przeszukiwania dużych zbiorów.

Pytanie 27

W języku C# szablon List umożliwia korzystanie z listy. Z definicji obiektu kolekcji wynika, że jego elementami mogą być:

List<int> wykaz = new List<int>();
A. liczby całkowite
B. elementy o nieokreślonym typie
C. liczby rzeczywiste
D. elementy typu List
Jeżeli chodzi o kolekcje generyczne w C#, to List<int> jest przykładem bardzo konkretnego zastosowania. Ten zapis oznacza, że tworzymy listę, której elementami mogą być wyłącznie liczby całkowite – dokładnie takie, jakie reprezentuje typ int w .NET (czyli 32-bitowe liczby całkowite ze znakiem). Wynika to z idei generyczności: typ podany w nawiasach ostrych (<int>) precyzyjnie narzuca typ przechowywanych danych. To daje nam bezpieczeństwo typów, na które zwracają uwagę wszyscy programiści C# – nie da się przez pomyłkę dodać tam np. napisu czy obiektu innego typu. Z mojego doświadczenia mogę powiedzieć, że to bardzo upraszcza życie, bo kompilator od razu wychwyci próby niewłaściwego użycia. Praktycznie, gdy tworzysz List<int>, możesz ją wykorzystać np. do przechowywania identyfikatorów, wyników testów, liczb losowych – wszędzie tam, gdzie operujesz właśnie na liczbach całkowitych. Warto dodać, że generyczność jest jednym z filarów nowoczesnych języków, pozwalając pisać kod elastyczny i bezpieczny zarazem. Trochę jak z pudełkiem na śrubki: jak wrzucisz inne rzeczy, to od razu się pogubisz i zrobi się bałagan. Tutaj jest bardzo jasno – List<int> to zawsze lista liczb całkowitych i już. Dobre praktyki branżowe podpowiadają, żeby zawsze stosować jak najbardziej precyzyjne typy w generycznych kolekcjach, bo to ułatwia późniejsze utrzymanie kodu i ogranicza potencjalne błędy.

Pytanie 28

Jaką rolę odgrywa pamięć operacyjna (RAM) w komputerowym systemie?

A. Trwałe przechowywanie systemu operacyjnego
B. Zarządzanie transferem danych pomiędzy urządzeniami wejścia/wyjścia
C. Tymczasowe magazynowanie danych i instrukcji dla procesora
D. Umożliwienie tworzenia kopii zapasowej danych użytkownika
Odpowiedzi, które sugerują inne funkcje pamięci operacyjnej, są niepoprawne z kilku powodów. Stałe przechowywanie systemu operacyjnego jest zarezerwowane dla pamięci masowej, takiej jak dyski twarde lub SSD, które zapewniają długoterminowe przechowywanie danych. Pamięć RAM jest ulotna, co oznacza, że wszystkie dane są tracone po wyłączeniu zasilania, podczas gdy system operacyjny musi być zawsze dostępny po restarcie komputera. Kolejną nieścisłością jest sugestia, że RAM zarządza przepływem danych między urządzeniami wejścia/wyjścia. To zadanie leży w gestii kontrolerów i systemu operacyjnego, które koordynują interakcję między różnorodnymi urządzeniami, a nie samej pamięci operacyjnej. Ostatnia odpowiedź dotycząca zapewnienia kopii zapasowej danych użytkownika również jest błędna. Kopie zapasowe są zwykle przechowywane na pamięci masowej, a nie w RAM, która nie ma zdolności do trwałego przechowywania danych. Pamięć operacyjna służy jedynie do tymczasowego przetrzymywania danych potrzebnych do bieżącego działania systemu komputerowego.

Pytanie 29

Jakie sformułowanie najlepiej oddaje złożoność obliczeniową algorytmu quicksort?

A. jest różna w zależności od wyboru elementu dzielącego
B. jest większa niż złożoność sortowania bąbelkowego
C. jest większa niż O(n2)
D. jest zawsze mniejsza niż złożoność jakiegokolwiek innego algorytmu sortowania
Twierdzenie, że złożoność quicksort jest wyższa niż sortowania bąbelkowego, jest błędne – bubble sort ma złożoność O(n²) niezależnie od danych wejściowych, co czyni go jednym z najwolniejszych algorytmów. Quicksort nigdy nie ma złożoności wyższej niż O(n²) w najgorszym przypadku, co oznacza, że jest zawsze bardziej efektywny niż bubble sort. Twierdzenie, że quicksort zawsze jest szybszy niż jakikolwiek inny algorytm, jest nieprawdziwe – algorytmy takie jak counting sort lub radix sort mogą działać szybciej w określonych przypadkach. Ostateczna wydajność quicksort zależy od implementacji oraz charakterystyki danych wejściowych.

Pytanie 30

Co to jest kontener Docker?

A. Narzędzie do automatycznego testowania interfejsów użytkownika
B. System zarządzania bazami danych NoSQL
C. Lekka, samodzielna jednostka oprogramowania, która zawiera wszystko, co aplikacja potrzebuje do uruchomienia
D. Graficzny interfejs do zarządzania kodem aplikacji webowych
Kontener Docker to lekka, samodzielna jednostka oprogramowania, która zawiera wszystko, co aplikacja potrzebuje do uruchomienia: kod, biblioteki, zmienne środowiskowe oraz inne zależności. Dzięki wykorzystaniu technologii wirtualizacji na poziomie systemu operacyjnego, kontenery są bardziej efektywne i oszczędne w użyciu zasobów w porównaniu do tradycyjnych maszyn wirtualnych. Przykładem zastosowania kontenerów Docker jest rozwój aplikacji webowych, gdzie różne mikroserwisy mogą być uruchamiane w osobnych kontenerach, co pozwala na łatwe skalowanie oraz zarządzanie nimi. W praktyce, kontenery umożliwiają programistom szybkie uruchamianie środowisk testowych i produkcyjnych, a także ułatwiają ciągłą integrację i ciągłe wdrażanie (CI/CD), co jest zgodne z najlepszymi praktykami DevOps. W kontekście zarządzania infrastrukturą, kontenery zapewniają spójność środowiska, eliminując problemy związane z "działa na moim komputerze".

Pytanie 31

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. w aplikacji obecny jest jedynie interfejs użytkownika
B. interfejs użytkownika oraz logika aplikacji są oddzielone
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 32

Które z wymienionych atrybutów klasy mogą być dostępne wyłącznie w obrębie tej klasy oraz jej klas potomnych?

A. Public
B. Private
C. Protected
D. Static
Pola `public` są dostępne z każdego miejsca w programie, co narusza zasadę ukrywania implementacji. `Private` ogranicza dostęp tylko do metod tej samej klasy, co oznacza, że klasy pochodne nie mogą korzystać z prywatnych pól i metod klasy bazowej. `Static` oznacza, że pole lub metoda należy do klasy, a nie do jej instancji, co nie jest związane z kontrolą dostępu. Tylko `protected` zapewnia dostęp do pól i metod w klasach dziedziczących, zachowując jednocześnie pewien poziom ochrony przed nieautoryzowanym dostępem z zewnątrz.

Pytanie 33

Który z wymienionych etapów w procesie przetwarzania instrukcji przez procesor odbywa się jako pierwszy?

A. Zapis wyników do pamięci (Write Back)
B. Rozkodowanie rozkazu (Decode)
C. Pobranie rozkazu z pamięci (Fetch)
D. Realizacja instrukcji (Execution)
Pierwszą rzeczą, jaką robi procesor, jest pobranie rozkazu z pamięci, co nazywamy Fetch. To bardzo ważny etap w budowie komputera. Normalnie cykl wykonywania instrukcji składa się z trzech głównych kroków: pobierania, dekodowania i wykonania. W fazie Fetch procesor dobiera się do pamięci i ściąga instrukcję, którą zaraz wykona. Do tego używa rejestru wskaźnika instrukcji, czyli Instruction Pointer, który pokazuje, gdzie w pamięci jest następna instrukcja. Jak to działa w praktyce? Można to zobaczyć na przykładzie procesora x86, gdzie CPU na początku cyklu sprawdza pamięć RAM, szukając instrukcji według adresu, który podaje wskaźnik. Standardy takie jak ISA (Instruction Set Architecture) mówią, że ten krok to podstawa, bo to właśnie od niego zaczyna się wszystko, co robi procesor.

Pytanie 34

Programista aplikacji mobilnych pragnie zmienić swoją ścieżkę kariery na Full-Stack Developera. Wskaż kurs, który powinien wybrać, żeby to osiągnąć?

A. Mastering Cross-platform Developping
B. Complete JavaScript React, SQL, Node.js Cource
C. Raster and Vector Graphics with Adobe
D. Ultimate C# Serier from Beginner to Advanced
Analizując pozostałe propozycje kursów, łatwo zauważyć, że żadna z nich nie daje pełnego zestawu kompetencji wymaganych od pełnoprawnego Full-Stack Developera. Kurs "Mastering Cross-platform Developing" sugeruje skupienie się na tworzeniu aplikacji działających na wielu platformach – najczęściej chodzi tu o frameworki typu React Native, Flutter czy Xamarin. Chociaż brzmi to kusząco, w rzeczywistości skupia się bardziej na rozwoju aplikacji mobilnych niż na pełnym stacku webowym. Z mojego doświadczenia, wybierając tę ścieżkę, często zostaje się ekspertem od warstwy prezentacji, a backend czy bazy danych nadal pozostają poza zasięgiem. "Ultimate C# Series from Beginner to Advanced" to typowy kurs nastawiony na jeden język, w tym przypadku C#. Owszem, C# jest bardzo mocny w środowisku .NET i często wykorzystywany do budowy backendu aplikacji webowych, ale bez znajomości JavaScriptu, frontendu (czyli np. Reacta, Vue, Angular) oraz baz danych, trudno mówić o prawdziwym full-stacku. W dodatku, firmy wymagające full-stacków z reguły wolą osoby, które potrafią łączyć technologie webowe typu JavaScript/Node.js z nowoczesnymi frontendami, bo to jest obecnie standard branżowy. Z kolei "Raster and Vector Graphics with Adobe" to kurs zupełnie z innej bajki – omówienie grafiki rastrowej i wektorowej przydaje się grafikom lub UX/UI designerom, a nie programistom pełnego stosu. To typowy błąd myślowy: wychodzić z założenia, że wystarczą umiejętności graficzne, by być full-stackiem. W praktyce, nawet najbardziej estetyczny interfejs nie znaczy nic bez solidnego backendu i umiejętności pracy z bazami danych. Na rynku pracy szuka się osób, które potrafią obsłużyć całą ścieżkę przepływu danych i logiki, a nie tylko jedną wybraną dziedzinę. Moim zdaniem, wybierając którąkolwiek z tych opcji, nie zdobędzie się pełnego, wszechstronnego portfolio, które pozwoli z powodzeniem konkurować na rynku IT jako full-stack.

Pytanie 35

Który z wymienionych elementów może stanowić część menu w aplikacji desktopowej?

A. CheckBox
B. ScrollBar
C. Canvas
D. MenuItem
MenuItem to podstawowy komponent, który stanowi część systemu menu w aplikacjach desktopowych. Jest to element, który pojawia się w rozwijanym menu i pozwala na wykonywanie określonych akcji, takich jak otwieranie plików, zapisywanie danych czy wywoływanie funkcji aplikacji. MenuItem jest szeroko stosowany w aplikacjach Windows w połączeniu z WPF i WinForms. Tworzenie strukturalnego menu, które ułatwia nawigację po aplikacji, jest kluczowe dla zapewnienia dobrej użyteczności i intuicyjności oprogramowania.

Pytanie 36

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

b = a++;
Zapis drugi:
b = ++a;
A. Wartość zmiennej <span class="code-variable">b</span> będzie wyższa po użyciu drugiego zapisu w porównaniu do pierwszego.
B. Tylko przy użyciu pierwszego zapisu zmienna <span class="code-variable">a</span> zostanie zwiększona o <span class="code-number">1</span>.
C. Drugi zapis nie jest zgodny ze składnią, co doprowadzi do błędów kompilacji.
D. Bez względu na zastosowany sposób, w zmiennej <span class="code-variable">b</span> zawsze uzyskamy ten sam rezultat.
Drugi zapis nie jest niezgodny ze składnią – zarówno preinkrementacja, jak i postinkrementacja są w pełni zgodne z zasadami języka i nie powodują błędów kompilacji. Niezależnie od wybranego zapisu, zmienna zostanie zwiększona, lecz kluczowa różnica polega na tym, kiedy dokładnie to następuje. Twierdzenie, że w każdym przypadku wynik będzie taki sam, jest błędne – różnice pojawiają się podczas użycia tych operatorów w bardziej złożonych wyrażeniach. Zapis pierwszy (preinkrementacja) nie jest jedynym sposobem na zwiększenie wartości zmiennej, chociaż w wielu sytuacjach jest preferowany ze względu na efektywność.

Pytanie 37

Jak nazywa się wzorzec projektowy, do którego odnosi się ta definicja?

Wzorzec projektowy należący do grupy wzorców strukturalnych. Służy do ujednolicenia dostępu do złożonego systemu poprzez wystawienie uproszczonego, uporządkowanego interfejsu programistycznego, który ułatwia jego użycie.
Źródło Wikipedia. Wolna encyklopedia
A. Prototyp
B. Dekorator
C. Fasada
D. Kompozyt
Wzorzec projektowy Fasada jest jednym z kluczowych wzorców strukturalnych używanych w inżynierii oprogramowania. Jego głównym celem jest uproszczenie i ujednolicenie interakcji z złożonym systemem poprzez wystawienie uproszczonego i uporządkowanego interfejsu programistycznego. Fasada ukrywa złożoność systemu, zapewniając jednolity punkt dostępu do zestawu funkcji lub klas. W praktyce fasada jest używana do tworzenia prostych interfejsów dla bardziej złożonych bibliotek lub systemów, co ułatwia ich użycie przez programistów. Na przykład w systemie bankowym fasada może zintegrować różne usługi jak autoryzacja płatności, zarządzanie kontami i generowanie wyciągów, oferując jeden interfejs do ich obsługi. Fasada wspiera dobre praktyki poprzez promowanie niskiej zależności i wysokiej spójności. Zmiany w wewnętrznym działaniu systemu są mniej widoczne na zewnątrz, co zwiększa elastyczność systemu. Fasada jest zgodna z zasadą projektowania SOLID, zwłaszcza z zasadą pojedynczej odpowiedzialności, umożliwiając lepsze zarządzanie kodem i jego utrzymanie. Jej użycie jest powszechne w systemach złożonych, gdzie upraszczanie interfejsów jest kluczowe dla efektywności programistycznej i skalowalności systemu.

Pytanie 38

Co to jest PWA (Progressive Web App)?

A. System zarządzania treścią dla stron internetowych
B. Biblioteka graficzna do tworzenia animacji
C. Aplikacja webowa działająca jak natywna aplikacja mobilna
D. Framework do tworzenia aplikacji mobilnych
Progressive Web App (PWA) to aplikacja webowa, która łączy cechy stron internetowych i natywnych aplikacji mobilnych, oferując użytkownikom lepsze doświadczenia dzięki technologii webowej. PWA wykorzystują zaawansowane funkcje przeglądarek, takie jak Service Workers, aby zapewnić offline'ową funkcjonalność, powiadomienia push i lepsze zarządzanie pamięcią podręczną. Dzięki temu użytkownicy mogą korzystać z aplikacji niezależnie od jakości połączenia internetowego. Przykłady PWA obejmują aplikacje takie jak Twitter Lite, które umożliwiają użytkownikom przeglądanie treści nawet przy słabym sygnale sieciowym, a także Facebook Lite, który jest zoptymalizowany pod kątem urządzeń o ograniczonych zasobach. Warto również wspomnieć o zastosowaniach PWA w e-commerce, gdzie użytkownicy mogą szybko dodawać produkty do koszyka i dokonywać zakupów bez konieczności ładowania pełnej aplikacji mobilnej. Te właściwości sprawiają, że PWA są zgodne z najlepszymi praktykami branżowymi, zapewniając użytkownikom dostęp do funkcji, które wcześniej były zarezerwowane tylko dla natywnych aplikacji.

Pytanie 39

Które z wymienionych stwierdzeń najtrafniej charakteryzuje WPF?

A. Framework umożliwiający zarządzanie urządzeniami IoT
B. Framework przeznaczony do budowy aplikacji internetowych
C. Framework przeznaczony do budowy aplikacji stacjonarnych w systemie Windows
D. Biblioteka do obróbki danych w Pythonie
No i tutaj jest mały błąd. Frameworki do aplikacji webowych, to na przykład Angular czy React, a WPF służy do aplikacji desktopowych. Jak mówimy o przetwarzaniu danych w Pythonie, to raczej wspominamy np. o NumPy czy Pandas, ale one nie mają nic wspólnego z interfejsami. Jeśli chodzi o IoT, to nie używamy WPF, bo on jest bardziej związany z Windows, a do sprzętu raczej sięga się po Arduino IDE czy PlatformIO.

Pytanie 40

Jaką instrukcję należy wykorzystać do poprawnej deklaracji zmiennej typu string w C++?

A. float name = "Jan"
B. bool name = "Jan"
C. string name = "Jan"
D. int name = "Jan"
Ta deklaracja 'string name = "Jan"' to naprawdę dobry sposób na zdefiniowanie zmiennej łańcuchowej w C++. Wiesz, 'string' to typ danych, 'name' to nazwa tej zmiennej, a 'Jan' to wartość, która jest jej przypisana. Typ 'string' jest częścią biblioteki <string> i daje nam wiele możliwości, gdy pracujemy z tekstem. Możemy łączyć, porównywać i modyfikować różne łańcuchy znaków bez większego problemu. To jest mega ważne w aplikacjach, które mają do czynienia z danymi tekstowymi, interfejsami użytkownika czy analizą danych, które wprowadzamy.