Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Jakie jest poprawne określenie interfejsu (szablonu klasy) w języku Java?

interface IMyInterface {
    private: int a;
    IMyInterface() { a = 0; }
    void mth1();
}
Definicja 1
interface IMyInterface {
    private: int a;
    void mth1();
    int mth2() { return a; }
}
Definicja 2
interface IMyInterface {
    void mth1();
    int mth2() { return 0; }
}
Definicja 3
interface IMyInterface {
    void mth1();
    int mth2();
}
Definicja 4
A. Definicja 3
B. Definicja 2
C. Definicja 4
D. Definicja 1
W języku Java interfejs określa zbiór abstrakcyjnych metod, które klasa implementująca musi zaimplementować. Poprawna definicja interfejsu nie zawiera zmiennych instancji ani konstruktorów, co jest błędem w pierwszej definicji. Interfejsy służą do deklarowania metod, które są automatycznie publiczne i abstrakcyjne. W czwartej definicji, interfejs IMyInterface zawiera dwie metody mth1 i mth2 bez implementacji, co jest zgodne z zasadami Javy. Metody w interfejsie nie mają ciał, co wskazuje, że są przeznaczone do implementacji w klasie, która zadeklaruje się jako implementująca ten interfejs. Interfejsy są kluczowe dla polimorfizmu w Javie, pozwalając na tworzenie kodu, który może pracować z obiektami różnych klas w jednolity sposób, o ile klasy te implementują wspólny interfejs. Zastosowanie interfejsów zwiększa spójność i elastyczność kodu, umożliwiając łatwe dodawanie nowych funkcjonalności bez ingerencji w istniejącą strukturę kodu. Interfejsy są także wykorzystywane do tworzenia klasycznych wzorców projektowych jak Adapter, Strategia czy Obserwator, co jest dobrą praktyką w programowaniu obiektowym.

Pytanie 2

W jakim języku programowania kod źródłowy musi być skompilowany do kodu maszynowego konkretnej architektury procesora przed jego uruchomieniem?

A. PHP
B. C++
C. Java
D. Perl
C++ to język programowania, który wymaga kompilacji do kodu maszynowego specyficznego dla danej architektury procesora. To znaczy, zanim uruchomisz program napisany w C++, musisz go najpierw przetworzyć przez kompilator (np. GCC albo MSVC), który tłumaczy kod źródłowy na instrukcje rozumiane bezpośrednio przez procesor, np. x86, ARM czy inne. Dzięki temu program działa bardzo wydajnie i wykorzystuje możliwości sprzętu. W praktyce takie podejście stosuje się tam, gdzie ważna jest szybkość działania, np. w grach komputerowych, systemach operacyjnych czy oprogramowaniu sterującym urządzeniami. Moim zdaniem warto znać ten mechanizm, bo to jedna z podstaw pracy programisty systemowego – wiedza o tym, jak kompilacja wpływa na przenośność kodu czy optymalizację. Dla porównania, języki takie jak PHP, Perl czy nawet Java działają inaczej – ich kod albo jest interpretowany, albo najpierw kompilowany do pośredniej postaci (jak bytecode w Javie), a nie bezpośrednio do kodu maszynowego. To właśnie ta różnica sprawia, że C++ jest tak powszechnie używany tam, gdzie liczy się pełna kontrola nad wydajnością i środowiskiem wykonania. Warto też pamiętać, że kompilacja w C++ pozwala na lepsze wykrywanie błędów przed uruchomieniem programu, co jest sporym ułatwieniem przy dużych projektach.

Pytanie 3

Który z wymienionych dysków oferuje najszybszy dostęp do danych?

A. SSD NVMe PCIe 3.0, prędkość odczytu do 3500 MB/s
B. HDD 5400 RPM, SATA II, 32 MB Cache
C. HDD 7200 RPM, SATA III, 64 MB Cache
D. SSD SATA III, prędkość odczytu do 550 MB/s
Odpowiedź wskazująca na SSD NVMe PCIe 3.0 jako najszybszy dysk do odczytu danych jest zgodna z obecnymi standardami technologii przechowywania. Dyski SSD (Solid State Drive) korzystają z pamięci flash, co pozwala na znacznie szybszy dostęp do danych w porównaniu do tradycyjnych dysków HDD (Hard Disk Drive), które działają na zasadzie mechanicznych ruchomych elementów. Dyski NVMe (Non-Volatile Memory Express) są szczególnie wydajne, ponieważ wykorzystują interfejs PCIe (Peripheral Component Interconnect Express), co umożliwia znacznie wyższe prędkości transferu danych. W przypadku SSD NVMe PCIe 3.0, prędkość odczytu może osiągać do 3500 MB/s, co jest znaczącą różnicą w porównaniu do prędkości odczytu w dyskach HDD i SSD SATA. Przykładowo, w zastosowaniach takich jak edycja wideo, renderowanie grafiki 3D czy gry komputerowe, wyższa prędkość odczytu przekłada się na szybsze ładowanie danych i lepszą wydajność systemu. Standardy SATA III dla HDD również mają swoje ograniczenia, ponieważ maksymalna teoretyczna prędkość transferu wynosi 6 Gb/s, co jest dalekie od osiągów oferowanych przez NVMe. Dlatego SSD NVMe PCIe 3.0 jest zdecydowanym liderem w kontekście wydajności odczytu danych w porównaniu do pozostałych opcji.

Pytanie 4

Jakie działania można podjąć, aby uniknąć pogorszenia wzroku podczas korzystania z komputera?

A. Używać filtrów przeciwodblaskowych na ekranie
B. Zachować stałą temperaturę w biurze
C. Korzytać ze słuchawek tłumiących dźwięki
D. Stosować ergonomiczne podkładki pod ręce
Stosowanie filtrów przeciwodblaskowych na monitorze to skuteczny sposób na zapobieganie pogorszeniu wzroku podczas pracy przy komputerze. Filtry te redukują odbicia światła, zmniejszając zmęczenie oczu i poprawiając komfort pracy. Długotrwała praca przy komputerze bez odpowiedniej ochrony może prowadzić do zespołu suchego oka, bólu głowy i problemów z widzeniem. Filtry przeciwodblaskowe to prosty, ale bardzo efektywny sposób na poprawę ergonomii stanowiska pracy. W połączeniu z odpowiednim ustawieniem monitora, regularnymi przerwami oraz ćwiczeniami wzrokowymi, pomagają one w utrzymaniu zdrowia oczu.

