Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Programista umieścił poniższą linię kodu w pliku HTML, aby

<script src="jquery-3.5.1.min.js"></script>
A. zadeklarować własną funkcję JavaScript o nazwie min.js
B. skorzystać z funkcji biblioteki jQuery, która była wcześniej pobrana i zapisana lokalnie
C. wstawić kod JavaScript pomiędzy znacznikami &lt;script&gt;&lt;/script&gt;
D. pobrać z Internetu w momencie otwierania strony i użyć biblioteki jQuery
W kontekście załączonego kodu HTML należy zauważyć, że jego celem jest przede wszystkim załadowanie lokalnej kopii zewnętrznej biblioteki JavaScript, w tym przypadku jQuery. Koncepcja umieszczania kodu JavaScript pomiędzy znacznikami script dotyczy innego sposobu osadzania kodu, gdzie kod JavaScript jest bezpośrednio wpisywany pomiędzy te znaczniki, a nie poprzez atrybut src. Taki sposób jest często używany dla krótkich skryptów lub gdy nie korzystamy z zewnętrznych bibliotek. Pobieranie z Internetu w momencie odsłony strony i zastosowanie biblioteki jQuery wymagałoby wskazania zewnętrznego adresu URL w atrybucie src, co nie ma miejsca w przypadku lokalnie zapisanych plików. Wskazywanie na adres URL pozwala na dynamiczne ładowanie bibliotek z zewnętrznych serwerów, co jest powszechną praktyką dla bibliotek o szerokim zastosowaniu, takich jak jQuery, jednak w tym pytaniu mowa jest o pliku lokalnym. Deklarowanie własnej funkcji JavaScript o nazwie min.js jest nieporozumieniem. min.js zwykle wskazuje na zminifikowaną wersję skryptu, co oznacza zoptymalizowaną pod kątem rozmiaru wersję biblioteki, a nie nazwę funkcji. Rodzi to błędne przekonanie co do znaczenia struktury nazw w kontekście plików JavaScript i ich stosowania. Ważne jest, aby rozróżniać lokalne i zdalne metody załadowania zasobów i zrozumieć kiedy i dlaczego każda z nich jest stosowana w praktyce projektowej.

Pytanie 2

Które z wymienionych narzędzi najlepiej chroni dane na urządzeniach mobilnych?

A. Hasło ustawione na urządzeniu
B. Szyfrowanie danych na urządzeniu
C. Nieaktualne oprogramowanie
D. Zainstalowanie aplikacji rozrywkowych
Szyfrowanie danych na urządzeniu przenośnym to jedna z najskuteczniejszych metod zabezpieczania poufnych informacji. Szyfrowanie przekształca dane w formę, która jest nieczytelna dla osób nieposiadających odpowiedniego klucza deszyfrującego. Dzięki temu, nawet jeśli urządzenie zostanie zgubione lub skradzione, dane pozostają zabezpieczone przed nieautoryzowanym dostępem. Szyfrowanie to standardowa praktyka stosowana przez największe firmy technologiczne i jest zalecana we wszystkich urządzeniach przenośnych, takich jak laptopy i smartfony.

Pytanie 3

Jaki framework umożliwia tworzenie interaktywnych interfejsów użytkownika w języku TypeScript?

A. jQuery
B. Django
C. Angular
D. ASP.NET Core
Angular to popularny framework oparty na TypeScript, który umożliwia tworzenie dynamicznych i rozbudowanych interfejsów użytkownika. Jest rozwijany przez Google i używany do budowy aplikacji typu Single Page Applications (SPA), które cechują się płynnością działania i interaktywnością. Angular oferuje bogaty ekosystem narzędzi wspierających programistów, takich jak Angular CLI, który pozwala na szybkie generowanie komponentów, serwisów i modułów. Wsparcie dla TypeScript oznacza, że Angular pozwala na wykorzystywanie typów, interfejsów oraz zaawansowanych narzędzi do refaktoryzacji kodu, co przekłada się na większą czytelność i bezpieczeństwo aplikacji. Dzięki modularnej architekturze Angular wspiera tworzenie aplikacji, które są łatwe w utrzymaniu i skalowaniu. Jego dwukierunkowe wiązanie danych (two-way data binding) oraz możliwość dynamicznej aktualizacji widoków czynią go jednym z liderów na rynku frameworków frontendowych.

Pytanie 4

Jakie obliczenia można wykonać za pomocą poniższego algorytmu, który operuje na dodatnich liczbach całkowitych?

Ilustracja do pytania
A. sumę cyfr wprowadzonej liczby
B. liczbę cyfr w wprowadzonej liczbie
C. sumę wprowadzonych liczb
D. największy wspólny dzielnik wprowadzonej liczby
Analizując algorytm przedstawiony na schemacie, łatwo zauważyć, że nie wykonuje on ani sumowania cyfr, ani nie oblicza największego wspólnego dzielnika, ani nie sumuje wprowadzonych liczb. W praktyce mylenie tych operacji wynika często z pobieżnego czytania algorytmu lub automatycznego kojarzenia słowa „wynik” z sumą. Jednak podstawą analizy algorytmów zawsze powinno być zwracanie uwagi na konkretne instrukcje i sposób przetwarzania danych. W tym przypadku liczba jest dzielona przez 10 w każdej iteracji pętli, a licznik jest zwiększany o jeden za każdym razem, gdy to się dzieje. Nie ma tu żadnego dodawania poszczególnych cyfr, co wyklucza sumowanie cyfr. Nie pojawia się przetwarzanie wielu różnych liczb, więc niemożliwe jest sumowanie wprowadzonych liczb – algorytm pracuje wyłącznie na jednej wartości podanej na wejściu. Narzędzie do obliczania największego wspólnego dzielnika musiałoby operować na dwóch liczbach i wykorzystywać inne operacje, jak reszta z dzielenia. Typowym błędem jest też utożsamianie każdej pętli z operacją sumowania lub łączenia danych, co w tym przypadku nie ma uzasadnienia merytorycznego. Kluczowe jest przy analizie algorytmów zwracanie uwagi na to, jakie operacje są wykonywane w każdej iteracji i czy pojawia się obsługa wielu wartości, czy tylko jednej. Z mojego doświadczenia wynika, że takie drobne błędy myślowe prowadzą często do fałszywych wniosków, dlatego warto dokładnie czytać algorytm krok po kroku i analizować, do czego rzeczywiście prowadzą poszczególne instrukcje. W tym przypadku algorytm po prostu liczy liczbę dziesiętnych „pozycji” w liczbie aż do jej wyzerowania, co odpowiada liczbie cyfr, a nie żadnej z pozostałych interpretacji.

Pytanie 5

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

Pytanie 6

Która z wymienionych metod najlepiej chroni komputer przed złośliwym oprogramowaniem?

