Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 7 czerwca 2026 23:59
  • Data zakończenia: 8 czerwca 2026 00:15

Egzamin zdany!

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

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

W języku C# szablon List umożliwia korzystanie z listy. Z definicji obiektu kolekcji wynika, że jego elementami mogą być:

List<int> wykaz = new List<int>();
A. elementy typu List
B. elementy o nieokreślonym typie
C. liczby całkowite
D. liczby rzeczywiste
Jeżeli chodzi o kolekcje generyczne w C#, to List<int> jest przykładem bardzo konkretnego zastosowania. Ten zapis oznacza, że tworzymy listę, której elementami mogą być wyłącznie liczby całkowite – dokładnie takie, jakie reprezentuje typ int w .NET (czyli 32-bitowe liczby całkowite ze znakiem). Wynika to z idei generyczności: typ podany w nawiasach ostrych (<int>) precyzyjnie narzuca typ przechowywanych danych. To daje nam bezpieczeństwo typów, na które zwracają uwagę wszyscy programiści C# – nie da się przez pomyłkę dodać tam np. napisu czy obiektu innego typu. Z mojego doświadczenia mogę powiedzieć, że to bardzo upraszcza życie, bo kompilator od razu wychwyci próby niewłaściwego użycia. Praktycznie, gdy tworzysz List<int>, możesz ją wykorzystać np. do przechowywania identyfikatorów, wyników testów, liczb losowych – wszędzie tam, gdzie operujesz właśnie na liczbach całkowitych. Warto dodać, że generyczność jest jednym z filarów nowoczesnych języków, pozwalając pisać kod elastyczny i bezpieczny zarazem. Trochę jak z pudełkiem na śrubki: jak wrzucisz inne rzeczy, to od razu się pogubisz i zrobi się bałagan. Tutaj jest bardzo jasno – List<int> to zawsze lista liczb całkowitych i już. Dobre praktyki branżowe podpowiadają, żeby zawsze stosować jak najbardziej precyzyjne typy w generycznych kolekcjach, bo to ułatwia późniejsze utrzymanie kodu i ogranicza potencjalne błędy.

Pytanie 2

Jakie narzędzie można wykorzystać do stworzenia mobilnej aplikacji cross-platform w języku C#?

A. środowisko XCode
B. platformę Xamarin
C. środowisko Android Studio
D. bibliotekę React Native
Wiele osób może pomylić narzędzia używane do tworzenia aplikacji mobilnych cross-platform, zwłaszcza że na rynku jest ich całkiem sporo i nie zawsze różnice są jasne na pierwszy rzut oka. React Native, mimo że jest bardzo popularny w środowisku JavaScript, nie ma nic wspólnego z C#. To framework, w którym piszemy kod głównie w JavaScript lub TypeScript i pozwala budować natywne aplikacje na Androida oraz iOS. Fajnie się go używa, ale jeśli ktoś zna tylko C#, to raczej nie jest to najlepszy wybór. Z kolei XCode to kompletnie inna bajka – to narzędzie stworzone przez Apple do pisania aplikacji natywnych na iOS i macOS, głównie w językach Swift lub Objective-C. Środowisko jest rozbudowane i profesjonalne, ale nie daje wsparcia dla pisania kodu w C#, więc nie nadaje się do zadań cross-platform w tym języku. Android Studio to natomiast oficjalne IDE od Google do tworzenia aplikacji na Androida, najczęściej w Javie lub Kotlinie. Nie ma tu domyślnej obsługi C# ani programowania cross-platformowego. Typowym błędem jest utożsamianie każdego „dużego” narzędzia mobilnego z możliwością tworzenia aplikacji na wiele systemów, co nie zawsze jest prawdą. Ważne, by przed wyborem technologii dokładnie sprawdzić, jakie języki i jakie systemy są wspierane. Tylko Xamarin (a obecnie także jego następca, .NET MAUI) daje pełnoprawne wsparcie dla C# oraz tworzenie aplikacji na różne systemy z jednej bazy kodu. To oszczędza czas i pozwala na większą elastyczność w projekcie.

Pytanie 3

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

A. and
B. in
C. is
D. ==
Operator `in` w języku Python służy do sprawdzania, czy element należy do listy, zbioru, krotki lub innego obiektu iterowalnego. Przykład: `if 5 in lista` sprawdza, czy liczba 5 znajduje się w liście. Operator `in` jest niezwykle przydatny w przeszukiwaniu danych, a jego zastosowanie skraca kod i zwiększa jego czytelność. W Pythonie jest on szeroko stosowany do iteracji i filtrowania danych, co czyni go jednym z najbardziej intuicyjnych operatorów języka.

Pytanie 4

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

A. Do definiowania zmiennych globalnych
B. Do dokumentowania działania kodu i ułatwienia jego zrozumienia
C. Do optymalizacji wydajności kodu
D. Do uruchamiania kodu w trybie debugowania
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 5

Początkowym celem środowisk IDE takich jak: lntellij IDEA, Eclipse, NetBeans jest programowanie w języku

A. Java
B. C++
C. C#
D. Python
Środowiska IDE, takie jak IntelliJ IDEA, Eclipse oraz NetBeans, zostały zaprojektowane z myślą o programowaniu w języku Java, który jest jednym z najpopularniejszych języków programowania na świecie. Te zintegrowane środowiska deweloperskie oferują szereg narzędzi i funkcji, które znacznie ułatwiają proces tworzenia aplikacji w Java. Przykładowo, IntelliJ IDEA, stworzony przez firmę JetBrains, dostarcza wsparcie dla automatycznego uzupełniania kodu, refaktoryzacji oraz analizy statycznej, co przyspiesza cykl rozwoju oprogramowania. Eclipse, będący otwartym oprogramowaniem, umożliwia rozszerzanie swoich funkcji poprzez wtyczki, co czyni go elastycznym narzędziem dla programistów. NetBeans, z kolei, zapewnia łatwe w użyciu interfejsy oraz wsparcie dla wielu technologii związanych z Java, takich jak JavaFX czy Java EE, co czyni go idealnym wyborem dla rozwoju aplikacji webowych i desktopowych. Zgodnie z przyjętymi standardami w branży, Java jest językiem obiektowym, który charakteryzuje się wysoką przenośnością oraz bezpieczeństwem, co czyni go atrakcyjnym wyborem dla wielu projektów komercyjnych oraz edukacyjnych.

