Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 12 czerwca 2026 07:49
  • Data zakończenia: 12 czerwca 2026 07:50

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Które stwierdzenie dotyczące interfejsu w Java jest prawdziwe?

A. Interfejs może zawierać pola z dostępem protected
B. W interfejsie można definiować implementacje metod statycznych
C. Interfejs może dziedziczyć po wielu klasach jednocześnie
D. Wszystkie metody w interfejsie są domyślnie publiczne i abstrakcyjne

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Interfejsy w języku Java są fundamentalnym elementem programowania obiektowego, pozwalającym na definiowanie kontraktów, które muszą być implementowane przez klasy. Stwierdzenie, że wszystkie metody w interfejsie są domyślnie publiczne i abstrakcyjne, jest całkowicie zgodne z zasadami języka Java. Oznacza to, że nie trzeba jawnie deklarować tych modyfikatorów dostępu, ponieważ metody zdefiniowane w interfejsie są zawsze dostępne dla klas implementujących ten interfejs. To podejście promuje luźne powiązania między kodem oraz ułatwia testowanie i utrzymanie aplikacji. Przykładem praktycznym może być interfejs Comparable, który definiuje metodę compareTo. Klasy, które implementują ten interfejs, muszą dostarczyć konkretnej logiki porównywania obiektów, co pozwala na ujednolicenie sposobu, w jaki obiekty są porównywane w kolekcjach. Warto również zauważyć, że od Javy 8 interfejsy mogą zawierać metody domyślne z implementacją, ale nawet te metody są publiczne. Poprawne zrozumienie roli interfejsów jest kluczowe w projektowaniu systemów z zastosowaniem wzorców projektowych, takich jak MVC czy strategia.

Pytanie 2

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

A. <stdio.h>
B. <fstream>
C. <iostream>
D. <fileio.h>

Brak odpowiedzi na to pytanie.

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

Pytanie 3

Termin ryzyko zawodowe odnosi się do

A. prawdopodobieństwa, że zdarzenia niepożądane związane z pracą spowodują straty, w szczególności negatywne skutki zdrowotne dla pracowników
B. ciężkości skutków niepożądanych zdarzeń związanych z pracą
C. zagrożenia wypadkowego, które może wystąpić w miejscu pracy
D. efektów zagrożeń wypadkowych, jakie występują w miejscu zatrudnienia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pojęcie ryzyka zawodowego w branży BHP jest dość precyzyjnie zdefiniowane i, moim zdaniem, bardzo praktyczne. Chodzi tu właśnie o prawdopodobieństwo, że w wyniku zdarzeń niepożądanych w pracy pojawią się straty – najczęściej w postaci szkód zdrowotnych u pracowników, ale czasem też finansowych czy środowiskowych. To nie tylko sam fakt istnienia zagrożenia, ale ocena, czy i jak bardzo ono może się zaktualizować. W praktyce, np. w branży budowlanej czy energetycznej, ocena ryzyka zawodowego to podstawa organizacji bezpiecznej pracy. W Polsce normy PN-N-18002 i wytyczne Głównego Inspektoratu Pracy jasno mówią, że trzeba analizować zarówno prawdopodobieństwo wystąpienia zagrożenia, jak i potencjalne skutki. Co ciekawe, dla różnych zawodów i stanowisk ocena tego ryzyka może wyglądać zupełnie inaczej – czasem to analiza prostych czynności, czasem złożony audyt. Najlepsze firmy nie ograniczają się do szacowania samego zagrożenia, ale regularnie aktualizują ocenę ryzyka, szkolą pracowników i wdrażają środki zapobiegawcze. Moim zdaniem bez rzetelnej oceny ryzyka nie da się realnie podnieść bezpieczeństwa pracy – to taki fundament wszystkich dalszych działań. Warto zwracać uwagę, że ryzyko zawodowe zawsze wynika z kombinacji zagrożenia i prawdopodobieństwa, a nie tylko z obecności niebezpieczeństwa czy dotychczasowych wypadków.

Pytanie 4

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

A. Klasa Samochód i Pojazd nie są ze sobą powiązane
B. Klasa Samochód ma dziedziczenie od klasy Pojazd
C. Klasa Pojazd nie dziedziczy z żadnej klasy
D. Klasa Pojazd ma dziedziczenie od klasy Samochód

Brak odpowiedzi na to pytanie.

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

Jaką wartość ma zmienna b po wykonaniu poniższego kodu?

int a = 1, b = 20, c = 3;
while (a <= 10) {
    b = b - c;
    a += 2;
}
A. 20
B. 11
C. 5
D. 2

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Po przeanalizowaniu przedstawionego kodu, możemy zauważyć, że zmienne a b i c są zainicjalizowane odpowiednio wartościami 1 20 i 3. Pętla while jest zależna od warunku a <= 10 co oznacza że będzie się wykonywać dopóki a nie przekroczy 10. W ciele pętli najpierw zmniejszamy wartość b o wartość c czyli b = b - c a następnie zwiększamy a o 2 czyli a += 2. Ponieważ a jest początkowo równe 1 pętla będzie się wykonywać pięć razy zanim a stanie się większe niż 10 (1 3 5 7 9). Podczas każdej iteracji wartość b zmniejsza się o 3 (ponieważ c=3). Po pięciu iteracjach wartość b zostanie zmniejszona o 15 (5*3) z początkowej wartości 20 uzyskując ostatecznie 5. W tym kontekście poprawna odpowiedź to 5. Takie podejście do analizy pętli i zmiennych jest kluczowe podczas programowania ponieważ pozwala zrozumieć jak zmieniają się wartości zmiennych w czasie wykonywania programu. Zrozumienie tych zasad jest fundamentalne w programowaniu proceduralnym oraz w debugowaniu kodu.

Pytanie 6

Które z poniższych nie jest frameworkiem do testowania w JavaScript?