Pytanie 5

Czym jest 'refaktoryzacja' w kontekście inżynierii oprogramowania?

A. Dodawanie nowych funkcji do istniejącego kodu
B. Proces modyfikowania kodu w celu poprawy jego struktury bez zmiany funkcjonalności
C. Optymalizacja wydajności poprzez zmianę algorytmów
D. Usuwanie niepotrzebnych funkcji z kodu
Refaktoryzacja to kluczowy proces w inżynierii oprogramowania pozwalający na modyfikację istniejącego kodu, aby poprawić jego strukturę bez zmieniania zewnętrznego zachowania programu. To podejście jest niezwykle istotne, ponieważ kod, podobnie jak każdy inny twór ludzki, z czasem może stać się trudny do zrozumienia i utrzymania. Refaktoryzacja pomaga utrzymać kod w czystości i zrozumiałości, co jest kluczowe dla długoterminowego rozwoju projektu. Praktyczne przykłady refaktoryzacji obejmują takie działania jak eliminacja powtórzeń w kodzie, zmiana nazw zmiennych na bardziej opisowe, czy też rozdzielanie dużych funkcji na mniejsze, bardziej zrozumiałe fragmenty. Ten proces jest zgodny z zasadami KISS (Keep It Simple, Stupid) i DRY (Don't Repeat Yourself), które są fundamentami dobrych praktyk programistycznych. Moim zdaniem, regularna refaktoryzacja jest jak sprzątanie biurka - początkowo może wydawać się niepotrzebna, ale w dłuższej perspektywie znacznie ułatwia pracę. Warto dodać, że narzędzia takie jak IntelliJ IDEA czy Visual Studio oferują wsparcie dla automatycznej refaktoryzacji, co czyni ten proces bardziej efektywnym.

Pytanie 6

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

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

Jakie środowisko developerskie służy do tworzenia aplikacji na platformę iOS?

A. Studio Androida
B. Visual Studio Code
C. Eclipse
D. XCode
XCode to oficjalne środowisko programistyczne (IDE) firmy Apple, które jest wykorzystywane do tworzenia aplikacji na systemy iOS, macOS, watchOS i tvOS. XCode oferuje pełne wsparcie dla języków Swift i Objective-C oraz narzędzia do projektowania interfejsów użytkownika (Storyboard), debugowania aplikacji, testowania wydajności i optymalizacji kodu. XCode posiada także symulatory urządzeń Apple, co umożliwia testowanie aplikacji na różnych modelach iPhone’ów, iPadów oraz Apple Watch. XCode jest niezbędnym narzędziem dla deweloperów tworzących aplikacje na ekosystem Apple i pozwala na łatwą publikację aplikacji w App Store.

Pytanie 8

Która grupa typów zawiera wyłącznie typy złożone?

A. class, struct, union
B. unsigned, struct, float
C. char, struct, union
D. class, struct, float
W tej odpowiedzi trafiłeś w sedno, bo class, struct oraz union to typowe przykłady typów złożonych w językach programowania takich jak C++ czy C. Każdy z nich służy do przechowywania bardziej skomplikowanych struktur danych niż zwykłe typy proste jak int czy float. Klasa (class) to podstawa programowania obiektowego. Pozwala łączyć dane i funkcje w jeden byt – obiekt. Z mojego doświadczenia korzystanie z klas daje ogromne możliwości, bo można ukrywać szczegóły implementacji czy stosować dziedziczenie – co jest nieocenione przy większych projektach. Struktura (struct) to taki trochę prostszy wariant klasy, szczególnie w C, gdzie nie obsługuje ona metod czy hermetyzacji, ale w C++ różnice się zacierają. Union natomiast pozwala na oszczędność pamięci – kilka pól dzieli ten sam obszar pamięci, czyli tylko jedno z nich jest aktywne w danej chwili. To się przydaje np. w programowaniu niskopoziomowym, obsłudze różnych protokołów czy pracy z rejestrami sprzętowymi. Według standardów ISO/IEC dla języka C++ (np. 14882:2017), właśnie te trzy typy należą bezdyskusyjnie do grupy złożonych, bo są zbudowane z innych typów i pozwalają lepiej modelować rzeczywistość. Warto pamiętać, że typy złożone są podstawą nowoczesnych technik projektowania oprogramowania. W praktyce, nawet w prostych aplikacjach, korzystanie z tych struktur podnosi czytelność i ułatwia przyszłą rozbudowę kodu.

Pytanie 9

Która z poniższych technologii jest używana do tworzenia animacji na stronach internetowych?

A. CSS Animations
B. MySQL
C. XML
D. HTTP Headers
CSS Animations to technologia, która pozwala na tworzenie dynamicznych efektów wizualnych na stronach internetowych. Umożliwia ona animowanie różnych właściwości CSS, takich jak kolor, położenie, rozmiar czy przezroczystość, w prosty sposób. Dzięki CSS Animations, deweloperzy mogą tworzyć płynne przejścia i efekty bez potrzeby używania JavaScriptu, co zwiększa wydajność i responsywność witryn. Przykładem zastosowania CSS Animations może być animowanie przycisków na stronie, które zmieniają kolor po najechaniu na nie kursorem. Z punktu widzenia dobrych praktyk, warto pamiętać o optymalizacji efektów animacyjnych, aby nie obciążały one zbytnio zasobów przeglądarki. CSS Animations są częścią standardu CSS3, co oznacza, że są szeroko wspierane przez różne przeglądarki i można je łatwo implementować w projektach webowych.

Pytanie 10

Który z wymienionych programów jest przeznaczony do zarządzania projektami przy pomocy tablic kanban?

A. Trello
B. Word
C. Photoshop
D. Jira
Trello to narzędzie do zarządzania projektami, które wykorzystuje tablice kanban do organizacji i monitorowania zadań. Użytkownicy mogą tworzyć karty reprezentujące poszczególne zadania, które następnie są przenoszone między kolumnami odzwierciedlającymi etapy realizacji. Dzięki swojej prostocie i intuicyjności Trello jest szeroko stosowane zarówno w małych zespołach, jak i dużych organizacjach. Umożliwia efektywne zarządzanie projektami, planowanie sprintów oraz monitorowanie bieżącego statusu prac. Tablice kanban pomagają wizualizować przepływ pracy, co ułatwia identyfikację wąskich gardeł i zarządzanie priorytetami.

Pytanie 11

Jakie składniki są kluczowe w dynamicznym formularzu logowania?

A. Tabela w bazie danych
B. Plik graficzny
C. Pola tekstowe do wprowadzania danych użytkownika
D. Nagłówek HTTP
Pola tekstowe do wprowadzania danych użytkownika są kluczowym elementem dynamicznego formularza logowania. Umożliwiają one użytkownikowi wprowadzenie informacji, takich jak nazwa użytkownika i hasło, co jest niezbędne do uwierzytelnienia w systemie. Formularze HTML wykorzystują tagi <input> do tworzenia pól tekstowych, a ich interakcja z użytkownikiem może być wspierana przez JavaScript lub inne technologie frontendowe, które walidują dane i zapewniają bezpieczeństwo procesu logowania. Pola tekstowe mogą być wzbogacone o atrybuty, takie jak 'required', 'pattern' czy 'type', które dodatkowo zabezpieczają formularz i ułatwiają użytkownikowi poprawne wypełnienie danych.

Pytanie 12

Metoda przeszukiwania w uporządkowanych tablicach, która polega na podzieleniu tablicy na kilka części i wykonywaniu wyszukiwania liniowego tylko w tej części, gdzie może znajdować się poszukiwany element, w języku angielskim jest określana jako

A. Ternary search
B. Jump search
C. Binary search
D. Exponential search
Wydaje się, że wybór padł na inną metodę wyszukiwania niż jump search – spróbuję wyjaśnić, skąd mogły się wziąć takie wątpliwości. Exponential search rzeczywiście działa na posortowanych tablicach, ale jego główna idea to szybkie znajdowanie zakresu, w którym może się znajdować poszukiwany element, poprzez wykładnicze zwiększanie indeksu (czyli 1, 2, 4, 8 itd.), a dopiero później użycie binary search do finalnego wyszukiwania w wykrytym przedziale. To nie jest metoda z dzieleniem tablicy na kilka części i szukaniem liniowo po „bloku”. Ternary search z kolei jest spotykany głównie tam, gdzie szukamy ekstremum (minimum lub maksimum) funkcji unimodalnej, a nie konkretnego elementu w tablicy. Tutaj tablica jest dzielona na trzy części, ale to zupełnie inna idea niż jump search – chodzi o ciągłe zawężanie przedziału na podstawie wartości funkcji, a nie liniowe przeszukiwanie fragmentu tablicy. Binary search jest chyba najbardziej znaną metodą dla uporządkowanych tablic: dzieli zbiór na pół i eliminuje połowę elementów w każdej iteracji. Jednak tutaj nie ma podziału na „bloki” i nie wykonuje się wyszukiwania liniowego, tylko zawsze korzysta z bezpośrednich porównań środkowego elementu. Z mojego doświadczenia, najczęstszy błąd przy tego typu pytaniach to mylenie mechanizmów dzielenia tablicy i przyspieszania wyszukiwania – nie każda metoda, która coś „dzieli” albo „przeskakuje”, działa tak samo. W praktyce jump search jest czymś dość specyficznym i bardzo łatwo można go pomylić z innymi klasykami, zwłaszcza jeśli nie miało się okazji widzieć jego działania na żywo. Warto zapamiętać, że to właśnie ten algorytm łączy w sobie blokowe przeskoki i liniowe przeszukiwanie tylko wybranego fragmentu – i to go wyróżnia spośród pozostałych popularnych metod branżowych.

Pytanie 13

Zawarty w ramce opis licencji sugeruje, że mamy do czynienia z licencją

Rodzaj licencji, który zapewnia otwarty dostęp do oprogramowania dla wszystkich użytkowników programu, którego dotyczy: prawo do darmowego użytkowania, kopiowania, rozpowszechniania oraz tworzenia modyfikacji, ulepszania i rozbudowania.
A. Open Source
B. OEM
C. Shareware
D. Freeware
Opis podany w pytaniu idealnie pasuje do koncepcji licencji Open Source. W praktyce oznacza to, że każdy użytkownik ma nie tylko prawo korzystać z oprogramowania za darmo, ale także może pobierać kod źródłowy, analizować go, modyfikować, ulepszać i nawet udostępniać dalej własne warianty. To daje ogromne możliwości rozwoju – nie tylko dla pojedynczych programistów, lecz przede wszystkim dla całych społeczności, które budują narzędzia i rozwiązania dużo szybciej niż zamknięte firmy. Przykłady? Linux, GIMP, LibreOffice, czy nawet przeglądarka Firefox. Moim zdaniem, to jest wręcz fundament nowoczesnego IT – wiele firm (nawet tych największych, typu Google czy Microsoft) opiera się dziś na rozwiązaniach Open Source, bo to daje elastyczność, bezpieczeństwo i transparentność. Branżowe standardy, np. licencja GNU GPL lub MIT, jasno określają zasady współdzielenia i ochrony praw autorskich. Dobra praktyka to zawsze sprawdzić warunki licencji przed wdrożeniem projektu w firmie albo szkole. Fajnie jest też pamiętać, że Open Source to nie tylko darmowość, ale przede wszystkim filozofia dzielenia się wiedzą, co w informatyce często prowadzi do innowacji i lepszej jakości kodu.

Pytanie 14

Modyfikator dostępu znajdujący się przed definicją metody Dodaj() w klasie Kalkulator sprawia, że:

protected void Dodaj() {}
A. nie jest ona dostępna z poziomu klas, które są zaprzyjaźnione z klasą Kalkulator
B. nie jest ona osiągalna w klasach, które dziedziczą po klasie Kalkulator
C. jest ona możliwa do wykorzystania w programie głównym i można ją wywołać na instancji klasy Kalkulator
D. jest ona dostępna zarówno w samej klasie, jak i w klasach dziedziczących po klasie Kalkulator
Modyfikator protected w językach takich jak C# czy Java oznacza, że metoda jest dostępna zarówno w tej samej klasie, jak i w każdej klasie, która po niej dziedziczy — niezależnie od tego, w którym miejscu projektu ta klasa pochodna się znajduje. To jest bardzo praktyczne, bo pozwala pisać tzw. szkieletowe klasy bazowe, udostępniając pewne funkcjonalności tylko klasom potomnym, a jednocześnie ukrywając je przed kodem zewnętrznym. Takie podejście umożliwia budowanie bezpiecznych i elastycznych struktur dziedziczenia, gdzie konkretne działania mogą być modyfikowane lub rozszerzane tylko tam, gdzie trzeba. Bardzo często spotyka się protected w dużych projektach, gdzie kluczowe funkcje mają być używane wyłącznie w rodzinie klas, a nie dostępne dla całego świata. Moim zdaniem, to świetny sposób na wymuszanie architektury i porządku w kodzie, no bo wiadomo, jak każdy miałby dostęp do wszystkiego, to zaraz byłby bałagan. Przykład praktyczny: pisząc klasę bazową Kalkulator, możesz mieć protected Dodaj(), a publicznie udostępnić tylko ogólną metodę Oblicz(). Dzięki temu masz większą kontrolę, co i jak jest wykorzystywane. Branżowo przyjęło się, że protected to taki złoty środek pomiędzy public a private, gwarantując odpowiednią enkapsulację i możliwość dziedziczenia. Warto to stosować świadomie, żeby potem nie mieć niespodzianek w dużych projektach.

Pytanie 15

Co zostanie wyświetlone w konsoli po wykonaniu poniższego kodu?

let arr = [1, 2, 3, 4, 5];
let result = arr.filter(num => num % 2 === 0);
console.log(result);
A. 2,4
B. [1, 2, 3, 4, 5]
C. [1, 3, 5]
D. [2, 4]
Wynik działania podanego kodu to [2, 4], ponieważ zastosowana funkcja filter tworzy nową tablicę, w której znajdują się tylko te elementy, które spełniają określony warunek. W tym przypadku warunkiem jest to, że element musi być parzysty (num % 2 === 0). Z tablicy arr, która zawiera liczby od 1 do 5, tylko liczby 2 i 4 spełniają ten warunek. Filtracja danych jest bardzo przydatna w programowaniu, zwłaszcza w kontekście pracy z dużymi zbiorami danych, gdzie można łatwo wyodrębnić interesujące nas elementy. Stosowanie takich metod, jak filter, jest zgodne z zasadami programowania funkcyjnego, które promują użycie funkcji do przetwarzania danych w sposób bardziej zwięzły i czytelny. W praktyce, funkcja filter może być używana do filtrowania danych z API, przetwarzania zbiorów danych w aplikacjach, czy też w analizach danych. Takie podejście zwiększa wydajność i czytelność kodu, co jest istotne w długoterminowym utrzymaniu projektów.

Pytanie 16

Jaka jest złożoność obliczeniowa poniższego algorytmu?

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            array[i][j][k] = i + j + k;
        }
    }
}
A. O(n log n)
B. O(n)
C. O(n³)
D. O(n²)
Złożoność obliczeniowa algorytmu to kluczowy aspekt, który decyduje o jego efektywności, a odpowiedzi takie jak O(n²), O(n log n) czy O(n) wynikają z powszechnych nieporozumień. Odpowiedź O(n²) może pojawić się, gdy ktoś myśli jedynie o największej pętli, nie uwzględniając pełnej hierarchii zagnieżdżonych pętli. Jednakże, w tym przypadku mamy do czynienia z trzema niezależnymi pętlami, a każda z nich przechodzi przez n iteracji, co prowadzi do O(n³). Z kolei O(n log n) jest typowe dla algorytmów sortujących, takich jak sortowanie szybkie czy sortowanie przez scalanie, lecz nie ma zastosowania w kontekście zagnieżdżonych pętli, które wykonują prostą operację przypisania. Odpowiedź O(n) wskazuje na liniową złożoność, co jest błędne w przypadku dwóch lub więcej wymiarów. Takie myślenie często prowadzi do błędnych ocen złożoności algorytmu, zwłaszcza, gdy nie uwzględnia się wszystkich aspektów zagnieżdżenia pętli. Ważne jest, aby przy analizowaniu złożoności obliczeniowej, zawsze uwzględniać wszystkie zagnieżdżone elementy, by uzyskać dokładny obraz wydajności algorytmu.

