Wyniki egzaminu

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

Egzamin zdany!

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

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. protected
C. private
D. public
Słowo kluczowe protected to w programowaniu obiektowym zdecydowanie ciekawa sprawa – i, szczerze mówiąc, bardzo przydatne narzędzie, jeśli chodzi o kontrolę dostępu do metod i pól w klasach. Wybierając protected, dajesz znać kompilatorowi, że dana metoda ma być dostępna tylko wewnątrz tej klasy i przez klasy pochodne, czyli dziedziczące. To oznacza, że kod spoza tej hierarchii (na przykład zwykłe funkcje czy metody innych klas) nie będzie mógł się do niej „dobrać”, nawet jeśli bardzo by chciał. W praktyce często korzysta się z protected, gdy projektujesz klasy bazowe i chcesz, żeby pewne operacje były do dyspozycji tylko dla klas dziedziczących, ale już nie dla całego świata. Przykładowo, możesz mieć klasę Figure i w niej metodę protected calculateArea(), którą nadpisują konkretne figury, ale nie chcesz, żeby ktoś poza tym drzewem dziedziczenia się do niej odwołał. To podejście daje większą elastyczność niż private (bo pozwala na dostęp potomkom), ale jednocześnie lepszą kontrolę niż public. Moim zdaniem, stosowanie protected to bardzo dobra praktyka, gdy wiesz, że chcesz zabezpieczyć metody, ale nie chcesz ich zupełnie „zamykać” tylko dla pojedynczej klasy. Warto też pamiętać, że to rozwiązanie promuje tzw. hermetyzację – czyli jedną z kluczowych zasad OOP, co jest mocno doceniane w profesjonalnych projektach.

Pytanie 2

Który z dokumentów stosowanych w metodologii Agile zawiera listę funkcjonalności produktu uporządkowanych według ich ważności?

A. Diagram Gantta
B. Harmonogram projektu
C. Product backlog
D. Backlog sprintu
Product backlog to dokument zawierający listę funkcjonalności produktu uporządkowanych według priorytetów. Jest to jedno z głównych narzędzi w metodykach Agile, szczególnie w Scrumie, gdzie backlog stanowi podstawę do planowania sprintów. Zawiera on wszystkie elementy, które muszą zostać zaimplementowane, w tym nowe funkcje, poprawki błędów oraz zadania techniczne. Priorytety są ustalane przez właściciela produktu (Product Ownera) i dostosowywane na bieżąco w zależności od zmieniających się wymagań i potrzeb biznesowych. Dzięki backlogowi zespół może skupić się na dostarczaniu najważniejszych funkcji, co pozwala na szybkie reagowanie na feedback i rozwój aplikacji zgodnie z oczekiwaniami klienta.

Pytanie 3

Jakie jest najważniejsze właściwość algorytmów szyfrowania symetrycznego?

A. Funkcjonowanie bez użycia klucza
B. Zastosowanie identycznego klucza do szyfrowania oraz deszyfrowania
C. Zastosowanie odmiennych kluczy do szyfrowania i deszyfrowania
D. Szyfrowanie wyłącznie tekstowych plików
Algorytmy szyfrowania symetrycznego to takie, które używają tego samego klucza do szyfrowania i deszyfrowania danych. To jedna z najstarszych metod i, co ważne, bardzo często stosowanych, bo działa dość szybko i nie wymaga wielkich zasobów. Przykłady, które na pewno słyszałeś, to AES i DES. Symetryki są super w komunikacji sieciowej, przy przechowywaniu danych, a także w różnych protokołach bezpieczeństwa. Fajnie, że są szybkie, ale z drugiej strony trzeba pamiętać o tym, żeby klucz był bezpiecznie przechowywany, bo to może stanowić nie lada problem.

Pytanie 4

Jak nazywa się proces znajdowania i usuwania błędów w kodzie?

A. Kompilowanie
B. Debugowanie
C. Kompensowanie
D. Interpretowanie
Debugowanie to niezwykle istotny etap w procesie tworzenia oprogramowania, polegający na identyfikowaniu i eliminowaniu błędów w kodzie źródłowym. Jest to proces, który wymaga zrozumienia logiki programu oraz umiejętności analitycznych, aby skutecznie odnaleźć przyczynę problemu i ją usunąć. Debugowanie jest kluczowe dla zapewnienia, że aplikacja działa zgodnie z zamierzeniami i jest wolna od błędów, które mogłyby wpłynąć na jej funkcjonalność lub stabilność. W praktyce debugowanie może obejmować różne techniki, takie jak użycie narzędzi do śledzenia wykonania kodu, analizę logów czy testowanie jednostkowe. Programiści często korzystają z dedykowanych środowisk programistycznych (IDE), które oferują funkcje ułatwiające debugowanie, takie jak punkty przerwań czy inspekcja zmiennych. Dobrym przykładem jest Visual Studio, które umożliwia śledzenie wartości zmiennych w czasie rzeczywistym. Debugowanie jest również częścią dobrych praktyk programistycznych, które zakładają regularne testowanie i kontrolę jakości kodu. Dzięki temu możliwe jest nie tylko eliminowanie błędów, ale także poprawa wydajności i bezpieczeństwa aplikacji.

Pytanie 5

Jaką właściwość ma sieć synchroniczna?

