Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 12 stycznia 2025 21:00
  • Data zakończenia: 12 stycznia 2025 21:04

Egzamin zdany!

Wynik: 39/40 punktów (97,5%)

Wymagane minimum: 20 punktów (50%)

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

Które z wymienionych działań stanowi zagrożenie dla emocjonalnego dobrostanu człowieka w sieci?

A. Przesyłanie niezaszyfrowanych plików
B. Nadmierne korzystanie z mediów społecznościowych
C. Cyberstalking
D. Zła postawa podczas pracy przy komputerze
Cyberstalking to groźne zjawisko polegające na uporczywym prześladowaniu, nękaniu lub groźbach w przestrzeni internetowej. Może prowadzić do poważnych problemów emocjonalnych, takich jak lęki, depresja, a nawet zespół stresu pourazowego (PTSD). Cyberstalking narusza prywatność ofiary, wywołując poczucie zagrożenia i bezradności. Walka z tym zjawiskiem obejmuje zgłaszanie przypadków organom ścigania, blokowanie prześladowców i korzystanie z narzędzi ochrony prywatności.

Pytanie 2

Algorytmy, które są wykorzystywane do rozwiązywania problemów przybliżonych lub takich, które nie mogą być opisane za pomocą algorytmu dokładnego, na przykład w prognozowaniu pogody czy identyfikacji nowych wirusów komputerowych, to algorytmy.

A. iteracyjne
B. liniowe
C. rekurencyjne
D. heurystyczne
Algorytmy heurystyczne są metodami rozwiązywania problemów, które są stosowane w sytuacjach, gdy nie ma jednoznacznego algorytmu dokładnego lub gdy problem jest zbyt skomplikowany, aby można go było rozwiązać w rozsądnym czasie. Przykłady zastosowań algorytmów heurystycznych obejmują przewidywanie pogody, gdzie różne modele atmosferyczne mogą być łączone w celu uzyskania lepszej prognozy, oraz rozpoznawanie nowych wirusów komputerowych, gdzie algorytmy heurystyczne pozwalają na identyfikację wzorców i anomalii w zachowaniu oprogramowania. Algorytmy te różnią się od tradycyjnych algorytmów liniowych, które działają na podstawie z góry określonych kroków oraz algorytmów rekurencyjnych, które polegają na rozwiązywaniu problemu poprzez dzielenie go na mniejsze podproblemy. Heurystyki są bardziej elastyczne, ponieważ pozwalają na zastosowanie intuicji i doświadczenia w procesie rozwiązywania. W praktyce algorytmy heurystyczne często łączą różne podejścia, aby uzyskać wyniki, które są wystarczająco dobre w krótkim czasie, co czyni je idealnymi do zastosowania w dynamicznie zmieniających się dziedzinach, takich jak analiza danych i sztuczna inteligencja.

Pytanie 3

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

A. MS Visual Studio
B. NetBeans
C. PyCharm
D. Eclipse
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 4

Zaprezentowany symbol odnosi się do

Ilustracja do pytania
A. domeny publicznej
B. praw autorskich
C. Creative Commons
D. prawa cytatu
Ten symbol to międzynarodowe oznaczenie domeny publicznej – często nazywany jest też symbolem Public Domain. Moim zdaniem to bardzo przydatna rzecz, bo jednoznacznie komunikuje, że utwór nie jest chroniony prawem autorskim, więc można go swobodnie wykorzystywać bez pytania kogokolwiek o zgodę. To szczególnie ważne, gdy pracujesz nad projektami komercyjnymi albo edukacyjnymi i musisz mieć pewność, że nie naruszasz czyichś praw. W praktyce spotkasz to oznaczenie na stronach z grafikami, muzyką czy tekstami, np. na Wikimedia Commons albo w niektórych bazach zdjęć stockowych – wtedy od razu wiesz, że możesz pobierać, edytować czy publikować materiał na własnych zasadach. Kluczowe jest jednak, żeby nie mylić tego symbolu z licencjami Creative Commons – tam nadal obowiązują konkretne warunki. W branży IT oraz przy pracy twórczej rozpoznawanie takich oznaczeń jest wręcz podstawą dobrych praktyk, bo znacząco minimalizuje ryzyko prawne. Z mojego doświadczenia wynika, że wielu początkujących myli domenę publiczną z wolnymi licencjami – a to nie to samo. Oznaczenie Public Domain jasno pokazuje: nie ma ograniczeń, korzystaj śmiało i nie musisz podawać autora, choć czasami jest to mile widziane z punktu widzenia etyki.

Pytanie 5

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

sortowanie bąbelkoweO(n²)
sortowanie przez wstawianieO(n²)
sortowanie przez scalanieO(n log n)
sortowanie przez zliczanieO(n)
sortowanie kubełkoweO(n²)
A. przez zliczanie
B. przez scalanie
C. kubełkowego
D. bąbelkowego
Sortowanie przez zliczanie jest jedną z najszybszych metod sortowania w przypadku określonych typów danych wejściowych. W szczególności działa ono efektywnie, gdy znamy ograniczenia co do zakresu wartości w zbiorze danych, ponieważ jego złożoność obliczeniowa wynosi O(n+k), gdzie n to liczba elementów do posortowania, a k to zakres wartości. Dzięki temu, w przeciwieństwie do metod sortowania porównawczego, takich jak sortowanie przez scalanie czy bąbelkowe, sortowanie przez zliczanie może osiągnąć liniową złożoność czasową, jeśli k jest stosunkowo małe w porównaniu do n. Algorytm ten działa poprzez zliczanie wystąpień każdego elementu, co pozwala na szybkie umieszczenie go w odpowiedniej pozycji w posortowanej tablicy. Przykładowe zastosowania sortowania przez zliczanie to sortowanie wyników egzaminów czy organizacja danych liczbowych w określonym przedziale, co jest często spotykane w analizach statystycznych. Standardy branżowe często korzystają z tej metody, gdy operujemy na dużych zbiorach danych o ograniczonym zakresie, co jest zgodne z najlepszymi praktykami efektywnego przetwarzania danych.

Pytanie 6

Jaką wartość dziesiętną reprezentuje liczba binarna 1010?

