Wyniki egzaminu

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

Egzamin zdany!

Wynik: 27/40 punktów (67,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu— sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Które z poniższych NIE jest typem wartości zwracanej przez funkcję w języku JavaScript?

A. Method
B. Undefined
C. Number
D. Object
W języku JavaScript funkcje mogą zwracać różne typy wartości, takie jak obiekty, liczby czy typ undefined. Wśród wymienionych opcji, 'Method' nie jest typem wartości zwracanej przez funkcję. W rzeczywistości, metoda w JavaScript to funkcja przypisana do obiektu. Jeżeli definiujemy funkcję wewnątrz obiektu, to możemy ją nazwać metodą tego obiektu, ale nie jest to typ wartości. Przykładowo, jeżeli mamy obiekt o nazwie 'person' i metodę 'greet', która zwraca powitanie: const person = { name: 'Jan', greet: function() { return 'Cześć, ' + this.name; } }; W powyższym przypadku, 'greet' jest metodą, ale jej wartością zwracaną jest typ string, co jest typowym zachowaniem funkcji. Dobrą praktyką jest zrozumienie różnicy między funkcjami a ich zastosowaniami w obiektach, co pozwala na lepsze projektowanie kodu oraz ukierunkowanie na zasady programowania obiektowego, które są kluczowe w JavaScript.

Pytanie 2

Który z języków programowania jest powszechnie stosowany do tworzenia interfejsów użytkownika przy użyciu XAML?

A. C#
B. Java
C. C++
D. Objective-C
C# to język programowania szeroko stosowany w tworzeniu aplikacji desktopowych, w tym do budowy interfejsów użytkownika przy użyciu XAML. XAML (Extensible Application Markup Language) to język znaczników wykorzystywany w środowisku WPF (Windows Presentation Foundation) oraz UWP (Universal Windows Platform) do projektowania graficznych interfejsów użytkownika. C# i XAML doskonale się uzupełniają, pozwalając na tworzenie nowoczesnych, interaktywnych aplikacji desktopowych, w których logika (C#) jest oddzielona od warstwy wizualnej (XAML). Dzięki tej separacji możliwe jest szybkie prototypowanie i łatwa rozbudowa aplikacji, co czyni je preferowanym wyborem dla deweloperów pracujących w ekosystemie Microsoftu.

Pytanie 3

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

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

Pytanie 4

Jak nazywa się technika umożliwiająca asynchroniczne wykonywanie operacji w JavaScript?

A. Variable
B. Function
C. Object
D. Promise
Promise to technika w JavaScript, która umożliwia obsługę operacji asynchronicznych. W odróżnieniu od tradycyjnych funkcji, które mogą blokować wykonanie kodu do momentu zakończenia operacji, Promise pozwala na kontynuację wykonywania kodu, a wyniki operacji są dostępne, gdy zostaną one zakończone. Główne zastosowanie Promise polega na obsłudze operacji takich jak żądania sieciowe, które mogą trwać nieprzewidywalnie długo. Przykładem jest użycie Promise do wykonania zapytania do API: fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)). Dobrą praktyką jest stosowanie asynchronizacji z użyciem async/await, co pozwala na bardziej czytelny kod. Promise jest częścią ECMAScript 2015 (ES6) i stanowi podstawę dla bardziej zaawansowanych technik, takich jak async/await, co pozwala na jeszcze prostszą obsługę asynchronicznych operacji. Zrozumienie Promise jest kluczowe dla efektywnego programowania w JavaScript, zwłaszcza w kontekście aplikacji webowych, gdzie asynchroniczność odgrywa kluczową rolę.

Pytanie 5

Który z podanych algorytmów można zrealizować zarówno w sposób iteracyjny, jak i rekurencyjny?

A. Algorytm generowania liczb losowych
B. Algorytm wyszukiwania binarnego
C. Algorytm sortowania bąbelkowego
D. Algorytm mapowania kluczy w tablicach asocjacyjnych
Sortowanie bąbelkowe to algorytm iteracyjny i nie ma naturalnej wersji rekurencyjnej, ponieważ jego działanie opiera się na powtarzających się pętlach. Algorytm mapowania kluczy w tablicach asocjacyjnych nie korzysta z rekurencji – jest to proces przypisywania wartości do odpowiednich kluczy, który realizowany jest w sposób iteracyjny. Algorytm generowania liczb losowych nie wymaga rekurencji ani iteracji – jest to operacja oparta na wywołaniu odpowiednich funkcji w zależności od użytej biblioteki i języka programowania.

Pytanie 6

Które z poniższych narzędzi służy do analizy wydajności stron internetowych?

A. Webpack
B. Docker
C. Postman
D. Lighthouse
Postman to narzędzie, które służy przede wszystkim do testowania API. Jego główna funkcjonalność polega na umożliwieniu użytkownikom wysyłania zapytań do serwerów oraz analizy odpowiedzi, co jest niezbędne w procesie rozwijania aplikacji webowych. Jednakże, Postman nie ma za zadanie oceny wydajności stron internetowych, ponieważ koncentruje się na interakcjach z API, a nie na aspekcie wydajności samej strony. Docker jest platformą do konteneryzacji, która pozwala deweloperom na łatwe zarządzanie aplikacjami w różnych środowiskach. Chociaż Docker może mieć wpływ na wydajność aplikacji poprzez ułatwienie zarządzania zasobami, nie jest narzędziem dedykowanym do analizy wydajności stron internetowych. Webpack to narzędzie służące do bundlingu zasobów JavaScript, które skupia się na optymalizacji i kompresji plików. Jego zadaniem jest usprawnienie dostarczania skryptów do przeglądarek, jednak nie jest to narzędzie, które ocenia wydajność strony jako całości. Błędem jest zatem mylenie funkcji, jakie pełnią te narzędzia. Zamiast skupić się na testowaniu wydajności, można skupić się na testowaniu API czy optymalizacji zasobów, co nie odnosi się bezpośrednio do analizy całkowitej wydajności strony internetowej. Dlatego ważne jest zrozumienie, jakie narzędzia służą do jakich celów, aby skutecznie poprawiać jakość aplikacji internetowych.

Pytanie 7

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

