Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

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

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

Pytanie 2

W celu wdrożenia w aplikacji internetowej mechanizmu zbierania danych statystycznych na komputerach użytkowników, można użyć

A. sesje
B. formulacje
C. ciasteczka
D. buforowanie
Ciasteczka, czyli tzw. cookies, to naprawdę podstawowy, a zarazem bardzo skuteczny mechanizm wykorzystywany w aplikacjach internetowych właśnie do zbierania i przechowywania danych statystycznych na komputerach użytkowników. Przeglądarki obsługują je praktycznie od zawsze i każda strona, która chce śledzić zachowanie odwiedzających, korzysta z cookies – choćby do zapamiętywania wizyt, identyfikowania użytkowników czy przechowywania preferencji. Co istotne, ciasteczka działają po stronie klienta, więc idealnie nadają się do przechowywania niewielkich ilości informacji bez konieczności ciągłego odpytywania serwera. W praktyce branżowej cookies są fundamentem dla narzędzi analitycznych, takich jak Google Analytics – to właśnie tam są zapisywane unikalne identyfikatory użytkowników, sesji czy kanałów ruchu. Z mojego doświadczenia mogę dodać, że jeśli ktoś kiedyś chciałby zbudować własny system analityczny, to zacznie właśnie od ciasteczek, bo są łatwo dostępne przez JavaScript i bardzo dobrze wspierane przez standardy sieciowe (np. RFC 6265). Warto też pamiętać o kwestiach prywatności i RODO, bo dzisiaj strony muszą informować użytkowników o użyciu cookies. Niemniej, jeśli chodzi o mechanizm zbierania statystyk na komputerze użytkownika, to cookies są wręcz nie do zastąpienia.

Pytanie 3

Co to jest wskaźnik w języku C?

A. Funkcja do dynamicznej alokacji pamięci
B. Typ danych do zapisywania tekstów
C. Zmienna przechowująca adres pamięci
D. Zmienna przechowująca wartość logiczną
Zmienne przechowujące wartości logiczne to typ bool (np. true/false) i nie mają związku z wskaźnikami. Funkcje dynamicznie alokujące pamięć, takie jak malloc(), zwracają adresy, ale same nie są wskaźnikami. Typ danych do przechowywania tekstów w C to tablica znaków (char[]) lub wskaźnik do char, ale to nie to samo co wskaźnik w sensie ogólnym, który może wskazywać na dowolny typ danych.

Pytanie 4

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

A. dwie pętle funkcjonujące na co najmniej (n+1) elementach każda
B. jedna pętla operująca na 2n elementach oraz warunek
C. n-liczby warunków
D. dwie pętle działające na najwyżej n-elementach każda
Jedna pętla nie jest wystarczająca do zaimplementowania sortowania bąbelkowego, ponieważ proces porównywania i zamiany miejscami elementów wymaga wielokrotnego przechodzenia przez tablicę. Pętle działające na (n+1) elementach są błędnym założeniem – algorytm działa na n-elementowej tablicy, a każda iteracja zmniejsza liczbę elementów do porównania. Liczba warunków nie ma kluczowego znaczenia w sortowaniu bąbelkowym – najważniejsza jest struktura iteracyjna, która umożliwia porównywanie elementów w parach, aż do momentu pełnego posortowania tablicy.

Pytanie 5

Wynik dodawania liczb binarnych 1101 i 1001 to

A. 10110
B. 1001
C. 1110
D. 10111
Dodając liczby binarne 1101 i 1001, otrzymujemy wynik 10110. Wynika to z zasad dodawania bitów, gdzie sumujemy od prawej do lewej, pamiętając o przeniesieniu, gdy suma przekracza 1 (czyli tak jakby pojawia się „dwójka” w systemie dziesiętnym). Tutaj: 1+1=0 i przeniesienie 1, później 0+0+1=1, dalej 1+0=1, potem 1+1=0 i znowu przeniesienie 1, ostatni przeniesiony bit daje nam 1 na początku, więc cały wynik to 10110. Taki sposób sumowania jest podstawą działania procesorów – praktycznie w każdym sprzęcie elektronicznym obliczenia wykonują się właśnie binarnie. To nie tylko teoria – gdy programujesz mikrokontrolery albo pracujesz z układami cyfrowymi, te operacje to chleb powszedni. Moim zdaniem warto ogarnąć ten temat, bo dzięki temu łatwiej zrozumiesz działanie sumatorów w logice cyfrowej czy nawet podstawowe algorytmy komputerowe. W branży IT umiejętność szybkiego przeliczenia binarnego to raczej podstawa, szczególnie jak zabierasz się za elektronikę czy programowanie niskopoziomowe. Dla przykładu – większość protokołów sieciowych, maski IP itp. opiera się właśnie na operacjach binarnych, więc znajomość tego tematu zdecydowanie się przydaje. Poza tym, zgodnie z normami opisu algorytmów (np. IEEE), operacje na bitach są podstawową abstrakcją w projektowaniu sprzętu i oprogramowania.

Pytanie 6

Które z poniższych nie jest typem testu w programowaniu?

A. Testy jednostkowe
B. Testy end-to-end
C. Testy kompilacyjne
D. Testy integracyjne
Testy jednostkowe, testy integracyjne oraz testy end-to-end są fundamentalnymi typami testów w programowaniu, które mają na celu weryfikację różnych aspektów aplikacji. W przeciwieństwie do testów kompilacyjnych, które skupiają się na tym, czy kod może być skompilowany, testy jednostkowe weryfikują poprawność poszczególnych komponentów programu w izolacji. Umożliwiają one programistom szybkie wykrywanie błędów na wczesnym etapie cyklu życia oprogramowania. Testy integracyjne badają współdziałanie różnych modułów, co jest kluczowe dla zapewnienia, że system jako całość działa zgodnie z założeniami projektowymi. Z kolei testy end-to-end są najbardziej kompleksowe, ponieważ symulują rzeczywiste scenariusze użytkowników, co pozwala na ocenę, czy wszystkie elementy systemu współpracują w sposób zamierzony. Podczas gdy testy kompilacyjne są niezbędne w kontekście wstępnej kontroli jakości kodu, nie powinny być mylone z testami, które analizują funkcjonalność aplikacji. Typowe błędy myślowe, które prowadzą do pomyłek, obejmują mylenie etapu kompilacji z faktycznym testowaniem funkcjonalności. Zrozumienie różnicy między tymi pojęciami jest kluczowe dla efektywnego procesu developmentu oraz zapewnienia, że oprogramowanie spełnia zarówno wymagania techniczne, jak i biznesowe.