A. 12
B. 8
C. 14
D. 10
Liczba binarna 1010 to wartość dziesiętna, która wynosi 10. Aby dokonać konwersji liczby binarnej na system dziesiętny, należy zrozumieć, że każda cyfra w systemie binarnym reprezentuje potęgę liczby 2, zaczynając od prawej strony, gdzie najniższa pozycja ma wartość 2^0. W przypadku 1010, mamy następujące pozycje: 1 * 2^3 (co daje 8), 0 * 2^2 (co daje 0), 1 * 2^1 (co daje 2) oraz 0 * 2^0 (co daje 0). Sumując te wartości: 8 + 0 + 2 + 0, otrzymujemy 10. W praktyce konwersja z systemu binarnego na dziesiętny jest niezwykle przydatna w programowaniu i elektronice, gdzie liczby binarne są powszechnie stosowane. Przykładowo, w obliczeniach komputerowych oraz w projektowaniu układów cyfrowych, znajomość tych konwersji jest kluczowa. Odnosi się to również do standardów, takich jak IEEE 754, które definiują reprezentację liczb zmiennoprzecinkowych w formatach binarnych.

Pytanie 7

Wynikiem wykonania poniższego fragmentu kodu jest wyświetlenie liczb z zakresu od 2 do 20, które są

for (let number = 2; number <= 20; number++) {
    let check = true;
    for (let test = 2; test < number; test++) {
        if (number % test === 0) {
            check = false;
            break;
        }
    }
    if (check) console.log(number);
}
A. podzielne przez wartość zmiennej check.
B. pierwsze.
C. podzielne przez wartość zmiennej test.
D. parzyste.
Kod wypisuje liczby pierwsze, czyli takie, które mają dokładnie dwa dzielniki: 1 i samą siebie. Liczby pierwsze są podstawą w wielu dziedzinach matematyki i informatyki, szczególnie w kryptografii i algorytmach. Wyszukiwanie liczb pierwszych w danym przedziale to popularne zadanie, które pozwala na lepsze zrozumienie iteracji, pętli i warunków logicznych w programowaniu. Algorytm ten jest również wykorzystywany w optymalizacji algorytmów szyfrowania i generowania kluczy.

Pytanie 8

Jaką technologię stosuje się do powiązania aplikacji internetowej z systemem baz danych?

A. HTTP
B. CSS
C. SQL
D. JavaScript
SQL, czyli język do zarządzania danymi, to mega ważna rzecz, jeśli chodzi o relacyjne bazy danych. Dzięki niemu można tworzyć, modyfikować, a nawet usuwać tabele. To taki most, który łączy aplikacje webowe z bazą danych. Dzięki SQL programiści mogą łatwo przechowywać i przetwarzać różne informacje na serwerze. Przykłady? Można generować listy produktów, ogarniać użytkowników czy analizować dane z transakcji. Właściwie bez SQL-a nie dałoby się zbudować solidnych aplikacji, na przykład tych, które działają na MySQL, PostgreSQL czy Microsoft SQL Server. Chociaż pewnie o tym wiesz, ale warto to zaznaczyć.

Pytanie 9

Który z poniższych opisów najlepiej definiuje kompilator?

A. Narzędzie do analizy kodu w czasie rzeczywistym
B. Program łączący dynamiczne biblioteki z kodem źródłowym
C. Narzędzie przekształcające kod źródłowy na plik wykonywalny
D. System monitorujący zmiany w kodzie źródłowym
Kompilator to narzędzie, które przekształca kod źródłowy napisany w języku programowania na plik wykonywalny (binarny), który może być uruchomiony bez potrzeby ponownej kompilacji. Proces ten obejmuje kilka etapów, takich jak analiza leksykalna, analiza składniowa, optymalizacja kodu oraz generowanie kodu maszynowego. Kompilator jest nieodzownym elementem w językach takich jak C, C++ czy Java. Generowany plik wykonywalny może działać szybciej niż kod interpretowany, ponieważ nie wymaga tłumaczenia w czasie rzeczywistym.

Pytanie 10

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

push(arg) – dodaje element
pop() – usuwa ostatnio dodany element
peek() – zwraca ostatnio dodany element bez usuwania
isEmpty() – sprawdza czy istnieją dane w strukturze
A. tablica
B. stos
C. drzewo binarne
D. kolejka FIFO
Zestaw metod przedstawionych w pytaniu – czyli push, pop, peek oraz isEmpty – jednoznacznie wskazuje na strukturę danych zwaną stos (stack). To jest taki bardzo charakterystyczny „magazyn”, gdzie zawsze mamy do czynienia z zasadą LIFO, czyli Last In, First Out. Oznacza to, że ostatni element, który dodaliśmy metodą push, będzie tym pierwszym, który usuniemy przez pop. Peek natomiast pozwala tylko podejrzeć, co jest na górze stosu, ale niczego nie usuwa. isEmpty z kolei daje nam szybki sposób sprawdzenia, czy na stosie w ogóle coś jeszcze zostało. W praktyce, stosy są niezbędne w wielu algorytmach i strukturach programistycznych – na przykład podczas wywołań rekurencyjnych funkcji (sam system operacyjny używa stosu do obsługi wywołań procedur), przy obsłudze nawiasów w kompilatorach czy podczas implementacji algorytmu DFS (Depth-First Search) w grafach. Moim zdaniem, nawet jeśli na początku wydaje się, że stos nie jest tak „potężny” jak inne struktury, to jego prostota jest właśnie największym atutem i dlatego jest tak często wykorzystywany w praktyce. Branżowe standardy, na przykład w językach takich jak Java czy C#, bezpośrednio udostępniają gotowe klasy Stack, które właśnie implementują dokładnie te metody – to pokazuje, jak fundamentalna jest ta struktura. Pewnie warto też pamiętać, że stosy mają swoje ograniczenia (np. nie nadadzą się do kolejkowania zadań), ale tam gdzie trzeba działać LIFO, są niezastąpione.

Pytanie 11

Zaprezentowany diagram ilustruje wyniki przeprowadzonych testów:

Ilustracja do pytania
A. użyteczności
B. wydajnościowych
C. funkcjonalności
D. ochrony
To właśnie są testy wydajnościowe – dokładnie takie parametry jak czasy ładowania, liczba żądań HTTP, rozmiar przesyłanych danych czy ilość przekierowań analizuje się w praktyce podczas oceny wydajności stron internetowych. Moim zdaniem ten typ testów jest absolutnie kluczowy w projektowaniu nowoczesnych aplikacji webowych, bo użytkownicy szybko rezygnują, jeśli strona się długo ładuje albo jest zbyt zasobożerna. W branży zwraca się obecnie ogromną uwagę na to, by strony były 'lekkie', szybkie i zoptymalizowane pod kątem przesyłu danych. Nawet Google premiuje szybkie serwisy w wynikach wyszukiwania, co niejeden programista już odczuł na własnej skórze. Testy wydajnościowe sprawdzają, jak aplikacja zachowuje się pod dużym obciążeniem i ile danych realnie pobierają użytkownicy. W praktyce polecam korzystać z narzędzi takich jak Google Lighthouse, WebPageTest czy nawet prosty DevTools w przeglądarce – pozwalają szybko wyłapać największe problemy z czasem ładowania. Warto też pamiętać, że optymalizacja wydajności to nie tylko lepsze wrażenia użytkownika, ale bardzo wymierne oszczędności na transferze i infrastrukturze. Dobry zwyczaj to cyklicznie monitorować te wskaźniki, nawet gdy wydaje się, że wszystko działa OK – bo sytuacja może się szybko zmienić po wdrożeniu nowych funkcjonalności lub zmianach w kodzie.