Pytanie 17

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. RatinoBar
B. SeekBar
C. Spinner
D. Switch
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 18

Podaj wspólną cechę wszystkich kontrolek umieszczonych w ramce

<Label Text="5" BackgroundColor="Blue" TextColor="Tan" isVisible="True" />
<Stepper BackgroundColor="Blue" Value="5" isVisible="True" />
<Entry TextColor="Tan" BackgroundColor="Blue" Placeholder="5" />
<Slider ThumbColor="Tan" BackgroundColor="Blue" Value="5" isVisible="False" />
A. mają tło w tym samym kolorze
B. mają identyczny kolor czcionki
C. wszystkie są widoczne
D. są w nich ustawione te same wartości domyślne
W tym przypadku wskazałeś/aś, że wszystkie kontrolki mają tło w tym samym kolorze, i to jest faktycznie prawidłowa odpowiedź. Gdy spojrzymy na definicje: Label ma BackgroundColor="Blue", Stepper także BackgroundColor="Blue", Entry również BackgroundColor="Blue", a Slider—no właśnie—też BackgroundColor="Blue". To pokazuje, że niezależnie od typu kontrolki, wszystkie mają ustawione tło na dokładnie ten sam kolor. W praktyce bardzo często spotyka się wymóg zachowania spójności wizualnej interfejsu, szczególnie w aplikacjach profesjonalnych czy korporacyjnych. Ustalanie wspólnego BackgroundColor jest jednym z najprostszych kroków ku temu, by UI wyglądało porządnie i było czytelne dla użytkownika końcowego. Moim zdaniem, kiedy projektuje się cały ekran lub jakąś sekcję UI, warto od razu narzucić style lub korzystać z szablonów (np. Styles w XAML czy resourcach), żeby uniknąć przypadkowych rozbieżności kolorystycznych, które potem tylko irytują i programistów, i użytkowników. W branży jest to uznawane za dobrą praktykę – jednolity background ułatwia szybkie ogarnięcie, które elementy należą do jednej grupy funkcjonalnej. Poza tym, kolor tła bywa często wykorzystywany do komunikowania stanu albo priorytetu (np. alerty na czerwono itp.), więc to naprawdę ważne, żeby takie detale były przemyślane i konsekwentnie stosowane. No i jeszcze taka ciekawostka: nie wszystkie kontrolki domyślnie wyświetlają tło, więc czasem trzeba to jawnie ustawić, żeby efekt był taki sam na każdej platformie.