Fragment kodu React.js:
state = {    zm1: 0   };
hanleEv = () => {
    this.setState({zm1: this.state.zm1 + 1});
}
render() {
    return (<div>
        <span>{this.state.zm1}</span>
        <button onClick={this.handleEv}>BTN_1</button>
    </div>);
}
Fragment kodu Angular:
@Component({
    selector: 'sel1',
    template: `<span>{{ zm1 }}</span>
              <button (click)="onBtnCilcked()">BTN_1</button>`
})
export class Licznik1Component {
    zm1 = 0;
    onBtnCilcked() { this.zm1++; }
}
A. wartości 0 po naciśnięciu przycisku
B. wyłącznie przycisku oraz obsłużenie zdarzenia click, które ono generuje
C. liczby kliknięć przycisku
D. tylko napisu BTN_1
Wydaje się, że łatwo tu popaść w uproszczenia lub ulec pierwszemu wrażeniu na temat działania tego kodu, zwłaszcza jeśli nie patrzy się na całą strukturę zarówno w React, jak i Angularze. Sam przycisk z napisem BTN_1 faktycznie występuje, ale nie to jest sednem – komponenty nie ograniczają się tylko do wyświetlania przycisku. Ich główną rolą jest obsługa interakcji: kliknięcie nie tylko wywołuje zdarzenie, lecz przede wszystkim modyfikuje stan licznika i od razu aktualizuje widok. Sądząc, że program ma wyświetlać „tylko napis” lub „tylko przycisk i obsługę click”, pomija się istotę działania frameworków: dynamiczną prezentację danych w odpowiedzi na działania użytkownika. Pojawia się też czasem mylne założenie, że widok pokazuje wartość 0 po kliknięciu – to nieprawda, bo oba fragmenty kodu startują z wartością 0, ale po kliknięciu ta wartość jest zwiększana i od razu pokazuje nową liczbę kliknięć. To bardzo typowy błąd, wynikający z niezrozumienia jak aktualizowany jest stan komponentu i jak natychmiast to wpływa na renderowanie widoku. Trzeba jeszcze pamiętać, że samo „obsłużenie zdarzenia click” jest tylko częścią procesu – pełna funkcjonalność polega na wyświetleniu aktualnej liczby kliknięć, czyli dynamicznej reakcji na akcje użytkownika. Dlatego w branży kładzie się nacisk na powiązanie warstwy widoku z logiką biznesową poprzez stan komponentu – to jest podstawa nowoczesnych aplikacji. Zakładając, że chodzi tylko o statyczny element lub samo zdarzenie, zupełnie pomija się sedno tego typu zadań, gdzie właśnie dynamiczna aktualizacja UI po akcji użytkownika jest kluczowa. Takie błędne założenia często biorą się z pobieżnego czytania kodu lub nieznajomości mechanizmów reaktywności i data bindingu, które są fundamentem zarówno Reacta, jak i Angulara.

Pytanie 8

Jakie jest podstawowe zadanie funkcji zaprzyjaźnionej w danej klasie?

A. Dodawanie nowych instancji do klasy
B. Umożliwienie funkcji dostępu do prywatnych atrybutów klasy
C. Ograniczenie widoczności atrybutów klasy
D. Generowanie kopii pól obiektu w innej klasie
Dodawanie nowych obiektów do klasy to zadanie konstruktorów, a nie funkcji zaprzyjaźnionych. Tworzenie kopii pól obiektu w innej klasie może być realizowane za pomocą mechanizmów kopiujących lub metod publicznych, ale nie jest to funkcja zaprzyjaźniona. Ograniczenie zakresu widoczności pól klasy to efekt zastosowania modyfikatorów dostępu, takich jak private, protected lub public, a nie przyjaźni klasowej.

Pytanie 9

Która z wymienionych sytuacji stanowi naruszenie praw autorskich?

A. Udostępnianie filmu objętego prawami autorskimi bez zgody właściciela
B. Używanie programu typu open-source zgodnie z warunkami licencji
C. Tworzenie kopii zapasowej legalnie zakupionego programu
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 10

Jakie jest przeznaczenie dokumentacji wdrożeniowej?

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

Pytanie 11

Który z wymienionych elementów można zdefiniować jako psychofizyczny?

A. Zanieczyszczenie powietrza
B. Promieniowanie elektromagnetyczne
C. Stres i monotonia pracy
D. Nadmiar światła w miejscu pracy
Czynniki psychofizyczne w środowisku pracy obejmują takie elementy jak stres, monotonia pracy oraz nadmierne obciążenie organizmu. Są to zagrożenia, które mogą prowadzić do wypalenia zawodowego, depresji, spadku koncentracji i zwiększonego ryzyka popełniania błędów. Stres i monotonia pracy to jedne z najczęstszych psychofizycznych zagrożeń, które mogą wpływać nie tylko na zdrowie psychiczne, ale również na fizyczne samopoczucie pracownika. W celu ich minimalizacji organizacje wdrażają programy wsparcia psychologicznego, zapewniają przerwy, rotację obowiązków i dbają o dobrą atmosferę w pracy. Kluczowe jest także odpowiednie zarządzanie czasem pracy i eliminowanie monotonnych zadań na rzecz bardziej zróżnicowanych obowiązków.

Pytanie 12

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

A. WPF
B. Node.js
C. Flutter
D. Qt
Node.js to środowisko uruchomieniowe dla języka JavaScript, przeznaczone do tworzenia aplikacji serwerowych i skryptów backendowych, a nie aplikacji desktopowych. WPF (Windows Presentation Foundation) jest frameworkiem dla języka C#, a nie C++. Flutter to framework stworzony przez Google, który służy do budowy aplikacji mobilnych i webowych, wykorzystując język Dart, co sprawia, że nie jest narzędziem pierwszego wyboru dla programistów C++.

Pytanie 13

Które z wymienionych sytuacji jest przykładem hermetyzacji w programowaniu obiektowym?