Pytanie 6

Co to jest lazy loading w kontekście aplikacji webowych?

A. Technika przechowywania danych w pamięci podręcznej przeglądarki
B. Strategia optymalizacji, która opóźnia ładowanie zasobów do momentu, gdy są faktycznie potrzebne
C. Narzędzie do testowania wydajności ładowania strony
D. Metoda kompresji obrazów na stronach internetowych
Lazy loading to technika optymalizacji wydajności, która polega na opóźnieniu ładowania zasobów, takich jak obrazy, filmy czy skrypty, do momentu, gdy są one rzeczywiście potrzebne. Dzięki temu zwiększa się szybkość ładowania strony, co jest szczególnie ważne w kontekście doświadczeń użytkowników i SEO. Przykładem zastosowania lazy loading może być strona z długą listą produktów, gdzie obrazy dla produktów znajdujących się poza ekranem są ładowane dopiero, gdy użytkownik przewinie stronę w dół. Praktyka ta nie tylko poprawia czas reakcji strony, lecz także redukuje zużycie pasma, co jest korzystne dla użytkowników na urządzeniach mobilnych. Stosując lazy loading, warto pamiętać o dobrych praktykach, takich jak użycie odpowiednich bibliotek JavaScript, które wspierają tę technikę, oraz zapewnienie odpowiednich fallbacków dla starszych przeglądarek. Wprowadzenie lazy loading jest zgodne z zaleceniami optymalizacji wydajności publikowanymi przez Google, które podkreślają znaczenie ładowania tylko niezbędnych zasobów i poprawę UX.

Pytanie 7

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. [1, 2, 3, 4, 5]
B. [4, 8]
C. [2, 4, 6, 8, 10]
D. [2, 6, 10]
Analizując inne odpowiedzi, możemy zauważyć, że wszystkie one bazują na błędnych założeniach dotyczących działania funkcji filter i map. Niektóre z propozycji, takie jak [2, 6, 10], sugerują, że wszystkie liczby parzyste z oryginalnej listy byłyby mnożone przez 2, co jest nieprawidłowe. Funkcja filter zwraca jedynie liczby parzyste, a to oznacza, że tylko liczby 2 i 4 są brane pod uwagę, nie 6 i 10, których w oryginalnej liście po prostu nie ma. Ponadto odpowiedź [2, 4, 6, 8, 10] jest błędna, ponieważ dodaje liczby, które nie występują w danych wejściowych, co prowadzi do nieprecyzyjnego wyniku. Warto zrozumieć, że w Pythonie operacje na kolekcjach są często wykonywane w sposób, który wymaga precyzyjnej analizy danych wejściowych. W kontekście programowania, często popełnianym błędem jest zakładanie, że wszystkie liczby pasujące do jakiegoś warunku będą uwzględniane w dalszej obróbce bez dokładnego ich filtrowania. Stąd wynika, że zrozumienie, jak działają funkcje takie jak filter i map, jest kluczowe dla efektywnego i poprawnego programowania. W procesie nauki ważne jest, aby przyglądać się działaniu kodu krok po kroku i dokładnie analizować, jak funkcje przetwarzają dane. Zrozumienie tych podstawowych koncepcji jest niezbędne, aby uniknąć podobnych nieporozumień w przyszłości.

Pytanie 8

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

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

Pytanie 9

Co zostanie wypisane w konsoli po wykonaniu poniższego kodu JavaScript?

let a = { value: 10 };
let b = a;
b.value = 20;
console.log(a.value);
A. 10
B. ReferenceError
C. 20
D. undefined
Analizując błędne odpowiedzi, warto zwrócić uwagę na podstawowe zasady działania JavaScript w kontekście obiektów. Jeśli odpowiedzią byłoby 10, to sugerowałoby, że obiekt `a` nie został zmodyfikowany przez przypisanie do `b`, co jest nieprawdziwe. Obiekty w JavaScript są przekazywane przez referencję, co oznacza, że zmiana dokonana na jednym obiekcie wpływa na wszystkie referencje do niego. Odpowiedź `undefined` wskazywałaby na to, że obiekt `a` nie ma właściwości `value`, co również jest błędne, ponieważ obiekt `a` został zdefiniowany z tą właściwością i początkowo ma wartość 10. Z kolei `ReferenceError` występuje, gdy odwołujemy się do zmiennej, która nie istnieje w danym kontekście, co nie ma miejsca w naszym kodzie, ponieważ zarówno `a`, jak i `b` są zdefiniowane poprawnie. Błędy te często wynikają z niepełnego zrozumienia, jak JavaScript zarządza pamięcią i referencjami. Zrozumienie tych zasad jest kluczowe, aby unikać pułapek związanych z mutowalnością obiektów i przekazywaniem referencji, co może prowadzić do trudnych do diagnozowania błędów w większych projektach.

Pytanie 10

Zapisany fragment w C# wskazuje na definicję klasy Car, która:

public class Car: Vehicle {     ...   }
A. używa prywatnych pól klasy Vehicle
B. stanowi klasę bazową (nie dziedziczy po żadnej klasie)
C. jest powiązana z klasą Vehicle
D. dziedziczy po Vehicle
Błędne koncepcje zawarte w pozostałych odpowiedziach wynikają z nieprawidłowego zrozumienia relacji pomiędzy klasami w programowaniu obiektowym. Użycie terminu zaprzyjaźniona klasa w kontekście C# jest niepoprawne, ponieważ język ten nie wspiera mechanizmu przyjaźni między klasami, który jest dostępny np. w C++. W C#, klasa zaprzyjaźniona nie istnieje, co eliminuje możliwość interakcji opartej na przyjaźni znanej z innych języków. Kolejną błędną koncepcją jest stwierdzenie, że klasa Car korzysta z pól prywatnych klasy Vehicle. W rzeczywistości, w programowaniu obiektowym, pola prywatne są niedostępne dla klas dziedziczących. Jeżeli zależy nam na dostępie do stanów lub zachowań klasy bazowej, należy je udostępnić poprzez właściwości lub metody o odpowiednim poziomie dostępu, np. protected. Pominięcie tego aspektu często prowadzi do błędów projektowych i narusza zasadę enkapsulacji. Ostatnia błędna odpowiedź, że klasa Car jest klasą bazową (nie dziedziczy po żadnej klasie), pomija fakt, że w C# każda klasa, która nie wskazuje jawnie klasy bazowej, domyślnie dziedziczy po klasie Object. Jednakże w przypadku podanej definicji, składnia jasno wskazuje na dziedziczenie po konkretnej klasie Vehicle. Zrozumienie tych błędów jest kluczowe w unikaniu typowych pułapek przy projektowaniu hierarchii klas w językach obiektowych, co jest istotne dla zachowania czytelności i skalowalności kodu.