Pytanie 7

W językach C++ bądź C# termin virtual można wykorzystywać w kontekście

A. funkcji zaprzyjaźnionych
B. destruktorów
C. atrybutów klasy
D. metod klasy
W kontekście języków C++ i C# pojęcie 'virtual' jest często błędnie kojarzone z różnymi składnikami klasy, takimi jak atrybuty czy funkcje zaprzyjaźnione. Jednakże, w praktyce i zgodnie ze standardami tych języków, nie istnieje możliwość oznaczenia atrybutów klasy (czyli jej pól, zmiennych członkowskich) jako wirtualnych – nie ma to sensu, ponieważ dziedziczenie i polimorfizm dotyczą zachowania, czyli metod, a nie danych. Wiele osób myli też funkcje zaprzyjaźnione z metodami klas tylko dlatego, że mają dostęp do prywatnych członków, ale 'friend' w C++ służy tylko do udzielania dodatkowych uprawnień, a nie do realizacji polimorfizmu – nie można więc użyć 'virtual' w takim kontekście. Jeśli chodzi o destruktory, to temat jest trochę bardziej złożony. W C++ destruktory rzeczywiście mogą być wirtualne i często powinny być, jeśli klasa ma dziedziczyć, żeby poprawnie usuwać obiekty przez wskaźniki do klasy bazowej. Jednak w C# wszystkie destruktory są niejako „wirtualne” z definicji i nie używa się tam słowa kluczowego 'virtual' przy destruktorach, bo zarządzanie pamięcią działa inaczej. Niestety, to też bywa źródłem nieporozumień. Całe zamieszanie bierze się z nieintuicyjnych różnic między tymi dwoma językami oraz z mylenia składników klasy z ich zachowaniem. Z mojego doświadczenia wynika, że najczęstszy błąd polega na traktowaniu 'virtual' jako czegoś, co można dodać „gdziekolwiek”, podczas gdy de facto jest to narzędzie skierowane ściśle do deklarowania i nadpisywania metod (funkcji członkowskich) klasy. Jeśli nie zrozumie się tej różnicy, łatwo później wpaść w pułapkę pisania nieczytelnego i nieefektywnego kodu. Warto więc trzymać się dobrych praktyk i nie kombinować tam, gdzie nie jest to przewidziane przez specyfikację języka.

Pytanie 8

Co to jest Continuous Integration (CI)?

A. Praktyka automatycznego integrowania kodu w repozytorium wspólnym wraz z testami
B. Technika tworzenia aplikacji mobilnych w sposób przyrostowy
C. Protokół komunikacji między różnymi częściami aplikacji
D. Metoda ciągłego monitorowania wydajności aplikacji w produkcji
W kontekście rozwoju oprogramowania można spotkać się z różnymi praktykami i technologiami, które często mylone są z Continuous Integration. Jedną z takich praktyk jest technika tworzenia aplikacji mobilnych w sposób przyrostowy. To podejście polega na wprowadzaniu małych zmian w aplikacji, które są następnie rozwijane i testowane. Choć metoda przyrostowa może być korzystna, nie odnosi się bezpośrednio do idei CI, gdyż ta ostatnia koncentruje się na automatyzacji integracji kodu i jego testowania, a nie na samej metodzie rozwoju. Kolejnym nieporozumieniem jest metoda ciągłego monitorowania wydajności aplikacji w produkcji, która dotyczy zarządzania i optymalizacji działania aplikacji po jej wdrożeniu. CI jest procesem wcześniejszym, skupionym na kodzie, nie na jego działaniu w produkcji. Ostatnia odpowiedź, dotycząca protokołu komunikacji między różnymi częściami aplikacji, również nie ma związku z CI, ponieważ protokoły te służą do wymiany danych w systemie, a nie do integracji kodu. Zrozumienie tych różnic jest kluczowe, aby poprawnie identyfikować i stosować odpowiednie praktyki w inżynierii oprogramowania.

Pytanie 9

Który algorytm sortowania opiera się na metodzie "dziel i zwyciężaj"?

A. Sortowanie przez wstawianie
B. Sortowanie przez wybór
C. Sortowanie szybkie (QuickSort)
D. Sortowanie bąbelkowe
QuickSort to algorytm sortowania wykorzystujący podejście 'dziel i zwyciężaj', co oznacza, że dzieli tablicę na mniejsze części wokół elementu zwanego pivotem, a następnie rekurencyjnie sortuje każdą z tych części. Ta strategia pozwala na efektywne sortowanie dużych zbiorów danych w czasie O(n log n) w większości przypadków. Dziel i zwyciężaj to potężne narzędzie algorytmiczne, które znajduje zastosowanie w wielu innych algorytmach, takich jak Merge Sort i algorytmy wyszukiwania binarnego. QuickSort jest często używany w aplikacjach wymagających szybkiego przetwarzania dużych ilości danych.

Pytanie 10

Co to jest Docker?

A. Narzędzie do automatyzacji procesu tworzenia dokumentacji
B. Platforma do tworzenia, wdrażania i uruchamiania aplikacji w kontenerach
C. Framework JavaScript do tworzenia aplikacji mobilnych
D. System zarządzania bazami danych
Docker to platforma, która umożliwia tworzenie, wdrażanie i uruchamianie aplikacji w kontenerach. Kontenery to lekkie, przenośne jednostki, które zawierają wszystko, co potrzebne do uruchomienia aplikacji, w tym kod źródłowy, biblioteki i zależności. Dzięki Dockerowi programiści mogą łatwo tworzyć środowiska, które są zgodne z produkcją, co zmniejsza ryzyko błędów związanych z różnicami między tymi środowiskami. Przykładowo, jeśli tworzysz aplikację webową, możesz użyć Dockera do uruchomienia bazy danych w kontenerze, co pozwala na łatwe zarządzanie jej wersjami oraz konfiguracją. Docker staje się standardem w wielu firmach i projektach open source, ponieważ umożliwia szybsze wdrażanie aplikacji oraz automatyzację wielu procesów. Dzięki konteneryzacji można również łatwo skalować aplikacje, co jest niezwykle ważne w przypadku rosnącego ruchu użytkowników.

Pytanie 11