A. Ograniczenie dostępu do pól klasy poprzez modyfikatory dostępu
B. Tworzenie wielu metod o tej samej nazwie w różnych klasach
C. Tworzenie klasy abstrakcyjnej
D. Wykorzystanie klasy nadrzędnej w innej klasie
Hermetyzacja (ang. encapsulation) to mechanizm programowania obiektowego, który polega na ukrywaniu wewnętrznych danych obiektu oraz udostępnianiu dostępu do nich tylko za pośrednictwem metod publicznych (gettery i settery). Dzięki hermetyzacji dane klasy są chronione przed bezpośrednią modyfikacją, co zwiększa bezpieczeństwo i stabilność kodu. Przykład w C++: `class Konto { private: double saldo; public: void wplata(double kwota) { saldo += kwota; } }` – saldo jest polem prywatnym, które można modyfikować tylko poprzez metody publiczne, co zapobiega nieautoryzowanemu dostępowi.

Pytanie 14

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

class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    return `${this.name} makes a noise.`;
  }
}

class Dog extends Animal {
  speak() {
    return `${this.name} barks.`;
  }
}

let dog = new Dog('Rex');
console.log(dog.speak());
A. Error: speak is not defined
B. Rex barks.
C. Rex makes a noise.
D. undefined
Odpowiedzi, które sugerują inne wyniki, wynikają z nieporozumień dotyczących dziedziczenia w programowaniu obiektowym. Na przykład, stwierdzenie, że wynik to 'Rex makes a noise.', wynika z założenia, że metoda speak() z klasy Animal jest zawsze wywoływana. W rzeczywistości, gdy klasa Dog nadpisuje tę metodę, to właśnie jej wersja jest używana. Nie ma więc możliwości, aby metoda speak() z klas Animal została wywołana dla obiektu dog. Inna nieprawidłowa odpowiedź sugeruje, że wynik to 'undefined'. To może wynikać z mylenia wywołania metody z błędnym odniesieniem do obiektu. Metoda speak() jest zdefiniowana poprawnie i jeśli jest wywoływana na obiekcie dog, zwraca wynik zgodny z jej definicją. Podobnie, odpowiedź wskazująca na błąd "Error: speak is not defined" wskazuje na zrozumienie, że metoda speak() nie istnieje, co jest nieprawdziwe w kontekście obiektu typu Dog, który ma tę metodę zdefiniowaną. Kluczowe jest zrozumienie, jak działa dziedziczenie i jak metody mogą być nadpisywane w podklasach, co jest jedną z podstaw programowania obiektowego. Warto również zwrócić uwagę na to, jak ważne jest testowanie i weryfikacja kodu, aby unikać takich powszechnych pułapek w przyszłych projektach.

Pytanie 15

Jaką liczbę warstw zawiera model TCP/IP?

A. 2
B. 4
C. 5
D. 7
Odpowiedzi wskazujące na 2, 5 i 7 warstw w modelu TCP/IP są niepoprawne z kilku powodów. Pierwsza z nich sugeruje, że model TCP/IP miałby jedynie dwie warstwy, co znacznie upraszczałoby jego złożoność i nie oddawałoby rzeczywistego podziału funkcji. W rzeczywistości, połączenie krótkometrażowych protokołów z różnych obszarów komunikacji wymaga bardziej rozbudowanego systemu, który może obsłużyć różnorodne aplikacje oraz środowiska sieciowe. Drugie podejście, zakładające pięć warstw, mogłoby sugerować dodatkową warstwę, taką jak warstwa sesji, znana z modelu OSI. Jednak model TCP/IP nie definiuje wyraźnie tej warstwy, zatem dodawanie jej do struktury modelu TCP/IP wprowadzałoby zamieszanie. Natomiast odpowiedź, która wskazuje na siedem warstw, jest jeszcze bardziej nieadekwatna, ponieważ nie ma takiego uznawania w kontekście standardów TCP/IP. Taki podział może wynikać z pomylenia z modelem OSI, który rzeczywiście posiada siedem warstw, ale jego złożoność nie znajduje odzwierciedlenia w prostocie modelu TCP/IP. Zrozumienie różnic między tymi modelami jest kluczowe dla osób pracujących w dziedzinie technologii informacyjnej oraz telekomunikacji.

Pytanie 16

Który z wymienionych objawów może sugerować nagłe zagrożenie dla zdrowia?

A. Zwiększona efektywność pracy
B. Intensywne pocenie się w gorącym otoczeniu
C. Ostry ból w klatce piersiowej
D. Obniżony nastrój w ciągu dnia
Ostry ból w klatce piersiowej to jeden z najbardziej alarmujących objawów wskazujących na nagłe zagrożenie zdrowotne, takie jak zawał serca lub zatorowość płucna. Tego rodzaju ból jest często opisywany jako gniotący, ściskający lub rozlewający się na inne części ciała, takie jak ramię, szyja czy żuchwa. W takich przypadkach kluczowe jest szybkie wezwanie pomocy medycznej, ponieważ każda minuta opóźnienia może zwiększyć ryzyko powikłań lub śmierci. Edukacja w zakresie rozpoznawania tego objawu może uratować życie, dlatego tak ważne jest rozróżnianie go od innych mniej groźnych objawów.

Pytanie 17

Co to jest algorytm QuickSort?

A. Algorytm wyszukiwania binarnego w posortowanej tablicy
B. Wydajny algorytm sortowania oparty na strategii 'dziel i zwyciężaj'
C. Metoda kompresji danych bez strat
D. Technika przeszukiwania grafu wszerz
Algorytm QuickSort to jeden z najbardziej popularnych i efektywnych algorytmów sortowania, który opiera się na strategii 'dziel i zwyciężaj'. W praktyce działa w ten sposób, że wybiera element zwany pivotem (osią) i dzieli zbiór na dwie części: jeden z elementami mniejszymi od pivota, a drugi z elementami większymi. Następnie rekurencyjnie sortuje te podzbiory. QuickSort jest niezwykle szybki i wydajny, zwłaszcza dla dużych zbiorów danych, a jego średnia złożoność czasowa wynosi O(n log n). Używa się go w wielu aplikacjach, gdzie istotne jest szybkie przetwarzanie danych, takich jak sortowanie list w aplikacjach webowych czy organizacja danych w bazach. Warto jednak pamiętać, że w najgorszym przypadku, gdy pivot jest źle wybierany, złożoność może wynosić O(n^2), co występuje na przykład w przypadku już posortowanej tablicy. W kontekście praktycznym, dobre praktyki obejmują dobór odpowiedniej metody wyboru pivota, co może znacznie poprawić wydajność algorytmu.

