Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 22 kwietnia 2026 13:42
  • Data zakończenia: 22 kwietnia 2026 13:43

Egzamin niezdany

Wynik: 1/40 punktów (2,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

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

A. <movie>
B. <media>
C. <video>
D. <player>
Element HTML5 <video> jest standardowym tagiem służącym do osadzania wideo na stronach internetowych. Umożliwia on integrację multimediów w sposób, który jest zgodny z aktualnymi standardami sieciowymi. W porównaniu do starszych metod, które wymagały użycia zewnętrznych wtyczek, takich jak Flash, <video> pozwala na bezproblemowe odtwarzanie wideo w przeglądarkach nowej generacji, co zwiększa bezpieczeństwo i wydajność. Element ten oferuje wiele atrybutów, takich jak controls, autoplay, loop, preload, oraz width i height, które pozwalają na dostosowanie odtwarzacza do potrzeb użytkownika. Na przykład, używając atrybutu controls, można dodać przyciski odtwarzania, zatrzymywania lub regulacji głośności, co poprawia interaktywność i użyteczność. Dodatkowo, aby zapewnić dostępność treści wideo, warto stosować atrybuty takie jak <track>, który umożliwia dodawanie napisów, co jest szczególnie ważne dla osób z niepełnosprawnościami słuchowymi. Używanie <video> w projektach webowych to najlepsza praktyka, która wspiera rozwój dostępnych i przyjaznych dla użytkownika doświadczeń wizualnych.

Pytanie 2

Co to jest destructuring assignment w JavaScript?

A. Proces konwersji typów danych w JavaScript
B. Składnia pozwalająca na rozpakowanie wartości z tablic lub obiektów do oddzielnych zmiennych
C. Technika optymalizacji kodu przez kompilator
D. Metoda usuwania nieużywanych zmiennych z kodu
Odpowiedzi, które wybierasz, mogą prowadzić do mylnych interpretacji dotyczących możliwości i funkcji JavaScript. Na przykład, sugestia, że destructuring assignment to metoda usuwania nieużywanych zmiennych, jest nieprawdziwa. Technika destructuring nie zajmuje się usuwaniem zmiennych, lecz ich rozpakowywaniem. Usuwanie zmiennych, które nie są używane, jest związane z zarządzaniem pamięcią i optymalizacją kodu, co jest zupełnie inną koncepcją. Ponadto, konwersja typów danych w JavaScript to proces, który dotyczy zmiany jednego typu danych na inny, a nie ma bezpośredniego związku z destrukturyzacją. Zrozumienie różnic pomiędzy tymi pojęciami jest kluczowe, aby nie wprowadzać w błąd podczas nauki JavaScript. Destructuring assignment jest także odzwierciedleniem nowoczesnych praktyk programowania, które skupiają się na zwięzłości i czytelności kodu. Uznawanie go za technikę optymalizacji kodu przez kompilator również jest mylne, ponieważ optymalizacja kodu to proces, który nie ma bezpośredniego związku z destrukturyzacją. Takie nieprecyzyjne zrozumienie może prowadzić do późniejszych problemów z implementacją kodu oraz jego utrzymywaniem.

Pytanie 3

Kod w bibliotece React.js oraz w frameworku Angular, który został zaprezentowany, ma na celu wyświetlenie

Fragment kodu React.js:
state = {    zm1: 0   };
hanleEv = () => {
    this.setState({zm1: this.state.zm1 + 1});
}
render() {
    return (<div>
        <span>{this.state.zm1}</span>
        <button onClick={this.handleEv}>BTN_1</button>
    </div>);
}
Fragment kodu Angular:
@Component({
    selector: 'sel1',
    template: `<span>{{ zm1 }}</span>
              <button (click)="onBtnCilcked()">BTN_1</button>`
})
export class Licznik1Component {
    zm1 = 0;
    onBtnCilcked() { this.zm1++; }
}
A. wyłącznie przycisku oraz obsłużenie zdarzenia click, które ono generuje
B. liczby kliknięć przycisku
C. wartości 0 po naciśnięciu przycisku
D. tylko napisu BTN_1

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ten kod, zarówno w React.js jak i w Angularze, jest klasycznym przykładem prostego licznika. To, co tu się dzieje, to tak naprawdę zliczanie kliknięć użytkownika w przycisk. Za każdym razem, gdy naciśniesz BTN_1, zmienna (zm1) jest inkrementowana – czyli po prostu zwiększana o jeden. W React za to odpowiada metoda setState, która zmienia stan komponentu – dzięki temu interfejs od razu aktualizuje się bez przeładowywania strony. W Angularze natomiast działa to przez tzw. dwukierunkową komunikację z template’em i automatyczną detekcję zmian – metoda onBtnCilcked w komponencie modyfikuje zmienną, a framework sam aktualizuje widok. Z mojego doświadczenia, takie podejście do zarządzania stanem to podstawa w nowoczesnych aplikacjach, szczególnie jeśli chodzi o responsywność i natychmiastową reakcję na akcje użytkownika. Liczniki są zresztą jednym z pierwszych przykładów, jakie się pisze ćwicząc frameworki frontendowe, bo świetnie pokazują, jak działa przepływ danych i odświeżanie elementów UI. Warto dodać, że trzymanie licznika kliknięć w stanie komponentu (a nie np. jako zmienną globalną) jest zgodne z dobrymi praktykami – bo ogranicza zakres danych i ułatwia zarządzanie większymi aplikacjami. Takie wzorce potem można z powodzeniem przenieść do trudniejszych projektów, na przykład liczników, koszyków, liczby zamówień czy nawet zaawansowanych dashboardów. W praktyce ten mechanizm inkrementowania wartości po kliknięciu użytkownika jest jednym z najczęściej używanych w interaktywnych aplikacjach internetowych.

Pytanie 4

W programowaniu obiektowym odpowiednikami zmiennych oraz funkcji w programowaniu strukturalnym są

A. pola i kwalifikatory dostępu
B. pola i metody
C. metody statyczne i abstrakcyjne
D. hermetyzacja oraz dziedziczenie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pola i metody to absolutna podstawa, jeśli chodzi o programowanie obiektowe. Właśnie one są najbliższym odpowiednikiem zmiennych i funkcji z podejścia strukturalnego. Moim zdaniem, gdy uczysz się OOP, warto od razu wyłapać tę analogię – pola (czyli inaczej: atrybuty, właściwości, fields) przechowują stan obiektu, a metody (czyli funkcje w klasie) definiują, co obiekt potrafi zrobić. Przykład z życia: klasa Samochód ma pole kolor, które opisuje jego cechę oraz metodę jedź(), która realizuje jakąś akcję. W praktyce programiści bardzo często modelują swoje klasy tak, aby pola były prywatne (zgodnie z zasadą hermetyzacji), a dostęp do nich zapewniały metody publiczne – tzw. gettery i settery. Standardy branżowe, np. JavaBeans w Javie czy konwencje C#, też polegają na tym, że pola odzwierciedlają dane, a metody operacje na tych danych. Z mojego doświadczenia wynika, że rozumienie tej relacji ułatwia zarówno pisanie czytelnego kodu, jak i jego dalsze rozwijanie. To właśnie dzięki rozdzieleniu na pola i metody klasy mogą odwzorowywać obiekty z realnego świata i ich zachowania, co jest głównym celem programowania obiektowego.

Pytanie 5

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 4
D. kod 3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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.

Pytanie 6

Który z wymienionych algorytmów jest algorytmem opartym na iteracji?

A. BubbleSort
B. Fibonacci (rekurencyjnie)
C. QuickSort
D. DFS (przeszukiwanie w głąb)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Bubble Sort to klasyczny przykład algorytmu iteracyjnego, który sortuje elementy tablicy poprzez wielokrotne porównywanie i zamianę sąsiadujących elementów. Algorytm ten działa w pętlach, aż wszystkie elementy zostaną odpowiednio uporządkowane. Chociaż jest jednym z najprostszych algorytmów sortowania, jego złożoność O(n^2) czyni go mniej efektywnym dla dużych zbiorów danych. Bubble Sort jest często wykorzystywany w nauczaniu podstaw algorytmiki, ponieważ łatwo zrozumieć jego działanie i implementację. Pomimo niskiej efektywności, bywa stosowany w przypadkach, gdy liczba elementów jest niewielka lub zbiór danych jest wstępnie posortowany.

Pytanie 7

Jakie są różnice pomiędzy środowiskiem RAD a klasycznym IDE w kontekście aplikacji webowych?

A. RAD nie wspiera żadnych języków backendowych
B. RAD koncentruje się wyłącznie na budowie frontendu aplikacji
C. RAD umożliwia szybsze prototypowanie i rozwój aplikacji dzięki narzędziom wizualnym
D. RAD funkcjonuje tylko w systemach Windows

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Rapid Application Development (RAD) to metodologia, która koncentruje się na szybkim prototypowaniu i iteracyjnym tworzeniu aplikacji. Dzięki narzędziom wizualnym RAD umożliwia programistom i projektantom szybkie budowanie interfejsów użytkownika oraz testowanie funkcjonalności aplikacji na wczesnym etapie rozwoju. RAD skraca czas potrzebny na dostarczenie gotowego produktu, co czyni go idealnym rozwiązaniem w dynamicznie zmieniających się projektach webowych. Narzędzia RAD umożliwiają także automatyczne generowanie kodu, co znacznie przyspiesza proces programowania.

Pytanie 8

Która zasada zwiększa bezpieczeństwo w sieci?

A. Korzystanie z mocnych, unikalnych haseł
B. Dzielnie się hasłami z przyjaciółmi
C. Pobieranie plików z niepewnych źródeł
D. Zaniedbywanie aktualizacji systemu operacyjnego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Używanie silnych, unikalnych haseł jest fundamentalną zasadą poprawiającą bezpieczeństwo w sieci. Silne hasło to takie, które składa się z co najmniej 12 znaków, zawiera wielkie i małe litery, cyfry oraz znaki specjalne. Takie hasła są trudne do złamania przez ataki brute force, które wykorzystują algorytmy do próbowania różnych kombinacji znaków. Przykładem silnego hasła może być 'P@ssw0rd!2023', które łączy różnorodne typy znaków. Używanie unikalnych haseł dla różnych kont jest równie ważne, ponieważ w przypadku naruszenia bezpieczeństwa jednego konta, inne pozostają zabezpieczone. Standardy takie jak NIST (National Institute of Standards and Technology) zalecają tworzenie haseł w sposób, który ogranicza ich przewidywalność. Narzędzia do zarządzania hasłami, takie jak LastPass czy 1Password, mogą pomóc w generowaniu i przechowywaniu silnych haseł, co dodatkowo redukuje ryzyko. Stosowanie tej zasady jest kluczowe w kontekście ochrony danych osobowych oraz zapobiegania kradzieży tożsamości.

Pytanie 9

Co to jest XSS (Cross-Site Scripting)?

A. Framework do tworzenia responsywnych stron internetowych
B. Protokół komunikacyjny używany w aplikacjach internetowych
C. Technika optymalizacji kodu JavaScript do zwiększenia wydajności strony
D. Luka bezpieczeństwa pozwalająca na wstrzyknięcie złośliwego kodu do stron przeglądanych przez innych użytkowników

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Cross-Site Scripting (XSS) to luka bezpieczeństwa, która umożliwia atakującym wstrzykiwanie złośliwego kodu JavaScript do stron internetowych, które są następnie przeglądane przez innych użytkowników. W wyniku tego ataku, złośliwy kod może być wykonany w kontekście przeglądarki ofiary, co może prowadzić do kradzieży sesji, danych osobowych, czy też przejęcia kontroli nad kontem użytkownika. Aby zapobiegać XSS, programiści powinni stosować techniki takie jak walidacja i oczyszczanie danych wejściowych, a także korzystanie z nagłówków HTTP, takich jak Content Security Policy (CSP). Przykładem może być sytuacja, gdy aplikacja webowa przyjmuje dane w formularzach bez odpowiedniego sprawdzenia, co pozwala na umieszczenie skryptu, który zyskuje dostęp do cookies użytkownika. Zrozumienie i zabezpieczenie się przed XSS jest kluczowe w kontekście budowania bezpiecznych aplikacji webowych, co jest zgodne z najlepszymi praktykami branżowymi.

Pytanie 10

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. 2 3 4 5 6 7
B. 1 2 3 4 5 6
C. 2 3 4 5 6
D. 1 2 3 4 5

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 11

Która z poniższych metod tablicowych w JavaScript nie modyfikuje oryginalnej tablicy?

A. map()
B. sort()
C. push()
D. splice()

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metoda map() w JavaScript jest funkcją tablicową, która tworzy nową tablicę na podstawie wyników wywołania funkcji podanej jako argument dla każdego elementu oryginalnej tablicy. Kluczowym aspektem tej metody jest to, że nie modyfikuje oryginalnej tablicy, co czyni ją bezpiecznym narzędziem do transformacji danych. Zastosowanie map() jest szczególnie przydatne w sytuacjach, gdy chcemy przekształcić dane, ale zachować oryginał, na przykład w przypadku przetwarzania wyników z API lub operacji na danych wejściowych od użytkownika. Standardowe praktyki zalecają używanie map() w programowaniu funkcyjnym, co pozwala na bardziej deklaratywne podejście do manipulacji danymi. Przykład zastosowania: mając tablicę liczb, możemy użyć map() do stworzenia nowej tablicy, która zawiera tylko ich kwadraty: const numbers = [1, 2, 3]; const squares = numbers.map(num => num * num); W ten sposób oryginalna tablica numbers pozostaje nietknięta, co jest kluczowe w wielu aplikacjach, w których zachowanie stanu jest istotne.

Pytanie 12

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

A. Sortowanie przez zliczanie
B. Sortowanie przez wstawianie
C. Sortowanie bąbelkowe
D. Sortowanie szybkie (QuickSort)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 13

W jakiej topologii sieciowe wszystkie urządzenia są bezpośrednio powiązane z każdym innym?

A. Topologia gwiazdy
B. Topologia siatki
C. Topologia pierścienia
D. Topologia magistrali

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Topologia siatki to jedna z najbardziej wydajnych i wszechstronnych struktur sieciowych, w której każde urządzenie (węzeł) jest połączone bezpośrednio z każdym innym węzłem. Tego typu topologia zapewnia wysoką dostępność i odporność na awarie, ponieważ awaria jednego połączenia nie wpływa na komunikację pozostałych węzłów. W praktyce ma to zastosowanie w dużych, zaawansowanych sieciach komputerowych, takich jak sieci miejskie (MAN) czy sieci szerokopasmowe. Istnieją dwie główne formy topologii siatki: siatka pełna, gdzie każde urządzenie ma bezpośrednie połączenia z wszystkimi innymi, oraz siatka częściowa, gdzie nie wszystkie węzły są ze sobą bezpośrednio połączone, ale komunikacja jest możliwa przez inne węzły. Topologia siatki, z uwagi na swoje zalety, jest często wykorzystywana w standardach sieciowych, takich jak Ethernet, oraz w systemach rozproszonych, gdzie kluczowe są niezawodność i efektywność przesyłania danych. Dodatkowo, w kontekście Internetu rzeczy (IoT), topologia siatki umożliwia efektywne zarządzanie dużą liczbą urządzeń, co jest kluczowe w inteligentnych miastach i automatyzacji domowej.

Pytanie 14

Które z poniższych narzędzi jest używane do zarządzania wersjami kodu?

A. Docker
B. Git
C. Jenkins
D. Kubernetes

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Git jest narzędziem służącym do zarządzania wersjami kodu, które zyskało ogromną popularność wśród programistów na całym świecie. Jego podstawową funkcją jest umożliwienie śledzenia zmian w kodzie źródłowym, co jest niezbędne w procesie tworzenia oprogramowania. Dzięki Gitowi możemy w łatwy sposób przechowywać historię zmian, co pozwala na cofanie się do wcześniejszych wersji projektu, a także na pracę zespołową, gdzie wielu programistów może jednocześnie pracować nad różnymi częściami tego samego projektu. Git wspiera również gałęzie (ang. branches), które umożliwiają równoległe rozwijanie nowych funkcji bez zakłócania głównej linii rozwoju. Jest to kluczowe w środowiskach, gdzie rozwój i wydanie nowych funkcji musi być dobrze zorganizowane. Narzędzie to jest nie tylko darmowe, ale również open-source, co oznacza, że każdy może przyczynić się do jego rozwoju. Git jest standardem w branży IT, a jego znajomość jest często wymagana przez pracodawców. Dzięki swojej elastyczności i wszechstronności Git jest stosowany w projektach open-source, komercyjnych i edukacyjnych.

Pytanie 15

W klasie o nazwie samochod przypisano atrybuty: marka, rocznik, parametry[]. Atrybuty te powinny zostać zdefiniowane jako

A. funkcje
B. pola
C. metody
D. interfejsy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pola w klasie samochod to właśnie te elementy, które przechowują dane, takie jak marka, rocznik czy tablica parametry. To jest absolutna podstawa programowania obiektowego – najczęściej spotyka się to w językach takich jak Java, C# albo nawet w Pythonie, choć tam często nazywamy je po prostu atrybutami. Dla przykładu, jeśli tworzysz klasę Samochod w C#, to pole 'marka' będzie np. typu string, 'rocznik' – int, a 'parametry' możesz zadeklarować jako tablicę albo listę (List<T>) zależnie od potrzeb. Przechowywanie danych w polach pozwala na lepszą organizację, bo każda instancja klasy ma swoje własne wartości tych pól. Tak się właśnie tworzy modele danych, na których potem operuje cała aplikacja – czy to baza samochodów w warsztacie, czy system ubezpieczeń komunikacyjnych. Takie podejście jest zgodne z zasadami hermetyzacji i solidnych, nowoczesnych standardów pisania kodu. Dużo profesjonalnych frameworków i narzędzi (np. Entity Framework, Hibernate) korzysta z takiego podejścia, nawet jeśli potem te pola opakowujesz w właściwości (properties). Krótko mówiąc, pola to nieodłączny element każdej klasy, która coś reprezentuje, i moim zdaniem nie da się dobrze projektować kodu obiektowego bez zrozumienia tej konwencji.

Pytanie 16

Jaką właściwość ma sieć synchroniczna?

A. Transmisja danych odbywa się w wyznaczonych interwałach czasowych
B. Nie jest konieczna synchronizacja zegarów
C. Przekazywanie danych zachodzi w sposób niesystematyczny
D. Gwarantuje większą elastyczność w przesyłaniu danych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sieć synchroniczna charakteryzuje się tym, że transmisja danych odbywa się w ustalonych odstępach czasu, co oznacza, że wszystkie urządzenia w sieci są zsynchronizowane do jednego zegara. Taki sposób przesyłania danych pozwala na precyzyjne określenie momentu, w którym dane są wysyłane i odbierane, co redukuje opóźnienia i błędy w komunikacji. Przykładem sieci synchronicznej jest system TDM (Time Division Multiplexing), który dzieli czas na różne sloty, przydzielając każdy slot konkretnemu użytkownikowi lub urządzeniu. Dzięki temu każdy uczestnik sieci ma gwarancję, że w swoim czasie dostanie dostęp do medium transmisyjnego. Standardy takie jak SONET (Synchronous Optical Network) i SDH (Synchronous Digital Hierarchy) są przykładami technologii, które wykorzystują synchronizację do efektywnego przesyłania danych na dużych odległościach. Takie podejście jest powszechnie stosowane w telekomunikacji, gdzie wysoka wydajność i niezawodność transmisji są kluczowe dla jakości usług.

Pytanie 17

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

A. 98 FE 98
B. A0 FE A0
C. A0 FB A0
D. 98 FB 98

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prawidłowa odpowiedź to RGB(152, 251, 152) zapisane w systemie szesnastkowym jako 98 FB 98. To nie jest przypadkowe – konwersja formatu RGB na HEX polega na przekształceniu każdej ze składowych (czerwony, zielony, niebieski) na odpowiadającą wartość heksadecymalną. W tym przypadku: 152 to 98 w systemie szesnastkowym, 251 to FB, a 152 znowu 98. W praktyce, takie zapisy są absolutną podstawą przy projektowaniu stron internetowych, stylów CSS albo aplikacji mobilnych, gdzie kolory opisuje się właśnie kodami HEX. Moim zdaniem, każdy kto chce działać w grafice komputerowej albo frontendzie, powinien mieć ten mechanizm w jednym palcu. Warto wiedzieć, że standardy W3C przewidują właśnie taki sposób zapisu i przyjmują zarówno notację z #, jak i bez spacji, czyli #98FB98. Często spotkasz ten format np. w plikach stylów LESS, SASS czy nawet podczas korzystania z generatorów palet. Sam nieraz miałem sytuację, że szybka konwersja RGB na HEX ratowała projekt, bo klient przesłał kolory tylko w jednym systemie. Dobrą praktyką jest też zawsze sprawdzać, czy konwersja nie zniekształciła zamierzonego koloru – niektóre programy graficzne lub biblioteki mogą dokonywać zaokrągleń, co minimalnie wpływa na odcień. Warto więc nie tylko ufać narzędziom, ale rozumieć manualnie, jak się to liczy. No, i to co ciekawe – Pale Green jest kolorem dość uniwersalnym, często spotykanym w projektowaniu UI, bo jest delikatny i nie męczy wzroku. Szczerze polecam pobawić się konwersją różnych kolorów, bo to po prostu się przydaje.

Pytanie 18

Jaki modyfikator dostępu umożliwia dostęp do pól klasy tylko za pomocą jej metod?

A. Public
B. Static
C. Protected
D. Private

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator `private` w językach takich jak C++, Java i C# pozwala na ograniczenie dostępu do pól i metod klasy, umożliwiając ich wykorzystanie wyłącznie w obrębie tej samej klasy. Pola `private` są ukryte przed innymi klasami i mogą być modyfikowane lub odczytywane jedynie poprzez metody publiczne (gettery i settery). Przykład w C++: `class Konto { private: double saldo; public: void ustawSaldo(double s) { saldo = s; } }`. Dzięki temu mechanizmowi dane są chronione przed nieautoryzowanymi zmianami, co zwiększa bezpieczeństwo aplikacji i minimalizuje ryzyko błędów.

Pytanie 19

Jaką wydajność posiada sieć, która przesyła 500 MB danych w czasie 10 sekund?

A. 50 Mbps
B. 400 Mbps
C. 500 Mbps
D. 40 Mbps

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Przepustowość sieci to jeden z najważniejszych parametrów, który określa, jak szybko możemy przesyłać dane pomiędzy urządzeniami w danej infrastrukturze. W najprostszych słowach jest to ilość informacji, jaka może zostać przesłana w jednostce czasu, zazwyczaj wyrażana w bitach na sekundę (bps – bits per second). W praktyce często spotykamy skróty takie jak kbps, Mbps czy Gbps, oznaczające kolejno tysiące, miliony i miliardy bitów przesyłanych w ciągu sekundy. Aby poprawnie obliczyć przepustowość, musimy więc znać ilość przesyłanych danych oraz czas, w jakim ta transmisja się odbywa. W naszym przypadku mamy do czynienia z przesyłaniem 500 MB danych w ciągu 10 sekund. Pierwszym krokiem jest przeliczenie megabajtów (MB) na megabity (Mb), ponieważ przepustowość zawsze wyraża się w bitach. Warto przypomnieć, że 1 bajt to 8 bitów, dlatego 500 MB należy pomnożyć przez 8. W wyniku otrzymujemy 4000 megabitów (Mb). Kiedy już mamy dane w odpowiedniej jednostce, możemy przejść do drugiego kroku, czyli obliczenia przepustowości. Dzielimy 4000 megabitów przez 10 sekund, co daje 400 megabitów na sekundę (400 Mb/s). Wynik ten można również zapisać jako 400 Mbps, ponieważ obie formy zapisu oznaczają dokładnie to samo – megabity na sekundę. Ostatecznie można więc stwierdzić, że sieć, która przesyła 500 MB danych w 10 sekund, ma przepustowość 400 Mbps. To całkiem wysoki wynik, świadczący o bardzo dobrej jakości połączenia, typowej dla nowoczesnych sieci światłowodowych lub infrastruktury o dużej przepustowości. Warto też dodać, że przepustowość to nie to samo, co prędkość internetu widoczna w testach online – rzeczywista prędkość może być mniejsza z powodu opóźnień, strat pakietów czy ograniczeń sprzętowych. Mimo to, obliczenia te dobrze ilustrują, jak przeliczać jednostki i w prosty sposób określać, jak wydajna jest dana sieć.

Pytanie 20

Jaką wartość będzie miała zmienna result po wykonaniu poniższego kodu PHP?

$array = [5, 1, 8, 3, 7];
$result = 0;
foreach ($array as $value) {
  if ($value > $result) {
    $result = $value;
  }
}
A. 5
B. 7
C. 8
D. 24

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wartość zmiennej result po wykonaniu podanego kodu PHP wynosi 8, ponieważ kod ten ma na celu znalezienie największej liczby w tablicy. Zmienna $result jest początkowo ustawiona na 0, co oznacza, że każda liczba z tablicy, która jest większa od zera, zostanie przypisana do $result. W trakcie iteracji przez tablicę $array, każdy element jest porównywany z bieżącą wartością $result. Kiedy napotykamy wartość 5, która jest większa od 0, zmienna $result zostaje zaktualizowana do 5. Następnie porównujemy 1, co nie zmienia $result. Kiedy napotykamy 8, zmienna $result jest aktualizowana do 8, ponieważ 8 jest większe od 5. Kolejne wartości 3 i 7 również nie zmieniają $result, ponieważ są mniejsze od 8. Po zakończeniu pętli, $result pozostaje równe 8, co jest największą wartością w tablicy. To podejście jest zgodne z dobrymi praktykami programistycznymi, gdzie używa się pętli do przetwarzania kolekcji danych w sposób optymalny i przejrzysty.

Pytanie 21

Jaka jest składnia komentarza jednoliniowego w języku Python?

A. //
B. ""
C. !
D. #

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Komentarz jednoliniowy w Pythonie zaczynamy od znaku hash, czyli #. To jest taki uniwersalny sposób na szybkie dodanie uwagi lub wyjaśnienia bez wpływu na działanie kodu. Moim zdaniem to bardzo praktyczne – wystarczy po prostu wpisać # i reszta linii jest ignorowana przez interpreter. W dużych projektach często spotyka się krótkie komentarze obok wyrażeń, np. x += 1 # inkrementacja liczby porządkowej. Co ciekawe, Python nie posiada stricte blokowych komentarzy, jak niektóre inne języki (np. /* ... */ w C lub Java), więc hashe naprawdę często się stosuje. To niesamowicie pomaga przy czytelności kodu, szczególnie gdy wracamy do własnych plików po kilku tygodniach albo pracujemy w zespole. PEP 8, czyli oficjalny przewodnik stylu Pythona, zaleca wręcz regularne używanie komentarzy do wyjaśniania „dlaczego” coś robimy, nie tylko „co” robimy. Dobrze napisany komentarz może skrócić czas szukania błędów albo tłumaczenia rozwiązań innym. Z mojego doświadczenia, warto pilnować, by komentarze nie były przestarzałe – łatwo zapomnieć o ich aktualizacji po zmianach w kodzie. Jeśli kiedyś napotkasz kod bez #, a z innymi znakami, to od razu czerwona lampka: to raczej nie jest Python.

Pytanie 22

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

public class Point {
    public void Move(int x, int y) {...}
    public void Move(int x, int y, int z) {...}
    public void Move(Point newPt) {...}
}
A. Służą jako konstruktory w zależności od liczby argumentów.
B. Są przeciążone.
C. Zawierają błąd, ponieważ nazwy metod powinny być różne.
D. Zawierają przeciążenie operatora.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metody klasy Point są przeciążone, co oznacza, że mogą mieć tę samą nazwę, ale różnią się liczbą lub typem parametrów. Przeciążenie metod to jedna z podstawowych technik programowania obiektowego, która pozwala na bardziej elastyczne projektowanie kodu. Dzięki temu programista może tworzyć metody dostosowane do różnych sytuacji, zachowując spójność nazw i intuicyjność użycia. To zwiększa czytelność i utrzymanie kodu, ponieważ wywołania metod o tej samej nazwie, ale różnych parametrach, są łatwe do zrozumienia i odnalezienia.

Pytanie 23

Jaki język programowania został stworzony z myślą o tworzeniu aplikacji na system Android?

A. Objective-C
B. Swift
C. Python
D. Java

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Java to taki język, który jest głównie używany do robienia aplikacji na Androida. Od początku Androida, Java była jego podstawowym językiem, dlatego jest tak popularna i dobrze opisana w dokumentacji. Kiedy tworzysz aplikacje na Androida w Javie, to korzystasz z Android SDK oraz API, które świetnie integrują się z funkcjami urządzeń, jak GPS czy kamera. Teraz trochę więcej mówi się o Kotlinie jako nowoczesnej alternatywie dla Javy, ale Java wciąż ma swoje mocne miejsce w tworzeniu aplikacji i Google dalej ją wspiera.

Pytanie 24

Podstawowym celem środowisk IDE takich jak: IntelliJ IDEA, Eclipse, NetBeans jest programowanie w języku:

A. Java
B. Python
C. C++
D. C#

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
IDE, czyli Zintegrowane Środowiska Programistyczne, takie jak IntelliJ IDEA, Eclipse czy NetBeans, od lat są uznawane za najważniejsze narzędzia do tworzenia aplikacji w języku Java. Te środowiska zostały od podstaw zaprojektowane właśnie z myślą o programistach Javy – wspierają typowe projekty Java SE, Java EE czy nawet JavaFX. Moim zdaniem, ich integracja z narzędziami takimi jak Maven, Gradle, testami jednostkowymi JUnit albo debuggerami Javy to prawdziwy game-changer. Na co dzień korzysta się tam z podpowiedzi składni, automatycznego refaktoringu, generatorów kodu i systemów kontroli wersji. Przykładowo, większość firm w Polsce, które tworzą oprogramowanie korporacyjne, wybiera właśnie te IDE do pracy z Java Spring Boot czy Hibernate. Nawet podczas nauki w technikum często pierwsze projekty Java robi się właśnie w Eclipse albo IntelliJ. Pewnie, można dorzucić pluginy do innych języków, ale to Java jest sercem tych środowisk i to dla niej są one najbardziej zaawansowane, zgodnie z najlepszymi wzorcami branżowymi. Jak patrzę na ogłoszenia o pracę, to praktycznie każda oferta na programistę Java zakłada znajomość choć jednego z tych IDE. To jasno pokazuje, że ich podstawowym celem jest ułatwienie i przyspieszenie tworzenia oprogramowania właśnie w tym języku.

Pytanie 25

Co to jest CSS Grid?

A. Dwuwymiarowy system układu elementów na stronie opary na siatkach
B. Format plików graficznych obsługiwany przez CSS3
C. Biblioteka komponentów wizualnych dla aplikacji webowych
D. Metoda optymalizacji plików CSS dla lepszej wydajności strony

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CSS Grid to nowoczesny, dwuwymiarowy system układu elementów na stronie internetowej, który umożliwia projektantom i deweloperom łatwe i elastyczne tworzenie skomplikowanych układów. Dzięki CSS Grid możemy definiować zarówno kolumny, jak i wiersze, co pozwala na precyzyjne umieszczanie elementów w kontekście całego układu. Przykładem zastosowania CSS Grid może być stworzenie responsywnej galerii zdjęć, gdzie można łatwo zmieniać liczbę kolumn w zależności od szerokości ekranu. CSS Grid jest zgodny z najnowszymi standardami W3C i stał się kluczowym elementem w nowoczesnym web designie. Dzięki właściwościom takim jak grid-template-areas, grid-template-columns, czy grid-auto-rows, projektanci mogą w intuicyjny sposób organizować treści, co poprawia zarówno estetykę, jak i użyteczność stron. Ponadto, korzystanie z CSS Grid pozwala na zmniejszenie zależności od zewnętrznych bibliotek JavaScript do układania elementów, co podnosi wydajność i usprawnia proces tworzenia stron.

Pytanie 26

Które z poniższych nie jest wzorcem architektonicznym aplikacji mobilnych?

A. Linear Sequential Flow
B. Clean Architecture
C. MVVM (Model-View-ViewModel)
D. MVC (Model-View-Controller)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Linear Sequential Flow, znany również jako model kaskadowy, nie jest uznawany za wzorzec architektoniczny aplikacji mobilnych z kilku powodów. Przede wszystkim jest to podejście linearnie sekwencyjne, które zakłada, że wszystkie fazy rozwoju oprogramowania (analiza wymagań, projektowanie, implementacja, testowanie i wdrożenie) są realizowane jedna po drugiej. W praktyce oznacza to, że nie ma możliwości powrotu do wcześniejszych etapów bez znacznych kosztów i czasu. W kontekście aplikacji mobilnych, gdzie wymagania często zmieniają się w trakcie procesu rozwoju, podejście to może prowadzić do poważnych problemów. Zamiast tego, stosuje się bardziej elastyczne wzorce, takie jak MVC (Model-View-Controller), MVVM (Model-View-ViewModel) czy Clean Architecture, które pozwalają na łatwiejsze dostosowywanie się do zmieniających się potrzeb rynku. Przykładem zastosowania MVC może być aplikacja z interfejsem użytkownika, gdzie model odpowiada za dane, widok za interakcję z użytkownikiem, a kontroler łączy te dwa elementy. Oprócz tego, wzorce architektoniczne takie jak MVVM są szczególnie popularne w aplikacjach opartych na JavaScript, co wprowadza jeszcze większą modularność i możliwość testowania poszczególnych komponentów.

Pytanie 27

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

A. Harmonogram realizacji projektu
B. Wyjaśnienie struktur danych wykorzystywanych w kodzie
C. Informacje o narzędziach programistycznych zastosowanych w procesie tworzenia aplikacji
D. Opis instalacji, konfiguracji oraz obsługi oprogramowania

Brak odpowiedzi na to pytanie.

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

Pytanie 28

Co następuje, gdy błąd nie zostanie uchwycony przez blok catch?

A. Program zakończy działanie z błędem
B. Instrukcja throw zostanie automatycznie wykreślona
C. Błąd zostanie zignorowany przez kompilator
D. Program kontynuuje działanie, pomijając błąd

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Jeśli wyjątek nie zostanie przechwycony przez blok 'catch', program zakończy działanie z błędem i wygeneruje komunikat o nieobsłużonym wyjątku. Jest to domyślne zachowanie w C++ i innych językach obsługujących wyjątki, co ma na celu zapobieganie dalszemu wykonywaniu kodu, który mógłby prowadzić do nieprzewidywalnych rezultatów. Obsługa wyjątków jest kluczowym elementem zapewniania stabilności i bezpieczeństwa aplikacji – brak jej implementacji może prowadzić do awarii programu. Dlatego zaleca się, aby zawsze stosować odpowiednie bloki 'try-catch' wokół kodu, który może generować wyjątki.

Pytanie 29

Wskaż rodzaj testów, które przeprowadza się podczas fazy tworzenia kodu źródłowego

A. testy kompatybilności
B. testy wdrożeniowe
C. testy jednostkowe
D. testy wydajnościowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy jednostkowe to, moim zdaniem, absolutny fundament solidnego programowania. Są to niewielkie, automatyczne testy, które programista pisze zwykle równolegle z kodem albo nawet przed nim, jeśli stosuje się TDD (Test-Driven Development). Chodzi o to, żeby każda najmniejsza część programu – funkcja, metoda czy klasa – była dokładnie sprawdzona, czy zachowuje się zgodnie z założeniami już na etapie pisania kodu. W praktyce wygląda to tak: piszesz sobie funkcję, która np. liczy VAT, i od razu piszesz kilka testów, które sprawdzają, czy dla różnych wartości zwraca ona poprawne wyniki. Gdy coś się zmieni w kodzie, testy jednostkowe pozwalają od razu wychwycić, że coś zepsułeś (albo, oby nie, ktoś inny). Standardy branżowe, jak np. ISTQB czy wytyczne IEEE 829, bardzo mocno podkreślają wagę testów jednostkowych – bez nich zarządzanie jakością oprogramowania jest po prostu niemożliwe na dłuższą metę. W praktyce nawet proste projekty szybko bez nich zamieniają się w chaos. Co ciekawe, dobrze napisane testy jednostkowe ułatwiają refaktoryzację, bo masz pewność, że po zmianach wszystko działa jak należy. W mojej opinii, jeśli ktoś naprawdę poważnie myśli o pracy w branży IT, powinien umieć pisać testy jednostkowe z marszu.

Pytanie 30

Jakie kroki należy podjąć po wykryciu błędu w kodzie podczas testowania?

A. Zgłosić błąd użytkownikowi końcowemu
B. Usunąć moduł, który zawiera błąd
C. Pominąć błąd, jeżeli aplikacja funkcjonuje poprawnie
D. Naprawić błąd i przeprowadzić ponowne testy aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Po znalezieniu błędu w kodzie podczas testowania kluczowym krokiem jest poprawienie błędu i ponowne przetestowanie aplikacji. Taki cykl iteracyjny pozwala na eliminację błędów i zapewnienie, że aplikacja działa zgodnie z oczekiwaniami. Testowanie po każdej poprawce jest niezbędne, aby upewnić się, że wprowadzone zmiany nie wpłynęły negatywnie na inne części aplikacji. Taka praktyka jest integralną częścią Continuous Integration (CI) i Continuous Deployment (CD), które zakładają częste wdrażanie i testowanie kodu. Poprawienie błędów na wczesnym etapie rozwoju minimalizuje koszty i czas potrzebny na naprawę błędów w fazie produkcyjnej, co przyczynia się do stabilności i wysokiej jakości końcowego produktu.

Pytanie 31

W wyniku realizacji zaprezentowanego kodu na ekranie pojawią się:

int tablica[10];

for (int i = 0; i < 10; i++) {
    if (i % 3 != 0)
        std::cout << tablica[i] << ", ";
}
A. elementy tablicy o indeksach: 1, 2, 4, 5, 7, 8
B. wszystkie elementy tablicy, które są wielokrotnością 3
C. elementy z indeksów tablicy, które są podzielne przez 3
D. wszystkie elementy tablicy, które mają wartość nieparzystą

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tym zadaniu najważniejsze było zrozumienie warunku if oraz sposobu działania instrukcji for. Kod przechodzi po wszystkich elementach tablicy o 10 pozycjach, ale wyświetla tylko te, dla których indeks nie jest podzielny przez 3. Sprawdzenie tego realizuje się przez resztę z dzielenia: i % 3 != 0. Czyli dla i=0,3,6,9 warunek nie zostanie spełniony, więc te elementy zostaną pominięte. Zostaną więc wyświetlone elementy o indeksach 1, 2, 4, 5, 7, 8. To jest bardzo popularny patent w programowaniu, kiedy chcemy pominąć pewne elementy w tablicy lub kolekcji na podstawie prostego warunku logicznego. Często używa się podobnych konstrukcji przy analizie danych, np. przy wykluczaniu co któregoś rekordu z przetwarzania, czy też przy operacjach na grafach lub macierzach. Moim zdaniem warto zapamiętać taki sposób sprawdzania, bo pozwala pisać kod bardziej czytelny i łatwy do modyfikacji. Z mojego doświadczenia, gdy programuje się coś na konkursy albo optymalizuje zadania, takie triki z modulo przyspieszają proces myślowy. Dodam jeszcze, że domyślne wartości w tablicy typu int nie są zainicjalizowane, więc wynik jest zależny od środowiska, ale w tym pytaniu chodzi tylko o indeksy, nie wartości.

Pytanie 32

Która funkcja z biblioteki jQuery w JavaScript służy do naprzemiennego dodawania oraz usuwania klasy z elementu?

A. .switchClass()
B. .toggleClass()
C. .changeClass()
D. .bingClass()

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybrałeś .toggleClass() i to jest strzał w dziesiątkę pod względem praktycznego stosowania jQuery. Funkcja .toggleClass() dokładnie odpowiada na potrzebę dynamicznej zmiany wyglądu elementu — pozwala jednym wywołaniem dodać klasę, jeśli jej nie ma, albo usunąć, jeśli już istnieje. To niesamowicie przydatne, zwłaszcza przy tworzeniu efektów interaktywnych, takich jak menu rozwijane, animacje kliknięcia, czy zmiany stanów przycisków. W praktyce wygląda to często tak: $('div').toggleClass('active'), gdzie po każdym kliknięciu div otrzymuje lub traci klasę 'active'. Warto zauważyć, że .toggleClass() obsługuje też opcjonalny drugi argument typu boolean, więc możesz wymusić dodanie lub usunięcie klasy zależnie od logiki — to takie jQuery’owe „sprytne przełączanie”. Z mojego doświadczenia, ta metoda jest zdecydowanie jednym z fundamentów, kiedy chodzi o szybkie prototypowanie i pisanie kodu front-endowego zgodnego z zasadami DRY (Don’t Repeat Yourself). Dobrą praktyką jest też, żeby nie nadużywać tej funkcji do zbyt skomplikowanych operacji, bo wtedy łatwo się pogubić w logice klas CSS. No i jak patrzę na projekty w branży, to .toggleClass() jest stosowane praktycznie wszędzie tam, gdzie chodzi o responsywną zmianę interfejsu klienta bez potrzeby pisania rozbudowanego JavaScriptu.

Pytanie 33

Który z wymienionych dokumentów jest najczęściej stosowany w zarządzaniu pracą zespołu Scrum?

A. Lista zasobów ludzkich
B. Product backlog
C. Diagram Gantta
D. Specyfikacja techniczna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Product backlog to taki ważny dokument w Scrumie, właściwie to serce całego projektu. Zawiera listę funkcji, które chcemy mieć w produkcie, a wszystko to jest poukładane według tego, co jest najważniejsze. Fajnie, że ten dokument jest żywy – zmienia się w miarę jak rozwija się projekt i dostajemy nowe info od klienta. Dzięki temu zespół może się skupić na tym, co naprawdę ma znaczenie, a to sprawia, że dostarczamy wartość w rytm iteracji. Ta elastyczność backlogu to mega atut, bo pozwala na szybkie reagowanie na zmiany w wymaganiach, a to w dzisiejszym świecie projektowym jest kluczowe.

Pytanie 34

Co oznacza walidacja kodu programu?

A. Czynnością polegającą na kompilowaniu kodu
B. Czynnością dotyczącą publikacji aplikacji w sklepie
C. Czynnością weryfikującą poprawność i zgodność kodu z założeniami
D. Czynnością związaną z tworzeniem dokumentacji kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Walidacja kodu programu to proces sprawdzania jego poprawności i zgodności z założeniami projektowymi oraz standardami programistycznymi. Celem walidacji jest wykrycie błędów logicznych, składniowych i zgodności kodu z wymaganiami aplikacji. Walidacja może obejmować analizę statyczną kodu (bez jego wykonywania) oraz testy jednostkowe i integracyjne, które sprawdzają funkcjonalność aplikacji. Dzięki walidacji programiści mogą uniknąć błędów na późniejszych etapach rozwoju projektu, co znacząco zwiększa niezawodność i stabilność aplikacji. Proces ten jest nieodzowny w metodykach Agile i Continuous Integration, gdzie regularne testowanie kodu stanowi podstawę dostarczania wysokiej jakości oprogramowania.

Pytanie 35

W metodach klasy GoldCustomer dostępne są tylko pola

public class Customer {
    public string Name;
    protected int Id;
    private int Age;
}
public class GoldCustomer: Customer {
    private GoldPoints: int;
}
A. GoldPoints, Name
B. GoldPoints, Name, Id, Age
C. GoldPoints
D. GoldPoints, Name, Id

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ta odpowiedź dobrze pokazuje, jak działa dziedziczenie i modyfikatory dostępu w C#. W klasie GoldCustomer masz dostęp do własnych pól, czyli GoldPoints, oraz do pól odziedziczonych po klasie bazowej Customer. Tutaj kluczowe jest rozumienie, które pola są faktycznie dostępne. Skoro Name jest publiczne, to bez żadnych kombinacji można się do niego dobrać z dowolnego miejsca – nawet spoza klasy. Id jest chronione (protected), więc według zasad OOP dostępne jest w klasie bazowej oraz wszystkich pochodnych – czyli właśnie w GoldCustomer. To bardzo praktyczne, bo często się zdarza, że potrzebujemy pracować na polach z klasy bazowej, ale nie chcemy, żeby były one widoczne na zewnątrz klasy (np. przez innych programistów korzystających z API). Age jest prywatne i tu już nie da się go bezpośrednio użyć w klasie pochodnej. Z mojego doświadczenia korzystanie z protected dla rzeczy, które mają być dostępne tylko w hierarchii dziedziczenia, to codzienność – pozwala zachować elastyczność, ale i bezpieczeństwo enkapsulacji. Praktycznie rzecz biorąc, jak piszesz klasy dziedziczące po innych, zawsze warto zerknąć na poziomy dostępu, bo od nich zależy, do czego masz dostęp i co możesz odziedziczyć. Wzorce projektowe, jak np. Template Method, mocno polegają na mechanizmach dziedziczenia i odpowiedniego ustawienia widoczności pól czy metod. Przemyślany dobór public, protected, private ułatwia utrzymanie kodu oraz chroni przed przypadkowym wykorzystaniem nieodpowiednich elementów klasy, co w większych projektach bywa naprawdę kluczowe.

Pytanie 36

Jakie z przedstawionych rozwiązań może pomóc w unikaniu porażeń prądem w biurze?

A. Kontrolowanie jakości powietrza
B. Wykorzystanie foteli o ergonomicznym kształcie
C. Stosowanie monitorów LCD
D. Systematyczne sprawdzanie instalacji elektrycznych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Regularne testowanie instalacji elektrycznych to podstawowy sposób zapobiegania porażeniom prądem w pracy biurowej. Testy te pozwalają wykryć uszkodzenia, przeciążenia i inne usterki, które mogą stanowić zagrożenie dla pracowników. Prawidłowo przeprowadzane przeglądy techniczne obejmują sprawdzanie stanu przewodów, gniazdek oraz urządzeń elektrycznych. Regularne kontrole zgodne z normami BHP oraz przepisami dotyczącymi instalacji elektrycznych są obowiązkowe i mają kluczowe znaczenie dla bezpieczeństwa pracy. Pamiętaj, że zaniedbanie testów elektrycznych może prowadzić do poważnych wypadków, takich jak pożary lub porażenia prądem.

Pytanie 37

Jaką jednostkę zaleca się stosować przy projektowaniu interfejsu aplikacji?

A. dp
B. pt
C. mm
D. px

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
No i właśnie, dp (density-independent pixels) to taki trochę złoty standard przy projektowaniu interfejsów na Androida. W praktyce chodzi o to, żeby elementy UI wyglądały podobnie na różnych urządzeniach – niezależnie czy ktoś ma ekran gęsty jak sito, czy telefon z bardzo dużymi pikselami. Używanie dp pozwala unikać sytuacji, gdzie tekst albo przyciski na jednym urządzeniu są czytelne i wygodne w obsłudze, a na innym są mikroskopijne lub przeciwnie – przesadnie wielkie. Oczywiście, wszystko to wynika z tego, że piksele na różnych ekranach mają inną fizyczną wielkość – tzw. density. Stosując dp, projektanci mogą być pewni, że rozmiary będą proporcjonalnie takie same niezależnie od sprzętu. Sam system Android automatycznie przelicza dp na odpowiednią liczbę pikseli na danym urządzeniu. To bardzo wygodne! Moim zdaniem każdy, kto zaczyna projektować aplikacje mobilne, powinien od razu przyzwyczajać się do pracy z dp, bo to po prostu ułatwia życie i ogranicza potem poprawki. To też zgodne z oficjalnymi wytycznymi Google – praktycznie każda dokumentacja do Material Design kładzie na to nacisk. Warto jeszcze pamiętać, że inne jednostki jak px, pt czy mm mogą się sprawdzić w wyjątkowych sytuacjach, ale raczej tylko wtedy, gdy faktycznie zależy nam na absolutnych rozmiarach – a to w UI mobilnym prawie się nie zdarza.

Pytanie 38

Który z wymienionych mechanizmów umożliwia ograniczenie dostępu do wybranych sekcji aplikacji webowej?

A. Formularze dynamiczne
B. Pliki CSS statyczne
C. System logowania i kontroli dostępu
D. Mechanizm renderowania treści

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
System logowania i kontroli dostępu to kluczowy mechanizm, który pozwala na ograniczenie dostępu do niektórych części aplikacji webowej. Logowanie umożliwia uwierzytelnienie użytkowników i przypisanie im odpowiednich ról, co definiuje poziom dostępu do zasobów. Dzięki mechanizmom autoryzacji możliwe jest kontrolowanie, które funkcje lub sekcje aplikacji są dostępne dla poszczególnych użytkowników. Kontrola dostępu może być realizowana za pomocą tokenów JWT (JSON Web Token), sesji lub kluczy API, co zapewnia dodatkowe warstwy zabezpieczeń. Wdrożenie takich systemów jest nieodzowne w aplikacjach webowych oferujących różne poziomy funkcjonalności, takich jak panele administracyjne, portale użytkowników czy aplikacje bankowe. Odpowiednie zarządzanie uprawnieniami jest fundamentem bezpieczeństwa aplikacji.

Pytanie 39

Przedstawione w filmie działania wykorzystują narzędzie

A. kompilatora dla interfejsu graficznego
B. generatora GUI przekształcającego kod do języka XAML
C. debuggera analizującego wykonujący kod
D. generatora kodu java

Brak odpowiedzi na to pytanie.

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

Pytanie 40

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 plików sufiksy @2x, @3x. Android: umieścić grafikę w odpowiednich folderach drawable: -hdpi, -xhpi, xxhdpi
B. iOS: dodać do nazw sufiksy oznaczające rozdzielczość, np. 32ppi. Android: umieścić grafikę w odpowiednich katalogach: 32ppi, 64ppi, 96ppi
C. iOS: utworzyć katalogi hdpi, lhpi, xhpi i dodać do nich grafiki. Android: utworzyć katalogi 32x32, 64x64, 96x96 i dodać do nich grafiki
D. iOS: dodać do nazw sufiksy #2x, #3x. Android: dodać do nazw sufiks rozdzielczości: -32x32, -64x64, -96x96

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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.