Pytanie 12

Z jakiego obiektu można skorzystać, aby stworzyć kontrolkę wskazaną strzałką na ilustracji?

Ilustracja do pytania
A. TextBox - dla biblioteki WPF; JTextField - dla biblioteki Swing
B. Windows - dla biblioteki WPF; JFrame - dla biblioteki Swing
C. Text - dla biblioteki WPF; JText - dla biblioteki Swing
D. Box - dla biblioteki WPF; JField - dla biblioteki Swing
Wybrałeś dokładnie to, co w praktyce programisty jest najważniejsze, czyli TextBox dla WPF i JTextField dla Swinga. Te dwa komponenty to absolutna podstawa, jeśli chodzi o pola do wprowadzania tekstu, zarówno w aplikacjach .NET, jak i Java. W WPF TextBox pozwala na przyjmowanie danych od użytkownika, obsługę zdarzeń, walidację, formatowanie tekstu – ogólnie wszystko, co potrzeba do pracy z tekstem w GUI. W Swingu JTextField jest odpowiednikiem, bardzo intuicyjnym i prostym w użyciu, świetnie się sprawdza przy prostych formularzach czy interfejsach użytkownika. Co ciekawe, oba te komponenty są bardzo elastyczne, można je stylizować, podłączać do systemów walidacji czy nawet rozbudowywać o własne mechanizmy autouzupełniania. Spotkałem się wielokrotnie z sytuacją, gdzie poprawne zastosowanie TextBoxa lub JTextFielda znacząco podnosiło jakość aplikacji – bo jednak wygoda użytkownika i poprawność danych są kluczowe. Takie wybory są zgodne z dokumentacją Microsoftu oraz Oracla, więc trzymasz się dobrych praktyk. Z mojej perspektywy, jeśli chcesz pisać nowoczesne, użytkowe aplikacje desktopowe, znajomość tych kontrolek to absolutny must-have.

Pytanie 13

Jakie korzyści płyną z użycia pseudokodu przy tworzeniu algorytmu?

A. Generowanie dynamicznych struktur danych
B. Zrozumiałość dla osób nieznających się na programowaniu
C. Możliwość szybkie zrealizowania algorytmu w którymkolwiek języku
D. Łatwość w zmianie kodu maszynowego
Zaletą wykorzystania pseudokodu podczas projektowania algorytmu jest jego czytelność i prostota, dzięki czemu jest zrozumiały nawet dla osób, które nie są biegłe w programowaniu. Pseudokod pozwala skupić się na logice działania algorytmu bez konieczności przestrzegania ścisłej składni konkretnego języka programowania. Dzięki temu proces projektowania jest szybszy, a algorytm można łatwo przełożyć na dowolny język programowania. Pseudokod ułatwia również współpracę między programistami i analitykami, wspierając tworzenie i dokumentowanie złożonych rozwiązań.

Pytanie 14

Jaką strukturę danych obrazuje zamieszczony kod w języku C#?

int[,] array = new int[3, 3];
A. tablicę jednowymiarową
B. listę
C. tablicę dwuwymiarową
D. stos
Kod, który widzisz, tworzy tablicę dwuwymiarową w języku C#. Zapis int[,] array = new int[3, 3]; oznacza, że deklarujesz strukturę, gdzie każdy element jest dostępny przez dwa indeksy – pierwszy wskazuje wiersz, drugi kolumnę. Tablice dwuwymiarowe są bardzo popularne przy przechowywaniu macierzy, plansz w grach (na przykład szachownicy czy sudoku), a nawet obrazów, gdzie każdy piksel opisuje się przez współrzędne. Moim zdaniem, znajomość takich struktur naprawdę ułatwia tworzenie bardziej złożonych algorytmów, bo niekiedy dostępu do danych nie da się zamknąć w jednej linii, tylko trzeba się poruszać w dwóch wymiarach. Jeżeli chodzi o dobre praktyki, to warto pamiętać, że tablica dwuwymiarowa w .NET jest strukturą "prostokątną", czyli każdy wiersz ma tyle samo kolumn – coś jak klasyczna tabela w Excelu. To różni się od tzw. tablic tablic (ang. jagged arrays), które pozwalają mieć nierówną liczbę elementów w wierszach, ale to już trochę inna bajka. W twoim przykładzie stworzyłeś tablicę o rozmiarze 3x3, czyli 9 elementów, do których odwołujesz się za pomocą array[wiersz, kolumna]. Może się to wydawać proste, ale z mojego doświadczenia to właśnie takie zrozumienie podstawowych konstrukcji pozwala pisać czytelny i wydajny kod. W branży często spotyka się sytuacje, gdzie optymalizacja działania na tablicach – zwłaszcza tych dwuwymiarowych – robi różnicę, więc warto to mieć dobrze opanowane.

Pytanie 15

Która z wymienionych aplikacji stanowi przykład prostego rozwiązania mobilnego?

A. Aplikacja do monitorowania użycia pamięci RAM
B. Aplikacja typu zegar
C. Aplikacja z rozbudowanym systemem zarządzania projektami
D. Aplikacja do analizy danych finansowych
Aplikacja typu zegar to jeden z najprostszych przykładów aplikacji mobilnej. Jej podstawowa funkcjonalność polega na wyświetlaniu aktualnego czasu oraz alarmów, a dodatkowo może zawierać funkcje takie jak minutnik czy stoper. Tego rodzaju aplikacje charakteryzują się niewielką liczbą funkcji, przejrzystym interfejsem i minimalnym zapotrzebowaniem na zasoby sprzętowe. Dzięki swojej prostocie, aplikacje typu zegar są doskonałym przykładem na to, jak przy użyciu niewielkiej liczby komponentów można stworzyć przydatne narzędzie dla użytkownika.

Pytanie 16

Jakie są cechy biblioteki statycznej w zestawieniu z dynamiczną?