Co to jest Service Worker w kontekście Progressive Web Apps?

A. Protokół komunikacji między przeglądarką a serwerem
B. Usługa hostingowa dla aplikacji webowych
C. Skrypt działający w tle przeglądarki, niezależnie od strony webowej
D. Narzędzie do testowania wydajności aplikacji
Pojęcia związane z usługami hostingowymi, narzędziami do testowania wydajności oraz protokołami komunikacyjnymi są istotne w kontekście aplikacji webowych, ale nie mają bezpośredniego związku z tym, czym jest Service Worker. Usługa hostingowa dla aplikacji webowych zajmuje się udostępnianiem treści w Internecie, co jest zupełnie innym zagadnieniem. Aplikacje webowe mogą być hostowane na serwerach, ale to nie ma wpływu na sposób, w jaki działają one w przeglądarkach. Narzędzia do testowania wydajności są pomocne, ale nie są częścią samego procesu tworzenia aplikacji z użyciem Service Workera. Protokół komunikacji między przeglądarką a serwerem dotyczy wymiany danych, ale nie odnosi się do koncepcji działania skryptu w tle. Typowe błędy myślowe prowadzące do takich niepoprawnych wniosków to mylenie różnych aspektów technologii webowych i niezdolność do zrozumienia, jak elementy te współpracują w ekosystemie aplikacji. Aby lepiej zrozumieć Service Worker, warto przyjrzeć się jego roli w kontekście działania offline i poprawy doświadczeń użytkownika, co jest kluczowe dla nowoczesnych aplikacji webowych.

Pytanie 12

Jednym z rodzajów testów funkcjonalnych, które można przeprowadzić na aplikacji webowej, jest ocena

A. poziomu optymalizacji kodu aplikacji
B. poprawności wyświetlanych elementów aplikacji
C. wydajności aplikacji
D. bezpieczeństwa aplikacji
Testy funkcjonalne w aplikacji webowej są super ważne, bo sprawdzają, czy wszystko działa jak należy. Mówiąc prościej, chodzi o to, żeby zobaczyć, czy wszystkie elementy na stronie są wyświetlane prawidłowo, jak przyciski i formularze. To też dotyczy tego, jak użytkownicy wchodzą w interakcję z różnymi częściami strony. Moim zdaniem, dobrze przeprowadzone testy mogą naprawdę poprawić doświadczenie użytkownika.

Pytanie 13

Którą funkcję w C++ można zastosować do dynamicznego przydzielania pamięci dla tablicy?

A. delete[]
B. sizeof()
C. malloc()
D. free()
Funkcja 'malloc()' w języku C i C++ służy do dynamicznego alokowania pamięci dla tablic i innych struktur danych. Jest to kluczowa funkcja pozwalająca na przydzielenie określonej ilości bajtów w czasie wykonywania programu, co zwiększa elastyczność zarządzania pamięcią. Używając 'malloc()', programista może utworzyć tablicę o zmiennym rozmiarze, który nie musi być znany w czasie kompilacji. Dynamiczne alokowanie pamięci jest powszechnie stosowane w aplikacjach wymagających dużych ilości danych lub wtedy, gdy konieczne jest efektywne wykorzystanie zasobów systemowych.

Pytanie 14

Jaki rodzaj ataku hakerskiego polega na bombardowaniu serwera ogromną ilością żądań, co prowadzi do jego przeciążenia?

A. Phishing
B. DDoS
C. Man-in-the-Middle
D. SQL Injection
Atak DDoS (Distributed Denial of Service) polega na zasypywaniu serwera dużą ilością zapytań, co prowadzi do jego przeciążenia i unieruchomienia. W tym rodzaju ataku, hakerzy wykorzystują sieć skompromitowanych komputerów, znanych jako botnety, aby wysłać ogromne ilości nieautoryzowanych żądań do docelowego serwera w krótkim czasie. Celem DDoS jest spowodowanie, że serwer nie jest w stanie odpowiedzieć na prawidłowe zapytania od autentycznych użytkowników, co skutkuje awarią usługi. Przykłady ataków DDoS obejmują SYN Flood, UDP Flood oraz HTTP Flood, gdzie każdy z tych typów wykorzystuje różne protokoły i metody do zablokowania normalnego ruchu. Standardy takie jak RFC 793 definiują protokół TCP, który może być narażony na ataki SYN Flood. Ważne jest, aby organizacje stosowały odpowiednie środki zabezpieczające, takie jak systemy detekcji intruzów (IDS), firewalle, oraz usługi ochrony DDoS, aby minimalizować ryzyko i skutki tych ataków.

Pytanie 15

Jakie środowisko jest przeznaczone do tworzenia aplikacji mobilnych dla urządzeń Apple, wykorzystujące różne języki programowania, takie jak Java i Objective C?

A. React Native
B. XCode
C. Android Studio
D. NetBeans
XCode to środowisko, które faktycznie jest fundamentem tworzenia aplikacji na urządzenia Apple, czyli iPhone’y, iPady czy nawet MacBooki. Apple od lat inwestuje w rozwój XCode i właśnie tam programiści mogą budować zarówno aplikacje natywne, jak i np. gry – i to z wykorzystaniem różnych języków, takich jak Objective-C i Swift. Co ciekawe, dawniej używano też Objective-C prawie wyłącznie, ale od kilku lat Apple promuje Swift, bo jest nowocześniejszy i dużo przyjemniej się w nim pisze. Moim zdaniem XCode to taki niezbędnik – bez niego praktycznie nie da się pisać porządnych aplikacji na iOS czy macOS. Samo środowisko jest zintegrowane ze wszystkimi narzędziami Apple: symulatorem urządzeń, Interface Builderem do projektowania graficznego oraz narzędziami do debugowania i testowania. Z mojego doświadczenia, jak ktoś zaczyna przygodę z aplikacjami mobilnymi dla Apple, to właśnie XCode jest pierwszym programem, z którym spędzi dużo czasu. I trochę ułatwia życie, bo automatycznie konfiguruje projekty pod standardy Apple, nie trzeba nic ręcznie ustawiać. To też świetne miejsce do nauki, bo dokumentacja jest wprost wbudowana w środowisko. Co ważne, XCode jest wymagany, żeby wrzucić gotową aplikację do App Store – tak jest po prostu zrobiony ekosystem Apple i żadna alternatywa nie daje tyle integracji i wsparcia dla natywnych rozwiązań Apple.