Pytanie 19

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

A. Relacyjna baza danych
B. Routing Database
C. Grafowa baza danych
D. Dokumentowa baza danych
Pojęcia relacyjnej bazy danych, grafowej bazy danych oraz dokumentowej bazy danych mają swoje fundamenty w różnych modelach przechowywania i organizacji danych. Relacyjne bazy danych wykorzystują struktury tabelaryczne do zarządzania danymi, co pozwala na efektywne wykonywanie zapytań i analizy danych. W tym modelu dane są przechowywane w wierszach i kolumnach, a związki między danymi są ustanawiane dzięki kluczom obcym, co sprzyja integralności danych i ich normalizacji. Zastosowanie relacyjnych baz danych jest szerokie, obejmuje systemy finansowe, aplikacje e-commerce oraz wiele innych systemów wymagających ścisłego zarządzania danymi. Grafowe bazy danych, takie jak Neo4j, opierają się na strukturze grafów, co umożliwia modelowanie bardziej skomplikowanych relacji i hierarchii. Ten typ bazy danych znajduje zastosowanie w analizie sieci społecznych, zarządzaniu danymi o połączeniach i rekomendacjach, gdzie tradycyjne podejścia relacyjne mogą być niewystarczające. Dokumentowe bazy danych, jak MongoDB, przechowują dane w formie JSON, co umożliwia elastyczne modelowanie danych oraz skalowalność w aplikacjach, które potrzebują szybko dostosowywać swoje struktury danych do zmieniających się potrzeb. Wybór odpowiedniego typu bazy danych jest kluczowy w zależności od charakterystyki danych i wymagań aplikacji. Typowe błędy myślowe, które prowadzą do pomyłek w identyfikacji typów baz danych, obejmują mylenie terminologii oraz nieznajomość podstawowych zasad działania różnych modeli. Zrozumienie, że niektóre z terminów są stosowane w kontekście różnych dziedzin, takich jak sieci komputerowe i zarządzanie danymi, jest istotne dla podejmowania właściwych decyzji w projektowaniu systemów informacyjnych.