A. Jest wczytywana do pamięci podczas działania aplikacji
B. Może być zmieniana w czasie działania programu
C. Zostaje dodana do pliku wykonywalnego w trakcie kompilacji
D. Nie potrzebuje obecności pliku wykonywalnego
Biblioteka statyczna jest dołączana do pliku wykonywalnego podczas procesu kompilacji. Oznacza to, że jej kod staje się integralną częścią aplikacji, co eliminuje konieczność ładowania jej w czasie wykonywania programu. Tego typu biblioteki charakteryzują się większym rozmiarem pliku wynikowego, ale oferują wyższą wydajność, ponieważ wszystkie funkcje są dostępne lokalnie, bez dodatkowych operacji ładowania. Przykładami bibliotek statycznych są pliki .lib w C/C++.

Pytanie 17

Przedstawiony fragment dotyczy funkcji resize w języku C++. Ta funkcja obniży długość elementu string, gdy wartość parametru

Resize string
Resizes the string to a length of n characters.

If n is smaller than the current string length, the current value is shortened to its first n character, removing the characters beyond the nth.

If n is greater than the current string length, the current content is extended by inserting at the end as many characters as needed to reach a size of n. If c is specified, the new elements are initialized as copies of c; otherwise, they are value-initialized characters (null characters).

Parameters
n
New string length, expressed in number of characters.
size_t is an unsigned integral type (the same as member type string::size_type).
c
Character used to fill the new character space added to the string (in case the string is expanded).
Źródło: http://www.cplusplus.com/reference/string/string/resize/
A. n jest większa od aktualnej długości łańcucha
B. c jest większa od aktualnej długości łańcucha
C. n jest mniejsza od aktualnej długości łańcucha
D. c jest mniejsza od aktualnej długości łańcucha
To jest dokładnie to, o co chodzi w funkcji resize dla std::string w C++. Jeśli podany parametr n jest mniejszy od aktualnej długości łańcucha, to obcinamy stringa do tych właśnie n znaków – reszta znika bezpowrotnie. Moim zdaniem to bardzo wygodne, bo nie trzeba ręcznie wycinać fragmentu czy bawić się w operacje na podłańcuchach. Praktycznie rzecz biorąc, można dzięki temu szybko skrócić dane wejściowe, np. gdy pobieramy z pliku długi tekst, a potrzebujemy tylko jego fragment do dalszego przetwarzania. W branży często się to przydaje – na przykład ograniczając długość nicku użytkownika do określonej liczby znaków lub przytrzymując długość serializowanych danych w protokołach sieciowych. Resize działa wprost i zgodnie ze standardem C++, usuwając znaki od indeksu n wzwyż. Co ciekawe, metoda nie tylko skraca, ale też rozszerza string – wtedy wypełnia go nowymi znakami (np. 'x' czy znakiem pustym), ale to właśnie skracanie jest często pomijane przez początkujących, a jest naprawdę przydatne. No i trzeba pamiętać, że oryginalne znaki spoza zakresu po prostu znikają – nie ma żadnych ostrzeżeń. Z mojego doświadczenia to jedna z tych funkcji, do których z czasem nabiera się szacunku – bo ułatwia życie na co dzień przy operacjach na łańcuchach znaków.

Pytanie 18

Którego nagłówka używamy w C++ do obsługi plików?

A. <iostream>
B. <fstream>
C. <stdio.h>
D. <fileio.h>
Nagłówek '<fstream>' w języku C++ jest używany do pracy z plikami, umożliwiając odczyt i zapis danych na dysku. Biblioteka fstream udostępnia klasy 'ifstream', 'ofstream' i 'fstream', które pozwalają na operacje wejścia i wyjścia plików. 'ifstream' służy do odczytu plików, 'ofstream' do zapisu, a 'fstream' umożliwia zarówno odczyt, jak i zapis. Praca z plikami jest kluczowa w wielu aplikacjach, od prostych narzędzi do przetwarzania danych po złożone systemy zarządzania plikami i bazami danych. Dzięki 'fstream' programiści mogą efektywnie zarządzać danymi na różnych poziomach aplikacji.

Pytanie 19

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

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

Pytanie 20

Który z warunków logicznych weryfikuje, czy zmienna całkowita x jest dodatnią liczbą składającą się z dwóch cyfr i jest podzielna przez 4?

A. (x > 0 && x < 100) || (x / 4 == 0)
B. (x > 9 || x < 100) && (x / 4 == 0)
C. (x > 9 && x < 100) || (x % 4 == 0)
D. (x > 9 && x < 100) && (x % 4 == 0)
Ten warunek jest skonstruowany bardzo poprawnie, zarówno od strony logicznej, jak i praktycznej. Spójrz, jak działa: (x > 9 && x < 100) gwarantuje, że x musi być liczbą całkowitą większą od 9 i jednocześnie mniejszą od 100, a to oznacza, że jest to liczba dwucyfrowa (od 10 do 99). To się zgadza z typową definicją liczby dwucyfrowej w większości języków programowania, gdzie liczby są całkowite i nie mają zer wiodących. Druga część, czyli (x % 4 == 0), sprawdza podzielność przez 4 – operator modulo zwraca resztę z dzielenia, więc jeśli jest zero, to liczba jest faktycznie podzielna przez 4. Razem, połączenie tych dwóch warunków operatorem logicznym „i” (czyli &&) sprawia, że obie rzeczy muszą być spełnione jednocześnie – liczba jest dwucyfrowa i podzielna przez 4. To bardzo praktyczny sposób weryfikacji np. podczas walidacji danych wejściowych, generowania zadania dla użytkownika czy szybkiego filtrowania liczb. Spotyka się podobne zapisy w zadaniach rekrutacyjnych czy testach jednostkowych. Co ciekawe, taka konstrukcja jest bardzo czytelna dla innych programistów, co wpisuje się w dobre praktyki branżowe – kod łatwo się czyta i nie trzeba się długo zastanawiać, co autor miał na myśli. Moim zdaniem warto pamiętać, żeby właśnie takie warunki pisać w sposób przejrzysty i jednoznaczny. No i nie zapomnij – zawsze testuj swój warunek dla wartości brzegowych (np. 9, 10, 99, 100), żeby mieć pewność, że rzeczywiście działa tak, jak chcesz!

Pytanie 21

Który z dokumentów stosowanych w metodologii Agile zawiera listę funkcjonalności produktu uporządkowanych według ich ważności?