A. Transmisja danych odbywa się w wyznaczonych interwałach czasowych
B. Gwarantuje większą elastyczność w przesyłaniu danych
C. Przekazywanie danych zachodzi w sposób niesystematyczny
D. Nie jest konieczna synchronizacja zegarów
Sieć synchroniczna charakteryzuje się tym, że transmisja danych odbywa się w ustalonych odstępach czasu, co oznacza, że wszystkie urządzenia w sieci są zsynchronizowane do jednego zegara. Taki sposób przesyłania danych pozwala na precyzyjne określenie momentu, w którym dane są wysyłane i odbierane, co redukuje opóźnienia i błędy w komunikacji. Przykładem sieci synchronicznej jest system TDM (Time Division Multiplexing), który dzieli czas na różne sloty, przydzielając każdy slot konkretnemu użytkownikowi lub urządzeniu. Dzięki temu każdy uczestnik sieci ma gwarancję, że w swoim czasie dostanie dostęp do medium transmisyjnego. Standardy takie jak SONET (Synchronous Optical Network) i SDH (Synchronous Digital Hierarchy) są przykładami technologii, które wykorzystują synchronizację do efektywnego przesyłania danych na dużych odległościach. Takie podejście jest powszechnie stosowane w telekomunikacji, gdzie wysoka wydajność i niezawodność transmisji są kluczowe dla jakości usług.

Pytanie 6

Który z poniższych formatów jest najczęściej używany do wymiany danych w aplikacjach webowych?

A. JSON
B. CSV
C. YAML
D. XML
JSON (JavaScript Object Notation) jest najczęściej używanym formatem wymiany danych w aplikacjach webowych ze względu na swoją prostotę, czytelność oraz łatwość w integracji z JavaScript. JSON jest lekki i pozwala na szybkie przetwarzanie danych, co czyni go idealnym wyborem w kontekście nowoczesnych aplikacji webowych, które często korzystają z technologii AJAX do komunikacji z serwerem. Przykładem zastosowania JSON może być przesyłanie danych z serwera do przeglądarki w aplikacjach SPA (Single Page Applications), gdzie asynchroniczne żądania wymagają formatu, który można łatwo zdeserializować na obiekt JavaScript. JSON wspiera zagnieżdżone struktury danych i kolekcje, co pozwala na modelowanie złożonych relacji między danymi. Ponadto, jego popularność doprowadziła do rozwoju wielu bibliotek i narzędzi, które ułatwiają pracę z tym formatem, takich jak `JSON.parse()` i `JSON.stringify()` w JavaScript. W związku z tym, JSON stał się de facto standardem dla wymiany danych w ekosystemie webowym, co potwierdzają również standardy takie jak REST, które często wykorzystują właśnie ten format do komunikacji z API.

Pytanie 7

Które z wymienionych działań stanowi zagrożenie dla emocjonalnego dobrostanu człowieka w sieci?

A. Zła postawa podczas pracy przy komputerze
B. Nadmierne korzystanie z mediów społecznościowych
C. Cyberstalking
D. Przesyłanie niezaszyfrowanych plików
Nadmierne korzystanie z mediów społecznościowych może negatywnie wpływać na samopoczucie i prowadzić do uzależnienia, ale samo w sobie nie stanowi formy prześladowania. Zła postawa podczas pracy przy komputerze prowadzi do problemów zdrowotnych, takich jak bóle pleców i karku, a nie wpływa na sferę emocjonalną. Przesyłanie niezaszyfrowanych plików zwiększa ryzyko naruszenia danych, ale nie oddziałuje na psychikę użytkownika.

Pytanie 8

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

SELECT COUNT(*)
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
A. Liczba pracowników z najwyższą pensją
B. Błąd składni SQL
C. Średnia pensja wszystkich pracowników
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 9

Zaprezentowany symbol odnosi się do

Ilustracja do pytania
A. domeny publicznej
B. Creative Commons
C. praw autorskich
D. prawa cytatu
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 10

Jakie działanie związane z klasą abstrakcyjną jest niedozwolone?

A. Definiowanie pól publicznych
B. Określenie metody wirtualnej
C. Utworzenie instancji tej klasy
D. Rozszerzanie tej klasy
Klasy abstrakcyjne w programowaniu obiektowym to fundament, który umożliwia wprowadzenie abstrakcji i polimorfizmu. Ich głównym celem jest zdefiniowanie wspólnego interfejsu dla klas pochodnych, natomiast nie można tworzyć ich instancji. Przykładem może być klasa abstrakcyjna 'Pojazd', która definiuje metody takie jak 'przyspiesz' i 'hamuj', ale sama nie ma implementacji tych metod. Klasy, które dziedziczą po 'Pojazd', takie jak 'Samochód' czy 'Motocykl', implementują te metody, co umożliwia ich użycie. Zgodnie z zasadami SOLID, klasa abstrakcyjna powinna być używana jako baza dla innych klas, a nie jako samodzielny obiekt. W związku z tym, próbując stworzyć instancję klasy abstrakcyjnej, napotkamy błąd kompilacji. Takie zachowanie jest zgodne z wieloma językami programowania, takimi jak Java, C# czy C++, gdzie klasy abstrakcyjne są kluczowym elementem budowy hierarchii klas oraz wzorów projektowych.

Pytanie 11

W jakiej topologii sieciowe wszystkie urządzenia są bezpośrednio powiązane z każdym innym?

A. Topologia pierścienia
B. Topologia siatki
C. Topologia gwiazdy
D. Topologia magistrali
Topologia siatki to jedna z najbardziej wydajnych i wszechstronnych struktur sieciowych, w której każde urządzenie (węzeł) jest połączone bezpośrednio z każdym innym węzłem. Tego typu topologia zapewnia wysoką dostępność i odporność na awarie, ponieważ awaria jednego połączenia nie wpływa na komunikację pozostałych węzłów. W praktyce ma to zastosowanie w dużych, zaawansowanych sieciach komputerowych, takich jak sieci miejskie (MAN) czy sieci szerokopasmowe. Istnieją dwie główne formy topologii siatki: siatka pełna, gdzie każde urządzenie ma bezpośrednie połączenia z wszystkimi innymi, oraz siatka częściowa, gdzie nie wszystkie węzły są ze sobą bezpośrednio połączone, ale komunikacja jest możliwa przez inne węzły. Topologia siatki, z uwagi na swoje zalety, jest często wykorzystywana w standardach sieciowych, takich jak Ethernet, oraz w systemach rozproszonych, gdzie kluczowe są niezawodność i efektywność przesyłania danych. Dodatkowo, w kontekście Internetu rzeczy (IoT), topologia siatki umożliwia efektywne zarządzanie dużą liczbą urządzeń, co jest kluczowe w inteligentnych miastach i automatyzacji domowej.