A. Express
B. Mocha
C. Jest
D. Jasmine

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Express jest popularnym frameworkiem do budowania aplikacji webowych na platformie Node.js, a nie narzędziem do testowania. Jego głównym celem jest ułatwienie tworzenia serwerów HTTP oraz zarządzanie routingiem i middleware w aplikacjach. W praktyce, Express pozwala na szybkie i efektywne tworzenie API, co jest kluczowe w nowoczesnym rozwoju aplikacji. W kontekście testowania aplikacji, mogą być stosowane inne frameworki, takie jak Mocha, Jest czy Jasmine, które oferują funkcjonalności dedykowane do pisania i uruchamiania testów. Dobrą praktyką jest oddzielanie logiki testowej od logiki aplikacji, co osiąga się przy użyciu odpowiednich narzędzi, takich jak wspomniane frameworki testowe. Zrozumienie różnicy między serwerowymi frameworkami, jak Express, a frameworkami do testowania, jest istotne dla każdego programisty, aby efektywnie dobierać narzędzia do pracy.

Pytanie 7

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

A. liniowe
B. heurystyczne
C. rekurencyjne
D. iteracyjne

Brak odpowiedzi na to pytanie.

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

Pytanie 8

W jakiej sytuacji kolekcja typu lista okaże się bardziej wydajna niż tablica?

A. Gdy liczba elementów w kolekcji jest niezmienna
B. Gdy mamy pewność co do dokładnego rozmiaru kolekcji przed kompilacją
C. Gdy chcemy uzyskać dostęp do elementów przy pomocy indeksu
D. Gdy liczba elementów w kolekcji zmienia się dynamicznie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Lista to dynamiczna struktura danych, która pozwala na efektywne dodawanie i usuwanie elementów, zwłaszcza gdy liczba elementów zmienia się w trakcie działania programu. Listy są bardziej elastyczne niż tablice, ponieważ mogą dynamicznie dostosowywać swoją wielkość bez potrzeby alokacji dodatkowej pamięci. W przypadku dynamicznych operacji, takich jak częste wstawianie i usuwanie elementów, listy są znacznie bardziej wydajne niż tablice, które wymagają przesunięcia wszystkich elementów po każdej operacji. Listy świetnie sprawdzają się w implementacji kolejek, stosów oraz w strukturach, które muszą rosnąć i kurczyć się podczas działania aplikacji.

Pytanie 9

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

A. Zarządzanie transferem danych pomiędzy urządzeniami wejścia/wyjścia
B. Umożliwienie tworzenia kopii zapasowej danych użytkownika
C. Tymczasowe magazynowanie danych i instrukcji dla procesora
D. Trwałe przechowywanie systemu operacyjnego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pamięć operacyjna, znana jako RAM (Random Access Memory), odgrywa kluczową rolę w funkcjonowaniu systemu komputerowego. Jej głównym zadaniem jest tymczasowe przechowywanie danych i instrukcji, które są niezbędne dla procesora w trakcie wykonywania programów. Kiedy uruchamiamy aplikację, jej kod oraz dane są ładowane z pamięci masowej (np. dysku twardego) do pamięci RAM, co umożliwia szybki dostęp do nich przez procesor. Dzięki dużej prędkości działania pamięć operacyjna znacząco przyspiesza procesy obliczeniowe, ponieważ operacje na danych przechowywanych w RAM są wielokrotnie szybsze niż na danych znajdujących się na dysku twardym. Współczesne komputery często wyposażone są w kilka gigabajtów pamięci RAM, co pozwala na efektywne zarządzanie wieloma uruchomionymi aplikacjami jednocześnie. Standardy takie jak DDR4 i DDR5 określają nie tylko wydajność, ale również szybkość przesyłania danych, co ma kluczowe znaczenie w kontekście wydajności systemu komputerowego. W efekcie, pamięć operacyjna jest niezbędna do płynnego działania systemu operacyjnego oraz aplikacji, a jej pojemność i szybkość mają bezpośredni wpływ na ogólną wydajność komputera.

Pytanie 10

Jakie narzędzie jest wykorzystywane do zgłaszania błędów w projektach IT?

A. Blender
B. Photoshop
C. JIRA
D. Git

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
JIRA to jedno z najczęściej wykorzystywanych narzędzi do zarządzania projektami i raportowania błędów w projektach informatycznych. JIRA umożliwia śledzenie błędów, zarządzanie zadaniami oraz efektywne monitorowanie postępów prac nad projektem. Dzięki integracji z innymi narzędziami, takimi jak Confluence czy Bitbucket, JIRA stanowi kompleksowe rozwiązanie wspierające zespoły deweloperskie. Raportowanie błędów w JIRA pozwala na łatwe przypisywanie ich do odpowiednich członków zespołu, dodawanie załączników i komentarzy oraz monitorowanie statusu danego problemu, co usprawnia proces zarządzania jakością oprogramowania.

Pytanie 11

Który system operacyjny jest podstawowym środowiskiem do tworzenia aplikacji mobilnych w języku Swift?

A. Android
B. LG UX
C. iOS
D. Windows UWP

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Swift to język programowania stworzony przez Apple specjalnie z myślą o ekosystemie tej firmy, czyli głównie o systemach iOS, macOS, watchOS oraz tvOS. To właśnie iOS jest podstawową, domyślną platformą, na której programiści wykorzystują Swift do budowania aplikacji mobilnych. Praktycznie każda nowoczesna aplikacja na iPhone’a czy iPada, która powstała po 2014 roku, jest przynajmniej w części napisana w Swifcie, bo to obecnie standard branżowy w świecie Apple. Moim zdaniem to jest super wygodne, bo Apple dostarcza kompletne narzędzia do pracy ze Swiftem, jak Xcode czy rozbudowane frameworki (UIKit, SwiftUI). Z mojego doświadczenia wynika, że programowanie w Swifcie dla iOS to nie tylko prostsza składnia, ale też większa stabilność i bezpieczeństwo aplikacji – Apple bardzo dba o aktualizacje narzędzi i dobre praktyki. Warto też pamiętać, że od wersji SwiftUI rozwijanie aplikacji na iOS stało się jeszcze bardziej intuicyjne, bo można korzystać z deklaratywnego podejścia do interfejsów. W realnych projektach spotyka się też Objective-C, ale obecnie Swift wygrywa czytelnością i wsparciem społeczności. Gdyby ktoś chciał tworzyć aplikacje mobilne poza ekosystemem Apple, to niestety Swift nie będzie najlepszym wyborem – właśnie dlatego iOS jest tym środowiskiem, do którego Swift został stworzony i tam najbardziej się sprawdza.