Pytanie 20

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. efektów zagrożeń wypadkowych, jakie występują w miejscu zatrudnienia
C. ciężkości skutków niepożądanych zdarzeń związanych z pracą
D. zagrożenia wypadkowego, które może wystąpić w miejscu pracy
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 21

Który aspekt projektu aplikacji jest kluczowy dla zabezpieczenia danych użytkowników?

A. Zastosowanie zaawansowanych systemów ochrony
B. Pominięcie testowania aplikacji w etapie produkcji
C. Koncentracja na wyglądzie interfejsu użytkownika
D. Tworzenie prostych formularzy do rejestracji
Stosowanie zaawansowanych mechanizmów bezpieczeństwa jest kluczowe dla ochrony danych użytkowników w aplikacjach. Wdrożenie technologii takich jak szyfrowanie, autoryzacja dwuskładnikowa (2FA), firewalle oraz regularne testy penetracyjne pozwala na minimalizację ryzyka ataków i naruszeń danych. Mechanizmy te nie tylko zabezpieczają dane, ale również budują zaufanie użytkowników do aplikacji, co jest niezwykle istotne w branżach takich jak bankowość, medycyna czy e-commerce.

Pytanie 22

Co będzie wynikiem wykonania poniższego kodu w języku C#?

string text = "hello world";
var result = string.Join("", text.Split(' ').Select(s => char.ToUpper(s[0]) + s.Substring(1)));
Console.WriteLine(result);
A. helloworld
B. HelloWorld
C. Hello World
D. HELLO WORLD
Wynikiem wykonania kodu nie jest 'HELLO WORLD', a przyczyna tego nieporozumienia tkwi w sposobie przetwarzania tekstu. Warto zauważyć, że kod nie wykonuje prostej konwersji wszystkich liter na wielkie, jak sugeruje ta odpowiedź. Zamiast tego, każda pierwsza litera każdego słowa jest zmieniana na wielką, a pozostałe litery pozostają w oryginalnym stanie, co w przypadku 'hello world' daje wyrażenie 'Hello World'. To zrozumienie jest kluczowe w programowaniu, ponieważ często błędnie zakładamy, że transformacje na tekstach działają w sposób jednorodny. Inną niepoprawną odpowiedzią jest 'helloworld', która również pomija konwersję pierwszych liter na wielkie, co jest kluczowym aspektem działania kodu. Warto rozważyć, że przy pracy z tekstami w C# istotne są szczegóły, takie jak wielkość liter, a dobre praktyki programistyczne wymagają zrozumienia, jak funkcje manipulujące tekstem działają. Niepoprawne odpowiedzi często wynikają z niezrozumienia schematu, jakim jest łączenie, a nie tylko konwersji liter. Użytkownicy powinni zawsze testować swoje założenia poprzez praktyczne próby w kodowaniu, aby unikać takich nieporozumień.