A. Unikanie używania publicznych sieci Wi-Fi
B. Stosowanie mocnych haseł
C. Cykliczne wykonywanie kopii zapasowych
D. Właściwie zaktualizowany program antywirusowy
Program antywirusowy to naprawdę istotna rzecz, jeśli chodzi o ochronę komputerów przed złośliwym oprogramowaniem. On w zasadzie non stop monitoruje nasz system i ma za zadanie wyłapywać różne wirusy, trojany, a nawet ransomware, co jest bardzo ważne. Pamiętaj, żeby regularnie aktualizować bazy wirusów, bo dzięki temu będziesz miał zabezpieczenie przed najnowszymi zagrożeniami. Warto też zauważyć, że wiele programów antywirusowych ma dodatkowe opcje, jak na przykład monitorowanie stron www, czy skanowanie e-maili i plików, które pobierasz. To wszystko razem daje lepszą ochronę.

Pytanie 7

W zestawieniu zaprezentowano doświadczenie zawodowe pracowników firmy IT. Do stworzenia aplikacji front-end powinien/powinna zostać wyznaczony/a

PracownikZnajomość technologii lub programów
AnnaInkscape, Corel Draw
KrzysztofAngular
PatrykHTML, CSS
EwaDjango, .NET
A. Anna
B. Patryk
C. Ewa
D. Krzysztof
Krzysztof to naprawdę świetny wybór na budowę aplikacji front-end, bo zna Angulara, który jest jednym z najpopularniejszych frameworków do aplikacji jednostronicowych. Dzięki Angularowi można tworzyć dynamiczne i responsywne interfejsy, co jest mega ważne w projektach front-end. Ogólnie rzecz biorąc, ten framework opiera się na komponentach, co zdecydowanie ułatwia pracę z kodem i pozwala na jego ponowne wykorzystanie. W połączeniu z TypeScriptem, Angular daje duże możliwości, bo mocne typowanie zmniejsza ryzyko błędów i poprawia czytelność kodu. Zrozumienie, jak działa aplikacja i jakie są dobre praktyki, takie jak modularność czy testowanie, też jest istotne, żeby wykorzystać Angulara w pełni. Krzysztof ma tę wiedzę i potrafi wdrażać najlepsze praktyki, jak architektura MVC, co sprawia, że aplikacje są bardziej skalowalne i łatwiejsze w utrzymaniu. Dodatkowo, Angular robi też sporo, żeby aplikacje działały szybko, co jest ważne dla doświadczenia użytkownika. Dlatego wybierając Krzysztofa, mamy pewność, że projekt będzie zgodny z nowymi standardami i spełni oczekiwania użytkowników w zakresie interfejsu.

Pytanie 8

Która z właściwości przycisków typu Radio-button opisanych w przedstawionym fragmencie dokumentacji jest poprawna?

Radio-button label

... The label can be positioned before or after the radio-button by setting the labelPosition property to 'before' or 'after'.

Radio groups

Radio-buttons should typically be placed inside of an <mat-radio-group> unless the DOM structure would make that impossible ... The radio-group has a value property that reflects the currently selected radio-button inside of the group.

Źródło: https://material.angular.io/components/radio/overview

A. Wartość właściwości value grupy radio przechowuje tekst etykiety dla każdego radio-button
B. Właściwość labelPosition może przyjmować jedną z dwóch opcji
C. Etykieta (label) może być umieszczona wyłącznie po przycisku radio-button
D. Przyciski radio-button są organizowane w elemencie o nazwie <radio-group>
Właściwość labelPosition w przyciskach typu radio-button, szczególnie w popularnych bibliotekach jak Angular Material, naprawdę potrafi ułatwić życie programiście. Jej działanie sprowadza się do tego, że pozwala określić, czy etykieta powinna być wyświetlana przed, czy po elemencie radio. Można ustawić tę właściwość na 'before' albo 'after'. Nie brzmi skomplikowanie, ale znaczenie praktyczne jest ogromne – czasem projekt graficzny wymaga, by tekst pojawił się z lewej strony guzika, a czasem z prawej. Dobre praktyki UX też to uwzględniają, bo zgodność z oczekiwaniami użytkownika poprawia czytelność formularzy. Moim zdaniem, jeśli budujesz interfejs dla internautów z różnych środowisk kulturowych (np. z językiem pisanym od prawej do lewej), ta opcja jest wręcz niezbędna. Warto też pamiętać, że takie ustawienie można łatwo nadpisywać na poziomie pojedynczego przycisku, co daje dużą elastyczność. W większości poważnych frameworków webowych, np. Angularze, ta właściwość jest dokumentowana jako podstawowa, bo daje deweloperowi kontrolę bez grzebania w CSS-ach. Sam nie raz korzystałem z labelPosition, szczególnie w korporacyjnych projektach, gdzie musiałem spełniać szczegółowe wymagania projektantów – dzięki temu oszczędza się czas i nerwy.

Pytanie 9

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.

Pytanie 10

Jakie wartości jest w stanie przechować zmienna o typie logicznym?

A. Tylko ciąg znaków
B. Jedną z dwóch opcji: true lub false
C. Wartość w reprezentacji binarnej
D. Dowolną liczbę rzeczywistą
Zmienna typu logicznego (boolean) może przechowywać jedną z dwóch wartości: 'true' lub 'false'. Są to podstawowe wartości wykorzystywane w operacjach warunkowych i pętlach, które decydują o przepływie sterowania w programach. Wartości logiczne są kluczowe w konstrukcjach takich jak 'if-else', pętlach 'while' oraz w porównaniach. W wielu językach programowania 'true' jest równoznaczne z 1, a 'false' z 0, co pozwala na łatwą integrację z typami całkowitymi. Typ boolean jest niezbędny w programowaniu, umożliwiając implementację decyzji, walidacji danych i automatyzacji procesów.

Pytanie 11

Wskaż uproszczoną wersję kodu XAML dla elementów w pokazanym oknie dialogowym?

Ilustracja do pytania
A. Kod 4
B. Kod 3
C. Kod 2
D. Kod 1
Dobrze jest znać podstawowe różnice pomiędzy ListBox, ComboBox, CheckBox, RadioButton oraz Label w XAML. W tym oknie dialogowym widać wyraźnie, że po lewej stronie użytkownik ma możliwość wyboru gatunku zwierzęcia spośród kilku opcji wyświetlonych jednocześnie. Takie zadanie najlepiej spełnia ListBox, bo umożliwia wygodną selekcję z widocznej listy. U góry po prawej jest pole tekstowe do wpisania imienia zwierzaka, więc TextBox jak najbardziej pasuje. Poniżej mamy dwa pola wyboru – „Zaszczepiony?” i „Na diecie?” – to są typowe przypadki na CheckBoxy: można zaznaczyć dowolne lub oba naraz. Kluczowe jest to, że CheckBox pozwala użytkownikowi wybrać dowolną kombinację, a nie tylko jedną opcję jak RadioButton. Z mojego doświadczenia często początkujący mylą ComboBox z ListBoxem, ale tu akurat lista jest zawsze widoczna, co jest typowe dla ListBoxa. Stosowanie CheckBoxów dla takich dwustanowych opcji też jest zgodne z dobrymi praktykami UX i standardami opisu formularzy w XAML. W pracy zawodowej często się to wykorzystuje, bo kod jest czytelny i łatwo go rozszerzać. Właśnie taki zestaw – ListBox, TextBox, CheckBox – jest najbardziej przejrzysty i zgodny z zamysłem projektanta interfejsów. Fajnie jest to zapamiętać, bo ta kombinacja pojawia się w wielu firmowych projektach.