Pytanie 12

Jakie będzie działanie przedstawionych dwóch równoważnych fragmentów kodu źródłowego?

Kod w React:

function Heading(props) {
    return (
        <h1> {props.title} </h1>
    );
}

// w metodzie render
return (
    <Heading title="Egzamin zawodowy" />
);

Kod w Angular:
// heading.component.ts
import {Component} from '@angular/core';
@Component({
    selector: 'app-heading',
    templateUrl: './heading.component.html',
    styleUrls: ['./heading.component.css']
})

export class HeadingComponent {
    title:String = "Egzamin zawodowy";
    ...
}

// heading.component.html
<h1>{{title}}</h1>
A. Wyświetlony na stronie tekst w nagłówku: "Egzamin zawodowy"
B. Wyświetlony na stronie tekst w akapicie: "Egzamin zawodowy"
C. Nadany tytuł strony: "Egzamin zawodowy"
D. Nadany tytuł każdego elementu HTML: "Egzamin zawodowy"

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dokładnie tak – zarówno w React, jak i w Angularze, oba te fragmenty kodu mają za zadanie wyświetlić tekst „Egzamin zawodowy” w nagłówku HTML, czyli w tagu <h1>. To jest klasyczna praktyka w aplikacjach frontendowych. W React przekazujesz wartość props.title do komponentu Heading i renderujesz ją w elemencie <h1>. W Angularze tworzysz pole klasy o nazwie title i korzystasz z interpolacji {{ title }} w szablonie HTML – efekt jest identyczny. Taki sposób podejścia odzwierciedla zasadę jednokierunkowego przepływu danych i rozdzielania logiki od prezentacji, co jest jedną z podstaw nowoczesnych frameworków. Bardzo często nagłówki jak <h1> są wykorzystywane nie tylko dla estetyki, ale i poprawy dostępności oraz SEO strony – roboty wyszukiwarek właśnie z tych tagów czerpią wiedzę o głównym temacie widoku. Spotykałem się wielokrotnie z sytuacjami, gdzie ktoś próbował „upiększać” nagłówki za pomocą CSS, ale zapominał o semantyce i kończył z brakiem <h1> w kodzie – to błąd! Dobrą praktyką jest zawsze korzystanie z odpowiednich tagów HTML. Takie podejście sprawia, że kod jest czytelny, łatwiej go utrzymać i jest bardziej przyjazny dla wszystkich, także osób korzystających np. z czytników ekranu. Poza tym, takie komponenty są świetne do wielokrotnego użytku – możesz przekazać różne wartości „title” do różnych nagłówków strony, nie pisząc tego samego kodu od nowa. Moim zdaniem to jedna z podstawowych, ale bardzo ważnych technik, które każdy frontendowiec powinien ogarniać.

Pytanie 13

Jaką nazwę kontrolki powinno się umieścić w początkowej linii kodu, w miejscu <???, aby została ona wyświetlona w podany sposób?

Ilustracja do pytania
A. SeekBar
B. RatinoBar
C. Spinner
D. Switch

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Switch to kontrolka używana w Androidzie do stworzenia elementu interfejsu użytkownika, który pozwala użytkownikowi przełączać się między dwoma stanami. Domyślnie stany te są identyfikowane jako włączone i wyłączone, co jest szczególnie przydatne w przypadku funkcji wymagających prostego wyboru binarnego, jak na przykład włączanie lub wyłączanie ustawień. Kod XML użyty w pytaniu zawiera atrybuty android:textOff i android:textOn, które są typowe dla klasy Switch i pozwalają zdefiniować tekst, jaki ma być wyświetlany w stanie wyłączonym i włączonym. W praktyce Switch jest często stosowany w aplikacjach mobilnych do kontroli ustawień użytkownika, co pozwala na łatwą i intuicyjną obsługę. Dobrymi praktykami jest używanie Switch w kontekście jednoznacznego wyboru, aby nie wprowadzać użytkownika w błąd. Warto również zadbać o dostępność i odpowiednie etykietowanie kontrolki, co zapewnia jej zrozumiałość dla wszystkich użytkowników.

Pytanie 14

Jaki modyfikator umożliwia dostęp do elementu klasy z każdego miejsca w kodzie?

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

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator 'Public' umożliwia dostęp do składowych klasy z dowolnego miejsca w programie, zarówno w ramach tej samej klasy, jak i poza nią. To najbardziej otwarty modyfikator dostępu, który pozwala na tworzenie interfejsów API, umożliwiających korzystanie z publicznych metod i właściwości przez inne klasy oraz moduły. W praktyce oznacza to, że publiczne metody są widoczne globalnie, co pozwala na ich wywoływanie bez ograniczeń. Jest to przydatne w przypadkach, gdy dana funkcjonalność musi być dostępna w różnych częściach programu lub aplikacji.

Pytanie 15

Które z wymienionych stwierdzeń najtrafniej charakteryzuje klasę dziedziczącą?