A. Product backlog
B. Harmonogram projektu
C. Backlog sprintu
D. Diagram Gantta
Product backlog to dokument zawierający listę funkcjonalności produktu uporządkowanych według priorytetów. Jest to jedno z głównych narzędzi w metodykach Agile, szczególnie w Scrumie, gdzie backlog stanowi podstawę do planowania sprintów. Zawiera on wszystkie elementy, które muszą zostać zaimplementowane, w tym nowe funkcje, poprawki błędów oraz zadania techniczne. Priorytety są ustalane przez właściciela produktu (Product Ownera) i dostosowywane na bieżąco w zależności od zmieniających się wymagań i potrzeb biznesowych. Dzięki backlogowi zespół może skupić się na dostarczaniu najważniejszych funkcji, co pozwala na szybkie reagowanie na feedback i rozwój aplikacji zgodnie z oczekiwaniami klienta.

Pytanie 22

Jak określa się proces transferu danych z lokalnego komputera na serwer?

A. Przesyłanie danych
B. Pobieranie danych
C. Streaming
D. Wysyłanie danych
Pojęcia takie jak pobieranie danych, przesyłanie danych oraz streaming są często mylone z wysyłaniem danych, jednak każde z nich ma swoją unikalną definicję i zastosowanie. Pobieranie danych odnosi się do procesu ściągania informacji z serwera na komputer lokalny. Jest to operacja odwrotna do wysyłania danych i jest kluczowa dla użytkowników, którzy chcą uzyskać dostęp do plików lub zasobów umieszczonych na serwerze. Przykładowo, podczas przeglądania internetu, przeglądarka pobiera dane z serwerów, aby wyświetlić stronę użytkownikowi. Przesyłanie danych, z kolei, to termin ogólny, który można wykorzystać do opisania dowolnej wymiany informacji między lokalnym a zdalnym systemem. Obejmuje zarówno wysyłanie, jak i pobieranie danych, co sprawia, że użycie go w kontekście konkretnej operacji może być mylące. Wreszcie, streaming odnosi się do strumieniowego przesyłania danych, które umożliwia użytkownikom nieprzerwaną transmisję multimediów, takich jak filmy czy muzyka, w czasie rzeczywistym. W tym przypadku, dane są przesyłane w małych partiach, co pozwala na ich natychmiastowe odtwarzanie, a nie przechowywanie lokalnie. W związku z tym, choć wszystkie te procesy dotyczą transferu danych, to tylko wysyłanie danych odnosi się do przesyłania informacji z komputera lokalnego na serwer.

Pytanie 23

Na równoważnych pod względem funkcjonalnym listingach fragmentów aplikacji Angular oraz React.js utworzono listę punktowaną, która zawiera:

Definicja typu:

books = ["Harry Potter", "Hobbit", "Władca pierścieni"];

Kod Angular:
<ul>
    <li *ngFor = "let book of books"> {{book}} </li>
</ul>

Kod React.js:
<ul>
    {this.books.map(book => <li key={book}> book </li>)}
</ul>
A. Tyle elementów, ile znajduje się w tablicy books; w każdym punkcie listy widnieje element o treści {book}.
B. Wyłącznie jeden element o treści Harry Potter, Hobbit, Władca pierścieni.
C. Taką liczbę elementów, ile znajduje się w tablicy books; w każdym punkcie listy umieszczony jest jeden element tablicy.
D. Jedynie jeden element o treści Harry Potter.
Dokładnie tak właśnie działa iteracja po tablicy w Angularze i React.js. Zarówno Angularowy *ngFor, jak i funkcja map() w Reactcie to narzędzia do dynamicznego generowania elementów listy na podstawie danych z tablicy – w tym przypadku books. Każdy element tablicy tworzy osobny <li>, a więc liczba elementów na stronie zawsze odpowiada długości tablicy. To jest bardzo praktyczne, bo pozwala wyświetlać listy o dowolnej długości, zależnie od zawartości danych, bez przepisywania kodu – wystarczy zmienić dane źródłowe. W Angularze taki sposób budowania widoków jest zgodny z podejściem deklaratywnym – opisujesz, co ma się pojawić, a nie jak dokładnie to zrobić krok po kroku. React „mapuje” dane na elementy JSX, przy okazji warto pamiętać o kluczach (key), bo to pomaga w optymalizacji pracy wirtualnego DOM-u. Takie podejście to dzisiaj absolutny standard w branży – ułatwia utrzymanie kodu, testy i reużywalność komponentów. Moim zdaniem, kiedy raz się to opanuje, ciężko wyobrazić sobie inne podejście do budowy dynamicznych interfejsów. Zauważ, że każdy <li> wyświetla dokładny tekst z tablicy, a nie jakieś szablony czy placeholdery – to bardzo czytelne i naturalne dla użytkownika. W realnych projektach często tak renderuje się np. listy produktów, komentarzy czy zadań do wykonania. Dodatkowo, jeśli zmodyfikujesz tablicę, to widok automatycznie się odświeży – nie musisz ręcznie aktualizować DOM. To ogromne ułatwienie i podstawa nowoczesnego frontendu.

Pytanie 24

Czym jest klasa w programowaniu obiektowym?

A. wskaźnik
B. typ danych
C. zmienna
D. instrukcja
Klasa w programowaniu obiektowym to w praktyce taki szablon, według którego tworzymy konkretne obiekty. To coś jak przepis, dzięki któremu programista może zdefiniować własny, złożony typ danych, opisujący realny byt czy problem. Klasa określa, jakie dane (pola, właściwości) oraz zachowania (metody, funkcje) mają mieć obiekty, które potem powstaną na jej podstawie. Programując w językach takich jak Java, C++ czy Python, właśnie klasy pozwalają nam zamknąć logikę i dane w jednym opakowaniu – to jest jeden z filarów OOP (programowania obiektowego). Moim zdaniem nie da się robić sensownych, skalowalnych projektów bez klas, bo to one pozwalają sensownie ogarnąć złożoność. Przykład? W aplikacji bankowej klasa KontoBankowe może mieć pola typu saldo, numer konta i metody do przelewów. Każde nowe konto to osobny obiekt tego typu, ale wszystkie zachowują się spójnie. Warto przy tym pamiętać, że dobra praktyka nakazuje projektować klasy tak, żeby były jak najbardziej uniwersalne, czyli zgodnie z zasadą DRY (Don’t Repeat Yourself) i SOLID. Często spotykam się z opinią, że klasa to „sztywny typ danych”, ale to nieprawda – dzięki dziedziczeniu czy polimorfizmowi można je elastycznie rozszerzać. Podsumowując, klasa to własny, często złożony typ danych stworzony specjalnie pod potrzeby danej aplikacji – i właśnie za to tak się je ceni.

Pytanie 25

Który z wymienionych sposobów może przyczynić się do optymalizacji kodu źródłowego?