Pytanie 18

Co oznacza termin 'polimorfizm' w programowaniu obiektowym?

A. Ustanowienie tylko jednego typu dla klasy
B. Ograniczenie do jednej formy dla obiektu
C. Zdolność do przyjmowania wielu form przez obiekt
D. Dziedziczenie metod z klasy bazowej
Polimorfizm to jedno z fundamentalnych pojęć w programowaniu obiektowym, które pozwala na tworzenie elastycznych i skalowalnych aplikacji. Dzięki polimorfizmowi możemy pisać kod, który operuje na obiektach, nie znając ich dokładnego typu w momencie kompilacji. To bardzo przydatne, gdy mamy do czynienia z hierarchią klas, gdzie różne klasy dziedziczą po jednej bazowej. Praktycznym przykładem może być system, w którym mamy klasę bazową 'Zwierzę' i klasy pochodne, takie jak 'Pies' i 'Kot'. Dzięki polimorfizmowi możemy stworzyć funkcję, która przyjmuje parametr typu 'Zwierzę', a następnie wywołuje metodę, która jest specyficzna dla danej klasy pochodnej. To umożliwia nam pisanie bardziej ogólnego i mniej związanego z konkretnymi typami kodu. Polimorfizm pozwala również na wdrażanie wzorców projektowych, takich jak strategia czy fabryka, które zwiększają modularność i reużywalność kodu. Korzystanie z polimorfizmu jest zgodne z zasadami SOLID, szczególnie zasadą podstawienia Liskov, która mówi, że obiekty klasy bazowej mogą być zastępowane obiektami klasy pochodnej bez wpływu na poprawność działania programu.

Pytanie 19

Na ilustracji pokazany jest fragment diagramu blokowego pewnego algorytmu. Ile razy warunek n<7 będzie badany?

Ilustracja do pytania
A. 5
B. 7
C. 8
D. 6
Wybór innej odpowiedzi niż 4 wskazuje na nieprawidłowe rozumienie mechanizmu działania pętli z warunkiem końcowym Problem może tkwić w błędnym założeniu dotyczącym liczby iteracji które ma miejsce gdy nie uwzględnia się początkowej wartości n Wynik 8 mógłby wynikać z mylnego założenia że pętla sprawdza warunek również po zakończeniu gdy n wynosi 7 co jest nieprawidłowe Ponadto wybór 5 może sugerować że zrozumienie zakresu wartości n jest niepełne ponieważ pomija się pierwszą iterację gdy n równa się 1 Odpowiedź 7 mogłaby wynikać z błędnego przeliczania liczby iteracji lub niepoprawnego przeanalizowania działania inkrementacji w algorytmie Ważne jest aby zrozumieć że warunek n mniejsze od 7 jest sprawdzany na początku każdej iteracji pętli i gdy n osiąga wartość 7 pętla nie wykonuje się ponownie Zrozumienie tego mechanizmu jest kluczowe do poprawnego projektowania algorytmów i unikania typowych błędów logicznych które mogą prowadzić do nieefektywności kodu oraz trudności w jego debugowaniu i utrzymaniu Praktykując analizę schematów blokowych i algorytmów warto zwrócić uwagę na działanie warunków i ich wpływ na przebieg pętli co ma szerokie zastosowanie zarówno w programowaniu jak i w analizie danych oraz automatyzacji procesów

Pytanie 20

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

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

Pytanie 21

Który z wymienionych elementów stanowi przykład złożonego typu danych?

A. bool
B. int
C. struct
D. char
Typ 'struct' w C++ to super sprawa, bo pozwala na trzymanie różnych danych pod jedną nazwą. Dzięki temu można łatwo zorganizować zmienne, które różnią się typami. Wyobraź sobie, że możesz stworzyć strukturę, która będzie reprezentować na przykład samochód z jego marką, rocznikiem i ceną. To naprawdę ułatwia pracę z danymi! Każde pole w strukturze może mieć inny typ, co czyni 'struct' bardzo uniwersalnym narzędziem do modelowania różnych obiektów, jak ludzie czy produkty. W zasadzie, to takie logiczne pudełko, do którego wrzucasz różne informacje i masz do nich szybki dostęp.

Pytanie 22

W przypadku przedstawionych kodów źródłowych, które są funkcjonalnie równoważne, wartość, która zostanie zapisana w zmiennej b po wykonaniu operacji, to

Python:C++ / C# / Java:
x = 5.96;
b = int(x);
double x = 5.96;
int b = (int)x;
A. 5
B. 5.96
C. 596
D. 6
W tym zadaniu mamy do czynienia z fajnym przykładem konwersji liczby 5.96 na liczbę całkowitą w różnych językach, takich jak Python czy C++. Kiedy robimy rzutowanie, to po prostu odcinamy część ułamkową, co daje nam 5 w zmiennej b. To jest trochę klasyczne rzutowanie albo konwersja typu, gdzie w większości języków po prostu się to robi. Ciekawostką jest, że w Pythonie działa to przez funkcję int(), która zawsze zaokrągla w dół. A w C++ czy Javie używasz po prostu (int) i efekt jest ten sam. Warto też zwrócić uwagę, że przy liczbach ujemnych rzutowanie działa inaczej, bo zawsze zmierza w stronę zera. Z doświadczenia wiem, że warto być świadomym użycia takich konwersji, bo w niektórych przypadkach, jak operacje finansowe, nawet małe różnice mogą się okazać bardzo istotne.

Pytanie 23

Jakie wyrażenie logiczne powinno być użyte, aby zweryfikować, czy zmienna x zawiera wartości ujemne lub znajduje się w zakresie (10, 100)?