A. Klasa, która umożliwia wielokrotne dziedziczenie pól prywatnych
B. Klasa, która nie może posiadać konstruktorów ani destruktorów
C. Klasa, która wykorzystuje pola i metody innej klasy bez ich ponownej definicji
D. Klasa, która dzieli swoje pola z klasami zaprzyjaźnionymi

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dziedziczenie w programowaniu obiektowym pozwala na tworzenie nowych klas na podstawie istniejących. Klasa dziedziczona (klasa pochodna) automatycznie uzyskuje dostęp do publicznych i chronionych pól oraz metod klasy bazowej, co eliminuje potrzebę ich ponownego definiowania. Dzięki dziedziczeniu można rozszerzać funkcjonalność istniejących klas, co prowadzi do bardziej efektywnego i modułowego kodu. Przykładem może być klasa 'Pojazd', po której dziedziczy klasa 'Samochód', zachowując wszystkie właściwości pojazdu i dodając specyficzne dla samochodu metody lub pola.

Pytanie 16

Jakie są główne cechy architektury klient-serwer?

A. Komunikacja odbywa się bezpośrednio między urządzeniami klienckimi
B. Każdy klient funkcjonuje niezależnie od pozostałych
C. Serwer pełni rolę pasywnego odbiorcy danych od klientów
D. Dane są przechowywane i przetwarzane na serwerze, a klient wysyła żądania i odbiera odpowiedzi

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Architektura klient-serwer to model, w którym dane są przechowywane i przetwarzane na serwerze, a klient wysyła żądania i odbiera odpowiedzi. Model ten umożliwia centralizację zasobów, co prowadzi do łatwiejszego zarządzania aplikacjami i zwiększonego bezpieczeństwa. Klient-serwer jest podstawą działania aplikacji webowych, usług sieciowych oraz baz danych. Dzięki temu architektura ta umożliwia wielu użytkownikom jednoczesny dostęp do tych samych danych, co czyni ją wydajnym rozwiązaniem dla rozproszonych systemów informatycznych. Serwery mogą obsługiwać różne rodzaje klientów, takie jak przeglądarki, aplikacje mobilne czy urządzenia IoT, co sprawia, że jest to wszechstronny model stosowany w wielu branżach.

Pytanie 17

Co oznacza termin 'immutability' w programowaniu funkcyjnym?

A. Obiekty są automatycznie usuwane z pamięci
B. Kod może być wykonywany równolegle
C. Funkcje mogą być przypisywane do zmiennych
D. Stan obiektu nie może być modyfikowany po jego utworzeniu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Termin 'immutability' w programowaniu funkcyjnym odnosi się do właściwości obiektów, które po utworzeniu nie mogą być modyfikowane. W kontekście programowania funkcyjnego, gdzie funkcje są kluczowym składnikiem, immutability jest fundamentalnym założeniem, które pozwala na tworzenie bardziej przewidywalnych i bezpiecznych aplikacji. Kiedy obiekty są niemodyfikowalne, każde ich 'zmiana' generuje nowy obiekt, zamiast aktualizować istniejący, co eliminuję problemy związane z nieprzewidywalnym stanem aplikacji. Przykładem może być język programowania Scala, gdzie kolekcje, takie jak List, są niemodyfikowalne z założenia. Z perspektywy dobrych praktyk, immutability przyczynia się do łatwiejszej analizy kodu, testowania jednostkowego oraz równoległego przetwarzania danych. Ponadto, programowanie funkcyjne, bazujące na tej koncepcji, sprzyja tworzeniu czystych, modularnych i łatwych do przetestowania aplikacji.

Pytanie 18

Jakie znaczenie ma przystosowanie interfejsu użytkownika do różnych platform?

A. Usuwa konieczność testowania na różnych platformach
B. Pozwala na unifikację kodu niezależnie od używanej platformy
C. Umożliwia skoncentrowanie się wyłącznie na funkcjonalności aplikacji
D. Gwarantuje optymalne korzystanie z aplikacji na każdym urządzeniu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dostosowanie interfejsu do różnych urządzeń to naprawdę ważna sprawa, żeby wszystko działało jak należy. Aplikacje, które dobrze się przystosowują do różnych ekranów czy systemów, dają lepsze doświadczenie użytkownikom. Użycie takich technik jak responsywny design czy elastyczne układy, jak flexbox czy grid, to super pomysł. Dzięki temu elementy interfejsu same się skalują, a aplikacja wygląda spójnie na telefonach, tabletach i komputerach. Nie ma nic gorszego niż chaotyczny interfejs na różnych urządzeniach, więc to naprawdę kluczowa kwestia.

Pytanie 19

Co to jest zasięg (scope) zmiennej w programowaniu?

A. Czas życia zmiennej podczas wykonywania programu
B. Maksymalny zakres wartości, jakie może przyjąć zmienna danego typu
C. Ilość pamięci, jaką zmienna zajmuje podczas wykonywania programu
D. Obszar kodu, w którym zmienna jest dostępna

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Zasięg (scope) zmiennej w programowaniu odnosi się do obszaru kodu, w którym dana zmienna jest dostępna i może być używana. W praktyce oznacza to, że zmienne mogą być zdefiniowane lokalnie w funkcjach lub blokach kodu, co oznacza, że są dostępne tylko w tym określonym kontekście. Na przykład, zmienna zdefiniowana wewnątrz funkcji nie będzie dostępna na zewnątrz tej funkcji. Taki mechanizm sprawia, że kod jest bardziej zorganizowany i zmniejsza ryzyko konfliktów nazw, co jest szczególnie istotne w większych projektach. Zasięg zmiennej można podzielić na zasięg lokalny i zasięg globalny. Zmienne globalne są dostępne w całym kodzie, natomiast lokalne ograniczają swoje działanie do funkcji, w której zostały zadeklarowane. Praktyczne wykorzystanie zasięgu zmiennych pomaga w utrzymaniu porządku w kodzie oraz w unikaniu niezamierzonych błędów wynikających z ponownego użycia nazw zmiennych. Dobrą praktyką jest ograniczanie zasięgu zmiennych do jak najmniejszych bloków, aby zwiększyć czytelność i kontrolę nad kodem. Zrozumienie zasięgu zmiennych jest kluczowe dla programistów, aby tworzyć efektywne i łatwe w utrzymaniu aplikacje.