Pytanie 23

Co to jest XSS (Cross-Site Scripting)?

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

Który z frameworków pozwala na tworzenie aplikacji z graficznym interfejsem użytkownika oraz obsługą wydarzeń?

A. TensorFlow
B. Qt
C. Django
D. Express.js
Qt to framework umożliwiający projektowanie aplikacji z graficznym interfejsem użytkownika (GUI) oraz obsługą zdarzeń. Qt oferuje narzędzia takie jak Qt Designer, które umożliwiają tworzenie interfejsów metodą 'przeciągnij i upuść'. Jest to jedno z najbardziej wszechstronnych narzędzi do budowy aplikacji wieloplatformowych, umożliwiające tworzenie oprogramowania dla Windows, macOS, Linux oraz urządzeń mobilnych. Qt obsługuje zdarzenia użytkownika, animacje, grafikę 3D i inne zaawansowane funkcjonalności, co czyni go idealnym narzędziem do budowy nowoczesnych aplikacji desktopowych i mobilnych.

Pytanie 25

Jaką wartość jest w stanie przechować tablica jednowymiarowa?

A. Wiele wartości pod różnymi indeksami
B. Wartość logiczną true lub false
C. Wiele wartości pod tym samym indeksem
D. Jedną wartość
Tablica jednowymiarowa przechowuje wiele wartości pod różnymi indeksami. Każdy element tablicy jest dostępny za pomocą indeksu, co pozwala na szybkie i efektywne przechowywanie oraz przetwarzanie danych. W programowaniu tablice jednowymiarowe są podstawą do implementacji algorytmów sortowania, wyszukiwania oraz przechowywania sekwencji danych. Tego rodzaju tablice są niezwykle użyteczne w organizowaniu danych o powtarzalnej strukturze, takich jak listy imion, wyniki testów czy współrzędne.

Pytanie 26

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

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

Pytanie 27

Który z wymienionych algorytmów pracujących na tablicy jednowymiarowej ma złożoność obliczeniową O(n2)?

A. Sortowanie szybkie
B. Sortowanie bąbelkowe
C. Wyświetlenie elementów
D. Wyszukiwanie metodą binarną
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 28

Liczba A4 w zapisie heksadecymalnym ma odpowiadający jej zapis binarny

A. 1011100
B. 10100010
C. 10100100
D. 1010100
Zapisanie liczby A4 z systemu szesnastkowego (heksadecymalnego) do systemu binarnego to podstawowa umiejętność przy pracy z systemami cyfrowymi. W praktyce każda cyfra heksadecymalna odpowiada dokładnie czterem cyfrom binarnym, co wynika bezpośrednio z faktu, że 16=2^4. Gdy rozbijamy A4 na dwie części, mamy literę A (co oznacza 10 w dziesiętnym) oraz cyfrę 4. Zamieniamy więc A na binarny: 1010, a 4 – 0100. Sklejamy razem i dostajemy 10100100 – to jest właśnie prawidłowa odpowiedź. W rzeczywistych projektach, np. podczas programowania mikrokontrolerów, przy analizie adresów pamięci czy pracy z danymi w protokołach sieciowych, umiejętność szybkiej zamiany szesnastkowych wartości na binarne (i odwrotnie) jest totalnie niezbędna. Moim zdaniem zapamiętanie tych konwersji bardzo przyspiesza debugowanie kodu czy analizę rejestrów sprzętowych. To też podstawa przy pracy z narzędziami typu oscyloskop cyfrowy lub analizator stanów logicznych, gdzie często wartości wyświetlane są w jednym systemie, a dokumentacja posługuje się innym. Branża IT i elektronika wręcz żyją tymi zamianami – nie ma co się oszukiwać, im szybciej to opanujesz, tym mniej błędów popełnisz przy konfiguracji sprzętu czy pisaniu sterowników.

Pytanie 29

Która z poniższych nie jest poprawną metodą HTTP?

A. SEARCH
B. POST
C. DELETE
D. GET
Odpowiedź SEARCH jest prawidłowa, ponieważ metoda ta nie jest uznawana za standardową metodę HTTP określoną w dokumentach specyfikacji HTTP. W protokole HTTP, który jest podstawą komunikacji w Internecie, istnieje zestaw standardowych metod, takich jak GET, POST i DELETE. GET służy do pobierania zasobów z serwera, POST do wysyłania danych na serwer, a DELETE do usuwania zasobów. Metoda SEARCH nie znajduje się w dokumentacji IETF dotyczącej HTTP, co oznacza, że nie jest zdefiniowana ani szeroko stosowana w praktyce. Warto zwrócić uwagę na to, że standardowe metody HTTP są kluczowe w projektowaniu API oraz architekturze aplikacji webowych, ponieważ zapewniają one spójność i przewidywalność w interakcji z serwerami. Znajomość tych metod jest niezbędna dla programistów pracujących z RESTful API, gdzie poprawne użycie metod HTTP ma kluczowe znaczenie dla efektywności i bezpieczeństwa aplikacji.

Pytanie 30

Który z poniższych elementów UI umożliwia graficzną nawigację pomiędzy różnymi sekcjami aplikacji?

A. Menu
B. Rozwijana lista
C. Obszar tekstowy
D. Przycisk opcji
Pasek menu to kluczowy element interfejsu użytkownika, który umożliwia wizualną nawigację pomiędzy różnymi sekcjami aplikacji. Paski menu są powszechnie stosowane w aplikacjach desktopowych i mobilnych, ponieważ pozwalają na szybki dostęp do różnych funkcji oraz ustawień. Dzięki ich hierarchicznej strukturze użytkownicy mogą łatwo odnaleźć potrzebne narzędzia i opcje, co zwiększa intuicyjność i wygodę korzystania z aplikacji.

Pytanie 31