Pytanie 11

Jaką liczbę warstw zawiera model TCP/IP?

A. 7
B. 5
C. 2
D. 4
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 12

Co to jest Redux?

A. Biblioteka do zarządzania stanem aplikacji w JavaScript
B. Framework do tworzenia aplikacji mobilnych
C. System kontroli wersji dla projektów JavaScript
D. Narzędzie do optymalizacji wydajności aplikacji React
Redux to biblioteka służąca do zarządzania stanem aplikacji w JavaScript, a szczególnie popularna w kontekście aplikacji opartych na bibliotece React. Umożliwia centralizację stanu, co sprawia, że zarządzanie nim staje się bardziej przewidywalne i łatwiejsze w utrzymaniu. W koncepcji Redux stan aplikacji jest przechowywany w jednym, niezmiennym obiekcie, co pozwala na ścisłe kontrolowanie jego zmian poprzez wysyłanie akcji. Użytkownicy mogą dzięki temu łatwo śledzić, co się dzieje w aplikacji. Przykładem zastosowania może być aplikacja do zarządzania zadaniami, w której użytkownik może dodawać, edytować lub usuwać zadania. Dzięki Redux, wszystkie zmiany w stanie są rejestrowane, a ich historia może być używana do debugowania czy implementacji funkcji cofania zmian. Dobrą praktyką w pracy z Redux jest stosowanie middleware, takiego jak redux-thunk, co pozwala na obsługę asynchronicznych akcji, a także wykorzystanie narzędzi jak Redux DevTools, które wspierają developerów w monitorowaniu stanu aplikacji.

Pytanie 13

Co to jest garbage collection w programowaniu?

A. Metoda kompresji danych w bazach SQL
B. Proces usuwania nieużywanych elementów z interfejsu użytkownika
C. Automatyczne zarządzanie pamięcią, które zwalnia pamięć zajmowaną przez nieużywane obiekty
D. Technika optymalizacji algorytmów sortowania danych
Garbage collection (GC) to kluczowy proces w wielu językach programowania, takich jak Java, C# czy Python, odpowiedzialny za automatyczne zarządzanie pamięcią. Dzięki mechanizmowi GC możliwe jest wykrywanie oraz zwalnianie pamięci zajmowanej przez obiekty, które nie są już używane w aplikacji. W praktyce oznacza to, że programista nie musi ręcznie zarządzać cyklem życia obiektów, co minimalizuje ryzyko wycieków pamięci i poprawia stabilność aplikacji. Mechanizm ten działa zazwyczaj w tle, analizując dostępność obiektów w pamięci oraz ich referencje. Przykładem zastosowania GC jest optymalizacja pamięci w aplikacjach serwerowych, gdzie długotrwałe działanie i efektywne zarządzanie zasobami są krytyczne. Użycie garbage collection zgodnie z dobrymi praktykami pozwala na pisanie bardziej przejrzystego i łatwiejszego w utrzymaniu kodu, co jest szczególnie ważne w projektach realizowanych w zespołach. Warto również wspomnieć, że różne implementacje GC (np. generacyjne kolekcje, inkrementalne zbieranie śmieci) mają różne podejścia do zarządzania pamięcią, co może wpływać na wydajność aplikacji.

Pytanie 14

Co to jest polimorfizm w programowaniu obiektowym?

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

Pytanie 15

Co oznacza pojęcie MVP w kontekście projektowania aplikacji?

A. Multiple Value Platform - platforma wspierająca wiele typów wartości danych
B. Minimum Viable Product - produkt o minimalnej funkcjonalności zdolny do działania
C. Mobile Virtual Platform - platforma do testowania aplikacji mobilnych
D. Most Valuable Program - program uznany za najbardziej wartościowy w organizacji
Mimo że inne odpowiedzi mogą wydawać się interesujące, żadna z nich nie odnosi się do kluczowego pojęcia Minimum Viable Product, które jest fundamentalne w projektowaniu aplikacji. Multiple Value Platform sugeruje, że system jest w stanie obsługiwać różne typy danych, co jest ważne w kontekście integracji systemów, ale nie odnosi się bezpośrednio do strategii wprowadzania produktów. Most Valuable Program wskazuje na programy szczególnie cenione w organizacji, co jest terminem zupełnie odwrotnym do idei MVP, która koncentruje się na minimalnych funkcjonalnościach, a nie na wartości programu. Z kolei Mobile Virtual Platform, chociaż może wydawać się zbliżonym konceptem, odnosi się do środowisk wirtualnych używanych do testowania aplikacji mobilnych, co nie ma związku z procesem definiowania minimalnej wersji produktu na rynku. Kluczowym błędem jest zrozumienie, że MVP nie jest tylko o zredukowanej wersji produktu; to strategiczny sposób na wprowadzenie innowacji, który umożliwia naukę i adaptację, a nie tylko skupienie się na poszczególnych funkcjach czy platformach. Takie nieporozumienie może prowadzić do niewłaściwego podejścia do projektowania i wprowadzania produktów na rynek, co w dłuższej perspektywie może znacząco wpłynąć na sukces projektu.

Pytanie 16

Jakie narzędzie może zostać wykorzystane do automatyzacji testów aplikacji internetowych?