Pytanie 20

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

A. Wysyłanie danych
B. Przesyłanie danych
C. Streaming
D. Pobieranie danych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Proces przesyłania danych z komputera lokalnego na serwer nazywany jest wysyłaniem danych. To kluczowy element komunikacji w sieciach komputerowych, który wskazuje na transfer informacji z jednego punktu do drugiego. Wysyłanie danych odbywa się za pomocą różnych protokołów, takich jak FTP (File Transfer Protocol), HTTP (Hypertext Transfer Protocol) czy SFTP (Secure File Transfer Protocol). Przykładem może być przesyłanie plików z komputera na zdalny serwer, co jest powszechnie wykorzystywane w przypadku tworzenia stron internetowych. W kontekście aplikacji, wysyłanie danych może dotyczyć również przesyłania formularzy do bazy danych. Ważne jest, aby dane były odpowiednio pakowane i kodowane w celu zapewnienia ich integralności oraz bezpieczeństwa. Stosowanie protokołów szyfrowania, takich jak SSL/TLS, dodatkowo zabezpiecza proces, co jest istotne w dobie rosnących zagrożeń cybernetycznych. Zbierając wszystkie te elementy, wysyłanie danych jest fundamentalnym procesem w architekturze nowoczesnych systemów informatycznych.

Pytanie 21

Do stworzenia zbioru danych potrzebnego do uruchomienia algorytmu sortowania bąbelkowego tablicy, wymagane są przynajmniej następujące typy:

A. dwa tablicowe, dwa do zamiany miejscami elementów
B. jeden tablicowy, dwa liczbowe do nadzorowania pętli, jeden do zamiany miejscami elementów
C. dwa tablicowe, jeden liczbowy do nadzorowania pętli
D. jeden tablicowy, jeden liczbowy do nadzorowania pętli, dwa do zamiany miejscami elementów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie bąbelkowe to jeden z tych algorytmów, które wydają się proste, ale wymagają solidnego zrozumienia działania pętli i pracy z tablicami. W praktyce, aby prawidłowo zaimplementować bubble sort, zawsze korzysta się z jednej tablicy (w której przechowywane są elementy do posortowania), dwóch liczbowych zmiennych sterujących (dla dwóch zagnieżdżonych pętli for lub while, bo każda z nich odpowiada za przechodzenie przez elementy), a także jednej dodatkowej zmiennej tymczasowej do zamiany miejscami dwóch elementów. To właśnie te cztery składniki są absolutnym minimum, żeby kod był czytelny i zgodny z zasadami dobrej praktyki. Z mojego doświadczenia, rezygnacja z jednej z nich prowadzi do niepotrzebnego kombinowania, a czasem nawet do dziwnych błędów. Warto wiedzieć, że takie podejście dobrze wpisuje się w wymagania większości języków programowania – czy to C, Java, czy Python – i sprawdza się zarówno przy nauce, jak i w praktycznych zadaniach rekrutacyjnych. Pozostawienie logiki zamiany elementów w osobnej zmiennej tymczasowej to nie tylko kwestia czytelności; to też sposób na unikanie utraty danych podczas zamiany. Co ciekawe, niektórzy próbują czasami zamieniać bez zmiennej tymczasowej, używając operacji XOR, ale w praktyce to przerost formy nad treścią i raczej niezalecane w standardzie branżowym. Dobrze jest wiedzieć, że to podejście, które tu wybrałeś, stanowi niejako wzorzec dla wszystkich początkujących programistów i jest akceptowane na egzaminach czy rozmowach technicznych.

Pytanie 22

Jakiego typu funkcja jest tworzona poza klasą, ale ma dostęp do jej prywatnych i chronionych elementów?

A. Destruktor
B. Metoda statyczna
C. Funkcja zaprzyjaźniona
D. Konstruktor

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Funkcja zaprzyjaźniona to specjalny typ funkcji, który jest deklarowany jako 'friend' w ciele klasy, co pozwala jej na dostęp do prywatnych i chronionych składowych tej klasy. Chociaż funkcja zaprzyjaźniona jest definiowana poza klasą, może operować na jej wewnętrznych danych, co czyni ją bardzo użytecznym narzędziem w programowaniu obiektowym. Tego rodzaju funkcje są często wykorzystywane w przypadkach, gdy konieczne jest współdziałanie dwóch klas lub funkcji narzędziowych, które muszą manipulować danymi wewnętrznymi klasy, ale nie powinny być jej metodami członkowskimi. Dzięki funkcjom zaprzyjaźnionym można zapewnić elastyczność w dostępie do danych przy jednoczesnym zachowaniu hermetyzacji klasy. Przykładem może być przeciążenie operatorów, np. operator +, który musi mieć dostęp do prywatnych składowych obu operandów.

Pytanie 23

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

A. add procedure dodajUsera
B. add dodajUsera procedure
C. create dodajUsera procedure
D. create procedure dodajUsera

Brak odpowiedzi na to pytanie.

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

Pytanie 24

Celem mechanizmu obietnic (ang. promises) w języku JavaScript jest