Jaką cechą charakteryzuje się sieć asynchroniczna?

A. Dane są przesyłane jedynie w określonych przedziałach czasowych
B. Dane są przesyłane w sposób nieciągły, bez synchronizacji zegarów
C. Jest bardziej niezawodna od sieci synchronicznej
D. Wymaga synchronizacji zegarów
Sieci asynchroniczne to rodzaj systemów komunikacyjnych, w których dane są przesyłane w sposób nieciągły, co oznacza, że nie wymagają one synchronizacji zegarów pomiędzy urządzeniami. W takich sieciach, każda jednostka przesyła dane w dowolnym momencie, co zwiększa elastyczność i efektywność komunikacji. Przykładem zastosowania sieci asynchronicznych są systemy oparte na protokołach, takich jak UART (Universal Asynchronous Receiver-Transmitter), które są powszechnie używane w mikrokomputerach oraz różnych urządzeniach elektronicznych. W kontekście standardów, sieci asynchroniczne są często stosowane w komunikacji szeregowej, gdzie dane są przesyłane bez ustalonych ram czasowych, co pozwala na redukcję opóźnień i zwiększenie przepustowości. W praktyce, taki model komunikacji jest idealny w sytuacjach, gdzie ciągłość przesyłu danych nie jest kluczowa, jak w przypadku transmisji danych z czujników czy urządzeń IoT, gdzie urządzenia mogą nadawać dane, gdy są gotowe, a nie w ustalonych interwałach czasowych.

Pytanie 32

Ile kilobajtów (KB) znajduje się w jednym megabajcie (MB)?

A. 100
B. 10
C. 1000
D. 1024
W informatyce jednostki pamięci są często używane do określenia pojemności danych. 1 megabajt (MB) równa się 1024 kilobajtom (KB) w systemie binarnym, który jest podstawowym systemem liczbowym używanym w komputerach. Wynika to z faktu, że komputery operują w systemie binarnym, gdzie wartości są potęgami liczby 2. Z definicji, 1 MB to 2 do potęgi 20 bajtów, co daje 1048576 bajtów. Kiedy dzielimy tę wartość przez 1024, otrzymujemy 1024 kilobajty. W praktyce, ta konwersja jest niezwykle istotna w kontekście zarządzania pamięcią oraz określania rozmiarów plików. Na przykład, przy pobieraniu plików z internetu, znając tę konwersję, można lepiej oszacować czas pobierania oraz zarządzanie przestrzenią dyskową. Warto również zauważyć, że niektóre systemy operacyjne i producenci sprzętu używają systemu dziesiętnego, w którym 1 MB to 1000 KB, co prowadzi do nieporozumień. Dlatego znajomość różnic między systemami binarnym i dziesiętnym jest kluczowa dla zrozumienia pojemności pamięci komputerowej i odpowiednich jednostek.

Pytanie 33

Jakie środki ochrony zbiorowej najlepiej chronią kręgosłup w warunkach pracy biurowej?

A. Regulowanie poziomu oświetlenia w biurze
B. Umieszczanie monitorów na wysokości oczu
C. Ograniczenie hałasu w pomieszczeniu
D. Korzystanie z regulowanych krzeseł i biurek
Ustawianie monitorów na poziomie oczu pomaga zmniejszyć napięcie karku, ale nie rozwiązuje problemów z kręgosłupem w dolnym odcinku. Dostosowanie natężenia światła w biurze poprawia komfort pracy wzrokowej, ale nie wpływa bezpośrednio na kręgosłup. Zmniejszenie natężenia hałasu redukuje stres i poprawia koncentrację, lecz nie przeciwdziała schorzeniom układu mięśniowo-szkieletowego. Kluczową rolę w ochronie kręgosłupa odgrywa ergonomia mebli oraz odpowiednia organizacja stanowiska pracy.

Pytanie 34

W zaprezentowanym fragmencie kodu występuje błąd logiczny. Na czym on polega?

int x = 0;
while (x != 0 || x != 5) {
  std::cout << x << " ";
  x++;
}
A. Braku zainicjowania zmiennej x, co powoduje, że zmienna nie ma wartości początkowej.
B. Niepoprawnym użyciu funkcji cout, co skutkuje tym, że zmienna jest wczytywana w pętli.
C. Niewłaściwym warunku pętli, co powoduje, że pętla nigdy się nie wykona.
D. Nieprawidłowym warunku pętli, który sprawia, że pętla jest nieskończona.
W programowaniu istotne jest zrozumienie inicjalizacji zmiennych, poprawnego użycia funkcji oraz logicznych warunków sterujących. Brak inicjalizacji zmiennej może prowadzić do nieprzewidywalnego zachowania programu, jednak w tym przypadku zmienna x jest prawidłowo zainicjalizowana wartością 0, co eliminuje ten problem. Błędne zastosowanie funkcji cout mogłoby wskazywać na niepoprawne wywołanie tej funkcji, ale w przedstawionym kodzie funkcja cout jest użyta w sposób poprawny, służąc do wyświetlania wartości zmiennej x w pętli. Ważne jest, aby zrozumieć, że cout jest funkcją wyjściową, a nie wejściową, więc nie ma wpływu na logikę pętli w kontekście wczytywania danych. Co więcej, jednym z częstych błędów jest nieprawidłowy warunek pętli, który może prowadzić do jej nieoczekiwanego zakończenia lub nieskończoności. Warunki pętli powinny być precyzyjnie określone, aby mogły ulec zmianie do wartości fałszywej w pewnym momencie, co pozwala na zakończenie iteracji. Warto również zwrócić uwagę na typowe błędy myślowe, takie jak niewłaściwe operatory logiczne, które mogą prowadzić do błędnych założeń co do działania kodu. Dbałość o te aspekty jest kluczowa w praktyce programistycznej, a znajomość typowych problemów i ich rozwiązań zwiększa jakość i niezawodność oprogramowania.

Pytanie 35

Podejście obiektowe w rozwiązywaniu problemów obejmuje między innymi:

A. klasy, obiekty oraz hermetyzację
B. pola, metody, rekurencję oraz kwerendy
C. zmienne, procedury oraz funkcje
D. wyzwalacze i polimorfizm
Podejście obiektowe, zwane też programowaniem obiektowym (OOP), naprawdę opiera się na takich pojęciach jak klasy, obiekty i hermetyzacja. Klasa to taki szablon, z którego tworzy się obiekty – czyli konkretne instancje tej klasy działające w pamięci komputera. Hermetyzacja polega na tym, że ukrywamy szczegóły implementacji i wystawiamy na zewnątrz tylko niezbędne interfejsy. Moim zdaniem to jest jeden z najważniejszych aspektów OOP, bo pozwala nam lepiej zarządzać złożonością dużych systemów. Przykładowo, w językach takich jak Java czy C#, klasa samochód może mieć prywatne pola (np. numer VIN), a dostęp do nich uzyskujemy tylko przez określone publiczne metody (gettery i settery). To bardzo pomaga, gdy w zespole kilka osób pracuje nad tym samym kodem – nie trzeba wiedzieć wszystkiego o wnętrzu klasy, by z niej korzystać. W praktyce, modelowanie problemów za pomocą obiektów i klas pozwala odwzorować realne byty z rzeczywistego świata w oprogramowaniu. Standardy branżowe, jak SOLID czy zasada pojedynczej odpowiedzialności, podkreślają konieczność stosowania hermetyzacji, bo to przekłada się na elastyczność i łatwość utrzymania kodu. Z mojego doświadczenia, jeśli dobrze opanujesz te podstawy OOP, dużo szybciej zrozumiesz bardziej zaawansowane koncepty, jak dziedziczenie czy polimorfizm. To naprawdę solidny fundament, z którego korzysta praktycznie każdy nowoczesny język programowania.

Pytanie 36

Która z niżej wymienionych pozycji jest ekwiwalentem biblioteki jQuery?

A. Lodash
B. Express.js
C. Bootstrap
D. TypeScript
Bootstrap to framework CSS, który służy do stylizacji i tworzenia responsywnych interfejsów użytkownika, ale nie oferuje narzędzi do manipulacji danymi jak Lodash. TypeScript to język programowania, który rozszerza JavaScript o statyczne typowanie, ale nie pełni roli biblioteki do manipulacji obiektami i tablicami. Express.js to minimalny framework do budowy serwerów w Node.js i nie ma zastosowania w kontekście manipulacji danymi na poziomie frontendowym, jak ma to miejsce w przypadku Lodash.

Pytanie 37

Która z wymienionych sytuacji stanowi naruszenie praw autorskich?

A. Tworzenie kopii zapasowej legalnie zakupionego programu
B. Używanie programu typu open-source zgodnie z warunkami licencji
C. Udostępnianie filmu objętego prawami autorskimi bez zgody właściciela
D. Nabycie licencji na oprogramowanie
Publikowanie filmu chronionego prawami autorskimi bez zgody właściciela jest naruszeniem praw autorskich. Prawa autorskie chronią twórców przed nieuprawnionym kopiowaniem, dystrybucją i rozpowszechnianiem ich dzieł. W przypadku filmów, muzyki czy oprogramowania, każde użycie bez odpowiednich licencji lub zgody właściciela jest niezgodne z prawem. Twórcy mają prawo do wynagrodzenia za swoją pracę, a naruszenia mogą skutkować wysokimi grzywnami, a nawet postępowaniem sądowym. Przestrzeganie praw autorskich wspiera rozwój kultury i technologii, chroniąc interesy twórców.

Pytanie 38

Który z języków programowania jest najczęściej wykorzystywany do budowania aplikacji internetowych po stronie serwera?

A. JavaScript
B. CSS
C. PHP
D. HTML
PHP to jeden z najczęściej używanych języków programowania do tworzenia aplikacji webowych po stronie serwera. Jest to język skryptowy, który umożliwia dynamiczne generowanie treści stron internetowych, zarządzanie sesjami użytkowników, obsługę formularzy oraz integrację z bazami danych. PHP napędza popularne systemy zarządzania treścią (CMS), takie jak WordPress, Joomla czy Drupal. Dzięki swojej prostocie, szerokiemu wsparciu społeczności oraz dużej liczbie gotowych bibliotek i frameworków (np. Laravel), PHP pozostaje jednym z czołowych języków backendowych. PHP pozwala również na szybkie wdrażanie aplikacji i jest kompatybilny z wieloma serwerami WWW, co czyni go uniwersalnym wyborem w budowie aplikacji webowych.

Pytanie 39

Która z wymienionych reguł należy do netykiety?

A. Stosowanie nieformalnego języka w każdej rozmowie
B. Udostępnianie treści bez zgody właścicieli
C. Unikanie używania dużych liter w komunikacji
D. Zaniechanie odpowiadania na wiadomości od innych użytkowników
Unikanie pisania wielkimi literami w wiadomościach jest kluczowym elementem netykiety, ponieważ tekst pisany dużymi literami w internecie jest powszechnie interpretowany jako krzyk. To zasada, która ma na celu utrzymanie kultury komunikacji online oraz zapewnienie komfortu odbiorcy. Gdy użytkownik korzysta z wielkich liter, może to być odbierane jako agresywne lub dominujące, co może prowadzić do nieporozumień oraz negatywnych reakcji. Przykładem może być sytuacja, w której osoba, pisząc do grupy na forum internetowym, używa wyłącznie wielkich liter, co może zniechęcić innych do interakcji. Dobrą praktyką jest pisanie w sposób przystępny i zrozumiały, co sprzyja pozytywnej atmosferze w komunikacji. Standardy netykiety, takie jak te przedstawione w dokumentach związanych z etyką w internecie, podkreślają znaczenie szacunku i zrozumienia w interakcjach online, co obejmuje również sposób formułowania wiadomości. Warto także pamiętać o tym, że różne platformy społecznościowe mają swoje zasady, które podkreślają unikanie pisania krzykiem, co potwierdza ogólne podejście do netykiety.

Pytanie 40

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

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