Pytanie 12

W zestawieniu przedstawiono doświadczenie zawodowe członków zespołu IT. Osobą odpowiedzialną za stworzenie aplikacji front-end powinna być:

PracownikZnajomość technologii/programów
AnnaInscape, Corel Draw
KrzysztofAngular
PatrykHTML, CSS
EwaDjango, .NET
A. Patryk
B. Krzysztof
C. Anna
D. Ewa
Wybór Krzysztofa jako osoby odpowiedzialnej za stworzenie aplikacji front-end jest zdecydowanie trafiony. Angular to obecnie jedno z najpopularniejszych frameworków do budowy zaawansowanych aplikacji webowych, które wykorzystują wiele komponentów, obsługują dynamiczne interfejsy użytkownika i muszą być skalowalne. Angular pozwala efektywnie zarządzać logiką front-endu, stanami aplikacji oraz integracją z backendem. Z mojego doświadczenia wynika, że osoby znające Angulara są w stanie nie tylko napisać klasyczny interfejs w HTML i CSS, ale również wdrożyć bardziej rozbudowane rozwiązania zgodne ze współczesnymi standardami, takimi jak SPA (single-page application). Praktyka pokazuje, że projekty front-endowe na dużą skalę, bez frameworków takich jak Angular, React czy Vue, bardzo szybko stają się nieczytelne i trudne w utrzymaniu. Krzysztof, mając doświadczenie z Angularem, będzie też znał TypeScript, który jest już właściwie standardem w dużych projektach front-endowych. To daje też lepszą kontrolę nad błędami i czytelność kodu, a to się liczy w zespole. Co ciekawe, w ofertach pracy na front-end developera, znajomość Angulara jest jednym z najczęściej wymienianych wymagań, właśnie przez wzgląd na szeroki zakres zastosowań i wsparcie społeczności. Tak naprawdę, jeżeli zależy nam na wydajnym, nowoczesnym i dobrze zaprojektowanym interfejsie użytkownika, Krzysztof jest tutaj najlepszym wyborem. Często początkujący myślą, że wystarczy sam HTML i CSS, ale prawdziwa praca front-endowca to już zupełnie wyższa liga. Szczerze mówiąc, mając taką osobę w zespole, można spać spokojnie, że front-end będzie wykonany zgodnie z branżowymi standardami.

Pytanie 13

Jaki środek ochronny najlepiej chroni przed hałasem w biurze?

A. Mata antypoślizgowa
B. Okna zamknięte
C. Panele akustyczne wygłuszające
D. Lampy biurowe o niskim poziomie natężenia światła
Wygłuszające panele akustyczne to jedno z najlepszych rozwiązań w celu ograniczenia hałasu w biurach i innych miejscach pracy. Panele te redukują odbicia dźwięku i zmniejszają natężenie hałasu, co przekłada się na poprawę koncentracji oraz zmniejszenie zmęczenia i stresu. W biurach typu open space panele akustyczne znacząco poprawiają komfort pracy, umożliwiając prowadzenie rozmów bez nadmiernego zakłócania pracy innych osób. Dodatkowo, wygłuszenie pomaga w ochronie zdrowia pracowników, redukując ryzyko utraty słuchu w miejscach, gdzie występuje wysoki poziom hałasu. Odpowiednie rozmieszczenie paneli pozwala także na lepsze zarządzanie akustyką całego pomieszczenia.

Pytanie 14

Jakie operacje na plikach można uznać za podstawowe?

A. Zmiana rozszerzenia plików podczas działania programu
B. Otwieranie, zapisywanie, odczytywanie, zamykanie
C. Usuwanie oraz tworzenie nowych plików
D. Jedynie otwieranie oraz zamykanie plików
Podstawowe operacje na plikach obejmują otwieranie, zapisywanie, odczytywanie i zamykanie. Te cztery operacje są fundamentem zarządzania plikami w programowaniu i pozwalają na efektywne przechowywanie oraz przetwarzanie danych. Otwarcie pliku umożliwia dostęp do jego zawartości, zapis pozwala na modyfikację lub tworzenie nowych plików, odczyt umożliwia pobieranie danych, a zamknięcie pliku zapewnia integralność danych i zwalnia zasoby systemowe. W wielu językach, takich jak C++, Java czy Python, operacje te są realizowane za pomocą dedykowanych funkcji i klas, co ułatwia ich implementację w kodzie.

Pytanie 15

1 terabajt (TB) to ile gigabajtów (GB)?

A. 1000
B. 2048
C. 1024
D. 512
No to fajnie, że trafiłeś w temat! 1 terabajt (TB) to 1024 gigabajty (GB), co wynika z systemu binarnego, który w IT jest najczęściej używany. Trochę technicznie mówiąc, 1 TB to tak naprawdę 2^40 bajtów, co daje nam ogromną liczbę – dokładnie 1 099 511 627 776 bajtów. Jak podzielisz to przez 1 073 741 824 bajtów, które to są 1 GB, to wyjdzie 1024 GB. Warto wiedzieć, że w świecie komputerów i systemów operacyjnych operujemy głównie na tym systemie binarnym. Ale uwaga, bo producenci dysków często podają pojemności w systemie dziesiętnym, i wtedy 1 TB to jakby 1 000 GB. To może wprowadzać zamieszanie, więc dobrze jest sprawdzać specyfikacje i mieć to na uwadze, żeby nie było nieporozumień. Większość systemów, jak Windows czy Linux, działa w tym binarnym, więc warto to znać, gdyż to ułatwia pracę zarówno użytkownikom, jak i fachowcom z branży IT.

Pytanie 16

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

A. Zamieszczanie wszystkich szczegółów dotyczących swojego życia prywatnego
B. Dzieleni się swoimi danymi dostępowymi z przyjaciółmi
C. Weryfikacja ustawień prywatności na platformach społecznościowych
D. Niepotwierdzanie źródeł publikowanych informacji
Sprawdzanie ustawień prywatności na portalach społecznościowych jest kluczowe dla ochrony cyfrowego wizerunku. Regularne aktualizowanie ustawień prywatności pozwala na kontrolowanie, kto ma dostęp do publikowanych treści, co chroni przed nieuprawnionym wykorzystaniem zdjęć, filmów i informacji osobistych. Dostosowanie widoczności postów oraz ograniczenie udostępniania danych osobowych minimalizuje ryzyko kradzieży tożsamości i cyberprzemocy. To proste działanie znacząco podnosi poziom bezpieczeństwa w sieci i pozwala utrzymać pozytywny wizerunek w internecie.