A. zarządzanie przechwytywaniem błędów aplikacji
B. zarządzanie funkcjonalnością związaną z kodem asynchronicznym
C. zastąpienie mechanizmu dziedziczenia w programowaniu obiektowym
D. ulepszenie czytelności kodu synchronicznego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Mechanizm obietnic (promises) w JavaScript to, moim zdaniem, jedno z najważniejszych udogodnień, które pojawiły się w języku, żeby ogarnąć cały ten chaos wokół asynchroniczności. Typowa sytuacja kiedyś wyglądała tak, że w kodzie robiło się „callback hell” – zagnieżdżone funkcje wywołujące się nawzajem, co mocno utrudniało życie. Promise pozwala na o wiele czytelniejsze i wygodniejsze zarządzanie operacjami, które kończą się „kiedyś”, np. pobieraniem danych z API, zapisem do pliku, czy czekaniem na odpowiedź użytkownika. Z mojego doświadczenia wynika, że dzięki promises jest dużo łatwiej obsłużyć zarówno sukces, jak i błędy – możesz skorzystać z then(), catch(), a nawet łańcuchować kilka asynchronicznych zadań bez gubienia się w kodzie. Szczególnie przydatne jest to w pracy z fetch(), gdzie bez promises cała obsługa sieci wyglądałaby strasznie topornie. Dodatkowo promises są w pełni zgodne ze standardem ECMAScript 2015 (ES6) i stanowią podstawę dla nowocześniejszych rozwiązań, takich jak async/await. Praktycznie każdy zawodowy frontendowiec czy backendowiec pracujący z Node.js powinien je znać, bo to już nie fanaberia, a codzienność. Dobra praktyka to właśnie korzystanie z promises tam, gdzie tylko mamy do czynienia z nieblokującymi operacjami. Takie podejście nie tylko poprawia czytelność kodu, ale znacząco ułatwia jego utrzymanie i debugowanie.

Pytanie 25

Które z poniższych nie jest rodzajem bazy danych?

A. Grafowa baza danych
B. Dokumentowa baza danych
C. Relacyjna baza danych
D. Routing Database

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Routing Database to termin, który nie odnosi się do konkretnego rodzaju bazy danych w tradycyjnym sensie, jak to ma miejsce w przypadku relacyjnych, grafowych czy dokumentowych baz danych. Relacyjne bazy danych organizują dane w tabelach oraz umożliwiają wykonywanie złożonych zapytań przy użyciu języka SQL, co jest standardem branżowym. Grafowe bazy danych, z kolei, są zoptymalizowane do przechowywania i przetwarzania danych o relacjach, co sprawia, że są idealne do zastosowań w obszarze analizy sieci społecznych czy systemów rekomendacyjnych. Dokumentowe bazy danych przechowują dane w formie dokumentów, co ułatwia ich przechowywanie i przetwarzanie, szczególnie w kontekście aplikacji webowych i mobilnych. Routing Database nie jest typowym przykładem bazy danych w tym sensie, ponieważ odnosi się do mechanizmów zarządzania ruchem w sieciach komputerowych, co nie jest związane z obiegiem danych w stylu relacyjnym lub NoSQL. Zrozumienie tych różnic jest kluczowe dla właściwego wyboru technologii bazodanowej w zależności od potrzeb aplikacji.

Pytanie 26

Jakie ma znaczenie "operacja wejścia" w kontekście programowania?

A. Naprawianie błędów w kodzie aplikacji
B. Przekazywanie danych do programu z zewnętrznych źródeł
C. Wprowadzanie nowych funkcji do aplikacji
D. Zmiana wartości zmiennych globalnych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Operacja wejścia w programowaniu polega na przekazywaniu danych do programu z zewnętrznego źródła, takiego jak klawiatura, plik lub strumień danych. W języku C++ typowym przykładem operacji wejścia jest `cin >> zmienna;`, która pobiera dane od użytkownika i przypisuje je do zmiennej. Operacje wejścia są niezbędne w interaktywnych aplikacjach, które wymagają danych od użytkownika w czasie rzeczywistym, umożliwiając dynamiczne przetwarzanie informacji.

Pytanie 27

Które z wymienionych narzędzi nie znajduje zastosowania w tworzeniu aplikacji desktopowych?

A. Przeglądarka internetowa
B. Debugger
C. Kompilator
D. Edytor graficzny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Przeglądarka internetowa nie jest narzędziem wykorzystywanym bezpośrednio w procesie tworzenia aplikacji desktopowych. Chociaż może służyć do przeszukiwania dokumentacji lub testowania aplikacji webowych, jej funkcjonalność nie wspiera bezpośredniego tworzenia aplikacji desktopowych. W tworzeniu aplikacji desktopowych kluczowe są narzędzia takie jak kompilatory, debugery i edytory kodu. Kompilatory przekształcają kod źródłowy na kod wykonywalny, debugery pozwalają na śledzenie błędów, a edytory kodu umożliwiają pisanie i edytowanie aplikacji.

Pytanie 28

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

A. Edytor graficzny, przeglądarka kodu, narzędzia analityczne
B. Kompilator, serwer webowy, system kontroli wersji
C. Kompilator, edytor kodu, debugger
D. Edytor tekstowy, przeglądarka internetowa, translator

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kompilator, edytor kodu i debugger to podstawowe narzędzia, które stanowią fundament każdego środowiska IDE (Integrated Development Environment). Kompilator tłumaczy kod źródłowy na pliki wykonywalne, edytor kodu umożliwia tworzenie i modyfikowanie kodu, a debugger pomaga w analizowaniu i eliminowaniu błędów. Współdziałanie tych narzędzi pozwala programiście na pełny cykl tworzenia aplikacji – od pisania kodu, przez testowanie, aż po finalne wdrożenie. Dzięki integracji tych narzędzi w jednym środowisku, praca staje się bardziej efektywna i intuicyjna.

Pytanie 29

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

A. string name = "Jan"
B. float name = "Jan"
C. bool name = "Jan"
D. int name = "Jan"

Brak odpowiedzi na to pytanie.

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

Pytanie 30

Wzorzec projektowy "Metoda szablonowa" (Template method) stosuje się do:

A. określenia szkieletu algorytmu i pozostawienia szczegółów implementacji dla podklas
B. organizowania obiektów w hierarchiczne struktury drzewiaste
C. gromadzenia obiektów w jednorodnej kolekcji
D. centralizacji zarządzania wieloma instancjami obiektów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy 'Metoda szablonowa' to naprawdę sprytna sprawa, szczególnie w programowaniu obiektowym. Ten wzorzec pozwala zdefiniować ogólną strukturę algorytmu w klasie bazowej, a szczegóły implementacji przekazać do podklas. Brzmi jak coś z teorii, ale w praktyce często się przydaje, bo daje kontrolę nad przepływem działania algorytmu, nie tracąc elastyczności. To taki kompromis: masz szkielet (np. metoda w klasie abstrakcyjnej), ale nie zamykasz drogi na własne pomysły w podklasach. Typowym przykładem może być system obsługi płatności: cała procedura (np. przetwarzanie zamówienia) jest ustalona, ale poszczególne kroki typu 'autoryzuj', 'zrealizuj' czy 'zatwierdź' można nadpisywać. Daje to porządek i spójność kodu, a przy okazji nie zamyka na zmiany. Moim zdaniem, jeśli w projekcie pojawia się powtarzalny schemat postępowania, który tylko w detalach się różni, to Metoda szablonowa jest jednym z najczystszych rozwiązań. Warto pamiętać, że to podejście zgodne z zasadą Hollywood: „Don’t call us, we’ll call you” – to szkielet decyduje, kiedy wywołać szczegóły. Wielu seniorów poleca ten wzorzec, bo upraszcza utrzymanie i rozwijanie kodu, a IDE typu IntelliJ czy Visual Studio świetnie ogarniają takie abstrakcyjne klasy. Szczerze – w wielu firmach to po prostu standard.

Pytanie 31

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

Definicja typu:

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

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

Kod React.js:
<ul>
    {this.books.map(book => <li key={book}> book </li>)}
</ul>
A. Wyłącznie jeden element o treści Harry Potter, Hobbit, Władca pierścieni.
B. Tyle elementów, ile znajduje się w tablicy books; w każdym punkcie listy widnieje element o treści {book}.
C. Taką liczbę elementów, ile znajduje się w tablicy books; w każdym punkcie listy umieszczony jest jeden element tablicy.
D. Jedynie jeden element o treści Harry Potter.

Brak odpowiedzi na to pytanie.

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

Pytanie 32

Co to jest polimorfizm w programowaniu obiektowym?

A. Mechanizm ukrywania szczegółów implementacji przed zewnętrznymi klasami
B. Zdolność klasy do posiadania wielu konstruktorów
C. Proces tworzenia nowej klasy na podstawie istniejącej
D. Zdolność obiektów różnych klas do reagowania na tę samą metodę w sposób odpowiedni dla ich klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Polimorfizm jest fundamentalnym pojęciem w programowaniu obiektowym, które pozwala obiektom różnych klas na reagowanie na tę samą metodę w sposób odpowiedni dla ich konkretnej klasy. Przykładowo, jeśli mamy klasę `Zwierze` z metodą `dźwięk()`, a następnie klasy `Pies` i `Kot`, każda z tych klas może implementować metodę `dźwięk()` w inny sposób: pies może wydawać dźwięk 'Hau', podczas gdy kot 'Miau'. Dzięki temu, gdy wywołujemy `dźwięk()` na obiekcie typu `Zwierze`, a dokładnie na obiekcie, który może być różnego typu, uzyskujemy różne wyniki w zależności od klasy. Polimorfizm zwiększa elastyczność i skalowalność kodu, co jest zgodne z zasadami SOLID, szczególnie z zasadą otwarte-zamknięte. W praktyce polimorfizm umożliwia programistom tworzenie bardziej złożonych systemów, w których obiekty mogą być używane zamiennie, co ułatwia ich rozwój i konserwację.

Pytanie 33

Jaki framework jest powszechnie wykorzystywany do rozwijania aplikacji desktopowych w języku C++?

A. WPF
B. Node.js
C. Qt
D. Flutter

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Qt to jeden z najczęściej używanych frameworków do tworzenia aplikacji desktopowych w języku C++. Dzięki Qt programiści mogą budować aplikacje wieloplatformowe (Windows, macOS, Linux) z jednolitym interfejsem użytkownika. Qt oferuje szeroką gamę narzędzi do tworzenia graficznych interfejsów użytkownika (GUI), obsługi baz danych, aplikacji sieciowych oraz animacji. Framework ten jest ceniony za wydajność, stabilność i możliwość pisania kodu raz, a następnie kompilowania go na różne platformy. Qt umożliwia również tworzenie aplikacji mobilnych i wbudowanych, co czyni go niezwykle uniwersalnym narzędziem dla programistów C++.

Pytanie 34

Reguła zaangażowania i konsekwencji jako jedna z zasad wpływania na innych odnosi się

A. do odwzajemniania się osobie, która nam pomogła
B. do kierowania się zdaniem danej grupy
C. do doprowadzania spraw do końca
D. do uległości wobec autorytetów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Reguła zaangażowania i konsekwencji, o której tu mowa, faktycznie odnosi się do potrzeby doprowadzania spraw do końca. To jedna z podstawowych zasad psychologicznych wykorzystywanych w wpływaniu na decyzje i zachowania ludzi, szczególnie w sprzedaży czy negocjacjach. Kiedy już się na coś zgodzimy lub podejmiemy pierwsze, nawet drobne zobowiązanie, automatycznie pojawia się w nas silna potrzeba zachowania spójności z wcześniejszymi deklaracjami — tak po prostu działa ludzka psychika. Z mojego doświadczenia wynika, że firmy bardzo często to wykorzystują, np. prosząc klienta o drobną przysługę, podpis czy mikroakceptację, bo potem jest większa szansa, że pójdzie za ciosem i zdecyduje się na większy krok. W psychologii społecznej ten mechanizm uznaje się za bardzo skuteczny – zresztą Robert Cialdini w swoich książkach szeroko o tym pisze. Na rynku pracy też to widać, bo pracodawcy chętniej powierzają ważne zadania osobom, które mają zwyczaj kończyć to, co zaczęły. W praktyce, jeśli ktoś raz się w coś zaangażuje — nawet formalnie nie podpisując żadnej umowy — to potem z dużym prawdopodobieństwem wytrwa przy swojej decyzji. Dlatego znajomość tej zasady jest nie tylko teoretycznie ciekawa, ale daje konkretne narzędzia do skuteczniejszego działania w relacjach międzyludzkich, marketingu czy zarządzaniu projektami.