Pytanie 16

Co to jest algorytm QuickSort?

A. Technika przeszukiwania grafu wszerz
B. Algorytm wyszukiwania binarnego w posortowanej tablicy
C. Metoda kompresji danych bez strat
D. Wydajny algorytm sortowania oparty na strategii 'dziel i zwyciężaj'
Algorytm QuickSort to jeden z najbardziej popularnych i efektywnych algorytmów sortowania, który opiera się na strategii 'dziel i zwyciężaj'. W praktyce działa w ten sposób, że wybiera element zwany pivotem (osią) i dzieli zbiór na dwie części: jeden z elementami mniejszymi od pivota, a drugi z elementami większymi. Następnie rekurencyjnie sortuje te podzbiory. QuickSort jest niezwykle szybki i wydajny, zwłaszcza dla dużych zbiorów danych, a jego średnia złożoność czasowa wynosi O(n log n). Używa się go w wielu aplikacjach, gdzie istotne jest szybkie przetwarzanie danych, takich jak sortowanie list w aplikacjach webowych czy organizacja danych w bazach. Warto jednak pamiętać, że w najgorszym przypadku, gdy pivot jest źle wybierany, złożoność może wynosić O(n^2), co występuje na przykład w przypadku już posortowanej tablicy. W kontekście praktycznym, dobre praktyki obejmują dobór odpowiedniej metody wyboru pivota, co może znacznie poprawić wydajność algorytmu.

Pytanie 17

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. zmiany w polu tekstowym
B. wybór daty
C. zmiany stanu kontrolki Switch
D. naciśnięcia przycisku
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 18

Jaki typ testów ocenia funkcjonalność aplikacji z punktu widzenia użytkownika końcowego?

A. Testy obciążeniowe
B. Testy funkcjonalne
C. Testy użyteczności
D. Testy zgodności
Testy obciążeniowe skupiają się na sprawdzaniu, jak aplikacja działa pod dużym ruchem lub obciążeniem, co pozwala ocenić jej wydajność, ale nie dotyczy to bezpośrednio doświadczeń użytkownika. Testy funkcjonalne mają na celu sprawdzenie, czy poszczególne funkcje aplikacji działają zgodnie z założeniami, ale nie badają wygody użytkowania. Testy zgodności natomiast weryfikują, czy aplikacja spełnia określone normy i standardy, co ma niewiele wspólnego z oceną użyteczności aplikacji przez użytkownika końcowego.

Pytanie 19

Który z poniższych aspektów najdokładniej określa cel realizacji projektu?

A. Zidentyfikowanie technologii, które mogą być zastosowane
B. Stworzenie harmonogramu działań
C. Określenie problemu i metody jego rozwiązania
D. Ocena postępów w czasie realizacji projektu
Określenie problemu i sposobu jego rozwiązania to fundamentalny cel każdego projektu. Bez jasno zdefiniowanego problemu i sprecyzowanej metody jego rozwiązania, projekt może stać się chaotyczny i nieefektywny. Precyzyjna analiza problemu pozwala na wyznaczenie celów, które prowadzą do stworzenia wartościowego produktu lub usługi. Dzięki temu zespół może skupić się na kluczowych zadaniach i efektywnie zarządzać zasobami. Określenie problemu to pierwszy krok w metodykach Agile i Waterfall, który warunkuje sukces całego przedsięwzięcia.

Pytanie 20

W jakiej fazie cyklu życia projektu informatycznego następuje integracja oraz testowanie wszystkich modułów systemu?

A. Faza analizy
B. Etap planowania
C. Faza wdrożenia
D. Etap implementacji
Faza implementacji to etap cyklu życia projektu informatycznego, w którym następuje integracja i testowanie wszystkich modułów systemu. Po zakończeniu fazy projektowania i programowania, elementy aplikacji są łączone w jeden spójny system. Integracja polega na połączeniu komponentów, co umożliwia sprawdzenie ich współpracy oraz poprawności przepływu danych. Następnie przeprowadzane są testy integracyjne i systemowe, których celem jest wykrycie błędów w interakcji między modułami. Proces ten jest niezbędny, aby zapewnić stabilność aplikacji przed wdrożeniem do środowiska produkcyjnego. Skuteczna integracja minimalizuje ryzyko awarii i zwiększa niezawodność systemu.

Pytanie 21

Na jakim etapie cyklu życia projektu tworzony jest szczegółowy opis wymagań funkcjonalnych oraz niefunkcjonalnych?

A. Analiza
B. Weryfikacja
C. Planowanie
D. Wdrożenie
Etap analizy to kluczowy moment w cyklu życia projektu, gdy powstaje szczegółowy opis wymagań funkcjonalnych i niefunkcjonalnych. W praktyce, właśnie wtedy zbierane są wszelkie informacje od interesariuszy – klient opowiada, czego oczekuje, a zespół projektowy zadaje mnóstwo pytań, by naprawdę zrozumieć potrzeby. Moim zdaniem to najważniejsza faza, bo jeśli coś pójdzie nie tak na tym etapie, to cała reszta projektu może się sypnąć. Analiza wymagań to nie tylko spisanie kilku zdań – tu trzeba dokładnie określić, co system ma robić (czyli funkcjonalności, np. użytkownik może dodać produkt do koszyka), oraz jakie ma mieć cechy pozafunkcjonalne, jak wydajność czy bezpieczeństwo. Dobre praktyki, jak np. BABOK czy normy ISO/IEC 29148, podkreślają, że precyzyjna analiza wymagań pozwala uniknąć kosztownych poprawek na późniejszych etapach. W rzeczywistych projektach IT korzysta się często z narzędzi typu diagramy przypadków użycia, user stories albo specyfikacje wymagań – wszystko po to, żeby nie było niejasności. Uczciwie powiem, że im więcej czasu i uwagi poświęci się na analizę, tym mniej niespodzianek pojawi się dalej. Warto to mieć na uwadze.

Pytanie 22

Które z poniższych stwierdzeń najlepiej charakteryzuje tablicę asocjacyjną?