A. (x > 10 || x < 100) && x < 0
B. (x > 10 && x < 100) || x < 0
C. x > 10 || x < 100 || x < 0
D. x > 10 || x < 100 || x < 0
To wyrażenie logiczne: (x > 10 && x < 100) || x < 0 jest najtrafniejsze, bo dokładnie oddaje założone warunki: zmienna x powinna być ujemna lub znajdować się w zakresie od 10 do 100 (bez tych wartości granicznych, czyli przedział otwarty). Z mojego doświadczenia wynika, że takie podejście jest stosowane wszędzie tam, gdzie istotne są szczegółowe warunki – np. w walidacji danych wejściowych czy podczas filtrowania w bazach danych. Operator || gwarantuje, że jeśli chociaż jeden z warunków jest prawdziwy (czyli x jest mniejsze od 0 lub należy do przedziału 10-100), całe wyrażenie zwróci true. Warto też pamiętać, że zastosowanie operatora && wewnątrz nawiasu zapewnia, że oba warunki (x > 10 oraz x < 100) muszą być spełnione jednocześnie, czyli x leży pomiędzy tymi liczbami. Odpowiedniki takiego zapisu znajdziesz praktycznie w każdym języku programowania – od Javy po Pythona. Branżowe standardy jasno wskazują na czytelność i jednoznaczność warunków logicznych, szczególnie jeśli kod ma być utrzymywany przez inne osoby lub przez nas samych za kilka miesięcy. Uważam, że precyzyjne formułowanie wyrażeń tego typu to podstawa dobrego programisty – naprawdę warto się tego trzymać, bo później mniej błędów wychodzi na produkcji, a kod jest dużo łatwiej przetestować. Często spotykam się z przypadkami, gdzie ktoś pomija nawiasy lub źle łączy operatory i potem są problemy z błędami logicznymi, dlatego warto wyrobić sobie taki nawyk dokładnego zapisywania warunków.

Pytanie 24

Jakie zadanie wykonuje debugger?

A. Przekładanie kodu źródłowego na język maszynowy
B. Identyfikowanie błędów składniowych podczas kompilacji
C. Umożliwianie analizy działania programu krok po kroku
D. Generowanie pliku wykonywalnego programu
Debugger umożliwia analizę działania programu krok po kroku, co jest kluczowe dla wykrywania i usuwania błędów logicznych oraz programistycznych. Debugowanie pozwala na śledzenie wartości zmiennych w czasie rzeczywistym, analizowanie przepływu programu i zatrzymywanie go w określonych punktach (breakpoints). Dzięki temu programista może znaleźć i naprawić błędy przed finalnym wdrożeniem aplikacji. Debuggery są nieodłącznym elementem środowisk IDE (Integrated Development Environment), takich jak Visual Studio, PyCharm czy Eclipse, i stanowią fundamentalne narzędzie w procesie programowania.

Pytanie 25

Które z poniższych pojęć nie jest związane z React.js?

A. Hooks
B. Virtual DOM
C. JSX
D. Directives
Wybór pojęcia, które nie jest związane z React.js, jest bardziej złożony, niż może się wydawać na pierwszy rzut oka. JSX jest jedną z podstawowych cech React, umożliwiającą pisanie komponentów w sposób zbliżony do HTML-a. Pozwala to na łatwiejsze tworzenie interfejsów użytkownika poprzez integrację składni HTML z możliwościami JavaScriptu. Virtual DOM to kolejne kluczowe pojęcie w React, które przyczynia się do wydajności aplikacji. Dzięki Virtual DOM, React minimalizuje operacje na prawdziwym DOM-ie, co prowadzi do szybszego renderowania i lepszej reaktywności aplikacji. Z kolei Hooks są nowoczesnym podejściem do zarządzania stanem i efektami w komponentach funkcyjnych, co umożliwia tworzenie bardziej złożonych interakcji bez konieczności korzystania z komponentów klasowych. Każda z tych koncepcji jest ściśle związana z architekturą React i stanowi fundament w jego ekosystemie. Typowym błędem myślowym, który może prowadzić do niepoprawnych wniosków, jest mylenie frameworków oraz ich specyficznych terminologii. Często deweloperzy mogą założyć, że terminologia z jednego frameworka jest uniwersalna dla wszystkich, co jest błędnym podejściem. Zrozumienie specyfiki React i jego ekosystemu jest kluczowe dla efektywnego wykorzystania tego narzędzia w praktyce.

Pytanie 26

Które z poniżej wymienionych afirmacji najtrafniej charakteryzuje proces interpretacji kodu?

A. Generowanie bibliotek dynamicznych dla programu
B. Tłumaczenie kodu źródłowego na język maszynowy w czasie rzeczywistym
C. Tworzenie pliku wykonywalnego
D. Analiza struktury kodu przed tłumaczeniem
Interpretacja kodu to proces tłumaczenia kodu źródłowego na język maszynowy w czasie rzeczywistym, instrukcja po instrukcji. Jest to charakterystyczne dla języków takich jak Python, JavaScript i Ruby, które używają interpreterów. Dzięki temu program jest wykonywany od razu, bez konieczności wcześniejszego generowania pliku wykonywalnego. Zaletą interpretacji jest szybka analiza i możliwość natychmiastowego testowania kodu, co przyspiesza proces debugowania i prototypowania aplikacji.

Pytanie 27

Jak nazywa się wzorzec projektowy, do którego odnosi się ta definicja?

Wzorzec projektowy należący do grupy wzorców strukturalnych. Służy do ujednolicenia dostępu do złożonego systemu poprzez wystawienie uproszczonego, uporządkowanego interfejsu programistycznego, który ułatwia jego użycie.
Źródło Wikipedia. Wolna encyklopedia
A. Kompozyt
B. Dekorator
C. Fasada
D. Prototyp
Wzorzec projektowy Fasada jest jednym z kluczowych wzorców strukturalnych używanych w inżynierii oprogramowania. Jego głównym celem jest uproszczenie i ujednolicenie interakcji z złożonym systemem poprzez wystawienie uproszczonego i uporządkowanego interfejsu programistycznego. Fasada ukrywa złożoność systemu, zapewniając jednolity punkt dostępu do zestawu funkcji lub klas. W praktyce fasada jest używana do tworzenia prostych interfejsów dla bardziej złożonych bibliotek lub systemów, co ułatwia ich użycie przez programistów. Na przykład w systemie bankowym fasada może zintegrować różne usługi jak autoryzacja płatności, zarządzanie kontami i generowanie wyciągów, oferując jeden interfejs do ich obsługi. Fasada wspiera dobre praktyki poprzez promowanie niskiej zależności i wysokiej spójności. Zmiany w wewnętrznym działaniu systemu są mniej widoczne na zewnątrz, co zwiększa elastyczność systemu. Fasada jest zgodna z zasadą projektowania SOLID, zwłaszcza z zasadą pojedynczej odpowiedzialności, umożliwiając lepsze zarządzanie kodem i jego utrzymanie. Jej użycie jest powszechne w systemach złożonych, gdzie upraszczanie interfejsów jest kluczowe dla efektywności programistycznej i skalowalności systemu.