Pytanie 35

Który z wymienionych algorytmów działających na tablicy jednowymiarowej ma złożoność obliczeniową \( O(n^2) \)?

A. Wyszukiwanie metodą binarną
B. Wyświetlenie elementów
C. Sortowanie szybkie
D. Sortowanie bąbelkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie bąbelkowe to taki klasyczny algorytm, który ma złożoność \( O(n^2) \). Chociaż jest dość prosty w zrozumieniu, to nie za bardzo sprawdza się w większych zbiorach danych. Działa tak, że porównuje sąsiadujące ze sobą elementy i zamienia je miejscami, jeśli są w złej kolejności. Trochę to czasochłonne, ale warto znać ten algorytm, bo pokazuje podstawy sortowania.

Pytanie 36

Zaprezentowany diagram ilustruje wyniki przeprowadzonych testów:

Informacje o stronie
Wyświetlenie po1.431 si
Pobieranie2.815 si
Całkowity czas wczytania4.395 si
Czas powtórnego wczytania1.609 si
Ilość przekierowań (wpisanego adresu)1i
Ilość żądań145i
Łącznie przesłane6.71 MBi
Pomijane przy powtórnym ładowaniu6.47 MB (96%)i
Rozmiar rzeczywisty8.29 MBi
A. wydajnościowych
B. funkcjonalności
C. użyteczności
D. ochrony

Brak odpowiedzi na to pytanie.

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

Pytanie 37

Który z poniższych przykładów ilustruje deklarację złożonego typu w języku C++?

A. class Student {};
B. float ocena = 4.5;
C. int wynik = 100;
D. bool status;

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Deklaracja `class Student {};` w języku C++ przedstawia przykład tworzenia typu złożonego w postaci klasy. Klasa to podstawowy element programowania obiektowego, który pozwala na łączenie danych (pól) i funkcji (metod) w jednej strukturze. Klasy umożliwiają modelowanie rzeczywistych obiektów i ich zachowań, co prowadzi do bardziej zorganizowanego i skalowalnego kodu. Klasy mogą być rozszerzane przez dziedziczenie, co jest kluczową zaletą programowania obiektowego.

Pytanie 38

W przedstawionym filmie ukazano kreator interfejsu użytkownika, dla którego automatycznie powstaje

A. kod Java
B. kod XML
C. obsługa przycisku ekranu dotykowego
D. obsługa wciśniętego przycisku

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kod XML jest obecnie najczęściej stosowanym formatem do definiowania wyglądu interfejsów użytkownika w takich narzędziach jak Android Studio czy różnego rodzaju designery graficzne. Kiedy projektujesz layout aplikacji mobilnej albo desktopowej, duża część nowoczesnych narzędzi tworzy właśnie pliki XML, które następnie są interpretowane przez system w czasie uruchamiania aplikacji. Ułatwia to rozdzielenie logiki aplikacji od jej prezentacji, co wydaje się fundamentalne przy większych projektach. Moim zdaniem takie podejście daje ogromne korzyści – można łatwo modyfikować wygląd bez dotykania kodu źródłowego. W praktyce, jeśli używasz np. Android Studio, zbudujesz interfejs przeciągając przyciski czy pola tekstowe, a pod spodem dostaniesz czytelny plik XML. To przyspiesza pracę, zwiększa czytelność projektu i pozwala na późniejsze automatyczne generowanie dokumentacji albo testów interfejsu. Takie standardy są rekomendowane nie tylko przez Google, ale też szeroko stosowane w innych środowiskach, jak chociażby XAML w Microsoft czy FXML w JavaFX. Przezroczystość działania tych narzędzi sprawia, że łatwiej jest pracować zespołowo, bo każdy może szybko zorientować się w strukturze UI patrząc na XML-a. Samo generowanie kodu XML przez narzędzia graficzne to duży krok w kierunku lepszej organizacji pracy i zgodności ze współczesnymi praktykami branżowymi.

Pytanie 39

Który typ testów jest wykonywany na pojedynczych komponentach lub funkcjach w izolacji?

A. Testy systemowe
B. Testy akceptacyjne
C. Testy integracyjne
D. Testy jednostkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy jednostkowe to podstawowy rodzaj testów, które koncentrują się na weryfikacji pojedynczych komponentów lub funkcji aplikacji w izolacji. Ich celem jest upewnienie się, że dany element kodu działa zgodnie z oczekiwaniami. Przykładowo, jeśli mamy funkcję, która oblicza sumę dwóch liczb, test jednostkowy sprawdzi, czy ta funkcja poprawnie zwraca wynik dla różnych zestawów danych wejściowych. Zastosowanie testów jednostkowych jest kluczowe w nowoczesnym programowaniu, ponieważ pozwala na szybkie wykrywanie błędów na wczesnym etapie rozwoju oprogramowania. Dzięki nim można również łatwiej wprowadzać zmiany w kodzie, gdyż mając pewność, że pojedyncze komponenty działają prawidłowo, można modyfikować całą aplikację bez obaw o wprowadzenie nowych błędów. W praktyce, testy jednostkowe są często zautomatyzowane i stanowią integralną część ciągłej integracji (CI), co pozwala na szybkie i efektywne testowanie kodu przy każdej zmianie. Dobre praktyki w zakresie testów jednostkowych obejmują pisanie testów przed właściwą implementacją kodu (tzw. TDD - Test Driven Development) oraz stosowanie odpowiednich narzędzi, takich jak JUnit dla Javy czy NUnit dla .NET.

Pytanie 40

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

A. A0 FB A0
B. A0 FE A0
C. 98 FE 98
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.