A. Dodanie większej liczby komentarzy w kodzie
B. Zwiększenie ilości instrukcji warunkowych
C. Zamiana zmiennych globalnych na lokalne
D. Eliminacja nieużywanych zmiennych oraz funkcji
Usunięcie nieużywanych zmiennych i funkcji to jedna z najskuteczniejszych metod optymalizacji kodu źródłowego. Nadmiarowe zmienne i niepotrzebne funkcje mogą spowalniać aplikację, zwiększać jej zużycie pamięci i powodować problemy z czytelnością kodu. Ich eliminacja upraszcza kod, zmniejsza ryzyko błędów i poprawia wydajność programu. Oczyszczanie kodu to kluczowy element procesu refaktoryzacji, który pozwala na utrzymanie wysokiej jakości oprogramowania oraz lepszą organizację projektu. Dodatkowo, minimalizacja kodu pomaga w szybszym ładowaniu aplikacji webowych, co ma bezpośredni wpływ na doświadczenie użytkownika (UX) oraz pozycjonowanie w wyszukiwarkach (SEO).

Pytanie 26

Jaki numer telefonu należy wybrać, aby skontaktować się z pogotowiem ratunkowym w Polsce?

A. 112
B. 998
C. 113
D. 997
Numer 112 to tzw. europejski numer alarmowy, który działa nie tylko w Polsce, ale i w całej Unii Europejskiej oraz kilku innych krajach. Z mojego doświadczenia wynika, że warto nawykowo korzystać właśnie z tego numeru, bo jest on uniwersalny i obsługiwany przez wszystkie sieci – zarówno stacjonarne, jak i komórkowe. W praktyce, dzwoniąc pod 112, łączymy się z centralą, która przekieruje nas do odpowiednich służb (pogotowie ratunkowe, policja, straż pożarna), w zależności od sytuacji. To ogromne ułatwienie, szczególnie gdy jesteśmy zestresowani albo w nieznanym miejscu. Moim zdaniem to też ważny aspekt, że osoby z zagranicy mogą łatwo uzyskać pomoc, bo 112 jest rozpoznawalny praktycznie wszędzie w Europie. Zgodnie z przepisami unijnymi, ten numer powinien być promowany jako podstawowy do wzywania pomocy w nagłych przypadkach – stąd jego obecność nawet na automatach telefonicznych czy instrukcjach bezpieczeństwa w zakładach pracy, szkołach, komunikacji miejskiej. Dodatkowo, jeśli nie wiemy, którą dokładnie służbę wezwać, operator 112 pomoże nam to ustalić i połączy z odpowiednim dyspozytorem. Osobiście uważam, że zapamiętanie tego numeru to podstawa, bo można uratować komuś życie – nawet przez przypadek, będąc świadkiem jakiegoś wypadku czy innego zdarzenia. Warto pamiętać, że 112 działa również, gdy telefon nie ma karty SIM (chociaż nie wszędzie to się sprawdza w praktyce, to z mojego rozeznania wynika, że w Polsce powinno zadziałać).

Pytanie 27

Który z wymienionych algorytmów sortowania jest najskuteczniejszy w przypadku dużych zbiorów danych w przeważającej liczbie sytuacji?

A. Sortowanie szybkie (QuickSort)
B. Sortowanie przez wstawianie
C. Sortowanie przez zliczanie
D. Sortowanie bąbelkowe
QuickSort to algorytm sortowania, który jest najbardziej efektywny dla dużych zbiorów danych, osiągając średnią złożoność obliczeniową O(n log n). Wykorzystuje strategię 'dziel i zwyciężaj', co pozwala na szybkie podzielenie tablicy na mniejsze części wokół elementu zwanego pivotem. Dzięki temu QuickSort jest wyjątkowo szybki, nawet w przypadku dużych i losowo rozłożonych zbiorów danych. Jego zaletą jest niskie zużycie pamięci oraz możliwość sortowania w miejscu (in-place), co oznacza, że nie wymaga dodatkowej przestrzeni poza rekurencyjnym stosowaniem wywołań. Algorytm ten jest szeroko stosowany w aplikacjach bazodanowych, systemach operacyjnych i analizie danych.

Pytanie 28

Jakie jest przeznaczenie dokumentacji wdrożeniowej?

A. Do testowania wydajności aplikacji
B. Do zarządzania bazą danych aplikacji
C. Do tworzenia zadań w systemie kontroli wersji
D. Do opisania procesu instalacji i konfiguracji aplikacji w środowisku produkcyjnym
Dokumentacja wdrożeniowa opisuje proces instalacji i konfiguracji aplikacji w środowisku produkcyjnym. Obejmuje ona szczegółowe instrukcje dotyczące wymaganych komponentów systemowych, zależności oraz kroków niezbędnych do prawidłowego wdrożenia aplikacji. Dzięki dokumentacji wdrożeniowej administratorzy IT oraz zespoły DevOps mogą skutecznie zarządzać procesem implementacji, minimalizując ryzyko błędów i przestojów. Dokument ten zawiera również informacje o kopiach zapasowych, procedurach przywracania systemu oraz testach przeprowadzanych po wdrożeniu, co zapewnia stabilność i bezpieczeństwo aplikacji po przeniesieniu jej na serwery produkcyjne. Kompleksowa dokumentacja wdrożeniowa to kluczowy element zarządzania cyklem życia oprogramowania (SDLC).

Pytanie 29

Z jakiej kolekcji powinno się korzystać, aby przechowywać informacje związane z elementem interfejsu użytkownika w taki sposób, aby ten element był informowany przez kolekcję o dodaniu, usunięciu lub zmianie jej zawartości?

A. Collection
B. ObservableCollection
C. KeyedCollection
D. ReadOnlyCollection
ObservableCollection to zdecydowanie najlepszy wybór w sytuacji, gdy zachodzi potrzeba powiadamiania elementów interfejsu użytkownika o zmianach w kolekcji. W praktyce, kiedy pracujesz np. z WPF, UWP albo MAUI, to ObservableCollection automatycznie informuje UI o dodaniu, usunięciu czy modyfikacji elementów. Wszystko dzięki temu, że implementuje interfejs INotifyCollectionChanged. Moim zdaniem praktyczne zastosowanie jest mega – gdy masz np. listę produktów, która wyświetla się użytkownikowi, to po prostu dokładasz lub usuwasz elementy z ObservableCollection i nie musisz ręcznie odświeżać widoku. Framework sam ogarnia powiązanie danych, bo kolekcja emituje zdarzenia CollectionChanged. Takie podejście jest spójne z zasadami MVVM i ogólnie promowane przez Microsoft w oficjalnych dokumentacjach. Często spotkać można rozwiązania, gdzie ktoś używa zwykłej List lub Collection, ale wtedy tracisz te automatyczne powiadomienia i pojawia się masa kodu-boilerplate. Szczerze mówiąc, nie widzę sensu kombinować z innymi kolekcjami, jeśli zależy Ci na dynamicznym, responsywnym UI. ObservableCollection to po prostu standard branżowy w .NET, jak dla mnie nie ma lepszej opcji na takie zastosowania.