Pytanie 28

W programie desktopowym stworzono rozwijaną listę oraz przypisano cztery funkcje do obsługi zdarzeń tej kontrolki. Jaki komunikat pojawi się po dokonaniu wyboru w tej liście?
W XAML (uproszczona wersja):

<ComboBox SelectionChanged="Funkcja1" DragEnter="Funkcja2"
    LostFocus="Funkcja3" KeyDown="Funkcja4">
</ComboBox>
W kodzie:
private void Funkcja1(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show("Zdarzenie 1");
}
private void Funkcja2(object sender, DragEventArgs e)
{
    MessageBox.Show("Zdarzenie 2");
}
private void Funkcja3(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Zdarzenie 3");
}
private void Funkcja4(object sender, KeyEventArgs e)
{
    MessageBox.Show("Zdarzenie 4");
}
A. Zdarzenie 2
B. Zdarzenie 1
C. Zdarzenie 4
D. Zdarzenie 3
Wybrałeś dokładnie to, co trzeba. W tej sytuacji kluczowe jest rozpoznanie, że zdarzenie SelectionChanged jest wywoływane zawsze wtedy, gdy użytkownik wybierze inną pozycję z ComboBoxa. I to właśnie do tego zdarzenia przypisana jest metoda Funkcja1, która wyświetla komunikat "Zdarzenie 1". Trochę to wygląda niepozornie, ale SelectionChanged to jeden z najczęściej obsługiwanych eventów w aplikacjach desktopowych opartych na WPF czy UWP – praktycznie zawsze reagujemy na wybór użytkownika w kontrolkach ComboBox, ListBox albo nawet ListView. Z mojego doświadczenia wynika, że początkujący programiści często mylą to zdarzenie z innymi, jak LostFocus, które odpala się, gdy kontrolka traci fokus, albo z DragEnter (zupełnie inny przypadek, bo dotyczy przeciągania danych). Warto pamiętać, że KeyDown reaguje dopiero na naciśnięcie klawisza, a nie na wybór myszką. Takie rozróżnienie jest codziennością przy tworzeniu bardziej zaawansowanych interfejsów użytkownika. Praktyczna wskazówka: jeśli chcesz reagować na wybór użytkownika i np. ładować dodatkowe dane czy weryfikować coś po stronie aplikacji, to SelectionChanged jest strzałem w dziesiątkę. Standardy branżowe sugerują nie przesadzać z obsługą zbyt wielu eventów jednocześnie dla tej samej kontrolki, bo to może prowadzić do konfliktów i dziwnych zachowań UI. Mocno polecam samemu poeksperymentować – otworzyć Visual Studio, zrobić prostą aplikację WPF, podpiąć te eventy i zobaczyć, które kiedy się odpalają. Dzięki temu dużo szybciej utrwala się ta wiedza niż z samej teorii.

Pytanie 29

Kod funkcji "wykonaj()" przedstawiony poniżej weryfikuje, czy

bool wykonaj(int argument)
{
    int T[] = {4, 15, -2, 9, 202};
    for(int i=0; i<5; i++) {
        if(T[i] == argument)
            return true;
    }
    return false;
}
A. przekazany argument mieści się w zakresie od 0 do 4
B. wszystkie elementy w tablicy są równe wartości przekazanego argumentu
C. w tablicy liczb całkowitych znajdują się jedynie wartości 4, 15, -2, 9, 202
D. konkretny element (argument) jest obecny w tablicy liczb całkowitych
Funkcja wykonaj() została napisana tak, by sprawdzić, czy przekazany do niej argument znajduje się w konkretnej tablicy liczb całkowitych. To bardzo typowy sposób wyszukiwania wartości w niewielkich zbiorach – pętla przechodzi przez każdy element tablicy i jeśli napotka element równy argumentowi, natychmiast zwraca true. To klasyczna implementacja tzw. liniowego wyszukiwania (linear search), co moim zdaniem jest często spotykane w zadaniach rekrutacyjnych albo przy szybkim prototypowaniu. W praktyce, jeśli tablica byłaby większa albo wymagania dotyczące wydajności byłyby bardziej rygorystyczne, lepiej jest korzystać z innych struktur danych, np. std::set czy std::unordered_set, gdzie operacja wyszukiwania jest zazwyczaj szybsza. Ale tutaj – dla kilku liczb – ta metoda wystarcza i jest czytelna. Warto zauważyć, że taki kod pozwala na szybkie sprawdzenie obecności dowolnego elementu w małej kolekcji i nie wymaga jej sortowania. Z mojego doświadczenia, rozumienie tego mechanizmu pomaga potem w nauce bardziej zaawansowanych algorytmów przeszukiwania i ogólnie usprawnia myślenie algorytmiczne. W codziennej pracy programisty znajomość takich podstaw bardzo się przydaje, bo często trzeba „na szybko” sprawdzić, czy coś znajduje się w tablicy lub liście. Warto też pamiętać, żeby nie nadużywać takich rozwiązań przy dużych ilościach danych – wtedy zaczynają się schody z wydajnością. Ale podsumowując, ta odpowiedź dokładnie opisuje, co robi ten kod – po prostu sprawdza, czy argument jest obecny w zbiorze liczb.

Pytanie 30

Jakie jest przeznaczenie komentarzy w kodzie źródłowym programu?

A. Do uruchamiania kodu w trybie debugowania
B. Do optymalizacji wydajności kodu
C. Do definiowania zmiennych globalnych
D. Do dokumentowania działania kodu i ułatwienia jego zrozumienia
Komentarze w kodzie źródłowym programu pełnią kluczową rolę w dokumentowaniu działania aplikacji. Dzięki nim programiści mogą opisywać, co robią poszczególne fragmenty kodu, jakie funkcje realizują oraz jakie są zależności między modułami. Komentarze nie wpływają na działanie programu, ale znacząco ułatwiają pracę nad nim w przyszłości, zwłaszcza gdy projekt jest rozwijany przez wielu programistów lub po dłuższej przerwie. Komentarze poprawiają czytelność kodu, minimalizując ryzyko błędów wynikających z niejasności lub złej interpretacji działania aplikacji. W dobrze napisanym kodzie komentarze są używane strategicznie – opisują kluczowe algorytmy, niestandardowe rozwiązania oraz obszary wymagające szczególnej uwagi. Przejrzysty i dobrze udokumentowany kod to fundament skalowalnych i łatwych w utrzymaniu aplikacji.