Pytanie 12

W jaki sposób można zmniejszyć liczbę danych zbieranych przez aplikacje mobilne?

A. Weryfikować i regulować uprawnienia aplikacji w ustawieniach
B. Udostępniać aplikacjom wszystkie niezbędne informacje
C. Używać aplikacji bez sprawdzania ich źródła
D. Nie blokować aplikacjom dostępu do lokalizacji oraz kontaktów
Dostosowanie uprawnień aplikacji w ustawieniach swojego telefonu to naprawdę dobry sposób na ograniczenie tego, co aplikacje mogą o nas wiedzieć. Wiele z nich, jak np. te do robienia zdjęć, prosi o dostęp do lokalizacji czy kontaktów, ale nie zawsze jest to potrzebne. Warto co jakiś czas sprawdzić, czy jakieś aplikacje nie mają za dużo uprawnień. Dzięki temu lepiej zabezpieczymy swoją prywatność i zmniejszymy ryzyko, że nasze dane wyciekną. Lepiej też unikać aplikacji z nieznanych źródeł, bo mogą one zbierać więcej informacji, niż byśmy chcieli.

Pytanie 13

Jaką złożoność obliczeniową posiada podany algorytm?
Dane:
Tablica: tab[n]
Index: i = 0, 1, ..., n-1
x: szukana

Algorytm:

// K1: i0
// K2: dopóki i < (n - 1)
    // K3: jeżeli tab[i] = x to wypisz i
    // K4: ii + 1
    // K5: idź do K2
// K6: zakończ
A. O(1)
B. O(n2)
C. O(n)
D. O(n log n)
Analizując podany algorytm, warto zauważyć, że przechodzi on przez każdy element tablicy dokładnie raz, zaczynając od indeksu 0 aż do n-1. To jest klasyczny przykład przeszukiwania liniowego (linear search), które w najgorszym przypadku ma złożoność czasową O(n), gdzie n to liczba elementów w tablicy. Moim zdaniem to jedna z najbardziej podstawowych i jednocześnie często używanych technik, szczególnie tam, gdzie dane nie są posortowane albo kiedy oczekujemy prostoty implementacji. W praktyce taki algorytm stosuje się, gdy nie zależy nam na super efektywności, a raczej na łatwości zrozumienia kodu lub szybkim prototypowaniu, na przykład podczas pisania skryptów narzędziowych lub prostych aplikacji. Branżowe standardy, chociażby w programowaniu niskopoziomowym lub w zastosowaniach embedded, też często bazują na tego typu rozwiązaniach, ponieważ nie wymagają one dodatkowej pamięci ani zaawansowanych struktur danych. Fajnie zwrócić uwagę, że O(n) oznacza, iż czas wykonywania rośnie proporcjonalnie do liczby elementów – czyli dla 1 000 elementów algorytm wykona się około 1 000 razy wolniej niż dla pojedynczego elementu, chociaż w praktyce zależy to oczywiście od wielu czynników sprzętowych. Dobrym zwyczajem jest zawsze na początku próbować rozwiązać problem najprostszym algorytmem, takim jak ten, a dopiero potem – jeśli wydajność zawiedzie – szukać bardziej zaawansowanych rozwiązań, jak wyszukiwanie binarne czy struktury indeksujące.

Pytanie 14

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

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

Pytanie 15

Jakie oprogramowanie służy do monitorowania błędów oraz zarządzania projektami?

A. Jira
B. Jasmine
C. Git
D. Bugzilla
Bugzilla to narzędzie do śledzenia błędów, które skupia się głównie na identyfikacji oraz zarządzaniu defektami w oprogramowaniu. Choć może być używane w kontekście zarządzania projektami, jego funkcjonalności są ograniczone w porównaniu do kompleksowych rozwiązań, takich jak Jira. Bugzilla jest bardziej odpowiednie dla zespołów, które potrzebują prostszych narzędzi do śledzenia błędów, ale nie zapewnia takich możliwości zarządzania projektami jak Jira. Git to system kontroli wersji, który umożliwia zarządzanie kodem źródłowym, ale nie jest narzędziem do śledzenia błędów ani do zarządzania projektami jako takimi. Git pozwala programistom na współpracę i śledzenie zmian w kodzie, jednakże brakuje mu funkcji zarządzania projektami oraz integracji z procesami Agile, które są kluczowe w nowoczesnym rozwoju oprogramowania. Jasmine to framework do testowania jednostkowego aplikacji JavaScript, który koncentruje się na pisaniu testów i nie jest narzędziem do zarządzania projektami ani do śledzenia błędów. Pomimo że testowanie jednostkowe jest istotną częścią cyklu życia oprogramowania, Jasmine nie oferuje funkcjonalności związanych z zarządzaniem projektami, co czyni go nieodpowiednim w kontekście tego pytania.

Pytanie 16

Co to jest CORS (Cross-Origin Resource Sharing)?