Pytanie 30

Wskaż termin, który w języku angielskim odnosi się do "testów wydajnościowych"?

A. performance testing
B. security testing
C. integration testing
D. unit testing
Testy wydajnościowe, czyli performance testing, to coś, co naprawdę warto mieć na uwadze. Dzięki nim możemy sprawdzić, jak nasza aplikacja działa pod dużym obciążeniem i jak szybko odpowiada na różne żądania. Moim zdaniem, to kluczowy aspekt, zwłaszcza jeśli planujemy, żeby nasza aplikacja miała wielu użytkowników. W końcu, nikt nie lubi czekać, aż coś się załaduje!

Pytanie 31

Wskaż odpowiedź, która używa parafrazowania jako metodę aktywnego słuchania, gdy klient mówi: "Interesuje mnie aplikacja, która działa szybko, niezależnie od tego, czy korzysta z niej kilku czy tysiąc użytkowników"?

A. Czuję pewne wątpliwości w Pani głosie. Czy mogę zadać kilka pytań?
B. Ilu użytkowników planuje z niej skorzystać?
C. Dlaczego Pani potrzebuje takiej aplikacji?
D. Jeśli dobrze zrozumiałam, chodzi o aplikację, która efektywnie obsługuje różne obciążenia
Parafraza to świetna technika, która pomaga zrozumieć, co rozmówca ma na myśli. Jak w tym przypadku – odpowiedź, która mówi: 'Jeśli dobrze rozumiem, chodzi o aplikację, która radzi sobie z różnym obciążeniem,' naprawdę dobrze oddaje to, co klient próbował przekazać. Klient podkreśla, że ważne jest dla niego, aby aplikacja była wydajna, niezależnie od tego, ile osób z niej korzysta. Użycie terminu 'radzi sobie z obciążeniem' jest trafne, bo dotyczy zdolności systemu do przystosowywania się do zmieniającej się liczby użytkowników i ich aktywności. To pokazuje, że konsultant dobrze zrozumiał potrzeby klienta i otwiera możliwości do dalszej rozmowy o technicznych detalach aplikacji, a to jest kluczowe w sprzedaży i budowaniu dobrych relacji z klientem.

Pytanie 32

W jaki sposób procesor nawiązuje komunikację z pamięcią podręczną (cache)?

A. Używając wyłącznie pamięci RAM
B. Za pomocą systemu przerwań
C. Poprzez linie danych w magistrali systemowej
D. Bezpośrednio, omijając mostki systemowe
Procesor komunikuje się z pamięcią podręczną (cache) za pomocą linii danych w magistrali systemowej, co jest kluczowym elementem architektury komputerowej. Magistrala systemowa to zestaw ścieżek, które umożliwiają przesyłanie danych pomiędzy różnymi komponentami systemu, w tym procesorem, pamięcią RAM oraz pamięcią podręczną. Pamięć podręczna działa jako bufor, który przechowuje najczęściej używane dane, co pozwala na znaczne zwiększenie szybkości operacji, ponieważ dostęp do pamięci cache jest znacznie szybszy niż dostęp do pamięci RAM. W standardach takich jak Intel's QuickPath Interconnect (QPI) czy AMD's HyperTransport, linie danych odgrywają kluczową rolę w efektywnej komunikacji, co przekłada się na ogólną wydajność systemu. Przykładowo, w nowoczesnych procesorach wielordzeniowych, każda rdzeń może mieć własną pamięć podręczną, a komunikacja za pomocą magistrali pozwala na synchronizację danych pomiędzy tymi rdzeniami oraz współdzielenie zasobów. Efektywne zarządzanie pamięcią podręczną i magistralą jest kluczowe dla osiągnięcia wysokiej wydajności w obliczeniach oraz przetwarzaniu danych.

Pytanie 33

Jakie są korzyści z wykorzystania struktur danych typu mapa (np. HashMap w Javie) w kontekście tworzenia zbiorów danych?

A. Gdyż nie potrzebują znajomości wielkości danych przed kompilacją
B. Ponieważ struktury danych typu mapa zajmują mniej pamięci niż tablice
C. Bo pozwalają na sortowanie danych bez dodatkowych działań
D. Z powodu szybkiego uzyskiwania dostępu do elementów przy użyciu klucza
Mapa, na przykład HashMap w Javie, to taka fajna struktura, która trzyma pary klucz-wartość. Dzięki temu szybko możemy znaleźć dane, korzystając z unikalnego klucza. HashMap jest super, bo pozwala nam na błyskawiczne dodawanie, usuwanie i wyszukiwanie elementów w czasie O(1). To naprawdę przydaje się, gdy pracujemy z dużymi zbiorami danych. Używamy jej często w aplikacjach wymagających szybkiego dostępu do informacji, jak różne bazy danych czy strony internetowe. No i jeszcze jej elastyczność – można ją łatwo dostosować do zmieniających się zestawów danych, co jest dużym plusem.

Pytanie 34

Jakie są kluczowe różnice pomiędzy strukturą (struct) a unią (union) w języku C?

A. Struktura wymaga więcej miejsca w pamięci niż unia
B. Struktura przechowuje wiele wartości równocześnie, unia tylko jedną
C. Unia nie jest obsługiwana przez kompilatory współczesnych języków
D. Unia umożliwia dynamiczne przypisywanie typów danych, struktura natomiast nie
Główna różnica między strukturą ('struct') a unią ('union') w języku C polega na sposobie przechowywania danych. Struktura przechowuje wszystkie pola jednocześnie, przydzielając każdemu z nich osobne miejsce w pamięci, natomiast unia używa wspólnej przestrzeni pamięci dla wszystkich swoich pól – w danym momencie można przechowywać tylko jedną wartość. Unia jest bardziej efektywna pod względem pamięci, ale mniej wszechstronna, ponieważ zmiana wartości jednego pola nadpisuje pozostałe. Struktury są powszechnie wykorzystywane w aplikacjach, gdzie konieczne jest przechowywanie wielu niezależnych danych, podczas gdy unie są używane do oszczędzania pamięci.

Pytanie 35