A. Tablica przechowująca dane w formie par klucz-wartość
B. Tablica, która przechowuje wartości, do których można uzyskać dostęp tylko za pomocą indeksów numerycznych
C. Tablica, która przechowuje wyłącznie dane tekstowe
D. Tablica, która zmienia swoje wymiary w trakcie działania programu
A więc zwykła tablica działa na zasadzie numerów, nie ma kluczy tekstowych, więc nie ma mowy o parach klucz-wartość. Co prawda, tablice dynamiczne potrafią zmieniać rozmiar, ale mimo to, nie dadzą rady zorganizować danych w taki sposób. Tekst czy inne typy danych w tablicach są po prostu przechowywane jak inne. Kluczowa różnica jest taka, że tablice asocjacyjne pozwalają na użycie kluczy, co czyni je bardziej elastycznymi. Trochę się zgubiłeś w tym wszystkim.

Pytanie 23

Podaj przykład incydentu w miejscu pracy?

A. złamanie nogi w trakcie urlopu wypoczynkowego przyznanego przez pracodawcę
B. kontuzja stawu skokowego, która zdarzyła się w trakcie bezpośredniej drogi do miejsca zatrudnienia
C. oparzenie dłoni, które miało miejsce podczas nieobowiązkowego szkolenia w czasie prywatnym pracownika
D. złe samopoczucie spowodowane przewlekłą chorobą zatrudnionego, które wystąpiło w biurze
To właśnie sytuacja, gdy ktoś doznał kontuzji stawu skokowego podczas bezpośredniej drogi do pracy, jest klasycznym przykładem incydentu związanego z pracą, a konkretnie tzw. wypadku w drodze do pracy. Zgodnie z przepisami BHP oraz praktyką ubezpieczeniową, za incydent w miejscu pracy uznaje się nie tylko zdarzenia mające miejsce na terenie zakładu, ale także te występujące w drodze do lub z pracy – oczywiście pod warunkiem, że droga była bezpośrednia i nieprzerwana, bez załatwiania spraw prywatnych po drodze. Moim zdaniem ta kwestia jest często niedoceniana przez pracowników – wielu z nas zapomina, że wypadek w drodze do pracy daje podobne uprawnienia jak wypadek w zakładzie pracy, oczywiście po spełnieniu określonych wymogów formalnych, np. zgłoszenie incydentu pracodawcy, udokumentowanie miejsca i czasu zdarzenia. W praktyce wielu pracodawców i pracowników nie do końca rozumie, jakie sytuacje faktycznie podlegają pod te przepisy. Na przykład, jeśli ktoś skręcił nogę idąc prosto z domu do pracy i nie zatrzymywał się po drodze, to ten incydent kwalifikuje się jako wypadek w drodze do pracy. Warto znać te zasady, żeby nie przegapić swoich praw. Branżowe standardy, takie jak wytyczne PIP i ubezpieczycieli, jasno wskazują na obowiązek rejestrowania i analizowania takich zdarzeń, bo z punktu widzenia bezpieczeństwa pracy każde takie zdarzenie jest sygnałem do poprawy szeroko rozumianych warunków pracy, nawet jeśli zdarzy się poza samym biurem czy halą.

Pytanie 24

Polecenia wydane w kontekście repozytorium Git, przy założeniu, że folder projektu jest aktualnie wybrany, mają na celu

git init
git add .
git commit -m 'first commit'
A. rozpoczęcie pracy z nowym repozytorium, dodanie oraz zatwierdzenie kodu projektu jako first commit
B. rozpoczęcie sesji z już istniejącym repozytorium oraz pobranie kodu projektu do lokalnego folderu
C. zamknięcie projektu, co spowoduje zarchiwizowanie wszystkich rewizji do lokalnego archiwum pod nazwą first commit
D. utworzenie kopii istniejącego repozytorium z jedynie tą rewizją, która zostanie zapisana pod nazwą first commit
Polecenia git init git add . oraz git commit -m 'first commit' są podstawowymi komendami do rozpoczęcia pracy z nowym repozytorium Gita. git init inicjalizuje puste repozytorium w aktualnym katalogu co tworzy podkatalog .git zawierający wszystkie metadane i historię w wersjonowania. Następnie git add . dodaje wszystkie nowe i zmodyfikowane pliki w bieżącym katalogu do indeksu co oznacza że są one gotowe do zatwierdzenia w repozytorium. Kolejne polecenie git commit -m 'first commit' tworzy pierwszy snapshot aktualnego stanu projektu z przypisaną wiadomością 'first commit' co jest dobrą praktyką sygnalizującą początek nowej historii projektu. Taki proces inicjacji jest standardem w zarządzaniu wersjami w branży IT umożliwiając śledzenie zmian w kodzie ułatwiając współpracę zespołową oraz zapewniając kontrolę nad rozwojem oprogramowania. Ważne jest by w pierwszym commicie umieścić podstawowe działające elementy projektu co stanowi solidną bazę do dalszego rozwoju.

Pytanie 25

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

A. 98 FE 98
B. A0 FE A0
C. 98 FB 98
D. A0 FB A0
Wybór nieprawidłowego kodu szesnastkowego dla koloru RGB(152, 251, 152) najczęściej wynika z niepełnego zrozumienia konwersji wartości dziesiętnych RGB na ich odpowiedniki w systemie szesnastkowym. W odpowiedziach pojawiły się kody takie jak A0 FB A0, A0 FE A0 czy 98 FE 98, które świadczą o błędnym przeliczaniu przynajmniej jednej składowej. Problem zwykle pojawia się podczas przekładania wartości dziesiętnych (w zakresie 0-255) na szesnastkowe – tutaj największy błąd robi się przy zamianie wartości 152 oraz 251. W wielu przypadkach, przez nieuwagę, ktoś potrafi zamienić 152 na A0, ale to jest 160 w dziesiętnym, a nie 152. Podobnie, 251 nie daje FE (bo FE to 254!), tylko FB. W mojej praktyce często widzę, że takie pomyłki biorą się albo z korzystania z nieprecyzyjnych kalkulatorów online, albo z pośpiechu. Często też myli się kolejność bajtów albo nie zwraca uwagi na to, czy wartości są z zakresu RGB, czy może np. RGBA, co wprowadza dodatkowe zamieszanie. Trzeba pamiętać, że każdy kolor w modelu RGB składa się z trzech osobnych wartości, które muszą być niezależnie przeliczone na szesnastki i dopiero wtedy składane w końcowy kod HEX. Z mojego doświadczenia, błędy tego typu mogą prowadzić do zupełnie innych efektów wizualnych w gotowym projekcie – niby kolor podobny, ale jednak coś nie gra, szczególnie przy projektowaniu interfejsów czy layoutów stron internetowych. Branżowe standardy, takie jak te opisane przez W3C i w dokumentacjach narzędzi Adobe lub GIMP, zawsze zalecają dokładność i niepoleganie wyłącznie na automatycznych konwerterach w tego typu zadaniach. Najlepiej zawsze przeliczyć sobie ręcznie lub używać sprawdzonych narzędzi, wtedy mamy pewność, że odwzorowanie koloru będzie zgodne ze specyfikacją. Takie drobiazgi potrafią realnie wpłynąć na odbiór strony czy aplikacji, więc warto ćwiczyć te konwersje i mieć świadomość, gdzie można popełnić błąd.