Pytanie 31

Która z metod zarządzania projektami jest najbardziej odpowiednia, gdy w początkowej fazie projektu zakres nie jest w pełni określony, wymagania mogą zmieniać się podczas realizacji, a także mogą wystąpić nowe potrzeby?

A. Model kaskadowy
B. PRINCE2
C. Agile
D. Model V
W praktyce zarządzanie projektem, kiedy zakres i wymagania nie są w pełni określone, wymaga podejścia elastycznego i zdolności do szybkiego reagowania na zmiany. Tradycyjne metody, takie jak PRINCE2, model V czy model kaskadowy, zawsze zakładają większy nacisk na planowanie upfront, czyli na początku projektu, gdzie cały zakres (lub jego większość) jest ustalany przed rozpoczęciem realizacji. Model kaskadowy bywa stosowany głównie w środowiskach, gdzie produkty są powtarzalne i łatwe do przewidzenia – tutaj zmiany w wymaganiach są prawie niemożliwe do wprowadzenia bez cofnięcia się do wcześniejszych etapów. Model V, często stosowany w testowaniu oprogramowania czy inżynierii systemów, również zakłada ścisłe powiązanie etapów rozwoju i testowania; bardzo trudno tu o zmianę wymagań w trakcie, bo każda poprawka oznacza powrót przez wiele faz. PRINCE2 co prawda na papierze jest elastyczny, ale w praktyce lepiej sprawdza się, gdy mamy jasno zdefiniowany projekt i dużo formalności – jego framework przewiduje „kontrolowane” zmiany, ale to nie to samo, co adaptacja w locie, jaką daje Agile. Moim zdaniem problem polega na tym, że wybór tych klasycznych podejść wynika często z przyzwyczajenia do sztywnego planowania i przeświadczenia, że lepsza dokumentacja rozwiąże wszystkie niespodzianki. Tymczasem w środowiskach, gdzie klient nagle zmienia zdanie albo pojawiają się nowe potrzeby, takie metody zawodzą, bo są zbyt oporne na zmiany. Warto pamiętać, że Agile nie jest panaceum na wszystkie projekty, ale właśnie przy niejasnych wymaganiach i bardzo zmiennych warunkach rynkowych jego iteracyjność i stały kontakt z klientem pozwalają uniknąć wielu typowych pułapek planowania z góry.

Pytanie 32

Jak oddziaływanie monotonnego środowiska pracy może wpłynąć na organizm człowieka?

A. Obniżenie koncentracji oraz zwiększone ryzyko popełniania błędów
B. Wzrost poziomu motywacji
C. Poprawa kondycji fizycznej
D. Zwiększenie odporności na stres
Kiedy w pracy ciągle powtarzamy te same czynności, to może nas to naprawdę zniechęcać. Zauważyłem, że takie monotonne środowisko potrafi sprawić, że gorzej się skupiamy i łatwiej popełniamy błędy. Jeśli pracownicy cały czas robią to samo bez żadnych zmian, to szybko tracą zapał i nie są zadowoleni z tego, co robią. Moim zdaniem, warto czasem zmieniać zadania, żeby wprowadzić trochę świeżości i wyzwań. Dobrze jest też organizować przerwy, bo to pomaga nabrać energii oraz zadbać o fajną atmosferę w pracy.

Pytanie 33

W jaki sposób określa się wypadek związany z pracą?

A. Każde zdarzenie, które wymaga interwencji technicznej w miejscu zatrudnienia
B. Każde zdarzenie, które prowadzi do opóźnienia w wykonaniu obowiązków
C. Nagłe zdarzenie związane z pracą, powodujące uraz lub śmierć
D. Każdy incydent wynikający z działania osób trzecich
Zdarzenia, które powodują opóźnienia w realizacji zadań, nie są klasyfikowane jako wypadki przy pracy – mogą to być awarie lub błędy proceduralne, ale nie prowadzą do urazu pracownika. Zdarzenia wymagające pomocy technicznej mogą być awariami sprzętu, ale jeśli nie skutkują urazem, nie są uznawane za wypadki przy pracy. Incydenty spowodowane przez osoby trzecie mogą mieć wpływ na bezpieczeństwo pracy, ale nie są automatycznie klasyfikowane jako wypadki przy pracy – konieczne jest dokładne ustalenie związku z wykonywanymi obowiązkami zawodowymi.

Pytanie 34

Kod przedstawiony w języku XML/XAML określa:

<Switch
    android:id = "@+id/switch1"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:background = "#00ffff"
    android:text = "Switch"
    tools:layout_editor_absoluteX = "176dp"
    tools:layout_editor_absoluteY = "389dp" />
A. stepper
B. listę rozwijaną
C. suwak
D. przełącznik
Kod przedstawiony w pytaniu to klasyczny przykład wykorzystania komponentu Switch w Androidzie. Switch, jak sama nazwa wskazuje, służy do przełączania między dwoma stanami — najczęściej włącz/wyłącz, aktywne/nieaktywne. Z punktu widzenia interfejsów mobilnych, przełącznik bardzo często znajduje zastosowanie w ustawieniach aplikacji, np. do szybkiego włączania trybu ciemnego, aktywacji powiadomień czy zezwalania na lokalizację. Ten konkretny xml zawiera podstawowe atrybuty, jak android:id, layout_width, layout_height oraz background, czyli kolor tła, co od razu sugeruje, że nie jest to np. dropdown czy suwak. Co ciekawe, Switch różni się od CheckBoxa tym, że wizualnie lepiej komunikuje zmianę trybu (przesuwający się znacznik), co moim zdaniem zwiększa użyteczność, szczególnie jeśli użytkownik ma szybko zrozumieć, co ustawia. Standardy Material Design wręcz zalecają stosowanie Switch do kontrolowania pojedynczych ustawień, bo jest to bardziej czytelne niż inne widgety. Warto pamiętać, że Switch ma różne warianty i można go rozbudować o obsługę zdarzeń onCheckedChangeListener w kodzie Java albo Kotlin, przez co staje się bardzo elastyczny. Odpowiedź przełącznik jest więc zgodna ze wszystkimi cechami tej kontrolki i jej zastosowaniami w praktyce.