A. Protokół komunikacji między różnymi bazami danych
B. System zarządzania plikami statycznymi w aplikacjach SPA
C. Metoda kompresji danych w aplikacjach webowych
D. Mechanizm bezpieczeństwa określający, które domeny mogą uzyskiwać dostęp do zasobów na serwerze
CORS to nie protokół komunikacji między różnymi bazami danych, co sugeruje pierwsza z niepoprawnych odpowiedzi. Protokoły takie jak JDBC czy ODBC są odpowiedzialne za komunikację między bazami danych, a nie CORS. CORS nie jest też metodą kompresji danych w aplikacjach webowych, co mogłoby wprowadzać w błąd w kontekście optymalizacji transferu danych. Kompresja danych jest realizowana przez inne technologie, takie jak Gzip, które zmniejszają rozmiar przesyłanych informacji, ale nie mają związku z ograniczeniami dostępu do zasobów. Ponadto, CORS nie ma nic wspólnego z zarządzaniem plikami statycznymi w aplikacjach SPA. W rzeczywistości, pliki statyczne mogą być serwowane z różnych źródeł, a CORS odgrywa kluczową rolę w ustalaniu, czy te źródła mogą być dostępne przez przeglądarkę. To zrozumienie jest kluczowe, ponieważ wiele osób myli pojęcia związane z komunikacją w sieci, co prowadzi do fałszywych przekonań. Zatem ważne jest, aby nie tylko znać definicje, ale także rozumieć, jak różne technologie współdziałają ze sobą w kontekście bezpieczeństwa i dostępu do danych.

Pytanie 17

Jakie z wymienionych narzędzi służy do emulacji mobilnych urządzeń podczas developowania aplikacji?

A. Postman
B. TensorFlow
C. Genymotion
D. Numpy
Genymotion to jedno z najbardziej zaawansowanych narzędzi do emulacji urządzeń mobilnych podczas tworzenia aplikacji na system Android. Umożliwia symulowanie działania aplikacji na różnych urządzeniach i wersjach systemu Android, co pozwala programistom na testowanie kompatybilności i wydajności aplikacji w różnych warunkach. Genymotion oferuje szybkie emulowanie, obsługę GPS, kamery oraz czujników, co czyni go niezwykle przydatnym narzędziem w procesie rozwoju aplikacji mobilnych. Dzięki wsparciu dla integracji z Android Studio, Genymotion jest popularnym wyborem wśród deweloperów tworzących aplikacje na platformę Android.

Pytanie 18

Jakie znaczenie ma pojęcie "debugowanie" w kontekście programowania?

A. Tworzenie nowych funkcjonalności aplikacji
B. Wyszukiwanie i usuwanie błędów w kodzie
C. Wdrażanie aplikacji w środowisku produkcyjnym
D. Przygotowywanie dokumentacji kodu
Debugowanie to proces wyszukiwania i eliminowania błędów (bugów) w kodzie źródłowym programu. Polega na analizowaniu działania aplikacji linia po linii, śledzeniu wartości zmiennych, analizie stosu wywołań i wykrywaniu miejsc, w których program działa niezgodnie z oczekiwaniami. Debugowanie umożliwia programistom szybkie odnajdywanie błędów logicznych, składniowych oraz problemów z wydajnością aplikacji. Narzędzia takie jak Visual Studio, PyCharm, IntelliJ IDEA czy Chrome DevTools oferują zaawansowane funkcje debugowania, takie jak punkty przerwań (breakpoints), krokowe wykonywanie kodu i podgląd pamięci. Proces debugowania jest kluczowy w każdym etapie rozwoju oprogramowania, ponieważ znacząco wpływa na stabilność i jakość finalnego produktu.

Pytanie 19

Wskaż odpowiedź, która używa parafrazowania jako metodę aktywnego słuchania, gdy klient mówi: "Interesuje mnie aplikacja, która działa szybko, niezależnie od tego, czy korzysta z niej kilku czy tysiąc użytkowników"?

A. Ilu użytkowników planuje z niej skorzystać?
B. Czuję pewne wątpliwości w Pani głosie. Czy mogę zadać kilka pytań?
C. Jeśli dobrze zrozumiałam, chodzi o aplikację, która efektywnie obsługuje różne obciążenia
D. Dlaczego Pani potrzebuje takiej aplikacji?
Parafraza to świetna technika, która pomaga zrozumieć, co rozmówca ma na myśli. Jak w tym przypadku – odpowiedź, która mówi: 'Jeśli dobrze rozumiem, chodzi o aplikację, która radzi sobie z różnym obciążeniem,' naprawdę dobrze oddaje to, co klient próbował przekazać. Klient podkreśla, że ważne jest dla niego, aby aplikacja była wydajna, niezależnie od tego, ile osób z niej korzysta. Użycie terminu 'radzi sobie z obciążeniem' jest trafne, bo dotyczy zdolności systemu do przystosowywania się do zmieniającej się liczby użytkowników i ich aktywności. To pokazuje, że konsultant dobrze zrozumiał potrzeby klienta i otwiera możliwości do dalszej rozmowy o technicznych detalach aplikacji, a to jest kluczowe w sprzedaży i budowaniu dobrych relacji z klientem.

Pytanie 20

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

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

Pytanie 21

Zamieszczony kawałek kodu w języku C# tworzy hasło. Wskaż prawdziwe stwierdzenie dotyczące cech tego hasła?