Pytanie 26

Jakie z wymienionych narzędzi pozwala na jednoczesne korzystanie z systemów BIN, DEC i HEX?

A. Przeglądarka grafów
B. Kalkulator systemowy
C. Microsoft Word
D. GIMP
Kalkulator systemowy to narzędzie, które umożliwia użytkownikom pracę z różnymi systemami liczbowymi, takimi jak system dziesiętny (DEC), binarny (BIN) oraz szesnastkowy (HEX). Jego funkcjonalność pozwala na konwersję wartości liczbowych pomiędzy tymi systemami, co jest niezwykle przydatne w kontekście programowania, inżynierii komputerowej oraz nauk przyrodniczych. Dzięki kalkulatorowi systemowemu, użytkownicy mogą wprowadzać liczby w jednym systemie, a następnie uzyskiwać ich odpowiedniki w pozostałych systemach, co znacznie ułatwia analizę danych. Na przykład, wpisując liczbę w systemie binarnym, można natychmiast zobaczyć jej reprezentację w systemie dziesiętnym i szesnastkowym, co jest kluczowe w zadaniach związanych z konwersją kodów czy obliczeniami w architekturze komputerowej. Ponadto, kalkulatory systemowe często zawierają funkcje umożliwiające przeprowadzanie bardziej skomplikowanych operacji, takich jak dodawanie czy odejmowanie w różnych systemach liczbowych, co czyni je nieocenionym narzędziem w programowaniu i obliczeniach naukowych. Narzędzia te są zgodne z powszechnie przyjętymi standardami, takimi jak IEEE 754 dla reprezentacji liczb zmiennoprzecinkowych, co zapewnia ich wysoką dokładność i niezawodność w obliczeniach.

Pytanie 27

Jakie działanie związane z klasą abstrakcyjną jest niedozwolone?

A. Rozszerzanie tej klasy
B. Określenie metody wirtualnej
C. Definiowanie pól publicznych
D. Utworzenie instancji tej klasy
Deklaracja pól publicznych w klasie abstrakcyjnej jest całkowicie dozwolona i może być używana do udostępniania danych w klasach pochodnych. Wprowadzenie pól publicznych w klasie abstrakcyjnej pozwala na określenie podstawowych atrybutów, które będą współdzielone przez wszystkie klasy dziedziczące. Może to być przydatne w kontekście encapsulacji i zarządzania danymi w aplikacjach. Deklaracja metody wirtualnej również jest prawidłowa, gdyż klasy abstrakcyjne mogą zawierać metody, które są zdefiniowane jako wirtualne, co umożliwia ich nadpisywanie w klasach pochodnych. Dzięki temu, programiści mogą budować bardziej elastyczne i modułowe aplikacje. Dziedziczenie po klasie abstrakcyjnej jest podstawowym stosowaniem tego typu klas, gdyż pozwala na tworzenie hierarchii, w której klasy pochodne muszą implementować abstrakcyjne metody zdefiniowane w klasie bazowej. Dziedziczenie wspiera ponadto zasady programowania obiektowego, takie jak ponowne wykorzystanie kodu i polimorfizm, co czyni je kluczowym elementem nowoczesnego programowania.

Pytanie 28

Jakie zadanie wykonuje debugger?

A. Umożliwianie analizy działania programu krok po kroku
B. Generowanie pliku wykonywalnego programu
C. Identyfikowanie błędów składniowych podczas kompilacji
D. Przekładanie kodu źródłowego na język maszynowy
Tłumaczenie kodu źródłowego na język maszynowy to zadanie kompilatora, a nie debuggera. Wykrywanie błędów składniowych odbywa się podczas procesu kompilacji lub analizy statycznej, ale debugger zajmuje się błędami występującymi w trakcie wykonywania programu. Tworzenie pliku wykonywalnego jest funkcją kompilatora, nie debuggera. Debugger nie generuje kodu – jego zadaniem jest monitorowanie i analizowanie kodu, który już został skompilowany lub interpretowany.

Pytanie 29

Co to jest lazy loading w kontekście aplikacji webowych?

A. Metoda kompresji obrazów na stronach internetowych
B. Strategia optymalizacji, która opóźnia ładowanie zasobów do momentu, gdy są faktycznie potrzebne
C. Technika przechowywania danych w pamięci podręcznej przeglądarki
D. Narzędzie do testowania wydajności ładowania strony
Lazy loading to technika optymalizacji wydajności, która polega na opóźnieniu ładowania zasobów, takich jak obrazy, filmy czy skrypty, do momentu, gdy są one rzeczywiście potrzebne. Dzięki temu zwiększa się szybkość ładowania strony, co jest szczególnie ważne w kontekście doświadczeń użytkowników i SEO. Przykładem zastosowania lazy loading może być strona z długą listą produktów, gdzie obrazy dla produktów znajdujących się poza ekranem są ładowane dopiero, gdy użytkownik przewinie stronę w dół. Praktyka ta nie tylko poprawia czas reakcji strony, lecz także redukuje zużycie pasma, co jest korzystne dla użytkowników na urządzeniach mobilnych. Stosując lazy loading, warto pamiętać o dobrych praktykach, takich jak użycie odpowiednich bibliotek JavaScript, które wspierają tę technikę, oraz zapewnienie odpowiednich fallbacków dla starszych przeglądarek. Wprowadzenie lazy loading jest zgodne z zaleceniami optymalizacji wydajności publikowanymi przez Google, które podkreślają znaczenie ładowania tylko niezbędnych zasobów i poprawę UX.

Pytanie 30

Jakie funkcje realizuje polecenie "git clone"?