Pytanie 17

Jaką komendę w języku C++ używa się do wielokrotnego uruchamiania tego samego bloku kodu?

A. while
B. break
C. switch
D. if
Instrukcja `while` w języku C++ i innych językach programowania pozwala na wielokrotne wykonanie tego samego fragmentu kodu, dopóki warunek logiczny jest spełniony. Przykład: `while (x < 10) { x++; }` będzie zwiększać zmienną `x` o 1, dopóki jej wartość nie osiągnie 10. Pętle `while` są przydatne, gdy liczba iteracji nie jest z góry znana i zależy od spełnienia określonego warunku w trakcie wykonywania programu.

Pytanie 18

Jaką funkcję pełnią mechanizmy ciasteczek w aplikacjach internetowych?

A. Do przechowywania informacji w bazie danych
B. Do zapisywania danych użytkownika w przeglądarce
C. Do zapisywania danych użytkownika na serwerze
D. Do generowania dynamicznych interfejsów dla użytkowników
Mechanizm ciasteczek (cookies) w aplikacjach webowych służy do przechowywania danych użytkownika bezpośrednio w przeglądarce. Ciasteczka mogą przechowywać różnego rodzaju informacje, takie jak preferencje językowe, identyfikatory sesji czy dane logowania, co pozwala na personalizację doświadczenia użytkownika oraz śledzenie jego aktywności na stronie. Dzięki ciasteczkom aplikacje webowe mogą zapamiętać użytkownika i dostosować treści do jego potrzeb przy kolejnych wizytach. Cookies są nieodłącznym elementem zarządzania stanem w aplikacjach stateless, takich jak te oparte na protokole HTTP. Mogą być one również wykorzystywane w systemach reklamowych i analitycznych do monitorowania zachowań użytkowników. Prawidłowe zarządzanie ciasteczkami i stosowanie odpowiednich polityk prywatności są kluczowe dla zgodności z przepisami RODO oraz regulacjami dotyczącymi ochrony danych osobowych.

Pytanie 19

Jakie jest fundamentalne zagadnienie w projektowaniu aplikacji w architekturze klient-serwer?

A. Funkcjonowanie aplikacji wyłącznie w trybie offline
B. Przeniesienie wszystkich obliczeń na stronę klienta
C. Brak podziału na role klienta i serwera
D. Użycie serwera jako głównego miejsca przetwarzania danych
Użycie serwera jako centralnego miejsca przetwarzania danych jest kluczowym elementem architektury klient-serwer. Serwer pełni rolę centralnego punktu, który zarządza żądaniami klientów, przechowuje dane i zapewnia odpowiedzi na zapytania. Taki model zapewnia większe bezpieczeństwo danych, ułatwia zarządzanie zasobami i umożliwia skalowanie aplikacji w miarę wzrostu liczby użytkowników. Architektura klient-serwer jest szeroko stosowana w aplikacjach webowych, systemach bankowych oraz usługach chmurowych, gdzie konieczna jest centralizacja danych i ich ochrona.

Pytanie 20

Jakie jest wymagane minimalne natężenie światła w biurze na stanowisku pracy?

A. 500 lx
B. 800 lx
C. 100 lx
D. 200 lx
Minimalne natężenie oświetlenia, jakie powinno być w biurze, to 500 lx (luksów). To taki standard, który ustalono w normach BHP i ergonomii. Dzięki temu lepiej się pracuje przy komputerze i łatwiej robić zadania, które wymagają dobrego wzroku. Odpowiednie oświetlenie zdecydowanie zmniejsza zmęczenie oczu i poprawia koncentrację, co jest istotne, żeby uniknąć bólów głowy i być bardziej efektywnym w pracy. Ważne, żeby światło było równomierne i nie odbijało się na monitorze, bo to może rozpraszać. Warto dbać o takie warunki, bo to zmniejsza ryzyko problemów ze wzrokiem, a komfort pracy jest mega ważny, zwłaszcza gdy ktoś spędza dużo czasu przed komputerem.

Pytanie 21

Wskaż fragment kodu, który stanowi realizację przedstawionego algorytmu w języku C++.

Kod 1
do {
  suma = suma + i;
} while (suma <= liczba);
cout << suma;
Kod 2
if (suma <= liczba) {
  suma = suma + i;
  i++;
}
else
  cout << suma;
Kod 3
for (i = suma; i <= liczba; i++)
  suma = suma + i;
else
  cout << suma;
Kod 4
while (suma <= liczba) {
  suma = suma + i;
  i++;
}
cout << suma;
Ilustracja do pytania
A. kod 4
B. kod 3
C. kod 2
D. kod 1
Wybrałeś fragment kodu, który faktycznie odwzorowuje logikę schematu blokowego: najpierw sprawdzamy warunek suma <= liczba, a dopiero gdy jest spełniony, wchodzimy do pętli, dodajemy i do zmiennej suma, inkrementujemy licznik i i wracamy do ponownego sprawdzenia warunku. To jest klasyczne zastosowanie pętli while, czyli sytuacji, kiedy nie znamy liczby iteracji z góry, ale wiemy, kiedy mamy skończyć – w tym wypadku, gdy suma przekroczy wartość graniczną liczba. Z mojego doświadczenia właśnie tak wygląda typowy fragment kodu sumujący kolejne liczby naturalne, dopóki nie zostanie osiągnięty limit. Ważne jest też to, że instrukcja wypisania wyniku znajduje się dopiero za pętlą, więc zostanie wykonana dokładnie raz, po zakończeniu obliczeń, co idealnie zgadza się z blokiem pisz suma na schemacie. W dobrych praktykach programistycznych zawsze pilnujemy, żeby warunek pętli dokładnie odpowiadał opisowi w algorytmie, a modyfikacja zmiennych sterujących, takich jak suma i i, była wykonywana wewnątrz pętli w spójny sposób. Taka konstrukcja jest potem łatwa w utrzymaniu, przeniesieniu do innych języków czy modyfikacji, na przykład można bez problemu zmienić warunek na suma < liczba albo dodać dodatkowe sprawdzenie, czy i nie rośnie za szybko. W praktycznych projektach, np. przy obliczaniu sum kontrolnych, limitów budżetowych, punktów gracza w grze, dokładnie taki wzorzec while warunek, obliczenia, inkrementacja, wypisz wynik pojawia się naprawdę często.

Pytanie 22

Które z wymienionych działań, które są częścią procesu kreowania prostej galerii zdjęć w formie aplikacji mobilnej, powinno być realizowane przez zespół?