A. Blender
B. Selenium
C. Postman
D. Visual Studio Code
Selenium to jedno z najpopularniejszych narzędzi do automatycznego testowania aplikacji webowych. Umożliwia symulowanie interakcji użytkownika z przeglądarką, takich jak kliknięcia, wypełnianie formularzy, przewijanie stron i nawigowanie po witrynie. Dzięki Selenium możliwe jest testowanie aplikacji w różnych przeglądarkach (np. Chrome, Firefox, Safari) oraz na różnych systemach operacyjnych. Narzędzie to jest nieocenione w testach regresyjnych, funkcjonalnych i integracyjnych, ponieważ pozwala na automatyzację powtarzalnych czynności, co znacząco przyspiesza proces testowania. Selenium integruje się z wieloma językami programowania, w tym Python, Java i C#, co czyni je wszechstronnym i uniwersalnym narzędziem w ekosystemie deweloperskim.

Pytanie 17

Jakie będą skutki wykonania podanego fragmentu kodu w języku C++?

vector <int> liczby;
for(int i=0; i<10; i++) {
    liczby.push_back(2*i);
}
A. Z tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej początku.
B. Do tablicy liczby, na jej końcu, dodawane są nowe wartości.
C. Z tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej końca.
D. Do tablicy liczby, na jej początku, dodawane są nowe wartości.
Analizując zaproponowane odpowiedzi, łatwo zauważyć kilka typowych nieporozumień, które często pojawiają się na etapie nauki pracy z kolekcjami w C++. Po pierwsze, wielu osobom myli się pojęcie 'dodawania na początku' z 'dodawaniem na końcu', zwłaszcza że niektóre struktury standardowe, jak listy dwukierunkowe (std::list), umożliwiają wygodne wstawianie na początku (push_front). Jednak w przypadku std::vector nie ma metody push_front, a push_back oznacza zawsze dodanie nowego elementu do końca wektora, co powoduje, że kolejność elementów jest zachowana zgodnie z kolejnością ich dodawania. Błędne jest także przekonanie, że za każdym przebiegiem pętli z wektora coś jest usuwane – takie operacje wymagałyby jawnego wywołania metod erase(), pop_back() lub pop_front(), których tutaj w ogóle nie zastosowano. To bardzo istotne, bo domyślnie wektor nie usuwa niczego sam z siebie. Równie często spotykanym błędem jest mylenie działania innych kolekcji, jak np. kolejki FIFO (gdzie pop_front rzeczywiście usuwa pierwszy element), z zachowaniem vectora, który domyślnie dodaje na końcu. Sporo osób wychodzi z założenia, że 'dynamiczna tablica' powinna się samoistnie przesuwać lub skracać – ale to nie jest prawda w C++. Warto zapamiętać, że vector w C++ jest stworzony głównie do efektywnego rozbudowywania od końca i to jest zgodne z koncepcją dynamicznego zarządzania pamięcią w nowoczesnych językach programowania. Każdy inny sposób użycia wymaga dodatkowego kodu. Z mojego punktu widzenia dobrze jest od razu wyrobić sobie nawyk rozróżniania, która operacja jest domyślnie dostępna w danym kontenerze. Brak tej wiedzy prowadzi do błędnych założeń co do działania kodu i generuje trudne do wychwycenia błędy logiczne.

Pytanie 18

Wskaż algorytm sortowania, który nie jest stabilny?

A. sortowanie bąbelkowe
B. sortowanie przez wstawianie
C. sortowanie przez zliczanie
D. sortowanie szybkie
Często podczas nauki algorytmów sortowania pojawia się zamieszanie na temat stabilności. Stabilność w sortowaniu oznacza, że elementy o tych samych kluczach nie zmieniają swojego wzajemnego położenia. W przypadku sortowania bąbelkowego, przez wstawianie i przez zliczanie – wszystkie te techniki są z natury stabilne, o ile ich standardowa implementacja nie została zmodyfikowana. To dość wygodne, bo gdy pracujemy z bardziej złożonymi danymi, np. obiektami z wieloma polami, stabilność pozwala zachować dodatkowe informacje przy kolejnych sortowaniach. Wielu jednak mylnie zakłada, że wszystkie szybkie algorytmy (jak Quick Sort) są stabilne, bo po prostu są bardziej zaawansowane. Niestety, to nie jest prawda – podstawowy Quick Sort nie zachowuje kolejności równych elementów i w praktyce może zamieszać nam w porządku danych. To jest błąd myślowy, który widzę często nawet u doświadczonych programistów. Sortowanie przez zliczanie (Counting Sort) jest stabilne, ponieważ dla każdego elementu dokładnie wiemy, na które miejsce ma trafić i w razie kolizji zawsze wybieramy ten, który był wcześniej. Podobnie klasyczne sortowanie bąbelkowe i przez wstawianie – oba algorytmy podczas przemieszczania elementów nie przestawiają tych samych wartości względem siebie. Moim zdaniem, właśnie ta stabilność jest często niedoceniana w codziennej pracy, a bywa naprawdę kluczowa przy pracy z danymi złożonymi. Warto zawsze, zanim wybierzemy algorytm sortowania, zastanowić się, czy zależy nam na tym, by zachować oryginalną kolejność dla równych wartości – wtedy zdecydowanie lepiej sięgnąć po stabilne podejście, zamiast używać np. Quick Sort. To nie jest tylko teoria, ale praktyczna wskazówka z życia programistycznego.

Pytanie 19

Jaki z wymienionych komponentów jest kluczowy do inicjalizacji pola klasy podczas tworzenia instancji obiektu?

A. Funkcja zaprzyjaźniona
B. Instrukcja warunkowa
C. Konstruktor
D. Metoda statyczna
Metoda statyczna działa na poziomie klasy, a nie obiektu, i nie jest używana do inicjalizacji pól instancji. Funkcja zaprzyjaźniona może mieć dostęp do prywatnych pól klasy, ale jej głównym celem nie jest inicjalizacja obiektu – służy do wykonywania operacji na istniejących obiektach. Instrukcja warunkowa kontroluje przepływ programu, ale nie jest odpowiedzialna za inicjalizację pól klasy – jest to zadanie konstruktora, który działa automatycznie przy tworzeniu obiektu.

