Wyniki egzaminu

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

Egzamin zdany!

Wynik: 23/40 punktów (57,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

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

console.log(0.1 + 0.2 === 0.3);
console.log(0.1 + 0.2);
A. true, 0.3
B. false, 0.3
C. false, 0.30000000000000004
D. true, 0.30000000000000004
Niepoprawne odpowiedzi wynikają z nieporozumienia dotyczącego reprezentacji liczb zmiennoprzecinkowych w JavaScript. Wiele osób ma tendencję do sądzenia, że operacje matematyczne z użyciem liczb dziesiętnych będą prowadziły do oczekiwanych rezultatów. Przykład `0.1 + 0.2`, który wydaje się prosty, w rzeczywistości ujawnia istotne różnice w precyzji. W przeciwieństwie do liczb całkowitych, które są reprezentowane jednoznacznie, liczby zmiennoprzecinkowe mogą wprowadzać błędy zaokrągleń. Gdyby nasze porównanie zwracało `true`, wskazywałoby to na to, że na poziomie binarnym liczby te są identyczne, co jest w przypadku JavaScript nieprawdziwe. Z kolei podanie `0.3` jako wyniku sumy w niektórych odpowiedziach nie uwzględnia tej samej zasady, co sugeruje, że porównanie tych wartości jest właściwe, mimo że nie jest. Warto zrozumieć, że takie błędne wnioski mogą prowadzić do poważnych problemów w bardziej złożonych obliczeniach, zwłaszcza w aplikacjach finansowych, gdzie precyzja jest niezbędna. Dobrym zwyczajem jest korzystanie z odpowiednich metod, które pozwalają na bezpieczne porównywanie wartości zmiennoprzecinkowych, minimalizując ryzyko błędów. Stosując podejście oparte na tolerancji błędu, można uniknąć pułapek związanych z reprezentacją liczb i poprawić dokładność obliczeń.

Pytanie 2

Który z poniższych aspektów najlepiej definiuje działanie e-sklepu?

A. Zarządzanie serwerem e-mail
B. System obsługi koszyka oraz realizacji zamówień
C. Dostęp do bazy danych klientów
D. Mechanizm generowania grafiki 3D
System zarządzania koszykiem i realizacją zamówień to kluczowy element każdej aplikacji e-commerce (sklepu internetowego). Umożliwia użytkownikom dodawanie produktów do koszyka, zarządzanie ich ilością, a następnie finalizację transakcji poprzez proces realizacji zamówienia i płatności. Tego typu funkcjonalność wymaga integracji z bazą danych oraz systemami płatności online, co zapewnia bezpieczeństwo i wygodę użytkownika. Systemy koszyków zakupowych często oferują zaawansowane funkcje, takie jak kupony rabatowe, kody promocyjne czy integracje z magazynami i systemami logistycznymi. Realizacja zamówienia obejmuje procesy takie jak autoryzacja płatności, generowanie faktur oraz śledzenie zamówień, co jest podstawą funkcjonowania nowoczesnych platform e-commerce.

Pytanie 3

Kiedy w programie występuje problem z działaniem, a programista musi zweryfikować wartości znajdujące się w zmiennych w momencie działania aplikacji, to w tym celu należy zastosować

A. debugger
B. analizator składni
C. wirtualną maszynę
D. interpreter
W praktyce programistycznej bardzo łatwo pomylić narzędzia służące do różnych celów, zwłaszcza gdy ktoś dopiero zaczyna swoją przygodę z kodowaniem. Analizator składni to narzędzie wykorzystywane głównie przez kompilatory i interpretery do sprawdzania poprawności gramatycznej kodu źródłowego – pozwala wyłapać błędy na etapie pisania programu, ale nie daje możliwości sprawdzenia, co dokładnie dzieje się „w środku” działającej aplikacji. Stosowanie analizatora składni nie pomoże więc zweryfikować dynamicznych wartości zmiennych w trakcie działania programu. Wirtualna maszyna natomiast to środowisko uruchomieniowe, które umożliwia wykonywanie kodu niezależnie od konkretnej platformy sprzętowej czy systemu operacyjnego (przykład to JVM dla Javy). Chociaż często daje ona pewne narzędzia diagnostyczne, to jej głównym zadaniem nie jest debugowanie kodu ani szczegółowy podgląd zmiennych w czasie rzeczywistym. Interpreter z kolei wykonuje kod linia po linii, ale nie oferuje sam z siebie rozbudowanych opcji diagnostycznych i śledzenia zmiennych, chyba że jest rozbudowany o dodatkowe narzędzia debugujące. Często spotykanym błędem jest mylenie funkcji interpretera czy środowiska uruchomieniowego z narzędziami do debugowania – to nie to samo. Moim zdaniem, żeby skutecznie tropić błędy, trzeba właśnie sięgnąć po debugger, bo to on daje te precyzyjne narzędzia kontroli i podglądu, bez których analiza działania programu „na żywo” byłaby bardzo niewygodna. Warto pamiętać, że dobre praktyki programistyczne zawsze zalecają korzystanie ze specjalistycznych narzędzi do debugowania, bo to po prostu najbardziej efektywna ścieżka szukania błędów.

Pytanie 4

Wskaż termin, który w języku angielskim odnosi się do "testów wydajnościowych"?

A. security testing
B. performance testing
C. unit testing
D. integration testing
Testy wydajnościowe, czyli performance testing, to coś, co naprawdę warto mieć na uwadze. Dzięki nim możemy sprawdzić, jak nasza aplikacja działa pod dużym obciążeniem i jak szybko odpowiada na różne żądania. Moim zdaniem, to kluczowy aspekt, zwłaszcza jeśli planujemy, żeby nasza aplikacja miała wielu użytkowników. W końcu, nikt nie lubi czekać, aż coś się załaduje!

Pytanie 5

Jakie narzędzie jest używane do automatyzacji testów interfejsu użytkownika aplikacji webowych?

A. JIRA
B. Selenium
C. Slack
D. Trello
Pozostałe odpowiedzi, takie jak JIRA, Slack i Trello, nie są narzędziami przeznaczonymi do automatyzacji testów interfejsu użytkownika. JIRA to popularne narzędzie do zarządzania projektami, które często wykorzystuje się do śledzenia błędów i planowania zadań w zespołach programistycznych. Jest ono nieocenione w kontekście zarządzania cyklem życia aplikacji i usprawniania komunikacji w zespole, ale nie służy do automatyzacji testów. Slack natomiast to narzędzie do komunikacji zespołowej, które umożliwia szybką wymianę informacji i współpracę w czasie rzeczywistym. Choć może być używane do powiadomień o wynikach testów, nie jest narzędziem do ich automatyzacji. Trello, z kolei, to aplikacja do zarządzania projektami, która pomaga w organizacji zadań i pracy zespołowej za pomocą tablic i kart. Choć może wspomagać procesy zarządzania testami poprzez wizualizację postępów, nie jest narzędziem testowym samym w sobie. Często zdarza się, że osoby nowe w branży mylą narzędzia wspomagające zarządzanie projektami z narzędziami do testowania, co może prowadzić do nieporozumień. Warto więc zrozumieć ich różne zastosowania, by skutecznie wykorzystać każde z nich według ich przeznaczenia.

Pytanie 6

Jakie informacje zawiera zestaw instrukcji (ISA) danego procesora?

A. Typy danych, które są trzymane w pamięci
B. Układ połączeń między procesorem a innymi elementami
C. Instrukcje, które procesor jest w stanie wykonać
D. Metodę obsługi pamięci podręcznej
Zestaw instrukcji, znany jako ISA, to taki jakby słownik poleceń, które procesor potrafi zrozumieć i wykonać. To mega ważny element w projektowaniu komputerów, bo to właśnie od niego zależy, jak dobrze i szybko działa system. Mamy różne rodzaje instrukcji, na przykład te do wykonywania działań matematycznych, logicznych, czy do przenoszenia danych. Popularne zestawy jak x86 albo ARM pokazują, jak programy rozmawiają z procesorem. Jak zrozumiesz ISA, to będzie łatwiej pisać lepszy kod i dostosowywać aplikacje do różnych architektur. No i co ważne, ISA też mówi, jak procesor interpretuje te instrukcje i zarządza danymi, co ma ogromny wpływ na to, jak wydajnie wszystko działa.

Pytanie 7

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

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

Pytanie 8

Który z wymienionych typów stanowi przykład typu znakowego?

A. char
B. string
C. float
D. boolean
Typ 'string' to struktura lub klasa, która przechowuje sekwencję znaków, a nie pojedynczy znak. 'Boolean' przechowuje wartości logiczne 'true' lub 'false', a nie znaki. 'Float' przechowuje liczby zmiennoprzecinkowe i jest używany w operacjach matematycznych, a nie w przetwarzaniu tekstu czy znaków. Typ 'char' różni się od 'string' tym, że przechowuje dokładnie jeden znak, podczas gdy 'string' może zawierać wiele znaków.

Pytanie 9

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

public class Car: Vehicle {     ...   }
A. dziedziczy po Vehicle
B. używa prywatnych pól klasy Vehicle
C. jest powiązana z klasą Vehicle
D. stanowi klasę bazową (nie dziedziczy po żadnej klasie)
W przedstawionym kodzie w języku C# mamy definicję klasy Car, która dziedziczy po klasie Vehicle. Dziedziczenie to fundamentalny mechanizm programowania obiektowego, pozwalający jednej klasie przejąć właściwości i metody innej klasy. W praktyce oznacza to, że klasa Car automatycznie zyskuje dostęp do metod i właściwości publicznych oraz chronionych klasy Vehicle, co umożliwia ponowne użycie kodu i zwiększa jego przejrzystość. Dziedziczenie jest kluczowe w projektowaniu skalowalnych systemów, gdzie umożliwia tworzenie bardziej specyficznych klas na podstawie klas ogólnych, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Przykładowo, jeżeli klasa Vehicle zawiera metody takie jak Start() i Stop(), klasa Car może je wykorzystać bez konieczności ponownego definiowania. Dobre praktyki w programowaniu obiektowym zalecają wykorzystywanie dziedziczenia do tworzenia hierarchii klas, które logicznie odwzorowują relacje „jest-a” pomiędzy obiektami w systemie. Ważne jest też unikanie zbyt głębokiego dziedziczenia, co może prowadzić do skomplikowanego i trudnego w utrzymaniu kodu. Zrozumienie dziedziczenia jest kluczowe dla efektywnego wykorzystania wzorców projektowych, takich jak wzorzec projektowy Adapter czy Dekorator.

Pytanie 10

Jakie jest przeznaczenie dokumentacji wdrożeniowej?

A. Do zarządzania bazą danych aplikacji
B. Do opisania procesu instalacji i konfiguracji aplikacji w środowisku produkcyjnym
C. Do testowania wydajności aplikacji
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

Jakie narzędzie najlepiej wykorzystać do testowania API REST?

A. Jasmine
B. Postman
C. Git
D. Selenium
Narzędzia takie jak Git, Selenium czy Jasmine, choć niezwykle użyteczne w swoim kontekście, nie są przeznaczone do testowania API REST. Git to system kontroli wersji, który służy do zarządzania kodem źródłowym i współpracy między programistami, a nie do interakcji z API. Wykorzystanie Gita w testowaniu API może prowadzić do mylnego wrażenia, że jest to odpowiednie narzędzie, podczas gdy w rzeczywistości jego zastosowanie ogranicza się do wersjonowania kodu. Selenium jest narzędziem do automatyzacji testów aplikacji webowych, skupiającym się na interakcjach z interfejsem użytkownika, a więc nie jest odpowiednie do testowania backendu lub API. Jasmine to framework do testowania JavaScript, który jest używany głównie do testowania kodu frontendowego, a nie do weryfikacji działania API. Te pomyłki mogą wynikać z nieprecyzyjnego rozumienia różnicy między testowaniem frontendu a backendu. Warto zrozumieć, że testowanie API wymaga specjalistycznych narzędzi, które potrafią obsługiwać protokoły HTTP, analizować odpowiedzi serwera oraz weryfikować dane, a powyższe narzędzia nie spełniają tych wymogów. Wybór odpowiedniego narzędzia jest kluczowy dla efektywności procesu testowania i zapewnienia wysokiej jakości dostarczanego oprogramowania.

Pytanie 12

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

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

Pytanie 13

Która z wymienionych topologii sieci wykazuje cechę, że wszystkie urządzenia są połączone jednym kablem?

A. Topologia magistrali
B. Topologia pierścienia
C. Topologia siatki
D. Topologia gwiazdy
Topologia gwiazdy, w przeciwieństwie do magistrali, charakteryzuje się tym, że wszystkie urządzenia są podłączone do centralnego urządzenia, zazwyczaj switcha lub koncentratora. W tej konfiguracji, jeżeli wystąpi awaria jednego z urządzeń, pozostałe nadal mogą funkcjonować, co czyni tę topologię bardziej niezawodną. Topologia pierścienia polega na połączeniu wszystkich urządzeń w formie zamkniętego pierścienia, gdzie dane przekazywane są z jednego urządzenia do drugiego w określonym kierunku. W tej topologii każda awaria jednego z urządzeń lub kabla powoduje zakłócenia w całej sieci, co czyni ją mniej odporną na błędy. Z kolei topologia siatki, w której każde urządzenie jest połączone z wieloma innymi, zapewnia najwyższy poziom redundancji i niezawodności, ponieważ nawet w przypadku awarii jednego lub kilku połączeń, dane mogą nadal być przesyłane przez inne dostępne trasy. W przeciwieństwie do magistrali, siatka wymaga znacznie większej ilości kabli i jest bardziej skomplikowana w konfiguracji i zarządzaniu, co zwiększa koszty implementacji. Każda z tych topologii ma swoje unikalne właściwości i zastosowania, co sprawia, że wybór odpowiedniej topologii zależy od specyficznych wymagań danego projektu sieciowego.

Pytanie 14

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

A. Klasa, która nie może być dziedziczona
B. Klasa, która dziedziczy z klasy pochodnej
C. Klasa, która zapewnia wspólne atrybuty i metody dla klas pochodnych
D. Klasa, która zawsze zawiera metody wirtualne
Klasa bazowa to klasa, która dostarcza wspólne pola i metody dla klas pochodnych. Definiuje ogólną funkcjonalność, która może być rozszerzana lub modyfikowana przez klasy dziedziczące. Dzięki temu programowanie obiektowe umożliwia wielokrotne wykorzystanie kodu, co prowadzi do jego większej modularności i czytelności. Klasa bazowa często zawiera metody wirtualne, które mogą być nadpisywane przez klasy pochodne, co pozwala na dostosowanie funkcjonalności do konkretnych potrzeb. Przykładem jest klasa 'Pojazd', która posiada metody takie jak 'Jedz()' czy 'Zatrzymaj()', a klasy pochodne, np. 'Samochód' lub 'Rower', rozszerzają tę funkcjonalność.

Pytanie 15

Która z wymienionych zasad odnosi się do zachowania prywatności w sieci?

A. Stosowanie pseudonimów zamiast rzeczywistych imion na mediach społecznościowych
B. Publikowanie danych osobowych na otwartych platformach
C. Przechowywanie haseł w wiadomościach e-mail
D. Umieszczanie wszystkich zdjęć na platformach społecznościowych
Używanie pseudonimów zamiast prawdziwych imion na portalach społecznościowych jest jedną z podstawowych zasad ochrony prywatności w internecie. Dzięki temu ograniczasz możliwość identyfikacji i śledzenia Twojej aktywności przez osoby trzecie. Pseudonimy minimalizują ryzyko kradzieży tożsamości i redukują ilość danych osobowych dostępnych publicznie. To działanie jest szczególnie ważne dla dzieci i młodzieży, chroniąc ich przed cyberprzemocą i innymi zagrożeniami. W wielu serwisach można także dostosować ustawienia prywatności, ukrywając profil przed osobami spoza listy znajomych.

Pytanie 16

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

A. ==
B. is
C. and
D. in
Operator `==` służy do porównywania dwóch wartości, ale nie sprawdza przynależności do listy czy zbioru. Operator `is` porównuje obiekty pod względem tożsamości (czy wskazują na ten sam obiekt w pamięci), co różni się od `in`, który porównuje wartości. Operator `and` to operator logiczny, który sprawdza, czy dwie wartości są prawdziwe (`True`), ale nie jest używany do wyszukiwania elementów w listach czy zbiorach. Każdy z tych operatorów pełni inną funkcję niż `in`, który jest dedykowany do sprawdzania przynależności elementów do kolekcji.

Pytanie 17

Co to jest Event Loop w JavaScript?

A. System zarządzania cyklem życia komponentów w Angular
B. Technika obsługi zdarzeń w aplikacjach React
C. Mechanizm pozwalający na asynchroniczne wykonywanie kodu mimo jednowątkowej natury JavaScript
D. Protokół komunikacji między różnymi częściami aplikacji webowej
Wybór błędnej odpowiedzi może wynikać z nieporozumienia co do roli Event Loop w JavaScript. Technika obsługi zdarzeń w aplikacjach React to zupełnie inna kwestia. React jako biblioteka frontendowa opiera się na komponentach i zarządzaniu stanem, a obsługa zdarzeń w niej polega na nasłuchiwaniu i reagowaniu na różne interakcje użytkownika. Event Loop nie jest bezpośrednio związany z tym procesem, choć obie koncepcje mogą współpracować w większym ekosystemie aplikacji. Protokół komunikacji między różnymi częściami aplikacji webowej także nie odnosi się do Event Loop. Takie protokoły, jak HTTP czy WebSocket, służą do wymiany danych, ale nie kontrolują one asynchronicznego wykonywania kodu. Również system zarządzania cyklem życia komponentów w Angular to kolejny temat, który nie ma nic wspólnego z Event Loop. Angular, jak React, korzysta z własnych metod do zarządzania cyklem życia komponentów, które są niezależne od działania Event Loop. Zrozumienie różnicy między tymi koncepcjami jest kluczowe dla efektywnego programowania w JavaScript i tworzenia skalowalnych aplikacji. Dlatego ważne jest, aby przyjrzeć się mechanizmowi Event Loop i jego roli w przetwarzaniu asynchronicznym, co jest fundamentalne dla wydajności aplikacji webowych.

Pytanie 18

Jakie z poniższych narzędzi wspomaga projektowanie interfejsu użytkownika w aplikacjach mobilnych?

A. Narzędzie do zarządzania bazami danych
B. Kompilator Javy
C. PyCharm Debugger
D. Android Studio Layout Editor
Android Studio Layout Editor to narzędzie umożliwiające projektowanie interfejsu użytkownika aplikacji mobilnych w sposób wizualny, za pomocą metody 'przeciągnij i upuść'. Layout Editor pozwala na szybkie tworzenie responsywnych interfejsów, które automatycznie dostosowują się do różnych rozmiarów ekranów i rozdzielczości. Dzięki niemu programiści mogą łatwo dodawać elementy UI, takie jak przyciski, pola tekstowe, listy czy obrazy, oraz dostosowywać ich właściwości bez konieczności pisania dużych fragmentów kodu XML. Narzędzie to jest kluczowe dla szybkiego prototypowania aplikacji oraz iteracyjnego podejścia do budowy interfejsu użytkownika w środowisku Android Studio.

Pytanie 19

Które narzędzie najlepiej nadaje się do analizy wydajności aplikacji JavaScript?

A. Chrome DevTools Performance
B. Babel
C. Webpack
D. npm
Chrome DevTools Performance to potężne narzędzie, które jest integralną częścią przeglądarki Google Chrome i służy do analizy wydajności aplikacji JavaScript. Dzięki niemu możemy monitorować czas ładowania, identyfikować wąskie gardła w kodzie oraz analizować, jak różne elementy strony wpływają na ogólną wydajność. Narzędzie to umożliwia nagrywanie sesji wydajności, co pozwala na szczegółowe zbadanie, jak różne operacje wpływają na czas odpowiedzi aplikacji. Przykładowo, możemy użyć DevTools do analizy, które skrypty zajmują najwięcej czasu lub które zadania blokują wątek główny, co jest kluczowe dla zapewnienia płynności interfejsu użytkownika. Dodatkowo, narzędzie to oferuje różne metryki, takie jak FPS (frames per second), co jest niezbędne do oceny płynności animacji. Warto również podkreślić, że DevTools jest zgodne z najlepszymi praktykami branżowymi, a jego umiejętne wykorzystanie może znacząco poprawić jakość aplikacji.

Pytanie 20

Jaką wartość zwróci poniższa funkcja dla argumentu n = 5?

function silnia(n) {
  if (n <= 1) return 1;
  return n * silnia(n - 1);
}
A. 24
B. 120
C. 5
D. 60
Podczas analizy funkcji silnia(n) dla wartości n = 5, wiele osób może błędnie wnioskować o jej wyniku. Często zdarza się, że ludzie próbując obliczyć silnię, mylą się w kolejności mnożenia lub nie uwzględniają właściwego przeliczenia. Na przykład, odpowiedź 24 mogłaby wynikać z obliczenia silnia(4) zamiast silnia(5). To błędne myślenie opiera się na zrozumieniu, że silnia n to suma wszystkich poprzednich silni, co jest nieprawdziwe. Silnia to operacja mnożenia, nie sumowania, co jest kluczowe do poprawnego zrozumienia tej funkcji. Ponadto, odpowiedzi 60 i 5 również wynikają z niedokładności w obliczeniach lub mylnego zrozumienia, co oznacza silnia. Na przykład, 60 mogłoby powstać z błędnego pomnożenia, jak 5 * 12, a 5 wydaje się być po prostu nieprawidłowym zrozumieniem, że silnia(n) zwraca n samo w sobie. Dlatego ważne jest, aby pamiętać, że silnia to produkt wszystkich liczb naturalnych od 1 do n, a nie pojedyncza liczba. Dobrze jest również przetestować naszą wiedzę poprzez praktyczne przykłady i weryfikację z działającym kodem, co pozwala na uniknięcie tych typowych pułapek myślowych i lepsze zrozumienie zasadności obliczeń matematycznych w programowaniu.

Pytanie 21

Jakie środowisko deweloperskie jest powszechnie wykorzystywane do produkcji aplikacji webowych w języku Java?

A. Eclipse
B. PyCharm
C. Android Studio
D. XCode
Eclipse to jedno z najpopularniejszych środowisk programistycznych (IDE) wykorzystywanych do tworzenia aplikacji webowych w języku Java. Jest to potężne narzędzie, które wspiera zarówno tworzenie aplikacji desktopowych, jak i rozbudowanych systemów backendowych. Eclipse oferuje wiele wtyczek i rozszerzeń umożliwiających integrację z narzędziami do zarządzania bazami danych, serwerami aplikacji oraz systemami kontroli wersji. Dzięki temu programiści mogą efektywnie budować i testować aplikacje webowe napisane w Javie.

Pytanie 22

Które urządzenie komputerowe jest najbardziej odpowiednie do graficznego projektowania w aplikacjach CAD?

A. Laptop z interfejsem dotykowym
B. Komputer stacjonarny z kartą graficzną NVIDIA Quadro
C. Serwer dysponujący dużą ilością pamięci RAM
D. Laptop z zintegrowanym układem graficznym
Niektóre z proponowanych rozwiązań nie są odpowiednie do pracy w programach CAD. Laptop z zintegrowaną kartą graficzną charakteryzuje się ograniczoną mocą obliczeniową i pamięcią wideo, co może prowadzić do problemów z wydajnością podczas pracy nad skomplikowanymi projektami graficznymi. Zintegrowane rozwiązania graficzne nie są w stanie przetwarzać wymagających obliczeń 3D, co jest kluczowe w projektowaniu CAD. Laptop z ekranem dotykowym, mimo że może oferować atrakcyjne funkcje interaktywne, nie zapewnia wymaganej mocy obliczeniowej ani wydajności graficznej. W przypadku programów CAD istotniejsze są parametry techniczne, a nie funkcjonalność dotykowa. Serwer z dużą ilością pamięci RAM, chociaż mógłby być użyteczny w kontekście obliczeń równoległych, nie jest odpowiednim rozwiązaniem dla indywidualnego użytkownika pracującego z programami graficznymi. Serwery są zazwyczaj zoptymalizowane do zadań obliczeniowych i nie są przeznaczone do pracy z interfejsem graficznym, co ogranicza ich użyteczność w codziennym projektowaniu CAD.

Pytanie 23

Jaką rolę pełni element statyczny w klasie?

A. Pozwala na dynamiczne dodawanie nowych metod
B. Automatycznie likwiduje obiekty klasy po zakończeniu działania programu
C. Zachowuje wspólną wartość dla wszystkich instancji tej klasy
D. Ogranicza dostęp do metod publicznych w klasie
Składnik statyczny klasy przechowuje wartości współdzielone przez wszystkie obiekty tej klasy. Jest to jedno z najbardziej efektywnych narzędzi w programowaniu obiektowym, pozwalające na ograniczenie zużycia pamięci oraz zapewnienie spójności danych. Główna rola składnika statycznego polega na utrzymaniu jednej kopii zmiennej lub metody, która jest dostępna niezależnie od liczby instancji klasy. To oznacza, że zmiana wartości składowej statycznej jest natychmiast widoczna dla wszystkich obiektów klasy. Przykładem jest licznik instancji klasy lub konfiguracja globalna aplikacji, gdzie statyczność pozwala na scentralizowanie danych i ich jednolite zarządzanie.

Pytanie 24

Które zdarzenie w JavaScript jest wywoływane po całkowitym załadowaniu strony?

A. window.render
B. page.complete
C. window.onload
D. document.ready
Wszystkie inne odpowiedzi, takie jak "document.ready", "page.complete" oraz "window.render", są niepoprawne w kontekście pytania o zdarzenie wywoływane po całkowitym załadowaniu strony. Odpowiedź "document.ready" odnosi się do jQuery, a nie do czystego JavaScript. To zdarzenie wywoływane jest, gdy DOM jest załadowany, ale niekoniecznie wszystkie zasoby, takie jak obrazy czy arkusze stylów, są już dostępne. Używanie tego zdarzenia może prowadzić do nieporozumień, gdyż programiści mogą zakładać, że strona jest gotowa do pełnej interakcji, gdy w rzeczywistości zachowanie różnych elementów może się różnić w zależności od ładowania zasobów. Z kolei "page.complete" nie jest standardowym zdarzeniem w JavaScript i nie istnieje w dokumentacji, co czyni tę odpowiedź całkowicie błędną. "window.render" również nie jest znanym zdarzeniem w kontekście JavaScript, co może prowadzić do nieporozumień wśród programistów. Używanie niepoprawnych terminów lub zrozumienie ich znaczenia może prowadzić do błędów w kodzie, które z kolei skutkują nieprawidłowym działaniem aplikacji. Dlatego tak ważne jest, aby znać dokładne zdarzenia i ich zastosowanie w kontekście pełnego ładowania strony, co ma kluczowe znaczenie w tworzeniu responsywnych i dobrze działających aplikacji internetowych.

Pytanie 25

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

A. Serwer pełni rolę pasywnego odbiorcy danych od klientów
B. Komunikacja odbywa się bezpośrednio między urządzeniami klienckimi
C. Dane są przechowywane i przetwarzane na serwerze, a klient wysyła żądania i odbiera odpowiedzi
D. Każdy klient funkcjonuje niezależnie od pozostałych
Architektura klient-serwer to model, w którym dane są przechowywane i przetwarzane na serwerze, a klient wysyła żądania i odbiera odpowiedzi. Model ten umożliwia centralizację zasobów, co prowadzi do łatwiejszego zarządzania aplikacjami i zwiększonego bezpieczeństwa. Klient-serwer jest podstawą działania aplikacji webowych, usług sieciowych oraz baz danych. Dzięki temu architektura ta umożliwia wielu użytkownikom jednoczesny dostęp do tych samych danych, co czyni ją wydajnym rozwiązaniem dla rozproszonych systemów informatycznych. Serwery mogą obsługiwać różne rodzaje klientów, takie jak przeglądarki, aplikacje mobilne czy urządzenia IoT, co sprawia, że jest to wszechstronny model stosowany w wielu branżach.

Pytanie 26

Jakiego kwalifikatora powinno się użyć dla metody, aby umożliwić do niej dostęp jedynie z wnętrza tej klasy oraz klas dziedziczących, a także, by metoda ta nie była dostępna w żadnej funkcji?

A. reinterpret_cast
B. private
C. public
D. protected
Wybór innego kwalifikatora niż protected jest dość częstym błędem, zwłaszcza wśród osób, które mają pierwszą styczność z programowaniem obiektowym w C++ czy Javie. public faktycznie pozwala na dostęp do metody wszędzie – zarówno z poziomu innych klas, funkcji globalnych, jak i z wnętrza klasy czy klas pochodnych. W praktyce oznacza to całkowity brak ograniczeń, co naraża kod na przypadkowe lub niepożądane użycie metody z zewnątrz. Z mojego doświadczenia wynika, że początkujący często wybierają public z przyzwyczajenia, nie zastanawiając się nad konsekwencjami. Z kolei private to już przeciwna skrajność – metoda z tym kwalifikatorem jest dostępna wyłącznie w obrębie tej klasy, nie ma do niej dostępu ani klasa dziedzicząca, ani żadna funkcja zewnętrzna. Wydaje się to bezpieczne, ale kiedy budujesz hierarchię klas, bardzo szybko okazuje się, że zamykasz sobie dostęp do przydatnych funkcji w podklasach, co bywa frustrujące i wymusza obejścia. reinterpret_cast natomiast nie jest żadnym kwalifikatorem dostępu, a po prostu operatorem rzutowania typów w C++. To narzędzie do bardzo specyficznych zadań, takich jak rzutowania wskaźników między niepowiązanymi typami – użycie go zamiast protected jest ewidentnym nieporozumieniem i wynika raczej z pomylenia pojęć niż z błędnej logiki. W sumie, największym problemem w tych odpowiedziach jest niezrozumienie zakresu widoczności, jaki oferują poszczególne kwalifikatory. Warto zawsze wrócić do podstaw i pamiętać, że właściwy dobór tych słów kluczowych ma ogromne znaczenie dla bezpieczeństwa i czytelności kodu. W profesjonalnych projektach zasadą jest: ograniczaj dostęp tak bardzo, jak to możliwe, i udostępniaj tylko tam, gdzie to konieczne – protected daje tu optymalny kompromis.

Pytanie 27

Które z poniższych twierdzeń najlepiej charakteryzuje bibliotekę w kontekście programowania?

A. Zestaw funkcji i klas, które mogą być wykorzystywane w aplikacjach
B. Plik wykonywalny, który funkcjonuje jako odrębny program
C. Zbiór kodu źródłowego, który jest stosowany wyłącznie w fazie kompilacji aplikacji
D. Zbiór zmiennych globalnych, które są dostępne w trakcie działania aplikacji
Biblioteka w programowaniu to taka paczka różnych funkcji i klas, które można wykorzystać w wielu projektach. Dzięki nim programiści mają łatwiej, bo korzystają z gotowych rozwiązań, co oszczędza czas na pisanie aplikacji. W bibliotekach można znaleźć przeróżne moduły – od prostych funkcji matematycznych po skomplikowane narzędzia do obsługi grafiki, sieci czy baz danych. Znam parę popularnych bibliotek, takich jak React.js w JavaScript, NumPy w Pythonie czy STL w C++. Używanie bibliotek sprawia, że praca programisty jest efektywniejsza, a tworzenie bardziej złożonych aplikacji idzie szybciej, bo nie musisz wszystkiego pisać od podstaw.

Pytanie 28

Wskaż typy numeryczne o stałej precyzji

A. long long, long double
B. int, short, long
C. float, double
D. bool char, string
Typy numeryczne zmiennoprzecinkowe, takie jak float czy double, choć bardzo popularne, nie mają stałej precyzji w tym sensie, że ich dokładność zależy od sposobu reprezentacji liczby w pamięci – używają mantysy i wykładnika. To prowadzi do błędów zaokrągleń, zwłaszcza przy liczbach bardzo dużych lub bardzo małych. Z mojego doświadczenia wynika, że wielu początkujących programistów utożsamia float lub double z „precyzją”, bo można w nich przechowywać ułamki, ale tak naprawdę to są one typami o zmiennej precyzji, gdzie nie zawsze da się dokładnie odwzorować każdą wartość. Z kolei odpowiedzi typu bool, char czy string w ogóle nie są typami numerycznymi. Bool jest logiczny (true/false), char przechowuje pojedynczy znak, a string to ciąg znaków – żaden z nich nie nadaje się do przechowywania liczb (no, chyba że robisz jakieś sztuczki z kodowaniem). Często spotyka się też mity, że long long czy long double należą tu do typu o stałej precyzji, ale long double to wciąż liczba zmiennoprzecinkowa, a long long – choć jest całkowity, to bez short czy int nie obejmuje wszystkich przypadków wymaganych w pytaniu. Dobrym zwyczajem jest pamiętać, że stała precyzja to domena typów całkowitych (int, short, long), bo tam każda liczba w zakresie jest reprezentowana dokładnie. W praktycznych systemach, zwłaszcza tam, gdzie liczy się przewidywalność i dokładność, typy całkowite są niezastąpione. Wybierając typ zmiennoprzecinkowy, trzeba się liczyć z tym, że nie każda liczba zostanie odwzorowana idealnie, co może prowadzić do nieprzyjemnych błędów w obliczeniach, szczególnie w aplikacjach finansowych, systemach kontrolnych czy wszędzie tam, gdzie dokładność jest kluczowa. Warto też nauczyć się, kiedy wybrać typ całkowity, a kiedy zmiennoprzecinkowy – to się przydaje w prawdziwej pracy programisty, nie tylko na egzaminie.

Pytanie 29

Jakie z następujących skutków może wystąpić w przypadku naruszenia prawa autorskiego?

A. Zakaz korzystania z oprogramowania open-source
B. Unieważnienie umowy licencyjnej użytkownika końcowego
C. Obowiązek zamieszczenia publicznych przeprosin
D. Nałożenie grzywny lub kary więzienia
Naruszenie prawa autorskiego może skutkować nałożeniem grzywny lub karą więzienia. W zależności od skali naruszenia oraz obowiązujących przepisów, osoba odpowiedzialna za naruszenie może zostać pociągnięta do odpowiedzialności karnej lub cywilnej. Kary mogą obejmować nie tylko grzywny finansowe, ale także konieczność wypłaty odszkodowań na rzecz twórcy lub właściciela praw autorskich. W niektórych przypadkach naruszenie praw autorskich na dużą skalę może prowadzić do kary pozbawienia wolności, co podkreśla wagę przestrzegania przepisów o ochronie własności intelektualnej.

Pytanie 30

Jakie operacje na plikach można uznać za podstawowe?

A. Usuwanie oraz tworzenie nowych plików
B. Otwieranie, zapisywanie, odczytywanie, zamykanie
C. Jedynie otwieranie oraz zamykanie plików
D. Zmiana rozszerzenia plików podczas działania programu
Podstawowe operacje na plikach obejmują otwieranie, zapisywanie, odczytywanie i zamykanie. Te cztery operacje są fundamentem zarządzania plikami w programowaniu i pozwalają na efektywne przechowywanie oraz przetwarzanie danych. Otwarcie pliku umożliwia dostęp do jego zawartości, zapis pozwala na modyfikację lub tworzenie nowych plików, odczyt umożliwia pobieranie danych, a zamknięcie pliku zapewnia integralność danych i zwalnia zasoby systemowe. W wielu językach, takich jak C++, Java czy Python, operacje te są realizowane za pomocą dedykowanych funkcji i klas, co ułatwia ich implementację w kodzie.

Pytanie 31

Pierwszym krokiem w procesie tworzenia aplikacji jest

A. wybór zestawu typów i zmiennych dla aplikacji
B. stworzenie przypadków testowych
C. analiza wymagań klienta
D. opracowanie architektury systemu
Analiza wymagań klienta to taki trochę fundament całego procesu tworzenia aplikacji. Bez niej ciężko ruszyć dalej, bo nie wiadomo, co właściwie trzeba zbudować i jakie cele ma spełniać projekt. Z mojego doświadczenia wynika, że rozmowy z klientem potrafią odkryć wiele niewypowiedzianych oczekiwań – czasem nawet takie, o których sam klient nie pomyślał, ale są kluczowe dla sukcesu produktu. Bez szczegółowego zrozumienia, czego dokładnie potrzebuje użytkownik końcowy, łatwo wpaść w pułapkę budowania funkcjonalności na ślepo lub tworzenia rozwiązań, które nikomu się nie przydadzą. W branży IT mówi się, że im lepsza analiza na starcie, tym mniej poprawek i niespodzianek później w trakcie realizacji. Standardy takie jak IEEE 830 czy metodyki typu Agile i Scrum mocno podkreślają rolę rozmów z klientem oraz dokumentowania wymagań, zanim przejdzie się dalej. Praktycznie każda większa firma najpierw zbiera wymagania – czy to poprzez warsztaty, wywiady, czy analizę procesów biznesowych. Takie podejście pozwala lepiej zaplanować zakres projektu, oszacować koszty i ustalić priorytety. Bez tego nawet najlepsza architektura czy testy nie uratują projektu przed nieporozumieniami i opóźnieniami.

Pytanie 32

Zademonstrowana pętla wykorzystuje obiekt random do:

var random = new Random();
String pulaZnakow = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ";
int dlPuli = pulaZnakow.Length - 1;
char znak;
string wynik = "";

for (int i = 0; i < 8; i++) {
    znak = pulaZnakow[random.Next(0, dlPuli)];
    wynik += znak;
}
A. stworzenia losowego napisu o długości 8 znaków składającego się z liter
B. uzupełniania tablicy danymi w postaci liczb pseudolosowych
C. jednorazowego wylosowania znaku z określonego zestawu znaków
D. wielokrotnego generowania liczby, aby stworzyć ciąg z liczb pseudolosowych
Kod, który został przedstawiony, to typowy przykład generowania losowego napisu, takiego jak hasło czy token sesji. Random służy tutaj do wielokrotnego losowania indeksów z określonego zakresu, które następnie są używane do pobierania znaków z puli liter. W efekcie – po przejściu całej pętli – zmienna 'wynik' zawiera napis złożony z 8 losowo dobranych liter z podanego zestawu. Tak się właśnie w praktyce koduje np. generator jednorazowych haseł lub krótkich identyfikatorów użytkowników. Często takie rozwiązania spotyka się w aplikacjach internetowych, gdzie bezpieczeństwo i nieprzewidywalność takich danych są kluczowe. Zresztą, korzystanie z Random i gotowej puli znaków to branżowy standard, jeśli chodzi o prostą losowość tekstową (chociaż do kryptografii są lepsze klasy, np. RNGCryptoServiceProvider). Warto też pamiętać, że pętle for idealnie nadają się do składania ciągów o z góry ustalonej długości, co jest bardzo czytelne i zgodne z dobrymi praktykami C#. Ogólnie, ten sposób generowania losowego stringa jest szybki, łatwy do zrozumienia i nieźle się skaluje – no i sprawdza się rewelacyjnie w różnych projektach, gdzie trzeba wygenerować coś pseudo-losowego, ale czytelnego dla człowieka. Sam się kiedyś złapałem na tym, jak często taki kod się przydaje przy rejestracji użytkowników czy obsłudze prostych quizów online.

Pytanie 33

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

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

Pytanie 34

Wartości składowych RGB koloru #AA41FF zapisane w systemie szesnastkowym po przekształceniu na system dziesiętny są odpowiednio

A. 160, 65, 255
B. 170, 64, 255
C. 160, 64, 255
D. 170, 65, 255
Przy przekształcaniu wartości szesnastkowych RGB na system dziesiętny łatwo popełnić błąd, bo wystarczy źle podstawić którąś cyfrę albo zmieszać kolejność. W przypadku koloru #AA41FF każda para znaków odpowiada jednej składowej: AA to czerwona, 41 to zielona, a FF to niebieska. Najczęściej błędy pojawiają się, gdy niepoprawnie zinterpretujemy cyfry szesnastkowe jako dziesiętne lub po prostu pomylimy kolejność składowych. Przykładowo, '160' w odpowiedzi zamiast '170' wynika być może z błędnego odczytania AA – bo łatwo pomylić literę A (10) z cyfrą 6 czy 0, zwłaszcza jeśli ktoś nie jest przyzwyczajony do liczb szesnastkowych. Podobnie, '64' zamiast '65' dla 41 to typowy efekt nieuwagi w liczeniu: 4*16+1 daje 65, a nie 64, co pokazuje, jak ważna jest precyzja w prostych działaniach matematycznych. Z kolei zamiana AA na 160 może świadczyć o mechanicznej zamianie liter na liczby bez uwzględnienia ich pozycji w zapisie szesnastkowym. Powszechnym błędem jest też zamiana kolejności składowych lub skupianie się tylko na końcowych cyfrach, przez co mylnie przyjmuje się, że na przykład AA to 160, bo pierwsza cyfra to 1, a nie 10. W praktyce branżowej takie niedokładności prowadzą do złych efektów wizualnych – np. kolor na stronie mocno różni się od zamierzonego lub nie pasuje do reszty projektu. Moim zdaniem takie błędy wynikają zwykle z braku nawyków w przeliczaniu systemów liczbowych. Warto zawsze pamiętać, że każda cyfra szesnastkowa ma swoją wagę, a zamiana wymaga precyzyjnego policzenia: pierwsza cyfra razy 16 plus druga cyfra. W codziennej pracy z grafiką cyfrową czy webdesignem taka pomyłka bardzo rzuca się potem w oczy użytkownikowi, więc lepiej od początku ćwiczyć dokładność niż potem szukać, gdzie zniknęła ta właściwa barwa.

Pytanie 35

Który z wymienionych elementów jest fundamentalny w architekturze klient-serwer?

A. Zdalne wykonywanie aplikacji na urządzeniu klienta
B. Wyłącznie komunikacja synchroniczna
C. Brak podziału na funkcje klienta i serwera
D. Scentralizowane przechowywanie danych
Scentralizowane przechowywanie danych to podstawowy element architektury klient-serwer. W takim modelu dane przechowywane są na serwerze, a klient uzyskuje do nich dostęp na żądanie. Dzięki temu możliwa jest efektywna synchronizacja danych oraz ich ochrona przed nieautoryzowanym dostępem. Architektura klient-serwer jest skalowalna i umożliwia obsługę wielu klientów jednocześnie, co czyni ją fundamentem dla większości nowoczesnych aplikacji webowych i mobilnych.

Pytanie 36

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

A. A0 FE A0
B. 98 FE 98
C. 98 FB 98
D. A0 FB A0
Wybór nieprawidłowego kodu szesnastkowego dla koloru RGB(152, 251, 152) najczęściej wynika z niepełnego zrozumienia konwersji wartości dziesiętnych RGB na ich odpowiedniki w systemie szesnastkowym. W odpowiedziach pojawiły się kody takie jak A0 FB A0, A0 FE A0 czy 98 FE 98, które świadczą o błędnym przeliczaniu przynajmniej jednej składowej. Problem zwykle pojawia się podczas przekładania wartości dziesiętnych (w zakresie 0-255) na szesnastkowe – tutaj największy błąd robi się przy zamianie wartości 152 oraz 251. W wielu przypadkach, przez nieuwagę, ktoś potrafi zamienić 152 na A0, ale to jest 160 w dziesiętnym, a nie 152. Podobnie, 251 nie daje FE (bo FE to 254!), tylko FB. W mojej praktyce często widzę, że takie pomyłki biorą się albo z korzystania z nieprecyzyjnych kalkulatorów online, albo z pośpiechu. Często też myli się kolejność bajtów albo nie zwraca uwagi na to, czy wartości są z zakresu RGB, czy może np. RGBA, co wprowadza dodatkowe zamieszanie. Trzeba pamiętać, że każdy kolor w modelu RGB składa się z trzech osobnych wartości, które muszą być niezależnie przeliczone na szesnastki i dopiero wtedy składane w końcowy kod HEX. Z mojego doświadczenia, błędy tego typu mogą prowadzić do zupełnie innych efektów wizualnych w gotowym projekcie – niby kolor podobny, ale jednak coś nie gra, szczególnie przy projektowaniu interfejsów czy layoutów stron internetowych. Branżowe standardy, takie jak te opisane przez W3C i w dokumentacjach narzędzi Adobe lub GIMP, zawsze zalecają dokładność i niepoleganie wyłącznie na automatycznych konwerterach w tego typu zadaniach. Najlepiej zawsze przeliczyć sobie ręcznie lub używać sprawdzonych narzędzi, wtedy mamy pewność, że odwzorowanie koloru będzie zgodne ze specyfikacją. Takie drobiazgi potrafią realnie wpłynąć na odbiór strony czy aplikacji, więc warto ćwiczyć te konwersje i mieć świadomość, gdzie można popełnić błąd.

Pytanie 37

Który algorytm sortowania opiera się na metodzie "dziel i zwyciężaj"?

A. Sortowanie bąbelkowe
B. Sortowanie przez wybór
C. Sortowanie szybkie (QuickSort)
D. Sortowanie przez wstawianie
QuickSort to algorytm sortowania wykorzystujący podejście 'dziel i zwyciężaj', co oznacza, że dzieli tablicę na mniejsze części wokół elementu zwanego pivotem, a następnie rekurencyjnie sortuje każdą z tych części. Ta strategia pozwala na efektywne sortowanie dużych zbiorów danych w czasie O(n log n) w większości przypadków. Dziel i zwyciężaj to potężne narzędzie algorytmiczne, które znajduje zastosowanie w wielu innych algorytmach, takich jak Merge Sort i algorytmy wyszukiwania binarnego. QuickSort jest często używany w aplikacjach wymagających szybkiego przetwarzania dużych ilości danych.

Pytanie 38

Definicja konstruktora dla zaprezentowanej klasy w języku C++ może być sformułowana jak poniżej:

class Owoc
{
    public:
        double waga;
        string nazwa;
        Owoc(double waga, string nazwa);
};

Deklaracja 1:
Owoc::Owoc(double waga, string nazwa) {
    this -> waga = waga;
    this -> nazwa = nazwa;
}

Deklaracja 2:
Construct::Owoc(double waga, string nazwa) {
    this -> waga = waga;
    this -> nazwa = nazwa;
}

Deklaracja 3:
Construct::Owoc(double waga, string nazwa) {
    this.waga = waga;
    this.nazwa = nazwa;
}

Deklaracja 4:
Owoc::Owoc(double waga, string nazwa) {
    this.waga = waga;
    this.nazwa = nazwa;
}
A. Deklaracji 2
B. Deklaracji 3
C. Deklaracji 1
D. Deklaracji 4
Wiele osób, szczególnie na początku nauki, myli się tu przez znajomość składni z innych języków lub nie do końca rozumie, jak działa zakres nazw w C++. Najczęstszy błąd w przedstawionych błędnych deklaracjach polega na używaniu nieprawidłowej nazwy klasy w kwalifikatorze zasięgu, czyli przed '::'. W C++ implementując konstruktor poza ciałem klasy, musimy napisać Owoc::Owoc(...), a nie, na przykład, Construct::Owoc(...). To bardzo podstawowa, ale kluczowa kwestia, która wynika z zasad języka. Często osoby przesiadające się z innych języków, np. z Javy czy C#, próbują też używać notacji this.waga (z kropką), co niestety w C++ jest nieprawidłowe – tutaj operator dostępu do składowych przez wskaźnik to '->', bo this jest wskaźnikiem do obiektu. Takie subtelności bywają podchwytliwe i sam pamiętam, jak łatwo się na tym przejechać, zwłaszcza jak się przeskakuje pomiędzy językami. Jeszcze inny typowy błąd to mylenie konstruktora z zupełnie innymi funkcjami albo próba zadeklarowania konstruktora w przestrzeni nazw, która nie odpowiada klasie – przez co kompilator nie rozpoznaje takiej funkcji jako konstruktora i pojawiają się często niejasne błędy kompilacji. Warto mocno zapamiętać, że w C++ musimy bardzo pilnować zarówno nazewnictwa, jak i składni operatorów, bo automatycznych podpowiedzi na etapie pisania kodu czasem brakuje. Dobrą praktyką jest też sprawdzanie, czy używamy poprawnych typów dostępu do pól (-> zamiast .). Wreszcie, nie można używać innych nazw klas niż tej, której konstruktor rzeczywiście definiujemy. Każde odstępstwo od tej reguły prowadzi do sporych problemów i nieporozumień w kodzie. Z mojego doświadczenia wynika, że te drobiazgi, które wydają się mało istotne, potem najbardziej komplikują pracę i utrzymanie projektu. Warto więc od razu przyzwyczajać się do poprawnej składni i nie kombinować z rozwiązaniami "z innych światów" – C++ rządzi się swoimi prawami i trzymając się ich, można zyskać sporo pewności przy pisaniu kodu.

Pytanie 39

Przedstawione w filmie działania wykorzystują narzędzie

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

Pytanie 40

Który z frameworków bazuje na budowaniu komponentów przy użyciu języka JavaScript?

A. ASP.NET Core
B. Node.js
C. React.js
D. Django
React.js to popularna biblioteka JavaScript, która opiera się na komponencie jako podstawowym elemencie budowy interfejsu użytkownika. Framework ten umożliwia tworzenie dynamicznych i interaktywnych aplikacji webowych, które cechują się wysoką wydajnością. Dzięki wykorzystaniu komponentów, programiści mogą wielokrotnie wykorzystywać te same elementy interfejsu, co znacznie upraszcza zarządzanie kodem i poprawia jego czytelność. React jest szeroko stosowany w budowie Single Page Applications (SPA) i wspiera technologię Virtual DOM, co minimalizuje liczbę operacji na rzeczywistym DOM i zwiększa szybkość renderowania stron. React jest szczególnie polecany do tworzenia nowoczesnych aplikacji webowych o dynamicznych interfejsach, co czyni go jednym z liderów na rynku frontendowym.