A. Przygotowanie testu jednostkowego dla funkcji przegladajZdjecia()
B. Przygotowanie i konfiguracja repozytorium dla projektu
C. Stworzenie dokumentacji kodu aplikacji
D. Wdrożenie funkcji dodajZdjecie()
Utworzenie dokumentacji kodu aplikacji jest zadaniem zespołowym, gdyż wymaga współpracy kilku osób, które muszą zrozumieć ogólną architekturę projektu oraz zasady, jakie powinny zostać zastosowane w dokumentacji. Dokumentacja kodu jest kluczowa dla przyszłej konserwacji i rozwoju aplikacji, a jej przygotowanie powinno obejmować nie tylko opis funkcji i klas, ale także konwencje nazewnictwa, style kodowania oraz strategie testowania. Przykładem może być zastosowanie standardu JSDoc, który pozwala na generowanie dokumentacji z komentarzy w kodzie, co ułatwia zrozumienie struktury i funkcjonowania aplikacji. Dobra dokumentacja zapewnia, że nowi członkowie zespołu będą mogli szybko odnaleźć się w projekcie. Zespołowa praca nad dokumentacją gwarantuje, że wszystkie aspekty projektu zostaną uwzględnione i odpowiednio udokumentowane, co jest niezbędne dla efektywności projektu.

Pytanie 23

W zamieszczonym fragmencie kodu Java wskaż nazwę zmiennej, która może przechować wartość 'T'.

int zm1;
float zm2;
char zm3;
boolean zm4;
A. zm3
B. zm1
C. zm2
D. zm4
Poprawnie wskazana została zmienna 'zm3', której typ to 'char'. To właśnie zmienne typu 'char' w Javie służą do przechowywania pojedynczych znaków, takich jak na przykład litera 'T'. Zmienna 'char' przechowuje znak jako wartość liczbową zgodnie z kodowaniem Unicode, co pozwala na obsługę szerokiego zakresu znaków z różnych alfabetów. W praktyce często spotyka się sytuacje, gdzie potrzebujemy przechować czy odczytać pojedynczy znak – np. literę przy przetwarzaniu tekstu, analizowaniu plików, czy nawet w prostych grach tekstowych, gdzie np. sterowanie postacią opiera się o pojedyncze litery wciskane na klawiaturze. Moim zdaniem dobre zrozumienie typu 'char' to podstawa, bo łatwo pomylić go z typem 'String', który przechowuje jednak całe ciągi znaków, a nie pojedyncze znaki. Z punktu widzenia dobrych praktyk, zawsze warto dobierać możliwie najwęższy typ danych do zadania – jeżeli chcemy przechować jedną literę, typ 'char' jest po prostu najefektywniejszy. Nawiasem mówiąc, w Javie znak umieszczamy w pojedynczych apostrofach (np. 'T'), co jednoznacznie odróżnia je od tekstów (podwójne cudzysłowy). Osobiście zdarzało mi się kiedyś pomylić te typy i potem szukać błędów, więc warto zapamiętać tę różnicę. Warto też wiedzieć, że typ 'char' przydaje się np. do operacji na znakach w tablicach, przy konwersjach kodów ASCII czy nawet szyfrowaniu prostych tekstów. Zdecydowanie jest to typ, którego nie można pominąć w nauce Javy.

Pytanie 24

Jakie znaczenie ma framework w kontekście programowania?

A. System operacyjny, który umożliwia uruchamianie aplikacji
B. Program do graficznego projektowania interfejsów użytkownika
C. Moduł do zarządzania systemami baz danych
D. Zbiór gotowych bibliotek, narzędzi i zasad ułatwiających tworzenie aplikacji
Framework to zbiór gotowych bibliotek, narzędzi i reguł, które wspierają tworzenie aplikacji poprzez dostarczanie struktury ułatwiającej pracę programistów. Frameworki definiują standardowe komponenty aplikacji, umożliwiając programistom skoncentrowanie się na logice biznesowej zamiast na podstawowej architekturze aplikacji. Przykłady popularnych frameworków to .NET, Angular, Django i Spring. Frameworki przyspieszają proces programowania, poprawiają jakość kodu i wspierają skalowalność aplikacji, co czyni je nieodłącznym elementem nowoczesnego programowania.

Pytanie 25

Który z wymienionych poniżej wzorców projektowych można zakwalifikować jako wzorzec strukturalny?

A. Metoda szablonowa (Template method)
B. Fabryka abstrakcyjna (Abstract Factory)
C. Fasada (Facade)
D. Obserwator (Observer)
Metoda Szablonowa (Template Method) to wzorzec behawioralny, który definiuje sposób realizacji algorytmu. Fabryka Abstrakcyjna (Abstract Factory) to wzorzec kreacyjny, który koncentruje się na tworzeniu obiektów bez określania ich konkretnych klas. Wzorzec Obserwator (Observer) to wzorzec behawioralny, który umożliwia powiadamianie obiektów o zmianach stanu innego obiektu, co jest kluczowe w implementacji reaktywnych systemów, ale nie jest przykładem wzorca strukturalnego.

Pytanie 26

Prezentowana metoda jest realizacją algorytmu

public static String fun1(String str) {
    String output = " ";
    for (var i = (str.length()-1); i >= 0; i--)
        output += str.charAt(i);
    return output;
}
A. odwracającego ciąg
B. wyszukującego literę w ciągu
C. sprawdzającego, czy dany ciąg jest palindromem
D. sortującego ciąg od znaku o najniższym kodzie ASCII do znaku o najwyższym kodzie
W tym zadaniu chodziło o rozpoznanie, co właściwie robi metoda fun1. Jeśli przeanalizujesz kod, to widać, że w pętli for program przechodzi przez wszystkie znaki wejściowego łańcucha od końca do początku i dokleja je do zmiennej output. Efekt? Zwracany napis jest po prostu oryginalnym tekstem zapisanym wspak, czyli odwróconym. To bardzo prosty przykład algorytmu odwracania ciągu znaków. W praktyce takie rozwiązania przydają się choćby wtedy, gdy chcemy sprawdzić, czy łańcuch jest palindromem (choć samo odwracanie to tylko pierwszy krok), przy szyfrowaniu prostymi metodami czy podczas manipulacji danymi wejściowymi, na przykład w edytorach tekstu lub różnych parserach. Moim zdaniem, warto pamiętać o dobrych praktykach – w Javie, jeśli masz do czynienia z wieloma operacjami na napisach, lepiej używać StringBuildera zamiast tworzyć nowe Stringi, bo jest to wydajniejsze pod kątem zarządzania pamięcią. Dla ciekawych: w bibliotekach standardowych Javy już istnieją gotowe narzędzia do odwracania ciągów (np. StringBuilder.reverse()), ale znajomość działania takiego algorytmu pozwala lepiej zrozumieć, jak działają operacje na napisach "pod spodem". Z mojego doświadczenia, umiejętność samodzielnego napisania takich prostych funkcji bardzo pomaga przy nauce bardziej zaawansowanych algorytmów tekstowych oraz rozwija wyobraźnię programistyczną.

Pytanie 27