Pytanie 20

Który z poniższych elementów HTML5 służy do rysowania grafiki?

A. &lt;graphic&gt;
B. &lt;draw&gt;
C. &lt;canvas&gt;
D. &lt;svg&gt;
Element HTML5 &lt;canvas&gt; jest kluczowym narzędziem do rysowania grafiki w przeglądarkach internetowych. Umożliwia programistom tworzenie dwuwymiarowych i trójwymiarowych grafik w sposób dynamiczny, wykorzystując JavaScript. Przykładem zastosowania &lt;canvas&gt; jest tworzenie gier, animacji, wizualizacji danych oraz interaktywnych wykresów. Dzięki API dla elementu canvas, programiści mają możliwość rysowania kształtów, linii, tekstu oraz obrazów, co otwiera szerokie możliwości w zakresie projektowania interfejsów użytkownika. Warto również zwrócić uwagę na to, że stosowanie &lt;canvas&gt; zgodnie z najlepszymi praktykami programistycznymi, takimi jak efektywne zarządzanie pamięcią i optymalizacja renderowania, pozwala na osiąganie płynnych animacji i wysokiej jakości grafik. Co więcej, &lt;canvas&gt; jest wspierany przez wszystkie nowoczesne przeglądarki, co zapewnia dużą zgodność i dostępność.

Pytanie 21

Jakie jest główne zadanie kontrolera w architekturze MVC (Model-View-Controller)?

A. Prezentowanie danych użytkownikowi
B. Obsługa logiki biznesowej i przetwarzanie danych wejściowych od użytkownika
C. Przechowywanie danych aplikacji
D. Zarządzanie sesją użytkownika
W architekturze MVC kontroler pełni kluczową rolę w procesie przetwarzania danych aplikacji. Jego głównym zadaniem jest obsługa logiki biznesowej oraz przetwarzanie danych, które pochodzą od użytkownika. Kontroler działa jako pośrednik pomiędzy modelem a widokiem, odbierając żądania użytkownika, przetwarzając je (często z wykorzystaniem logiki biznesowej) i decydując, które dane modelu powinny być przekazane do widoku. W praktyce oznacza to, że kontroler interpretuje dane wejściowe, modyfikuje stan modelu na ich podstawie, a następnie wybiera odpowiedni widok do wyświetlenia wyników użytkownikowi. Takie podejście pozwala na lepszą organizację kodu i oddzielenie logiki aplikacji od interfejsu użytkownika, co jest zgodne z dobrymi praktykami projektowania oprogramowania. Dzięki temu aplikacje są bardziej skalowalne i łatwiejsze w utrzymaniu.

Pytanie 22

Co to jest WebSocket?

A. Biblioteka JavaScript do tworzenia dynamicznych formularzy
B. Narzędzie do testowania aplikacji webowych
C. Standard zapisu danych w formacie binarnym
D. Protokół komunikacyjny zapewniający komunikację dwukierunkową przez pojedyncze połączenie TCP
WebSocket to protokół komunikacyjny, który umożliwia dwukierunkową, interaktywną komunikację między klientem a serwerem przez pojedyncze połączenie TCP. Dzięki WebSocket możliwe jest przesyłanie danych w czasie rzeczywistym, co jest szczególnie istotne w aplikacjach wymagających natychmiastowej wymiany informacji, takich jak czaty, gry online czy aplikacje do monitorowania. W przeciwieństwie do tradycyjnych protokołów HTTP, które wymagają wielokrotnych połączeń dla każdej interakcji, WebSocket utrzymuje stałe połączenie, co minimalizuje opóźnienia oraz obciążenie serwera. Technologia ta opiera się na standardach IETF, a także jest szeroko wspierana przez większość nowoczesnych przeglądarek, co czyni ją idealnym rozwiązaniem dla aplikacji webowych. Dobrą praktyką jest również obsługa protokołu HTTPS, co zapewnia bezpieczeństwo wymiany danych. Przykładem zastosowania WebSocket jest aplikacja finansowa, w której użytkownicy muszą na bieżąco śledzić zmiany cen akcji.

Pytanie 23

Które z poniższych jest podstawowym rodzajem testów używanych w testowaniu jednostkowym?

A. Testy akceptacyjne
B. Testy integracyjne
C. Testy jednostkowe
D. Testy systemowe
Testy jednostkowe są kluczowym elementem procesu testowania oprogramowania, szczególnie w kontekście metodologii programowania zwinnego. Polegają one na testowaniu pojedynczych najmniejszych części programu, takich jak funkcje czy metody, w izolacji od reszty systemu. Dzięki temu możemy szybko wykryć błędy i upewnić się, że dany fragment kodu działa zgodnie z oczekiwaniami. W praktyce, testy jednostkowe są często automatyzowane i stanowią podstawę dla procesu ciągłej integracji (CI). Przykładem zastosowania testów jednostkowych może być sprawdzenie, czy funkcja dodająca dwie liczby zwraca poprawny wynik dla różnych zestawów danych wejściowych. Dzięki testom jednostkowym programiści mogą z większą pewnością modyfikować i rozwijać kod, mając pewność, że nie wprowadzają nowych błędów. To właśnie testy jednostkowe pozwalają na szybkie wykrywanie regresji i są fundamentem dla bardziej zaawansowanych form testowania, takich jak testy integracyjne czy systemowe. Dbanie o dobrze zdefiniowany zestaw testów jednostkowych jest uznawane za dobrą praktykę w branży IT i podnosi jakość oprogramowania.

Pytanie 24

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

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

Pytanie 25

Co będzie wynikiem działania poniższego kodu SQL?