var random = new Random();
string pulaZnakow =
    "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
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. Ma maksymalną długość 7 znaków, co ustala zmienna i.
B. Może zawierać małe i wielkie litery oraz cyfry.
C. Może zawierać małe oraz wielkie litery, cyfry i znaki specjalne.
D. Ma 8 znaków lub więcej i zawiera małe oraz wielkie litery, a także cyfry.
Fragment programu w języku C# generuje hasło, które zawiera małe i wielkie litery oraz cyfry. W kodzie widzimy, że zmienna pulaZnakow zawiera wszystkie małe litery alfabetu, wszystkie wielkie litery oraz cyfry od 0 do 9. Zmienna dlPuli przechowuje długość ciągu znaków, co umożliwia losowe wybieranie znaków z pełnego zakresu dostępnych znaków. W pętli for odbywa się iteracja 8 razy, co oznacza, że każde generowane hasło ma długość 8 znaków. Każdy znak jest losowo wybierany z puli, co zapewnia różnorodność i brak uprzedzeń w doborze znaków. Warto również zwrócić uwagę na praktyczne użycie klasy Random, która jest standardem w przypadkowej generacji danych w C#. Takie podejście jest zgodne z najlepszymi praktykami, gdzie hasła powinny mieć różnorodne znaki, co zwiększa ich siłę i trudność złamania. Dobrym pomysłem jest również dodanie symboli specjalnych dla jeszcze większego bezpieczeństwa, co można łatwo zaimplementować modyfikując pule dostępnych znaków.

Pytanie 22

Która metoda wyszukiwania potrzebuje posortowanej listy do prawidłowego działania?

A. Wyszukiwanie sekwencyjne
B. Wyszukiwanie liniowe
C. Wyszukiwanie z hashem
D. Wyszukiwanie binarne
Wyszukiwanie binarne wymaga posortowanej tablicy do działania, co pozwala na dzielenie tablicy na pół przy każdym kroku, redukując liczbę operacji do O(log n). Algorytm ten działa poprzez porównanie poszukiwanego elementu ze środkowym elementem tablicy – jeśli element jest mniejszy, wyszukiwanie kontynuuje w lewej części tablicy, a jeśli większy, w prawej. Dzięki tej efektywności, wyszukiwanie binarne jest szeroko stosowane w bazach danych, systemach plików oraz aplikacjach, które operują na dużych zbiorach danych. Wyszukiwanie binarne jest prostym, ale potężnym algorytmem, który znacząco skraca czas przeszukiwania dużych zbiorów.

Pytanie 23

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 24

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

Definicja typu:

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

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

Kod React.js:
<ul>
    {this.books.map(book => <li key={book}> book </li>)}
</ul>
A. Taką liczbę elementów, ile znajduje się w tablicy books; w każdym punkcie listy umieszczony jest jeden element tablicy.
B. Jedynie jeden element o treści Harry Potter.
C. Tyle elementów, ile znajduje się w tablicy books; w każdym punkcie listy widnieje element o treści {book}.
D. Wyłącznie jeden element o treści Harry Potter, Hobbit, Władca pierścieni.
W pytaniu chodziło o bardzo fundamentalny mechanizm w nowoczesnych frameworkach frontendowych: dynamiczne generowanie elementów listy na podstawie danych z tablicy. Częstym błędem jest doszukiwanie się w kodzie magicznych wartości lub mylenie sposobu działania szablonów z faktycznym efektem końcowym. Przykładowo, jeśli ktoś uzna, że pojawi się jeden element z wypisaną całą tablicą jako tekst, to prawdopodobnie nie rozumie, że każda iteracja *ngFor (w Angularze) czy metoda map (w React.js) generuje fizycznie osobny <li> dla każdego wpisu. To nie jest jedno pole tekstowe, ale wiele autonomicznych elementów. Kolejna rzecz to myślenie, że pojawi się tylko pierwszy element – takie podejście wynika często z niezrozumienia zasady działania pętli w szablonach, gdzie proces rozpoczyna się dla każdego elementu po kolei. Często też myli się składnię Reacta i widzi w niej coś na kształt szablonu z placeholderem {book}, zapominając, że to wyrażenie jest oceniane w JavaScript i renderuje konkretną wartość, a nie dosłowny napis z nawiasami klamrowymi. Moim zdaniem to jeden z najpopularniejszych błędów – traktowanie składni szablonów lub JSX zbyt dosłownie, bez zrozumienia, że to dynamiczne narzędzia. Warto pamiętać, że we współczesnych aplikacjach webowych takie podejście jest normą: nie piszesz ręcznie każdego <li>, tylko generujesz je ze źródła danych. Pominięcie tego mechanizmu prowadzi do kodu nieelastycznego, trudnego w utrzymaniu i skalowaniu. Z doświadczenia wiem, że zrozumienie tej zasady znacznie przyspiesza naukę zarówno Angulara, jak i Reacta, bo ten wzorzec powtarza się praktycznie wszędzie tam, gdzie masz do czynienia z kolekcjami danych i ich wizualizacją w interfejsie użytkownika.

Pytanie 25

Jakie znaczenie ma termin "przesłanianie metody" w kontekście programowania obiektowego?

A. Przenoszenie metod z jednej klasy do drugiej
B. Tworzenie nowej metody w klasie bazowej
C. Zastosowanie tej samej nazwy metody w klasie bazowej i pochodnej, ale z inną implementacją w klasie pochodnej
D. Zmiana metody prywatnej na metodę publiczną
Przesłanianie metody to mechanizm, w którym metoda w klasie pochodnej ma taką samą nazwę, typ zwracany i listę parametrów jak metoda w klasie bazowej, ale zawiera inną implementację. To kluczowy element polimorfizmu, umożliwiający dostosowanie zachowania klasy pochodnej do jej specyficznych potrzeb, przy zachowaniu spójnego interfejsu. Przesłanianie metod pozwala na elastyczne projektowanie kodu i jest szeroko stosowane w dużych projektach, aby umożliwić rozszerzalność oraz ponowne wykorzystanie istniejącej logiki. W C++ przesłanianie osiąga się za pomocą słowa kluczowego 'virtual' w klasie bazowej, a następnie redefinicji metody w klasie pochodnej.

Pytanie 26