A. Rejestruje zmiany w historii repozytorium
B. Łączy dwa branche w repozytorium
C. Usuwa zdalne repozytorium
D. Tworzy lokalną kopię już istniejącego repozytorium
Polecenie "git clone" to w zasadzie jedna z pierwszych rzeczy, które poznaje się na początku pracy z Gitem. Służy ono do skopiowania całego istniejącego repozytorium – czyli pobiera zarówno wszystkie pliki, jak i całą historię commitów. To jest ogromnie przydatne, bo nie tylko masz najnowszy kod, ale od razu całą historię zmian, branche, tagi i inne rzeczy. Standardowo używa się tego polecenia, kiedy chcesz zacząć pracę nad projektem, który jest już na jakimś zdalnym serwerze (np. Githubie albo GitLabie). W praktyce wygląda to tak, że podajesz adres repozytorium, wpisujesz "git clone https://adres.repo.git" i po kilku chwilach masz pełną kopię projektu u siebie na dysku. Co ciekawe, narzędzie od razu ustawia Ci zdalne połączenie do pierwotnego repozytorium jako "origin", więc potem możesz spokojnie wykonywać polecenia typu git fetch, git pull czy git push. Moim zdaniem to super wygodne, bo cała struktura repozytorium, nawet z podfolderami czy nietypowymi ustawieniami, zostaje zachowana. Warto pamiętać, że git clone to nie tylko kopiowanie plików – to pobieranie całej bazy danych Git, więc masz możliwość cofania się w historii czy przeglądania wszystkich commitów lokalnie i offline. Z mojego doświadczenia: często nowi użytkownicy nie doceniają jeszcze, jak ważne jest to, żeby zawsze pracować na pełnej kopii, a nie wycinku repo. To podstawa bezpiecznej i efektywnej pracy zespołowej.

Pytanie 31

Jak określa się proces, w trakcie którego klasa przejmuje właściwości innej klasy w programowaniu obiektowym?

A. Polimorfizm
B. Abstrakcja
C. Dziedziczenie
D. Hermetyzacja
Dziedziczenie to kluczowa cecha programowania obiektowego (OOP), która pozwala jednej klasie (klasie pochodnej) przejmować cechy i zachowania innej klasy (klasy bazowej). Dzięki dziedziczeniu można wielokrotnie wykorzystywać kod, co prowadzi do większej modularności i zmniejszenia redundancji. Dziedziczenie umożliwia rozszerzanie funkcjonalności klas bazowych poprzez dodawanie nowych metod lub modyfikowanie istniejących, bez konieczności ingerencji w oryginalny kod. Przykład w C++: `class Pojazd { ... }; class Samochod : public Pojazd { ... };` – `Samochod` dziedziczy wszystkie publiczne i chronione (protected) elementy klasy `Pojazd`.

Pytanie 32

Zaznaczone elementy w przedstawionych obramowaniach mają na celu:
Fragment kodu w WPF/XAML:

<Windows Title="Tekst"...>
Fragment kodu w Java:
public class Okno extends JFrame {
    ...
    public Okno() {
        super();
        this.setTitle("Tekst");
    }
    ...
A. uzyskanie nazwy obiektu obrazującego okno aplikacji
B. przypisanie nazwy obiektu obrazującego okno aplikacji
C. ustawienie tytułu okna na "Tekst"
D. zapisanie tytułu okna do obiektu Tekst
Wybrana odpowiedź dokładnie oddaje sens działania kodu zarówno w WPF/XAML, jak i w Javie z użyciem JFrame. W jednym i drugim przypadku chodzi o ustawienie tytułu okna aplikacji, czyli tego tekstu, który pojawia się na pasku tytułowym okienka po uruchomieniu programu. Z mojego doświadczenia, jest to jedna z pierwszych rzeczy, jakie użytkownicy widzą w każdej aplikacji okienkowej, więc warto pamiętać, jak ją ustawić. W WPF właściwość Title w tagu Window służy właśnie do wyświetlenia krótkiego opisu albo nazwy programu. Z kolei w Javie metoda setTitle pozwala dynamicznie przypisywać tekst, co jest bardzo przydatne przy pisaniu aplikacji z wieloma oknami albo zmieniającym się stanem (np. można dodać tam nazwę pliku, z którym pracujemy). Branżowe standardy zachęcają do tego, żeby tytuły okien były krótkie, jednoznaczne i faktycznie informowały użytkownika o funkcji aktualnego widoku. Co ciekawe, w niektórych frameworkach można nawet dodać ikonę do tego paska tytułowego. Samo ustawienie tytułu nie zmienia żadnych właściwości obiektu aplikacji poza tym, jak jest widoczny dla użytkownika. To mały detal, ale bardzo ważny w codziennej pracy programisty interfejsów graficznych.

Pytanie 33

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

A. Umożliwia skrócenie kodu przez eliminację wszelkich komentarzy
B. Gwarantuje automatyczną kompilację programu
C. Ułatwia proces debugowania oraz ponowne wykorzystanie fragmentów kodu
D. Eliminuje potrzebę korzystania ze zmiennych globalnych
Dzielenie programu na funkcje (lub metody) jest jedną z kluczowych zasad programowania strukturalnego i obiektowego. Funkcje pozwalają na podzielenie dużych bloków kodu na mniejsze, łatwiejsze do zarządzania i ponownego wykorzystania fragmenty. Dzięki temu kod jest bardziej czytelny, zrozumiały i łatwiejszy do testowania. Ułatwia to także proces debugowania, ponieważ błędy można izolować w konkretnych funkcjach, zamiast przeszukiwać cały program. Ponadto funkcje umożliwiają wielokrotne używanie tego samego fragmentu kodu, co zwiększa efektywność i eliminuje konieczność powielania kodu, zmniejszając ryzyko błędów.

Pytanie 34

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

A. POST
B. CONNECT
C. PATCH
D. GET
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 35

Który z wymienionych składników wchodzi w skład podstawowego wyposażenia środowiska IDE?

A. Kompilator, serwer webowy, system kontroli wersji
B. Kompilator, edytor kodu, debugger
C. Edytor tekstowy, przeglądarka internetowa, translator
D. Edytor graficzny, przeglądarka kodu, narzędzia analityczne
Edytor tekstowy, przeglądarka internetowa i translator nie są integralnymi komponentami środowiska IDE. Chociaż edytor tekstowy może być używany do pisania kodu, brakuje mu zaawansowanych funkcji dostępnych w edytorach IDE, takich jak podpowiedzi składniowe, automatyczne uzupełnianie kodu czy narzędzia do debugowania. Kompilator, serwer webowy i system kontroli wersji są ważne w środowisku webowym, ale nie wszystkie aplikacje desktopowe wymagają serwera webowego. Edytor graficzny i narzędzia analityczne mogą wspierać rozwój interfejsu, ale nie są to podstawowe narzędzia każdego IDE.

Pytanie 36

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

A. Wyłącznie w zewnętrznych bazach danych
B. Za pomocą plików SharedPreferences
C. Tylko w pamięci RAM
D. W rejestrze systemu
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 37

Przeprowadzając analizę kodu interfejsu graficznego napisanego w języku XAML, można zauważyć, że:

<StackLayout Orientation="Vertical">
  <Label Text="Fotograf" />
  <Image Source="obraz.jpg" Aspect="AspectFill" />
  <StackLayout Orientation="Horizontal">
    <Button Text="Like" />
    <Button Text="Share" />
  </StackLayout>
  <Label Text="Fotka z moich wakacji" />
</StackLayout>
A. tekst "Fotograf" znajduje się po prawej stronie obrazu
B. obraz znajduje się po lewej stronie, a pozostałe elementy po prawej
C. elementy: tekst, obraz, przycisk Like, przycisk Share, tekst są ułożone jeden pod drugim
D. przyciski są ustawione poziomo obok siebie
W analizowanym kodzie XAML widzimy, że element <StackLayout> z atrybutem Orientation="Horizontal" zawiera przyciski <Button> z tekstami "Like" i "Share". W XAML, stosując stack layout z orientacją poziomą, elementy w nim zawarte są umieszczane obok siebie w rzędzie. To sprawia, że przyciski "Like" i "Share" są widoczne na interfejsie użytkownika ułożone poziomo, zgodnie z tym, co jest opisane w poprawnej odpowiedzi. Użycie StackLayout z orientacją poziomą to często spotykana praktyka w projektowaniu interfejsów, gdy chcemy zorganizować elementy w rzędzie, na przykład przyciski na pasku narzędzi. Zrozumienie tego mechanizmu jest istotne, ponieważ pozwala na efektywne zarządzanie przestrzenią w aplikacjach mobilnych i webowych, gdzie dostępne miejsce może być ograniczone. Praktyczne zastosowanie takiego układu można zobaczyć na przykład w projektowaniu formularzy, gdzie grupujemy elementy w logiczny sposób, ułatwiając użytkownikowi interakcję z aplikacją. Dobre praktyki w projektowaniu interfejsów użytkownika zalecają, aby układ elementów był intuicyjny i zgodny z oczekiwaniami użytkowników, co StackLayout z orientacją poziomą doskonale realizuje w wielu przypadkach.

Pytanie 38

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

A. Model wodospadowy (waterfall)
B. Model prototypowy
C. Model spiralny
D. Metodyki zwinne (Agile)
Model kaskadowy, znany też jako waterfall, jest trochę inny. Działa sekwencyjnie, więc każda faza projektu musi się skończyć, zanim zaczniemy następną – nie ma tu miejsca na iteracje. Z kolei model prototypowy polega na tworzeniu próbnych wersji aplikacji, ale też nie skupia się na iteracyjnym dostarczaniu funkcjonalności. A model spiralny łączy w sobie aspekty prototypowania i podejścia kaskadowego, przy czym iteracje są długie i bardziej cykliczne, a nie krótkie i dynamiczne, jak w Agile.

Pytanie 39

Która z wymienionych zasad jest istotna dla bezpiecznego użytkowania portali społecznościowych?

A. Unikanie stosowania silnych haseł do konta
B. Udostępnianie jak największej ilości informacji osobowych
C. Zgłaszanie treści, które naruszają regulamin
D. Regularne kontrolowanie ustawień prywatności
Regularne sprawdzanie ustawień prywatności jest kluczowym aspektem bezpiecznego korzystania z portali społecznościowych, ponieważ to właśnie te ustawienia decydują o tym, jakie informacje udostępniamy innym użytkownikom. Użytkownicy powinni być świadomi, że domyślne ustawienia prywatności często są skonfigurowane w sposób, który umożliwia szeroką dostępność ich danych osobowych. Przykładowo, wiele platform społecznościowych domyślnie ustawia profile jako publiczne, co oznacza, że każdy może zobaczyć ich zawartość. Zmieniając te ustawienia, użytkownicy mogą ograniczyć widoczność swoich postów, zdjęć, a także informacji osobistych tylko do wybranej grupy osób, co znacząco zwiększa ich bezpieczeństwo. Warto także regularnie aktualizować te ustawienia, ponieważ platformy często wprowadzają nowe funkcje, które mogą zmieniać domyślne zasady dotyczące prywatności. Zgodnie z wytycznymi RODO oraz innymi standardami ochrony danych osobowych, użytkownicy mają prawo do kontrolowania swoich informacji, co czyni regularne sprawdzanie ustawień prywatności nie tylko zaleceniem, ale również obowiązkiem każdego świadomego użytkownika internetu.

Pytanie 40

Co to jest WebSockets?

A. Protokół komunikacyjny zapewniający dwukierunkową komunikację między przeglądarką a serwerem
B. Metoda zabezpieczania połączeń HTTP
C. Biblioteka JavaScript do manipulacji danymi JSON
D. Format zapisu danych w bazach NoSQL
WebSockets to protokół komunikacyjny, który umożliwia dwukierunkową, pełnodupleksową komunikację między klientem a serwerem. To oznacza, że zarówno przeglądarka, jak i serwer mogą wysyłać dane w dowolnym momencie, co znacząco różni się od tradycyjnego modelu HTTP, gdzie klient inicjuje każde połączenie. Przykładem zastosowania WebSockets jest aplikacja czatu w czasie rzeczywistym, gdzie użytkownicy mogą widzieć wiadomości natychmiastowo, bez potrzeby odświeżania strony. Dodatkowo, WebSockets zmniejszają opóźnienia w komunikacji, co jest kluczowe w aplikacjach wymagających szybkiej interakcji, takich jak gry online czy platformy do handlu. Warto zaznaczyć, że WebSockets są zdefiniowane w standardzie IETF jako RFC 6455, a ich wykorzystanie powinno być zgodne z najlepszymi praktykami w zakresie bezpieczeństwa, takimi jak użycie protokołu wSecure WebSockets (wss://) do zapewnienia bezpieczeństwa przesyłanych danych.