W aplikacji mobilnej, aby określić warianty grafiki w zależności od wielkości ekranu, należy (uwaga: odpowiedzi wariantowe dla dwóch systemów - sugerować się systemem omawianym na zajęciach)

A. iOS: dodać do nazw sufiksy #2x, #3x. Android: dodać do nazw sufiks rozdzielczości: -32x32, -64x64, -96x96
B. iOS: dodać do nazw sufiksy oznaczające rozdzielczość, np. 32ppi. Android: umieścić grafikę w odpowiednich katalogach: 32ppi, 64ppi, 96ppi
C. iOS: dodać do nazw plików sufiksy @2x, @3x. Android: umieścić grafikę w odpowiednich folderach drawable: -hdpi, -xhpi, xxhdpi
D. iOS: utworzyć katalogi hdpi, lhpi, xhpi i dodać do nich grafiki. Android: utworzyć katalogi 32x32, 64x64, 96x96 i dodać do nich grafiki
Kiedy chcemy, żeby grafiki w aplikacjach mobilnych wyglądały dobrze na różnych ekranach, musimy zastosować odpowiednie strategie, które zależą od platformy. Na iOS używa się przyrostków @2x lub @3x, co oznacza, że grafiki są przygotowane dla ekranów Retina, które mają wyższą gęstość pikseli. Na Androidzie z kolei, grafiki umieszcza się w folderach drawable z takimi nazwami jak -hdpi, -xhdpi czy -xxhdpi. Dzięki temu system wie, jaką wersję grafiki wybrać w zależności od rozdzielczości urządzenia. Moim zdaniem, taki system pozwala na super jakość obrazów i lepszą wydajność aplikacji.

Pytanie 28

Który z operatorów w Pythonie umożliwia sprawdzenie, czy dany element należy do listy?

A. and
B. is
C. ==
D. in
Operator `==` służy do porównywania dwóch wartości, ale nie sprawdza przynależności do listy czy zbioru. Operator `is` porównuje obiekty pod względem tożsamości (czy wskazują na ten sam obiekt w pamięci), co różni się od `in`, który porównuje wartości. Operator `and` to operator logiczny, który sprawdza, czy dwie wartości są prawdziwe (`True`), ale nie jest używany do wyszukiwania elementów w listach czy zbiorach. Każdy z tych operatorów pełni inną funkcję niż `in`, który jest dedykowany do sprawdzania przynależności elementów do kolekcji.

Pytanie 29

Jakie elementy zostaną wyświetlone w przeglądarce po wykonaniu kodu źródłowego stworzonego za pomocą dwóch funkcjonalnie równoważnych fragmentów? KOD W ANGULAR:

tags: string[] = ['tag1', 'tag2', 'tag3' ];
// ...
<p *ngFor="let tag of tags"> {{tag}} </p>
KOD W REACT.JS:
state = {   tags: ['tag1', 'tag2', 'tag3']   };
// ...   /* w instrukcji return metody render */
<React.Fragment>
  { this.state.tags.map(tag => <p key={tag}>{tag}</p>) }
</React.Fragment>
A. Trzy paragrafy, w każdym z nich tekst o treści: {tag}.
B. Jeden paragraf zawierający wszystkie elementy tablicy tags w kolejności.
C. Trzy paragrafy, każdy odpowiadający kolejnemu elementowi tablicy tags.
D. Jeden paragraf z pierwszym elementem tablicy tags.
Generowanie jednego paragrafu zawierającego wszystkie elementy tablicy nie pozwala na elastyczne formatowanie i stylizację każdego elementu osobno. Taka implementacja jest rzadziej stosowana, ponieważ ogranicza kontrolę nad poszczególnymi elementami interfejsu. Wyświetlanie tylko pierwszego elementu tablicy jest błędem logicznym i pomija pozostałe dane, co prowadzi do niepełnego wyświetlenia informacji. Wygenerowanie trzech paragrafów z identyczną treścią '{tag}' sugeruje błędne odwołanie do zmiennej, co oznacza, że iteracja została przeprowadzona nieprawidłowo lub że niepoprawnie użyto zmiennej w szablonie.

Pytanie 30

Użycie modyfikatora abstract w definicji metody w klasie wskazuje, że

A. klasa ta stanowi podstawę dla innych klas
B. dziedziczenie po tej klasie jest niedozwolone
C. klasy pochodne nie mogą implementować tej metody
D. trzeba zaimplementować tę metodę w tej klasie
Modyfikator abstract w definicji metody jasno wskazuje, że dana klasa jest przeznaczona do dalszego dziedziczenia i stanowi coś w rodzaju szablonu dla innych klas. W praktyce – jeśli w klasie pojawia się choć jedna metoda abstract, cała klasa musi być także oznaczona jako abstract. To taki sygnał: hej, tej klasy nie da się użyć bezpośrednio, ale możesz po niej dziedziczyć i dopiero tam zaimplementować szczegóły. Moim zdaniem to bardzo wygodne, bo pozwala z góry narzucić kontrakt na klasy pochodne – mają dostarczyć własne wersje abstrakcyjnych metod. W wielu językach obiektowych, jak C# czy Java, stosowanie klas abstrakcyjnych jest powszechną praktyką przy projektowaniu rozbudowanych aplikacji, gdzie ważne jest rozdzielenie ogólnej logiki od szczegółowych implementacji. Daje to sporą elastyczność i chroni przed przypadkowymi błędami, kiedy ktoś próbowałby utworzyć obiekt klasy, która nie ma pełnej funkcjonalności. Często spotyka się to np. przy projektowaniu hierarchii typu Zwierzę → Pies/Kot, gdzie klasa Zwierzę jest abstrakcyjna i zawiera np. metodę abstract WydajDźwięk(). Dzięki temu każde konkretne zwierzę musi zaimplementować własną wersję tej metody, a całość kodu jest czytelniejsza i łatwiej ją rozwijać. Zdecydowanie warto poznać ten mechanizm, bo to fundament nowoczesnego programowania obiektowego i coś, co codziennie przydaje się w pracy programisty.

Pytanie 31

Po uruchomieniu poniższego kodu w języku C++ w konsoli pojawi się ciąg liczb:

int a = 1;
while (a++ < 6) {
    cout << a << " ";
}
A. 1 2 3 4 5
B. 2 3 4 5 6
C. 2 3 4 5 6 7
D. 1 2 3 4 5 6
No i właśnie, to jest świetny przykład na to, dlaczego zrozumienie działania operatora postinkrementacji w C++ jest kluczowe. W tym kodzie pętla while wykorzystuje zapis a++ < 6, czyli najpierw sprawdza warunek (porównuje bieżącą wartość a z 6), a dopiero potem zwiększa a o 1. To sprawia, że pierwszy raz sprawdzane jest, czy 1 < 6 – warunek prawdziwy – a dopiero potem a staje się 2. W bloku pętli wypisywane jest już zaktualizowane a, czyli 2. I tak aż do momentu, gdy a osiągnie 6 i warunek będzie fałszywy. W praktykach branżowych bardzo często spotyka się takie niuanse, szczególnie gdy pracuje się z indeksami tablic czy implementuje różne algorytmy. Dobrze jest zawsze pamiętać, jak działają operatory ++ i --, bo ich nieuważne użycie może prowadzić do trudnych do wychwycenia błędów. Warto też zauważyć, że takie rozwiązanie pozwala w prosty sposób uzyskać liczby od 2 do 6 bez dodatkowego zwiększania wartości w środku pętli. Moim zdaniem, jeśli rozumiesz ten mechanizm, to już jesteś o krok dalej niż wielu początkujących programistów – w praktyce docenisz to przy debugowaniu bardziej złożonych fragmentów kodu. A co do dobrych praktyk: zawsze staraj się pisać czytelny kod i nie mieszaj zbyt wielu operacji w jednym wyrażeniu, żeby później nie zastanawiać się, dlaczego wynik jest inny niż oczekiwany.

Pytanie 32

Zgodnie z informacjami zawartymi w ramce, wskaż, który z rysunków ilustruje element przypisany do klasy Badge określonej w bibliotece Bootstrap?

Ilustracja do pytania
A. C
B. B
C. A
D. D
Wybrałeś wariant B i to zdecydowanie właściwy trop. Badge w Bootstrapie to nic innego jak taki mały, liczbowy wskaźnik – najczęściej widoczny przy nazwach kategorii, powiadomieniach czy komentarzach – który sygnalizuje użytkownikowi ile czegoś się pojawiło albo ile czeka akcji do wykonania. W praktyce, taki element to nie tylko liczba w kolorowym prostokącie czy kółku, ale też bardzo czytelny komunikat do użytkownika, co się ostatnio zmieniło lub co wymaga uwagi. Właśnie dlatego, w przykładzie B, mamy niebieskie prostokąty z liczbami przy różnych sekcjach (News, Comments, Updates) – to klasyczny przykład badge’a w Bootstrapie, często stylowanego klasą .badge i powiązaną kolorystyką. Warto zwrócić uwagę, że takie badge’e są nie tylko wizualne, ale też semantyczne – są rozpoznawalne przez czytniki ekranu, co jest zgodne z dobrymi praktykami dostępności (WCAG). Stosując badge’e, zwiększamy czytelność i dostępność interfejsu użytkownika, bo od razu wiadomo, gdzie coś nowego się pojawiło. Moim zdaniem, korzystanie z badge’y to jeden z prostszych i skuteczniejszych sposobów na poprawę UX – no i są bardzo łatwe do wdrożenia, wystarczy jedna klasa CSS i gotowe.

Pytanie 33

Co to jest klasa abstrakcyjna?

A. Klasa, która może być dziedziczona, ale nie można jej instancjonować
B. Klasa, która zawsze dziedziczy z klasy bazowej
C. Klasa, która może zawierać zarówno metody zdefiniowane, jak i niezdefiniowane (czysto wirtualne)
D. Klasa, która nie może posiadać żadnych metod
Poprawną odpowiedzią jest „Klasa, która może być dziedziczona, ale nie można jej instancjonować”, ponieważ najlepiej oddaje istotę klasy abstrakcyjnej w programowaniu obiektowym. Klasa abstrakcyjna pełni rolę szablonu dla klas pochodnych – określa wspólną strukturę, zachowania lub interfejs, które powinny zostać zaimplementowane przez klasy dziedziczące. Nie można tworzyć jej obiektów, ponieważ nie reprezentuje ona kompletnego bytu, lecz raczej pojęcie ogólne. Takie podejście umożliwia stosowanie dziedziczenia i polimorfizmu, poprawia czytelność kodu oraz ułatwia jego rozbudowę i utrzymanie. Klasy abstrakcyjne są często wykorzystywane do narzucania jednolitego sposobu implementacji metod w całej hierarchii klas. Pozostałe odpowiedzi są niepoprawne, ponieważ opisują cechy, które nie definiują jednoznacznie klasy abstrakcyjnej lub są błędne. Stwierdzenie „Klasa, która zawsze dziedziczy z klasy bazowej” jest nieprawidłowe, gdyż klasa abstrakcyjna sama może być klasą bazową i nie musi dziedziczyć po innej klasie. Odpowiedź „Klasa, która może zawierać zarówno metody zdefiniowane, jak i niezdefiniowane (czysto wirtualne)” jest nieprecyzyjna – taka możliwość często występuje, ale nie jest warunkiem koniecznym, by uznać klasę za abstrakcyjną. Natomiast odpowiedź „Klasa, która nie może posiadać żadnych metod” jest całkowicie błędna, ponieważ klasy abstrakcyjne mogą zawierać zarówno metody abstrakcyjne, jak i w pełni zaimplementowane. Zrozumienie tych różnic pozwala poprawnie rozpoznać, czym naprawdę jest klasa abstrakcyjna.

Pytanie 34

W środowisku IDE przeznaczonym do tworzenia aplikacji okienkowych zdefiniowano okno Form1. Aby wprowadzić zmiany w ustawieniach, w kolejności: tytuł okna na górnym pasku, standardowy kursor na strzałkę oraz kolor tła okna, należy dostosować następujące pola w oknie Properties:

Ilustracja do pytania
A. (Name), UseWaitCursor, BackgroundImage
B. (Name), Cursor, BackgroundImage
C. Text, Cursor, BackColor
D. Text, UseWaitCursor, BackColor
Wybrana odpowiedź jest prawidłowa, bo dokładnie te trzy właściwości – Text, Cursor i BackColor – odpowiadają w Windows Forms za ustawienia tytułu okna, domyślnego kursora myszy oraz koloru tła formularza. W praktyce, edytując pole Text w Properties, określasz, co użytkownik zobaczy na belce tytułowej okna. To często pierwszy krok w customizacji okna – tytuł powinien jednoznacznie identyfikować aplikację i jej funkcję, zgodnie z dobrymi praktykami UX/UI. Następnie pole Cursor umożliwia wybranie rodzaju kursora, który pojawi się, gdy użytkownik najedzie myszą na dany formularz. Najczęściej używany jest domyślny wskaźnik (strzałka), ale można tu ustawić na przykład kursor oczekiwania czy rękę, jeśli wymaga tego logika aplikacji. Zmiana BackColor to podstawa, jeśli chcesz wizualnie wyróżnić okno lub dostosować je do kolorystyki firmowej. Moim zdaniem, te trzy pola to podstawa podstaw w pracy z IDE do Windows Forms – bez ich zrozumienia ciężko mówić o jakimkolwiek sensownym projektowaniu interfejsu. Warto też zwrócić uwagę, że te właściwości są uniwersalne i pojawiają się praktycznie w każdym tutorialu czy dokumentacji Microsoftu dla .NET – to już taki żelazny standard branżowy. Z mojego doświadczenia często początkujący programiści mają z tym problem, bo szukają skomplikowanych rozwiązań, a tu chodzi po prostu o poprawne posługiwanie się Properties. Dzięki temu nawet najprostsza apka wygląda profesjonalniej i jest bardziej intuicyjna dla użytkownika.