Wykorzystanie typu DECIMAL w MySQL wymaga wcześniejszego określenia długości (liczby cyfr) przed oraz po przecinku. Jak należy to zapisać?

A. łańcuchowy
B. zmiennoprzecinkowy
C. logiczny
D. stałoprzecinkowy
Typ łańcuchowy w MySQL odnosi się do przechowywania danych tekstowych, takich jak VARCHAR czy CHAR, które są używane do przechowywania łańcuchów znaków. W przeciwieństwie do typu DECIMAL, nie ma on zastosowania do reprezentacji wartości numerycznych, co sprawia, że nie nadaje się do obliczeń matematycznych wymagających precyzji. Typ zmiennoprzecinkowy (FLOAT, DOUBLE) z kolei jest używany do przechowywania liczb, które mogą obejmować wartości z przecinkiem dziesiętnym, ale mogą cierpieć na problemy z precyzją, ponieważ są reprezentowane w formie binarnej. Ze względu na sposób przechowywania, liczby zmiennoprzecinkowe mogą prowadzić do niezamierzonych błędów zaokrągleń, co czyni je mniej odpowiednimi w kontekście finansowym. Typ logiczny (BOOLEAN) ma na celu przechowywanie wartości prawda/fałsz i nie jest dostosowany do przechowywania wartości liczbowych. Podsumowując, wszystkie trzy wymienione typy są nieodpowiednie do przechowywania liczb dziesiętnych z określoną precyzją, co stanowi kluczową cechę typu DECIMAL, który oferuje większą kontrolę nad dokładnością obliczeń.

Pytanie 27

W języku C++, zakładając, że przedstawiony fragment kodu poprawnie się skompiluje i zostanie wykonany, to zmiennej liczba przypisana zostanie wartość:

int liczba = rand() % 1000;
A. pseudolosowa nie większa niż 999
B. równa 1000
C. dowolna pseudolosowa z przedziału typu int
D. rzeczywista podzielna przez 1000
Linia kodu int liczba = rand() % 1000; w języku C++ używa funkcji rand() do generowania liczby pseudolosowej. Funkcja ta zwraca liczbę całkowitą z zakresu od 0 do RAND_MAX zdefiniowanego w standardowej bibliotece C++. Obliczenie rand() % 1000 wykonuje operację modulo na wygenerowanej liczbie, co oznacza, że wynik zawsze będzie liczbą z zakresu od 0 do 999. Jest to powszechna technika używana do ograniczenia zakresu wartości zwracanych przez funkcję rand() do konkretnego przedziału. Takie podejście jest często wykorzystywane do generowania pseudolosowych wartości całkowitych w określonym zakresie, co jest przydatne w wielu zastosowaniach, od prostych programów testowych po bardziej złożone aplikacje symulacyjne. Należy pamiętać, że funkcja rand() generuje liczby pseudolosowe, co oznacza, że sekwencja liczb będzie się powtarzać przy każdym uruchomieniu programu, chyba że zostanie zainicjowana za pomocą funkcji srand() z unikalnym ziarnem. Jest to zgodne z dobrymi praktykami, aby zapewnić różnorodność w generowanych liczbach pseudolosowych, zwłaszcza w kontekście testowania i symulacji komputerowych.

Pytanie 28

Przedstawiony fragment dotyczy funkcji resize w języku C++. Ta funkcja obniży długość elementu string, gdy wartość parametru

Resize string
Resizes the string to a length of n characters.

If n is smaller than the current string length, the current value is shortened to its first n character, removing the characters beyond the nth.

If n is greater than the current string length, the current content is extended by inserting at the end as many characters as needed to reach a size of n. If c is specified, the new elements are initialized as copies of c; otherwise, they are value-initialized characters (null characters).

Parameters
n
New string length, expressed in number of characters.
size_t is an unsigned integral type (the same as member type string::size_type).
c
Character used to fill the new character space added to the string (in case the string is expanded).
Źródło: http://www.cplusplus.com/reference/string/string/resize/
A. c jest mniejsza od aktualnej długości łańcucha
B. n jest mniejsza od aktualnej długości łańcucha
C. n jest większa od aktualnej długości łańcucha
D. c jest większa od aktualnej długości łańcucha
To jest dokładnie to, o co chodzi w funkcji resize dla std::string w C++. Jeśli podany parametr n jest mniejszy od aktualnej długości łańcucha, to obcinamy stringa do tych właśnie n znaków – reszta znika bezpowrotnie. Moim zdaniem to bardzo wygodne, bo nie trzeba ręcznie wycinać fragmentu czy bawić się w operacje na podłańcuchach. Praktycznie rzecz biorąc, można dzięki temu szybko skrócić dane wejściowe, np. gdy pobieramy z pliku długi tekst, a potrzebujemy tylko jego fragment do dalszego przetwarzania. W branży często się to przydaje – na przykład ograniczając długość nicku użytkownika do określonej liczby znaków lub przytrzymując długość serializowanych danych w protokołach sieciowych. Resize działa wprost i zgodnie ze standardem C++, usuwając znaki od indeksu n wzwyż. Co ciekawe, metoda nie tylko skraca, ale też rozszerza string – wtedy wypełnia go nowymi znakami (np. 'x' czy znakiem pustym), ale to właśnie skracanie jest często pomijane przez początkujących, a jest naprawdę przydatne. No i trzeba pamiętać, że oryginalne znaki spoza zakresu po prostu znikają – nie ma żadnych ostrzeżeń. Z mojego doświadczenia to jedna z tych funkcji, do których z czasem nabiera się szacunku – bo ułatwia życie na co dzień przy operacjach na łańcuchach znaków.

Pytanie 29

Z jakiego obiektu można skorzystać, aby stworzyć kontrolkę wskazaną strzałką na ilustracji?