Pytanie 35

Co oznacza skrót CDN w kontekście aplikacji webowych?

A. Content Definition Notation - notacja do definiowania treści w aplikacjach
B. Compressed Data Node - węzeł kompresji danych w architekturze mikrousług
C. Cross Domain Navigation - metoda nawigacji między domenami w aplikacjach webowych
D. Content Delivery Network - sieć rozproszona geograficznie, służąca do dostarczania treści
W kontekście aplikacji webowych błędne skróty i pojęcia często prowadzą do nieporozumień dotyczących architektury i technologii. Cross Domain Navigation, chociaż istotne w kontekście bezpieczeństwa i wymiany danych między różnymi domenami, nie jest związane z dostarczaniem treści. Metoda ta dotyczy głównie sposobów nawigacji w aplikacjach, które mogą wymagać zarządzania różnymi politykami CORS (Cross-Origin Resource Sharing), ale nie definiuje sposobów optymalizacji dostarczania treści. Compressed Data Node to termin, który sugeruje węzeł odpowiedzialny za kompresję danych w architekturze mikrousług, ale nie wiąże się z geograficznie rozproszonym dostarczaniem treści, co jest kluczowym aspektem działania CDN. Content Definition Notation to z kolei nieznany termin w literaturze dotyczącej technologii webowej, nie mający powszechnie uznawanej definicji w branży. Błędem myślowym byłoby utożsamianie tych terminów z sieciami dostarczania treści, ponieważ każde z nich ma swoją specyfikę i zastosowanie. W kontekście aplikacji internetowych kluczowe jest zrozumienie, że CDN ma na celu poprawę szybkości i efektywności dostarczania treści, co jest niezrównanie bardziej złożonym i istotnym zagadnieniem niż tylko nawigacja czy kompresja danych. Praktyki związane z sieciami CDN są dobrze udokumentowane i należy je stosować zgodnie z najlepszymi standardami branżowymi, aby zapewnić wysoką jakość usług dla użytkowników.

Pytanie 36

Co zostanie wyświetlone po wykonaniu poniższego kodu w języku Python?

data = [1, 2, 3, 4, 5]
result = list(map(lambda x: x*2, filter(lambda x: x % 2 == 0, data)))
print(result)
A. [2, 6, 10]
B. [2, 4, 6, 8, 10]
C. [1, 2, 3, 4, 5]
D. [4, 8]
W kodzie Python, który analizujemy, użyto funkcji map i filter, które są często stosowane w programowaniu funkcyjnym. W pierwszej części, funkcja filter filtruje elementy z listy 'data', zwracając tylko te, które są liczbami parzystymi. W tym przypadku, z listy [1, 2, 3, 4, 5] zostaną wybrane liczby 2 i 4. Następnie, funkcja map mnoży te liczby przez 2. Dla liczby 2 otrzymujemy 4, a dla liczby 4 – 8. Dlatego wynik końcowy to lista [4, 8]. W praktyce, znajomość takich konstrukcji pozwala na efektywne przetwarzanie danych i implementację bardziej złożonych algorytmów w codziennych zastosowaniach programistycznych. Korzystając z filtracji i mapowania można na przykład szybko przetwarzać dane wejściowe w aplikacjach webowych lub analizować duże zestawy danych. Ważne jest, aby pamiętać, że te techniki są bardzo przydatne w kontekście pracy z danymi i powinny być uzupełnione o umiejętność czytania i rozumienia kodu, co jest kluczowe w praktyce programistycznej.

Pytanie 37

Przedstawione w filmie działania wykorzystują narzędzie

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

Pytanie 38

Który z algorytmów ma złożoność O(n²)?

A. Binary Search
B. Dijkstra
C. Merge Sort
D. Bubble Sort
Binary Search to algorytm wyszukiwania o złożoności O(log n), który przeszukuje posortowaną tablicę, dzieląc ją na pół w każdej iteracji. Merge Sort ma złożoność O(n log n) i wykorzystuje technikę 'dziel i zwyciężaj', dzieląc tablicę na mniejsze części i łącząc je w odpowiedniej kolejności. Algorytm Dijkstry jest używany do znajdowania najkrótszej ścieżki w grafach i jego złożoność zależy od implementacji – w przypadku zastosowania kopca binarnego wynosi O(E + V log V), gdzie E to liczba krawędzi, a V to liczba wierzchołków.

Pytanie 39

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

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

Pytanie 40

Jakie jest główne zadanie portali społecznościowych?

A. Tworzenie kopii zapasowych plików
B. Udostępnianie informacji i interakcja między użytkownikami
C. Zarządzanie handlem produktami i usługami
D. Analiza rezultatów działalności gospodarczej
Główna funkcja portali społecznościowych polega na umożliwieniu użytkownikom tworzenia, udostępniania oraz wymiany treści, a także komunikacji w czasie rzeczywistym. Portale takie jak Facebook, Twitter czy Instagram pozwalają na interakcję poprzez posty, komentarze, polubienia oraz wiadomości prywatne. Użytkownicy mogą dzielić się zdjęciami, filmami, artykułami lub osobistymi przemyśleniami, co sprzyja budowaniu społeczności i nawiązywaniu relacji. Funkcjonalności te są zgodne z najlepszymi praktykami UX/UI, które kładą nacisk na intuicyjność i łatwość obsługi. W kontekście SEO, portale społecznościowe są także ważne ze względu na możliwość generowania ruchu na zewnętrzne strony internetowe poprzez linki i udostępnienia. Przykładem może być wykorzystanie platformy Instagram do promocji produktów, gdzie użytkownicy mogą kliknąć w linki do sklepu. Takie działania zwiększają widoczność marki w Internecie oraz angażują odbiorców, co jest kluczowe dla efektywnej strategii marketingowej.