Jakie cechy posiada model prototypowy w zakresie zarządzania projektami?

A. Szczegółowym planowaniem każdego etapu projektu przed jego realizacją
B. Rozwojem produktu w sposób iteracyjny w krótkich cyklach
C. Realizowaniem pełnej wersji produktu przed przeprowadzeniem testów
D. Przygotowaniem wersji systemu w ograniczonym zakresie w celu uzyskania opinii od użytkownika
Model prototypowy w zarządzaniu projektami to taka sprytna technika, gdzie tworzymy coś w rodzaju wczesnej wersji systemu, czyli prototypu. To nam pozwala zebrać opinie od użytkowników i przetestować różne pomysły zanim w ogóle weźmiemy się za pełną wersję. Fajną sprawą jest to, że gdy mamy ten prototyp, to łatwiej wyłapać błędy, zanim wszystko zostanie w pełni zbudowane. Największa zaleta? Możemy dostosować i poprawiać aplikację na podstawie tego, co mówią użytkownicy. Dzięki temu ryzyko, że stworzymy coś, co nie spełnia ich oczekiwań, jest znacznie mniejsze. Prototypy to często chleb powszedni w projektach UX/UI, aplikacjach webowych czy oprogramowaniu dla firm, gdzie tak istotne jest, by dobrze trafiać w potrzeby końcowych użytkowników.

Pytanie 36

Jakie informacje przedstawia diagram Gantta?

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

Który z wymienionych poniżej przykładów stanowi system informacji przetwarzany przez system informatyczny?

A. System PESEL
B. System zarządzania oświetleniem drogowym
C. System wentylacyjny w biurowcach
D. System do monitorowania temperatury serwerów
System PESEL (Powszechny Elektroniczny System Ewidencji Ludności) jest przykładem systemu informacji przetwarzanym przez system informatyczny, ponieważ gromadzi, przetwarza i udostępnia dane osobowe obywateli Polski. Jest to złożony system, który działa na bazie zintegrowanych baz danych, umożliwiający identyfikację osób, przydzielanie numerów PESEL oraz zarządzanie informacjami o statusie mieszkańców. System ten jest niezbędny dla organów administracji publicznej, umożliwiając im efektywne zarządzanie danymi obywateli w kontekście takich usług, jak wydawanie dowodów osobistych, rejestracja wyborców, a także w kontekście ochrony zdrowia i ubezpieczeń społecznych. PESEL jest zgodny z Europejskim Ogólnochronnym Rozporządzeniem o Ochronie Danych Osobowych (RODO), co dodatkowo podkreśla jego rolę jako kluczowego systemu informacyjnego w obiegu danych w Polsce. Przykłady zastosowań systemu PESEL obejmują obsługę wniosków o świadczenia socjalne oraz dostęp do e-usług, co świadczy o jego fundamentalnym znaczeniu w administrowaniu danymi ludnościowymi.

Pytanie 38

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

A. Unikanie stosowania silnych haseł do konta
B. Zgłaszanie treści, które naruszają regulamin
C. Regularne kontrolowanie ustawień prywatności
D. Udostępnianie jak największej ilości informacji osobowych
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 39

Rozpoczęcie tworzenia procedury składowej o nazwie dodajUsera w MS SQL wymaga użycia poleceń

A. add dodajUsera procedure
B. create procedure dodajUsera
C. create dodajUsera procedure
D. add procedure dodajUsera
Polecenie 'create procedure dodajUsera' to właśnie ten sposób, w jaki w Microsoft SQL Server deklaruje się początek nowej procedury składowanej. Wynika to bezpośrednio ze składni T-SQL, gdzie słowo 'create' inicjuje tworzenie nowego obiektu w bazie danych, a 'procedure' określa typ obiektu – procedurę składowaną. Dalej podaje się nazwę, tu akurat 'dodajUsera'. Moim zdaniem, to jedno z podstawowych, ale i najważniejszych poleceń dla każdego, kto chce serio pracować z SQL Serverem, bo bez zrozumienia tej składni bardzo szybko można się pogubić nawet przy prostych operacjach. T-SQL od lat nie zmienia tej konwencji i to jest bardzo wygodne – można śmiało korzystać z tutoriali czy dokumentacji sprzed kilku wersji serwera, bo tu akurat niewiele się zmienia. Przykład praktyczny: gdybyś chciał dodać prostą procedurę, która wstawia użytkownika do tabeli, zacząłbyś właśnie tak: 'create procedure dodajUsera AS BEGIN --tutaj kod END'. Warto wiedzieć, że dobrym zwyczajem jest zawsze nazywać procedury zgodnie z tym, co robią, a nie jakoś przypadkowo, i też często dodawać prefix, np. 'usp_' (od 'user stored procedure'), żeby potem łatwo było je odróżnić od funkcji czy triggerów. Przy dużym projekcie pozwala to zachować porządek. No i nie można zapominać o wersjonowaniu takich procedur – w firmach często stosuje się repozytoria kodu SQL. Generalnie, w środowisku produkcyjnym, każda nowa procedura powinna zaczynać się właśnie od 'create procedure', bez żadnych skrótów czy zamienników.

Pytanie 40

W pokazanych fragmentach kodu zdefiniowano funkcję o nazwie fun1. W tej funkcji należy zaimplementować obsługę. Fragment kodu interfejsu użytkownika (XAML):

<RadioButton Content="opcja1" />
<RadioButton Content="opcja2" />
<Button Content="OK" Width=75 Click="fun1"/>
Fragment kodu logiki programu (C#):
private void fun1(object sender, RoutedEventArgs e) { ... }
A. aplikacji po wystąpieniu zdarzenia utraty fokusu przez pole opcji
B. inicjacji elementów interfejsu użytkownika
C. naciśnięcia przycisku zatwierdzającego dialog
D. usunięcia kontrolek z pamięci RAM
Obsługa zdarzeń związanych z przyciskami zatwierdzającymi dialogi jest kluczową częścią interakcji użytkownika z aplikacją. W wielu środowiskach programistycznych, takich jak JavaScript, C# czy Java, przyciski te wywołują funkcje obsługi zdarzeń (event handlers), które mogą walidować dane, przetwarzać informacje lub wykonywać inne działania po naciśnięciu przycisku. Implementacja funkcji obsługującej przycisk jest nieodzowna w aplikacjach graficznych, gdzie interakcja z użytkownikiem wymaga dynamicznego reagowania na jego działania. Dzięki temu aplikacje stają się bardziej interaktywne i responsywne, co zwiększa komfort użytkownika i poprawia ogólną użyteczność oprogramowania.