Ilustracja do pytania
A. Windows - dla biblioteki WPF; JFrame - dla biblioteki Swing
B. Text - dla biblioteki WPF; JText - dla biblioteki Swing
C. Box - dla biblioteki WPF; JField - dla biblioteki Swing
D. TextBox - dla biblioteki WPF; JTextField - dla biblioteki Swing
Wybrałeś dokładnie to, co w praktyce programisty jest najważniejsze, czyli TextBox dla WPF i JTextField dla Swinga. Te dwa komponenty to absolutna podstawa, jeśli chodzi o pola do wprowadzania tekstu, zarówno w aplikacjach .NET, jak i Java. W WPF TextBox pozwala na przyjmowanie danych od użytkownika, obsługę zdarzeń, walidację, formatowanie tekstu – ogólnie wszystko, co potrzeba do pracy z tekstem w GUI. W Swingu JTextField jest odpowiednikiem, bardzo intuicyjnym i prostym w użyciu, świetnie się sprawdza przy prostych formularzach czy interfejsach użytkownika. Co ciekawe, oba te komponenty są bardzo elastyczne, można je stylizować, podłączać do systemów walidacji czy nawet rozbudowywać o własne mechanizmy autouzupełniania. Spotkałem się wielokrotnie z sytuacją, gdzie poprawne zastosowanie TextBoxa lub JTextFielda znacząco podnosiło jakość aplikacji – bo jednak wygoda użytkownika i poprawność danych są kluczowe. Takie wybory są zgodne z dokumentacją Microsoftu oraz Oracla, więc trzymasz się dobrych praktyk. Z mojej perspektywy, jeśli chcesz pisać nowoczesne, użytkowe aplikacje desktopowe, znajomość tych kontrolek to absolutny must-have.

Pytanie 30

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

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

Pytanie 31

Prezentowana metoda jest realizacją algorytmu

public static String fun1(String str) {
    String output = " ";
    for (var i = (str.length()-1); i >= 0; i--)
        output += str.charAt(i);
    return output;
}
A. sprawdzającego, czy dany ciąg jest palindromem
B. wyszukującego literę w ciągu
C. odwracającego ciąg
D. sortującego ciąg od znaku o najniższym kodzie ASCII do znaku o najwyższym kodzie
W tym zadaniu chodziło o rozpoznanie, co właściwie robi metoda fun1. Jeśli przeanalizujesz kod, to widać, że w pętli for program przechodzi przez wszystkie znaki wejściowego łańcucha od końca do początku i dokleja je do zmiennej output. Efekt? Zwracany napis jest po prostu oryginalnym tekstem zapisanym wspak, czyli odwróconym. To bardzo prosty przykład algorytmu odwracania ciągu znaków. W praktyce takie rozwiązania przydają się choćby wtedy, gdy chcemy sprawdzić, czy łańcuch jest palindromem (choć samo odwracanie to tylko pierwszy krok), przy szyfrowaniu prostymi metodami czy podczas manipulacji danymi wejściowymi, na przykład w edytorach tekstu lub różnych parserach. Moim zdaniem, warto pamiętać o dobrych praktykach – w Javie, jeśli masz do czynienia z wieloma operacjami na napisach, lepiej używać StringBuildera zamiast tworzyć nowe Stringi, bo jest to wydajniejsze pod kątem zarządzania pamięcią. Dla ciekawych: w bibliotekach standardowych Javy już istnieją gotowe narzędzia do odwracania ciągów (np. StringBuilder.reverse()), ale znajomość działania takiego algorytmu pozwala lepiej zrozumieć, jak działają operacje na napisach "pod spodem". Z mojego doświadczenia, umiejętność samodzielnego napisania takich prostych funkcji bardzo pomaga przy nauce bardziej zaawansowanych algorytmów tekstowych oraz rozwija wyobraźnię programistyczną.

Pytanie 32

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

A. document.ready
B. window.render
C. page.complete
D. window.onload
Odpowiedź "window.onload" jest poprawna, ponieważ zdarzenie to jest wywoływane, gdy cała strona, w tym wszystkie obrazy, skrypty i style, zostały całkowicie załadowane. Jest to niezwykle istotne w kontekście programowania w JavaScript, ponieważ pozwala na pewność, że wszystkie zasoby są dostępne, zanim podejmiemy jakiekolwiek działania na elementach DOM. Przykładowo, jeśli chcemy zmienić zawartość elementu na stronie lub dodać do niej interaktywne funkcje, musimy upewnić się, że cały dokument jest już w pełni załadowany. Dobrym przykładem zastosowania jest sytuacja, kiedy po załadowaniu strony chcemy zainicjować jakieś skrypty, które manipulują elementami DOM, na przykład dodanie zdarzeń do przycisków lub animacji. Współczesne standardy wskazują na stosowanie tego zdarzenia w połączeniu z innymi metodami, jak np. "DOMContentLoaded", co pozwala na bardziej efektywne zarządzanie ładowaniem zasobów. Warto zaznaczyć, że chociaż "window.onload" jest użyteczne, w wielu nowoczesnych aplikacjach front-end używa się frameworków, które mogą oferować bardziej zaawansowane mechanizmy zarządzania cyklem życia aplikacji.

Pytanie 33

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 34

Który z wymienionych aktów prawnych odnosi się do ochrony danych osobowych w krajach Unii Europejskiej?

A. Open Source Initiative
B. Creative Commons
C. GDPR (RODO)
D. DMCA
GDPR (RODO) to akt prawny dotyczący ochrony danych osobowych w Unii Europejskiej. Wprowadza on jednolite zasady przetwarzania danych, zwiększając ochronę prywatności obywateli. RODO daje użytkownikom prawo do dostępu do swoich danych, ich poprawiania, a także żądania ich usunięcia (prawo do bycia zapomnianym). Firmy muszą transparentnie informować o celach przetwarzania danych oraz zapewniać odpowiedni poziom zabezpieczeń. Niezastosowanie się do przepisów RODO skutkuje wysokimi karami finansowymi.