Pytanie 35

Który z wymienionych aktów prawnych odnosi się do ochrony danych osobowych w krajach Unii Europejskiej?

A. GDPR (RODO)
B. DMCA
C. Creative Commons
D. Open Source Initiative
GDPR (RODO) to akt prawny dotyczący ochrony danych osobowych w Unii Europejskiej. Wprowadza on jednolite zasady przetwarzania danych, zwiększając ochronę prywatności obywateli. RODO daje użytkownikom prawo do dostępu do swoich danych, ich poprawiania, a także żądania ich usunięcia (prawo do bycia zapomnianym). Firmy muszą transparentnie informować o celach przetwarzania danych oraz zapewniać odpowiedni poziom zabezpieczeń. Niezastosowanie się do przepisów RODO skutkuje wysokimi karami finansowymi.

Pytanie 36

Które z wymienionych stanowi przykład struktury dziedziczenia?

A. Klasa Samochód i Pojazd nie są ze sobą powiązane
B. Klasa Pojazd ma dziedziczenie od klasy Samochód
C. Klasa Pojazd nie dziedziczy z żadnej klasy
D. Klasa Samochód ma dziedziczenie od klasy Pojazd
Hierarchia dziedziczenia to struktura klas, w której klasa pochodna dziedziczy właściwości i metody klasy bazowej. Klasa 'Samochód' dziedzicząca po klasie 'Pojazd' jest przykładem prawidłowej hierarchii dziedziczenia – klasa 'Samochód' rozszerza klasę 'Pojazd', dziedzicząc ogólne właściwości pojazdu, takie jak prędkość czy typ silnika. Dziedziczenie umożliwia rozszerzanie istniejącej funkcjonalności bez konieczności przepisywania tego samego kodu, co jest jednym z fundamentów programowania obiektowego.

Pytanie 37

Jakie jest główne zadanie debuggera w środowisku programowania?

A. Tworzenie kodu źródłowego
B. Analiza i usuwanie błędów w kodzie
C. Generowanie plików wykonywalnych
D. Kompilowanie kodu źródłowego
Debugger to narzędzie programistyczne służące do analizy i usuwania błędów w kodzie źródłowym. Pozwala na krokowe wykonywanie programu, śledzenie wartości zmiennych i identyfikowanie miejsc, w których występują błędy logiczne lub składniowe. Debugger umożliwia zatrzymanie wykonania programu w dowolnym miejscu, ustawienie tzw. breakpointów (punktów przerwania) i monitorowanie przepływu sterowania. Dzięki temu programista może dokładnie przeanalizować, dlaczego program nie działa zgodnie z oczekiwaniami i szybko znaleźć przyczynę problemu. Debuggery są dostępne w większości zintegrowanych środowisk programistycznych (IDE), takich jak Visual Studio, PyCharm czy IntelliJ IDEA.

Pytanie 38

Które z poniższych zdań najlepiej określa funkcję zaprzyjaźnioną w ramach klasy?

A. Funkcja, która uruchamia się automatycznie po stworzeniu obiektu
B. Funkcja, która jest statyczna i nie ma możliwości modyfikacji pól klasy
C. Funkcja, która pozwala na dziedziczenie wielokrotne
D. Funkcja, która ma dostęp do prywatnych pól i metod klasy, z którą jest zaprzyjaźniona
Funkcja zaprzyjaźniona (ang. friend function) to funkcja, która ma dostęp do prywatnych i chronionych pól oraz metod klasy, mimo że nie jest jej częścią. Służy do realizacji operacji wymagających bezpośredniego dostępu do wewnętrznych elementów klasy, ale bez naruszania zasad hermetyzacji. Przykład w C++: `class Konto { private: double saldo; friend void wyswietlSaldo(Konto k); }`. Funkcja `wyswietlSaldo` może odczytać pole `saldo`, mimo że jest ono prywatne. Funkcje zaprzyjaźnione są używane, gdy konieczna jest bliska współpraca między klasami lub funkcjami, ale nie chcemy nadmiernie otwierać interfejsu klasy.

Pytanie 39

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

b = a++;
Zapis drugi:
b = ++a;
A. Wartość zmiennej b będzie wyższa po użyciu drugiego zapisu w porównaniu do pierwszego.
B. Bez względu na zastosowany sposób, w zmiennej b zawsze uzyskamy ten sam rezultat.
C. Tylko przy użyciu pierwszego zapisu zmienna a zostanie zwiększona o 1.
D. Drugi zapis nie jest zgodny ze składnią, co doprowadzi do błędów kompilacji.
W językach programowania z rodziny C (w tym C++ i Java) istnieją dwie formy inkrementacji: preinkrementacja (++x) i postinkrementacja (x++). Preinkrementacja zwiększa wartość zmiennej przed jej użyciem w wyrażeniu, natomiast postinkrementacja zwiększa ją dopiero po zakończeniu aktualnej operacji. Oznacza to, że w przypadku postinkrementacji, wartość zmiennej przed zwiększeniem zostanie użyta w bieżącym wyrażeniu, a dopiero potem następuje jej zwiększenie o 1. Ta subtelna różnica ma istotne znaczenie, zwłaszcza w pętlach i wyrażeniach logicznych, gdzie każda iteracja wpływa na wynik. W praktyce preinkrementacja jest nieco bardziej efektywna, ponieważ nie wymaga przechowywania kopii pierwotnej wartości zmiennej, co przekłada się na minimalnie lepszą wydajność w niektórych przypadkach.

Pytanie 40

Wskaź kod, który spowoduje wyświetlenie okna dialogowego przedstawionego na ilustracji. Dla uproszczenia kodu, zrezygnowano z atrybutów znaczników

Ilustracja do pytania
A. kod 1
B. kod 2
C. kod 3
D. kod 4
Odpowiedź, którą wybrałeś, to kod 2, i nie ma co do tego wątpliwości. Dobrze, że zauważyłeś wszystkie elementy, które były w oknie dialogowym. W tym kodzie masz TextBox na górze, który pozwala na wpisanie tekstu. Dwa CheckBoxy po lewej stronie to te typowe pola wyboru, które też były widoczne. Po prawej stronie masz trzy RadioButtony, które tworzą grupę przycisków - to jest właśnie to, co powinno być. Na dole widoczny jest przycisk Button z napisem Test, co też jest zgodne z obrazkiem. Takie rozmieszczenie to klucz do stworzenia dobrego interfejsu. Wiesz, w praktyce w wielu aplikacjach używa się właśnie tych elementów do prostych formularzy. Jeżeli rozumiesz, jak te komponenty działają i jak je ze sobą łączyć, to naprawdę dobrze ci to pójdzie w przyszłości w tworzeniu ładnych i funkcjonalnych interfejsów.