SELECT COUNT(*)
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
A. Średnia pensja wszystkich pracowników
B. Liczba pracowników z najwyższą pensją
C. Błąd składni SQL
D. Liczba pracowników z pensją powyżej średniej
Odpowiedź, że wynik działania zapytania SQL to liczba pracowników z pensją powyżej średniej, jest całkowicie poprawna. Zapytanie to korzysta z funkcji agregującej COUNT(*), która zlicza liczbę rekordów spełniających określony warunek. W tym przypadku warunkiem jest, że pensja pracownika jest większa od średniej pensji wszystkich pracowników, którą obliczamy za pomocą wewnętrznego zapytania (subquery). Tego rodzaju operacje są powszechnie stosowane w analizie danych w bazach danych, gdzie często musimy wykonać porównania względem wartości agregatów, takich jak średnia, mediana czy suma. Przykładowo, w analizie wynagrodzeń w danej firmie, można użyć podobnych zapytań do oceny, jaki odsetek pracowników jest wynagradzanych powyżej średniej, co może być istotne z punktu widzenia polityki płacowej oraz budżetowania. Pamiętaj, że dobre praktyki w pracy z bazami danych obejmują optymalizację zapytań oraz unikanie niepotrzebnych obliczeń, co może wpłynąć na wydajność systemu.

Pytanie 26

Jaki jest podstawowy okres ochrony autorskich praw majątkowych w krajach Unii Europejskiej?

A. 70 lat od zgonu autora
B. 75 lat od daty powstania utworu
C. 50 lat od chwili pierwszej publikacji utworu
D. Bezterminowo
Podstawowy czas trwania autorskich praw majątkowych w Unii Europejskiej wynosi 70 lat od śmierci autora. Oznacza to, że przez ten okres twórca lub jego spadkobiercy mają wyłączne prawo do korzystania z utworu i czerpania z niego korzyści finansowych. Po upływie tego czasu dzieło przechodzi do domeny publicznej i może być swobodnie wykorzystywane przez każdego, bez konieczności uzyskania zgody. Długość ochrony praw autorskich została ujednolicona w ramach przepisów UE, aby zagwarantować spójność w całej wspólnocie i wspierać ochronę kultury oraz dziedzictwa narodowego.

Pytanie 27

Technika konstruowania algorytmu polegająca na rozbiciu na dwa lub więcej mniejszych podproblemów, aż do momentu, gdy ich części będą wystarczająco proste do bezpośredniego rozwiązania, nosi nazwę:

A. komiwojażera
B. dziel i zwyciężaj
C. najkrótszej trasy
D. heurystycznej
Technika „dziel i zwyciężaj” (ang. divide and conquer) to jedno z tych podejść, które moim zdaniem warto naprawdę dobrze rozumieć, bo spotyka się je praktycznie wszędzie w informatyce. Chodzi tutaj o rozbijanie dużego problemu na mniejsze, bardziej strawne kawałki, które rozwiązujemy niezależnie, a potem składamy wyniki w całość. To bardzo eleganckie, bo pozwala np. mocno uprościć złożone zadania, a przy okazji często optymalizuje czas działania algorytmu. Przykładem mogą być sortowanie szybkie (quicksort) czy sortowanie przez scalanie (merge sort). W praktyce branżowej, kiedy pracuje się nad dużymi systemami albo algorytmami operującymi na wielkich zbiorach danych, taki sposób myślenia bardzo się przydaje, bo pozwala łatwo podzielić pracę nawet między kilku programistów. Standardy branżowe, zwłaszcza w kontekście rozwiązań algorytmicznych czy projektowania systemów, promują właśnie takie modularne podejście. Sam kiedyś przekonałem się, że dużo łatwiej jest testować i utrzymywać kod, kiedy trzyma się tej zasady. Fajnie wiedzieć, że często to właśnie „dziel i zwyciężaj” leży u podstaw wielu struktur danych, algorytmów wyszukiwania czy nawet analizy obrazu, nie tylko w typowym programowaniu. Warto pamiętać, że to nie tylko teoria – w codziennej pracy taki styl rozwiązywania problemów pozwala szybciej wychwytywać i naprawiać błędy, a to przecież kluczowe w projektach IT.

Pytanie 28

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

A. Binary Search
B. Bubble Sort
C. Dijkstra
D. Merge Sort
Bubble Sort to algorytm o złożoności O(n²), co oznacza, że jego czas wykonania rośnie kwadratowo wraz ze wzrostem liczby elementów wejściowych. Algorytm porównuje sąsiadujące elementy i zamienia je miejscami, jeśli są w złej kolejności. Proces ten powtarza się wielokrotnie, aż do uzyskania pełnego posortowania tablicy. Ze względu na swoją prostotę, Bubble Sort jest często wykorzystywany do nauki podstaw algorytmiki, ale w praktyce rzadko stosuje się go do sortowania dużych zbiorów danych, ponieważ jest nieefektywny w porównaniu do bardziej zaawansowanych algorytmów, takich jak QuickSort czy Merge Sort.

Pytanie 29

Jakie jest podstawowe użycie metod wirtualnych?

A. Umożliwienie wielokrotnego dziedziczenia
B. Umożliwienie dynamicznego wiązania metod w czasie wykonania
C. Umożliwienie korzystania z metod bezpośrednio z klasy bazowej
D. Zapewnienie, że metoda działa wyłącznie na danych statycznych
Umożliwienie korzystania z metod bezpośrednio z klasy bazowej nie jest funkcją metod wirtualnych – to raczej standardowa cecha metod publicznych. Metody działające wyłącznie na danych statycznych nie mogą być wirtualne, ponieważ ich działanie nie jest zależne od instancji klasy. Umożliwienie wielokrotnego dziedziczenia jest funkcją konstrukcji dziedziczenia w językach takich jak C++, ale samo w sobie nie wymaga metod wirtualnych, chociaż mogą one być używane w kontekście wielokrotnego dziedziczenia.

Pytanie 30

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

Kod w React:

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

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

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

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

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

Pytanie 31

Który język programowania jest używany do stylizacji stron internetowych?