Pytanie 35

Który z paradygmatów programowania najbardziej akcentuje dziedziczenie oraz polimorfizm?

A. Programowanie obiektowe
B. Programowanie funkcyjne
C. Programowanie strukturalne
D. Programowanie proceduralne
Programowanie obiektowe (OOP) to paradygmat, który kładzie największy nacisk na dziedziczenie i polimorfizm. Dziedziczenie pozwala na tworzenie nowych klas na podstawie już istniejących, co umożliwia ponowne wykorzystanie kodu i jego rozszerzanie. Polimorfizm umożliwia definiowanie metod o tej samej nazwie, ale z różnym zachowaniem w zależności od kontekstu lub obiektu, co zwiększa elastyczność i modularność kodu. Programowanie obiektowe jest szeroko stosowane w językach takich jak Java, C++, Python czy C#, ponieważ pozwala na budowanie skalowalnych i łatwych w utrzymaniu aplikacji.

Pytanie 36

Algorytm zaprezentowany w zadaniu można zrealizować w języku Java wykorzystując instrukcję

Ilustracja do pytania
A. try
B. if
C. switch
D. while
Pętla while w języku Java jest idealna do implementacji algorytmów, które wymagają wielokrotnego wykonywania bloku kodu dopóki określony warunek logiczny pozostaje prawdziwy. W przedstawionym schemacie blokowym widzimy iteracyjny proces, który zaczyna się od przypisania wartości 2 do zmiennej number, a następnie kontynuuje dodawanie 2 do tej zmiennej tak długo, jak długo jej wartość nie osiągnie 10. Struktura ta jest typowym przykładem problemu, który najlepiej rozwiązać za pomocą pętli while. Wyrażenie warunkowe number != 10 jest sprawdzane przed każdą iteracją pętli, co umożliwia zakończenie pętli w momencie, gdy warunek przestaje być prawdziwy. To podejście jest zgodne z dobrymi praktykami programistycznymi, które zalecają minimalizowanie niepotrzebnych obliczeń i zwiększanie czytelności kodu. Pętle while są często stosowane w sytuacjach, gdy liczba iteracji nie jest z góry znana i zależy od dynamicznie zmieniających się warunków, co czyni je wszechstronnym narzędziem w wielu aplikacjach, od przetwarzania danych po kontrolę przepływu w symulacjach komputerowych. Praktyczna znajomość pętli pozwala na efektywne rozwiązywanie problemów w złożonych projektach informatycznych.

Pytanie 37

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

A. Django
B. Angular
C. React
D. Vue.js
Django to framework zaprojektowany do budowy aplikacji webowych w języku Python, a zatem nie jest związany z JavaScriptem. Jego głównym celem jest uproszczenie procesu tworzenia w pełni funkcjonalnych aplikacji, co osiąga poprzez zestaw gotowych komponentów, takich jak system zarządzania bazą danych, mechanizmy autoryzacji oraz łatwe zarządzanie szablonami. Przykładem zastosowania Django może być rozwój serwisów e-commerce, gdzie framework ten wspiera szybkie i bezpieczne tworzenie skomplikowanej logiki aplikacji oraz zapewnia możliwość łatwego skalowania. Użycie Django w projektach, w których istotne są bezpieczeństwo i szybkość developmentu, stało się standardem w branży. W kontekście rozwoju aplikacji webowych, znajomość różnych frameworków, w tym Django, jest kluczowa dla programistów, którzy chcą być elastyczni i efektywni w tworzeniu rozwiązań backendowych."

Pytanie 38

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

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

Pytanie 39

Który z poniższych formatów plików jest używany do konfiguracji projektów Node.js?

A. config.xml
B. package.json
C. node.config
D. settings.ini
Odpowiedź 'package.json' jest prawidłowa, ponieważ jest to kluczowy plik konfiguracyjny w projektach Node.js. Zawiera on metadane dotyczące projektu, takie jak nazwa, wersja, autorzy, zależności oraz skrypty do uruchamiania różnych zadań związanych z projektem. Na przykład, sekcja 'dependencies' w tym pliku pozwala na zdefiniowanie zewnętrznych bibliotek, które są wymagane do działania aplikacji. Gdy użytkownik uruchamia polecenie 'npm install', system automatycznie instaluje wszystkie zależności określone w 'package.json'. Dodatkowo, plik ten pozwala na łatwe zarządzanie wersjami i aktualizacjami, co jest zgodne z dobrymi praktykami w zarządzaniu projektami oprogramowania, zapewniając lepszą kontrolę nad środowiskiem deweloperskim. Użycie 'package.json' jest standardem w ekosystemie Node.js, co czyni go niezbędnym dla każdego dewelopera pracującego w tym środowisku.

Pytanie 40

Która z wymienionych bibliotek stanowi element standardowego zestawu narzędzi programistycznych w Pythonie?

A. <math.h>
B. sys
C. vector
D. <stdio.h>
Biblioteka `<math.h>` to standardowa biblioteka w języku C/C++, używana do wykonywania operacji matematycznych, ale nie jest częścią Pythona. Biblioteka `<stdio.h>` to biblioteka C, która umożliwia obsługę wejścia i wyjścia (I/O), ale również nie jest dostępna w Pythonie. `vector` to część standardowej biblioteki C++ (STL) i służy do obsługi dynamicznych tablic, ale nie jest elementem środowiska Python. Biblioteki te są związane z innymi językami programowania i nie mają zastosowania w Pythonie.