A. PHP
B. HTML
C. JavaScript
D. CSS
CSS, czyli Cascading Style Sheets, jest językiem stylizacji, który służy do opisywania wyglądu dokumentów napisanych w HTML i XML. Umożliwia on oddzielenie treści od prezentacji, co jest kluczowe w tworzeniu nowoczesnych, responsywnych i estetycznie atrakcyjnych stron internetowych. Dzięki CSS można definiować różne aspekty stylów, takie jak kolory, czcionki, marginesy, a także układ elementów na stronie. Przykładowo, za pomocą prostych reguł CSS można zmienić kolor tła na zielony, a tekst na biały, co można osiągnąć przy pomocy następującego kodu: `body { background-color: green; color: white; }`. Współczesne standardy CSS, jak CSS3, wprowadzają także zaawansowane techniki, takie jak animacje czy przejścia, co daje jeszcze większe możliwości w stylizacji stron. Ponadto, dobre praktyki obejmują użycie arkuszy stylów w zewnętrznych plikach, co pozwala na ich ponowne wykorzystanie i lepszą organizację kodu, a także ułatwia zarządzanie stylem w dużych projektach.

Pytanie 32

Który z wymienionych sposobów może przyczynić się do optymalizacji kodu źródłowego?

A. Zwiększenie ilości instrukcji warunkowych
B. Eliminacja nieużywanych zmiennych oraz funkcji
C. Dodanie większej liczby komentarzy w kodzie
D. Zamiana zmiennych globalnych na lokalne
Usunięcie nieużywanych zmiennych i funkcji to jedna z najskuteczniejszych metod optymalizacji kodu źródłowego. Nadmiarowe zmienne i niepotrzebne funkcje mogą spowalniać aplikację, zwiększać jej zużycie pamięci i powodować problemy z czytelnością kodu. Ich eliminacja upraszcza kod, zmniejsza ryzyko błędów i poprawia wydajność programu. Oczyszczanie kodu to kluczowy element procesu refaktoryzacji, który pozwala na utrzymanie wysokiej jakości oprogramowania oraz lepszą organizację projektu. Dodatkowo, minimalizacja kodu pomaga w szybszym ładowaniu aplikacji webowych, co ma bezpośredni wpływ na doświadczenie użytkownika (UX) oraz pozycjonowanie w wyszukiwarkach (SEO).

Pytanie 33

W jakim przypadku należy umieścić poszkodowanego w pozycji bocznej bezpiecznej?

A. w sytuacji urazu pleców, gdy osoba jest świadoma
B. gdy wystąpi omdlenie i brak tętna
C. w przypadku omdlenia, gdy osoba jest przytomna
D. w przypadku urazu kręgosłupa
Ułożenie poszkodowanego w pozycji bocznej bezpiecznej w przypadku uszkodzenia kręgosłupa jest niewłaściwe, ponieważ taka pozycja może wywołać dodatkowe obrażenia u osoby z urazem. Stabilizacja kręgosłupa jest kluczowa, aby uniknąć potencjalnych uszkodzeń rdzenia kręgowego, co może prowadzić do poważnych komplikacji zdrowotnych. W przypadku omdlenia i braku tętna, ułożenie w pozycji bocznej bezpiecznej również jest nieodpowiednie, ponieważ nie zapewnia natychmiastowej interwencji, jakiej wymaga nagłe zatrzymanie krążenia. Zamiast tego, konieczne jest przystąpienie do resuscytacji krążeniowo-oddechowej (RKO) oraz wezwanie pomocy medycznej. W sytuacji urazu pleców, kiedy osoba jest przytomna, również nie zaleca się pozycji bocznej bezpiecznej, ponieważ może to wywołać ból i dyskomfort, a także pogorszyć stan pacjenta. W takich przypadkach istotne jest, aby osoba pozostała w stabilnej pozycji, a ratownicy zabezpieczyli ją do czasu przybycia służb medycznych, tak aby uniknąć możliwych konsekwencji urazów.

Pytanie 34

Zaprezentowany symbol odnosi się do

Ilustracja do pytania
A. prawa cytatu
B. praw autorskich
C. Creative Commons
D. domeny publicznej
Wiele osób zaczyna od skojarzenia tego symbolu z prawami autorskimi, Creative Commons albo prawem cytatu, jednak to prowadzi na manowce. Po pierwsze, standardowy symbol praw autorskich to samo „C” w kółku, bez przekreślenia – i on oznacza, że utwór jest objęty ochroną z mocy prawa i wszelkie wykorzystanie wymaga zgody twórcy lub spełnienia warunków ustawowych wyjątków. Natomiast tutaj mamy przekreślone „C”, co jednoznacznie sugeruje brak ochrony. Creative Commons to zupełnie inny zestaw symboli, z typowymi oznaczeniami: CC i różnymi dodatkami jak BY, SA, NC, ND, które precyzują warunki korzystania z utworu. Te licencje nadal wprowadzają ograniczenia, chociaż są dużo bardziej elastyczne niż klasyczne prawa autorskie – ale nigdy nie oznaczają całkowitego braku praw. Prawo cytatu z kolei to wyjątek w ustawie o prawie autorskim, który pozwala na ograniczone wykorzystywanie fragmentów cudzych utworów w określonych sytuacjach, ale nie oznacza, że cały utwór można wykorzystywać dowolnie i bez ograniczeń. Typowy błąd polega na utożsamianiu każdego oznaczenia związanych z literą C z szeroko rozumianą „wolnością” korzystania – a to nieprawda. Domena publiczna jest zupełnie oddzielną kategorią, gdzie utwór jest trwale wyjęty spod ochrony prawnej i można go używać naprawdę dowolnie. W praktyce, nieznajomość tych niuansów może prowadzić do błędów prawnych, np. nieświadomego naruszenia czyichś praw, albo niewłaściwego oznaczenia własnej pracy. W środowisku profesjonalnym bardzo ważne jest właśnie rozróżnianie tych pojęć i symboli – to wpływa na bezpieczeństwo prawne projektów i buduje zaufanie do twórcy.

Pytanie 35

Który z poniższych opisów najlepiej definiuje kompilator?

A. Narzędzie przekształcające kod źródłowy na plik wykonywalny
B. Narzędzie do analizy kodu w czasie rzeczywistym
C. System monitorujący zmiany w kodzie źródłowym
D. Program łączący dynamiczne biblioteki z kodem źródłowym
Kompilator to narzędzie, które przekształca kod źródłowy napisany w języku programowania na plik wykonywalny (binarny), który może być uruchomiony bez potrzeby ponownej kompilacji. Proces ten obejmuje kilka etapów, takich jak analiza leksykalna, analiza składniowa, optymalizacja kodu oraz generowanie kodu maszynowego. Kompilator jest nieodzownym elementem w językach takich jak C, C++ czy Java. Generowany plik wykonywalny może działać szybciej niż kod interpretowany, ponieważ nie wymaga tłumaczenia w czasie rzeczywistym.

Pytanie 36

Który z wymienionych poniżej typów danych stanowi przykład typu stałoprzecinkowego?

A. int
B. decimal
C. float
D. double
Typ 'float' przechowuje liczby zmiennoprzecinkowe, co oznacza, że może reprezentować wartości z częściami dziesiętnymi, ale nie jest to typ stałoprzecinkowy. Typ 'double' to również typ zmiennoprzecinkowy, charakteryzujący się większą precyzją niż 'float'. Typ 'decimal' służy do przechowywania liczb zmiennoprzecinkowych z dużą dokładnością, głównie w aplikacjach finansowych, gdzie precyzja jest kluczowa, ale nie zalicza się do typów stałoprzecinkowych.

Pytanie 37

Jaką technologię stosuje się do powiązania aplikacji internetowej z systemem baz danych?

A. JavaScript
B. HTTP
C. CSS
D. SQL
SQL, czyli język do zarządzania danymi, to mega ważna rzecz, jeśli chodzi o relacyjne bazy danych. Dzięki niemu można tworzyć, modyfikować, a nawet usuwać tabele. To taki most, który łączy aplikacje webowe z bazą danych. Dzięki SQL programiści mogą łatwo przechowywać i przetwarzać różne informacje na serwerze. Przykłady? Można generować listy produktów, ogarniać użytkowników czy analizować dane z transakcji. Właściwie bez SQL-a nie dałoby się zbudować solidnych aplikacji, na przykład tych, które działają na MySQL, PostgreSQL czy Microsoft SQL Server. Chociaż pewnie o tym wiesz, ale warto to zaznaczyć.

Pytanie 38

Teoria wyznaczania celów definiuje właściwie sformułowany cel jako SMART, od pierwszych liter słów: specyficzny, Mierzalny, Ambitny, Realny oraz Terminowy. Wskaź, który cel wymaga wysiłku i stanowi wyzwanie dla pracownika?

A. Mierzalny
B. Specyficzny
C. Ambitny
D. Terminowy
Odpowiedź „Ambitny” rzeczywiście najlepiej oddaje ideę celu, który wymaga wysiłku i jest wyzwaniem dla pracownika. Moim zdaniem właśnie to kryterium - bycie ambitnym - odgrywa kluczową rolę w motywowaniu zespołu do podnoszenia swoich umiejętności i przekraczania codziennych ograniczeń. Praktyka pokazuje, że wyznaczanie ambitnych celów, choć może się wydawać nieco ryzykowne, rozwija kreatywność i pozwala wychodzić poza strefę komfortu. Branżowe standardy zarządzania projektami (np. PMI czy PRINCE2) mocno podkreślają wagę ambitnych, ale jednocześnie realistycznych celów – taki balans sprawia, że pracownicy nie popadają w rutynę i są zmotywowani do długotrwałego rozwoju. W codziennych realiach np. produkcyjnych, cel ambitny może oznaczać zwiększenie wydajności o 20% w pół roku, a nie tylko utrzymanie obecnego poziomu. Z mojego doświadczenia wynika, że dobrze sformułowany, ambitny cel uruchamia zdrową rywalizację i buduje poczucie sensu pracy. Warto pamiętać, by ambicja nie prowadziła do nierealnych oczekiwań – tutaj ważna jest rola lidera, żeby dobrze poznać możliwości zespołu. Sumując: ambitny cel to nie tylko wyzwanie, ale też szansa na znaczący rozwój zawodowy i osobisty.

Pytanie 39

Która z poniższych metod HTTP służy do aktualizacji zasobu?

A. DELETE
B. POST
C. GET
D. PUT
Metoda GET jest używana do pobierania danych z serwera, a nie do ich modyfikacji. Często błędnie uważa się, że ponieważ GET może zwracać aktualne dane, to można go użyć do aktualizacji zasobów. Jednakże, zgodnie z zasadami HTTP, GET nie powinien mieć żadnych efektów ubocznych na serwerze, co oznacza, że nie zmienia stanu zasobów. Z kolei metoda POST jest zazwyczaj używana do tworzenia nowych zasobów, a nie do ich aktualizacji. Choć można jej użyć do przesyłania danych, które następnie prowadzą do aktualizacji, nie jest to jej pierwotny cel. POST generuje nowe zasoby i w rezultacie nie jest idempotentny, co oznacza, że wielokrotne użycie tej samej operacji prowadzi do różnych rezultatów. Metoda DELETE, jak sama nazwa wskazuje, służy do usuwania zasobów, a nie ich aktualizacji. Wybierając niewłaściwe metody HTTP, można wprowadzić chaos w interfejsie API, co prowadzi do błędnych operacji oraz trudności w zarządzaniu zasobami. Dlatego ważne jest, aby dobrze zrozumieć, jakie są różnice między tymi metodami oraz jak właściwie je stosować w praktyce programistycznej, aby zapewnić zgodność z najlepszymi praktykami oraz standardami branżowymi.

Pytanie 40

Jakie działanie wykonuje polecenie "git pull"?

A. Eliminuje plik z repozytorium
B. Zachowuje zmiany w lokalnym repozytorium
C. Tworzy nową gałąź w repozytorium
D. Pobiera zmiany z zdalnego repozytorium i scala je z lokalnym
Polecenie 'git pull' pobiera najnowsze zmiany ze zdalnego repozytorium i scala je z lokalnym repozytorium. Jest to jedno z podstawowych poleceń w Git, pozwalające na synchronizację lokalnej kopii projektu z wersją przechowywaną w chmurze lub na serwerze. Dzięki 'git pull' programiści mogą na bieżąco aktualizować swoje repozytoria i unikać konfliktów, które mogłyby wyniknąć z pracy na nieaktualnej wersji kodu. Proces ten automatycznie łączy pobrane zmiany, co eliminuje konieczność ręcznego kopiowania plików lub komend.