Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 12 czerwca 2026 07:38
  • Data zakończenia: 12 czerwca 2026 07:38

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Co oznacza skrót CSRF w kontekście bezpieczeństwa aplikacji webowych?

A. Cascading Style Rendering Form
B. Cross-Site Request Forgery
C. Cross-Site Response Filter
D. Client-Side Rendering Framework

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CSRF, czyli Cross-Site Request Forgery, to typ ataku, który wykorzystuje zaufanie użytkownika do witryny internetowej. Atakujący może skłonić ofiarę do wysłania niezamierzonego żądania do innej witryny, na przykład za pomocą osadzonego linku w e-mailu lub w złośliwej stronie. W ten sposób można wykonać nieautoryzowane akcje, takie jak zmiana ustawień konta, przelewy finansowe czy inne działania, które powinny być chronione. Aby zabezpieczyć aplikacje przed tym rodzajem ataku, stosuje się różne techniki, takie jak tokeny CSRF, które są weryfikowane przy każdym żądaniu. W praktyce oznacza to, że aplikacja generuje unikalny token dla każdej sesji użytkownika, a ten token musi być dołączony do każdego żądania modyfikującego dane. Warto pamiętać o tym, że nie tylko same aplikacje, ale i przeglądarki muszą mieć odpowiednią konfigurację, aby skutecznie zapobiegać tego typu atakom, co jest zgodne z najlepszymi praktykami bezpieczeństwa w branży. Znajomość CSRF jest kluczowa dla każdego programisty czy specjalisty ds. bezpieczeństwa, ponieważ pozwala na skuteczne zabezpieczanie aplikacji webowych i chronienie danych użytkowników.

Pytanie 2

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(n2)
B. O(n)
C. O(1)
D. O(n log n)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 3

Jaki rodzaj ataku hakerskiego polega na bombardowaniu serwera ogromną ilością żądań, co prowadzi do jego przeciążenia?

A. DDoS
B. Phishing
C. SQL Injection
D. Man-in-the-Middle

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Atak DDoS (Distributed Denial of Service) polega na zasypywaniu serwera dużą ilością zapytań, co prowadzi do jego przeciążenia i unieruchomienia. W tym rodzaju ataku, hakerzy wykorzystują sieć skompromitowanych komputerów, znanych jako botnety, aby wysłać ogromne ilości nieautoryzowanych żądań do docelowego serwera w krótkim czasie. Celem DDoS jest spowodowanie, że serwer nie jest w stanie odpowiedzieć na prawidłowe zapytania od autentycznych użytkowników, co skutkuje awarią usługi. Przykłady ataków DDoS obejmują SYN Flood, UDP Flood oraz HTTP Flood, gdzie każdy z tych typów wykorzystuje różne protokoły i metody do zablokowania normalnego ruchu. Standardy takie jak RFC 793 definiują protokół TCP, który może być narażony na ataki SYN Flood. Ważne jest, aby organizacje stosowały odpowiednie środki zabezpieczające, takie jak systemy detekcji intruzów (IDS), firewalle, oraz usługi ochrony DDoS, aby minimalizować ryzyko i skutki tych ataków.

Pytanie 4

W aplikacji mobilnej, aby określić warianty grafiki w zależności od wielkości ekranu, należy (uwaga: odpowiedzi wariantowe dla dwóch systemów - sugerować się systemem omawianym na zajęciach)

A. iOS: utworzyć katalogi hdpi, lhpi, xhpi i dodać do nich grafiki. Android: utworzyć katalogi 32x32, 64x64, 96x96 i dodać do nich grafiki
B. iOS: dodać do nazw plików sufiksy @2x, @3x. Android: umieścić grafikę w odpowiednich folderach drawable: -hdpi, -xhpi, xxhdpi
C. iOS: dodać do nazw sufiksy oznaczające rozdzielczość, np. 32ppi. Android: umieścić grafikę w odpowiednich katalogach: 32ppi, 64ppi, 96ppi
D. iOS: dodać do nazw sufiksy #2x, #3x. Android: dodać do nazw sufiks rozdzielczości: -32x32, -64x64, -96x96

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kiedy chcemy, żeby grafiki w aplikacjach mobilnych wyglądały dobrze na różnych ekranach, musimy zastosować odpowiednie strategie, które zależą od platformy. Na iOS używa się przyrostków @2x lub @3x, co oznacza, że grafiki są przygotowane dla ekranów Retina, które mają wyższą gęstość pikseli. Na Androidzie z kolei, grafiki umieszcza się w folderach drawable z takimi nazwami jak -hdpi, -xhdpi czy -xxhdpi. Dzięki temu system wie, jaką wersję grafiki wybrać w zależności od rozdzielczości urządzenia. Moim zdaniem, taki system pozwala na super jakość obrazów i lepszą wydajność aplikacji.

Pytanie 5

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

A. GET
B. POST
C. SEARCH
D. DELETE

Brak odpowiedzi na to pytanie.

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

Pytanie 6

Jaką komendę w języku C++ używa się do wielokrotnego uruchamiania tego samego bloku kodu?

A. while
B. switch
C. if
D. break

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Instrukcja `while` w języku C++ i innych językach programowania pozwala na wielokrotne wykonanie tego samego fragmentu kodu, dopóki warunek logiczny jest spełniony. Przykład: `while (x < 10) { x++; }` będzie zwiększać zmienną `x` o 1, dopóki jej wartość nie osiągnie 10. Pętle `while` są przydatne, gdy liczba iteracji nie jest z góry znana i zależy od spełnienia określonego warunku w trakcie wykonywania programu.

Pytanie 7

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

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 8

Programista pragnie wybrać algorytm, który najszybciej przetwarza dane w jego aplikacji. Na podstawie złożoności obliczeniowej przedstawionej w tabeli, należy wskazać algorytm numer

Algorytm 1O(n²)
Algorytm 2O(n!)
Algorytm 3O(n³)
Algorytm 4O(n)
Algorytm 5O(n²)
A. 3
B. 4
C. 1 lub 5
D. 2 lub 3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybierając algorytm o najniższej złożoności obliczeniowej, zawsze warto patrzeć na oznaczenia w notacji dużego O. O(n) oznacza, że czas wykonywania algorytmu rośnie liniowo wraz z rozmiarem danych wejściowych. To zdecydowanie najlepszy wynik z dostępnych, szczególnie jeśli porównać do O(n²), O(n³) albo już totalnie niepraktycznego przy większych n: O(n!). Dlatego Algorytm 4, który ma złożoność O(n), to najrozsądniejszy wybór, jeśli zależy nam na szybkości działania programu. Z mojego doświadczenia, właśnie takie algorytmy są wykorzystywane np. do przetwarzania dużych zbiorów danych w aplikacjach webowych albo w sytuacjach, gdzie liczy się czas odpowiedzi dla użytkownika końcowego. W branży IT, jeśli tylko można zejść poniżej złożoności kwadratowej – raczej zawsze warto to zrobić. Oczywiście, sama złożoność to nie wszystko – czasem prostszy, liniowy algorytm może mieć duże stałe ukryte w implementacji, ale w praktyce O(n) to standard optymalny. Warto też pamiętać, że w rekrutacjach często padają pytania o takie porównania złożoności, bo to podstawowa wiedza każdego programisty. Takie podejście pozwala budować skalowalne systemy, które nie „duszą się” przy większej ilości danych. Moim zdaniem, to jedna z tych rzeczy, które naprawdę się przydają w codziennej pracy.

Pytanie 9

Co to jest CI/CD w kontekście rozwoju oprogramowania?

A. Customer Interface/Customer Design - projektowanie interfejsów zorientowane na klienta
B. Component Isolation/Component Deployment - izolacja i wdrażanie komponentów aplikacji
C. Ciągła integracja i ciągłe dostarczanie - praktyki automatyzujące proces wdrażania kodu
D. Code Implementation/Code Delivery - metodyka implementacji i dostarczania kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CI/CD, czyli ciągła integracja i ciągłe dostarczanie, to zbiór praktyk i narzędzi stosowanych w rozwoju oprogramowania w celu automatyzacji procesów budowy, testowania i wdrażania aplikacji. CI polega na regularnym integrowaniu kodu do wspólnego repozytorium, co pozwala na wczesne wykrywanie błędów i konfliktów. Umożliwia to zespołom deweloperskim wykrywanie problemów w kodzie na wczesnym etapie, co znacząco przyspiesza cykl rozwoju. CD natomiast odnosi się do automatyzacji procesu wdrażania aplikacji na środowiska produkcyjne, co minimalizuje czas potrzebny na dostarczenie nowych funkcji do użytkowników. Przykłady praktycznego zastosowania CI/CD obejmują użycie narzędzi takich jak Jenkins, GitLab CI, czy CircleCI, które umożliwiają automatyczne uruchamianie testów oraz wdrażanie aplikacji na różnych platformach. Dobre praktyki w CI/CD obejmują tworzenie małych i częstych aktualizacji, co pozwala na łatwiejsze zarządzanie projektami i szybsze reagowanie na potrzeby klientów.

Pytanie 10

Jakie zagrożenie związane z użytkowaniem cyberprzestrzeni ma wpływ na zdrowie fizyczne?

A. Depresja spowodowana cyberprzemocą
B. Uzależnienie od gier komputerowych
C. Rozpowszechnianie nieprawdziwych informacji
D. Problemy z kręgosłupem wynikające z długotrwałego siedzenia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Problemy z kręgosłupem wynikające z długotrwałego siedzenia to realne zagrożenie związane z użytkowaniem cyberprzestrzeni, które ewidentnie wpływa na zdrowie fizyczne. Dzisiaj, gdy większość naszej pracy, nauki czy rozrywki przenosi się do internetu, coraz częściej zapominamy o tym, że wielogodzinne siedzenie przed komputerem czy z telefonem w ręku odbija się na naszym ciele. Sam kiedyś miałem tak, że po kilku dniach intensywnej nauki online zaczęły mnie boleć plecy i kark. To typowy objaw, bo siedzenie w nieprawidłowej pozycji prowadzi do przeciążenia kręgosłupa, zwłaszcza w odcinku lędźwiowym i szyjnym. Branża IT już od lat podkreśla konieczność stosowania ergonomicznych stanowisk pracy – odpowiednie krzesło, wysokość monitora, przerwy co 45 minut. Standardy BHP bardzo mocno akcentują takie aspekty, zwłaszcza przy pracy zdalnej. Fajnie jest też stosować technikę 20-20-20, czyli co 20 minut patrzymy przez 20 sekund na coś oddalonego o 20 stóp, żeby dać odpocząć oczom i kręgosłupowi. Takie rzeczy naprawdę robią różnicę. Moim zdaniem, wielu ludzi lekceważy ten temat, a skutki siedzącego trybu życia mogą być odczuwalne już po kilku miesiącach. Warto więc od razu wyrobić sobie zdrowe nawyki – to inwestycja w siebie.

Pytanie 11

Jakie znaczenie ma poziom dostępności AAA w WCAG 2.0?

A. Najwyższy poziom dostępności
B. Dostosowanie tylko do użytkowników mobilnych
C. Średni standard dostępności
D. Najnizszy poziom dostępności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Poziom dostępności AAA w WCAG 2.0 oznacza najwyższy standard dostępności, który ma na celu zapewnienie, że treści internetowe są dostępne dla wszystkich użytkowników, w tym osób z różnymi rodzajami niepełnosprawności. WCAG, czyli Wytyczne dotyczące dostępności treści internetowych, są międzynarodowym standardem, który definiuje, jak tworzyć dostępne treści. Poziom AAA obejmuje wszystkie wytyczne z poziomów A i AA oraz dodatkowe wymagania, które są bardziej rygorystyczne. Przykładem może być konieczność zapewnienia alternatywnych opisów dla wszystkich mediów, w tym dla materiałów wideo i audio, a także użycie odpowiednich kontrastów kolorystycznych. W praktyce oznacza to, że strony internetowe muszą być projektowane z myślą o właściwej nawigacji, dostępnym oprogramowaniu czytającym oraz dostosowanych formatach tekstowych, które są łatwe do przetwarzania przez osoby z różnymi ograniczeniami. Wdrożenie poziomu AAA jest wyzwaniem, ale przyczynia się do bardziej inkluzywnego środowiska online.

Pytanie 12

W jaki sposób można załadować tylko komponent z biblioteki React?

A. import [ Component ] from 'react'
B. import React.Component from 'react'
C. import { Component } from 'react'
D. import Component from 'react'

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Użycie składni import { Component } from 'react' to zdecydowanie najczęściej spotykany i najbardziej rekomendowany sposób importowania tylko wybranego komponentu z biblioteki React. To tzw. import nazwany, czyli dokładnie wskazujesz, który kawałek kodu chcesz wyciągnąć z całego modułu. W praktyce, jest to bardzo czytelne i pozwala na jasne zarządzanie zależnościami w pliku. Moim zdaniem ma to ogromne znaczenie w większych projektach, bo łatwo potem znaleźć, które elementy są faktycznie wykorzystywane w danym pliku. Co ważne, taka technika importowania jest w pełni zgodna ze standardami ES6, właściwie każdy nowoczesny projekt front-endowy na tym bazuje. Przykład praktyczny: jeśli chcesz stworzyć klasowy komponent React, wystarczy napisać import { Component } from 'react', a potem class MyClass extends Component {...}. Jest to nieco bardziej eleganckie niż importowanie całego obiektu React (np. import React from 'react'), zwłaszcza jeśli nie potrzebujesz całej funkcjonalności. Dodatkowo, takie rozwiązanie może wpływać pozytywnie na bundlowanie kodu, bo nie ściągasz do projektu niepotrzebnych fragmentów biblioteki. Swoją drogą, coraz częściej widać, że programiści skupiają się na minimalizowaniu importów i czytelności kodu – właśnie przez wybór takich rozwiązań.

Pytanie 13

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

A. Protokół komunikacji między różnymi bazami danych
B. Metoda udostępniania API dla aplikacji mobilnych
C. Mechanizm bezpieczeństwa, który określa, które domeny mogą uzyskiwać dostęp do zasobów na serwerze
D. Technika optymalizacji ładowania zasobów statycznych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CORS, czyli Cross-Origin Resource Sharing, to mechanizm bezpieczeństwa stosowany w aplikacjach internetowych, który reguluje, które zewnętrzne domeny mają prawo uzyskiwać dostęp do zasobów na serwerze. Jest to szczególnie istotne w kontekście aplikacji klienckich działających w przeglądarkach, gdzie zapytania do różnych źródeł (tzw. cross-origin requests) mogą prowadzić do problemów z bezpieczeństwem, takich jak ataki typu CSRF (Cross-Site Request Forgery) czy XSS (Cross-Site Scripting). Przykładowo, jeśli aplikacja internetowa hostowana na domenie A próbuje uzyskać dane z API na domenie B, serwer na domenie B może poprzez nagłówki CORS określić, czy i jakie żądania od domeny A będą honorowane. Przy odpowiedniej konfiguracji, serwer może zezwolić na dostęp tylko dla zaufanych źródeł, co zapobiega nieautoryzowanym operacjom. W praktyce, stosowanie CORS przyczynia się do stworzenia bezpieczniejszych aplikacji webowych, zgodnych z aktualnymi standardami bezpieczeństwa w sieci, takimi jak W3C i OWASP.

Pytanie 14

Zestaw operatorów przedstawiony poniżej należy do kategorii operatorów:

*      /      ++      --      %
A. logicznymi
B. arytmetycznych
C. porównawczymi
D. przypisania

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Operatorzy tacy jak *, /, ++, -- czy % należą do grupy operatorów arytmetycznych, ponieważ służą bezpośrednio do wykonywania operacji matematycznych na liczbach. To właśnie dzięki nim programista może realizować podstawowe działania, takie jak mnożenie, dzielenie, inkrementacja, dekrementacja oraz obliczanie reszty z dzielenia. W praktyce codziennej, np. przy obliczeniach faktur, przetwarzaniu danych liczbowych czy algorytmach związanych z obliczaniem średnich, te operatory są wręcz niezastąpione. Moim zdaniem bez solidnego zrozumienia operatorów arytmetycznych trudno ruszyć dalej w programowaniu, bo pojawiają się niemal we wszystkich zadaniach, od najprostszych po najbardziej zaawansowane. Warto też pamiętać, że zgodnie ze standardami języków takich jak C++, Java czy Python, te operatory mają swoje określone priorytety i kolejność wykonywania, którą trzeba znać, żeby uniknąć błędów logicznych. Przykładowo, operator ++ jest często wykorzystywany w pętlach do zwiększania wartości liczników, a % pozwala sprawdzić parzystość liczby. Osobiście uważam, że nawet jeśli na początku wydają się proste, to ich niuanse, np. różnice między ++i a i++, potrafią zaskoczyć, szczególnie w bardziej złożonych wyrażeniach.

Pytanie 15

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

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

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

let dog = new Dog('Rex');
console.log(dog.speak());
A. undefined
B. Error: speak is not defined
C. Rex barks.
D. Rex makes a noise.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź "Rex barks." jest prawidłowa, ponieważ kod definiuje klasę Dog, która dziedziczy po klasie Animal. W klasie Animal mamy metodę speak(), która zwraca tekst wskazujący na dźwięk wydawany przez zwierzę. Kiedy tworzymy instancję klasy Dog, przekazujemy jej imię 'Rex'. Następnie, kiedy wywołujemy metodę speak() na obiekcie dog, zostaje użyta metoda zdefiniowana w klasie Dog, a nie ta z klasy Animal. To dlatego zwracany tekst to 'Rex barks.', co jest poprawnym i oczekiwanym wynikiem. Przykładowo, w praktycznych zastosowaniach, jeśli miałbyś różne klasy zwierząt, można by je zdefiniować w podobny sposób, gdzie każde zwierzę mogłoby mieć swoją unikalną implementację metody speak(), co wprowadza elastyczność i możliwości rozszerzalności w kodowaniu.

Pytanie 16

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

A. Trello
B. JIRA
C. Slack
D. Selenium

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Selenium to jedno z najpopularniejszych narzędzi do automatyzacji testów interfejsu użytkownika aplikacji webowych. Jest to otwartoźródłowe oprogramowanie, które umożliwia tworzenie skryptów testowych w różnych językach programowania, takich jak Java, C#, Python czy Ruby. Dzięki Selenium testerzy mogą symulować interakcje użytkownika z przeglądarką, takie jak klikanie przycisków, wypełnianie formularzy czy nawigacja po stronach. Co ważne, Selenium jest kompatybilne z wieloma przeglądarkami, w tym Chrome, Firefox i Safari, co pozwala na testowanie aplikacji w różnych środowiskach. Jest to narzędzie szeroko stosowane w branży IT, zwłaszcza w ramach podejścia ciągłej integracji i dostarczania (CI/CD), gdzie automatyzacja testów jest kluczowym elementem zapewniającym szybkie i niezawodne dostarczanie oprogramowania. Dodatkowo, Selenium WebDriver, jako część tej rodziny narzędzi, umożliwia bezpośrednią komunikację z przeglądarką, co zwiększa jego efektywność i precyzję w porównaniu do starszych wersji Selenium.

Pytanie 17

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

A. Ograniczenie dostępu do pól klasy poprzez modyfikatory dostępu
B. Tworzenie klasy abstrakcyjnej
C. Wykorzystanie klasy nadrzędnej w innej klasie
D. Tworzenie wielu metod o tej samej nazwie w różnych klasach

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Hermetyzacja (ang. encapsulation) to mechanizm programowania obiektowego, który polega na ukrywaniu wewnętrznych danych obiektu oraz udostępnianiu dostępu do nich tylko za pośrednictwem metod publicznych (gettery i settery). Dzięki hermetyzacji dane klasy są chronione przed bezpośrednią modyfikacją, co zwiększa bezpieczeństwo i stabilność kodu. Przykład w C++: `class Konto { private: double saldo; public: void wplata(double kwota) { saldo += kwota; } }` – saldo jest polem prywatnym, które można modyfikować tylko poprzez metody publiczne, co zapobiega nieautoryzowanemu dostępowi.

Pytanie 18

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

Ilustracja do pytania
A. TextBox - dla biblioteki WPF; JTextField - dla biblioteki Swing
B. Text - dla biblioteki WPF; JText - dla biblioteki Swing
C. Windows - dla biblioteki WPF; JFrame - dla biblioteki Swing
D. Box - dla biblioteki WPF; JField - dla biblioteki Swing

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 19

W jakiej okoliczności należy umieścić poszkodowanego w pozycji bezpiecznej?

A. Gdy poszkodowany jest świadomy, lecz ma uraz kończyny
B. Gdy poszkodowany jest nieprzytomny, ale oddycha
C. Gdy poszkodowany nie oddycha
D. Gdy poszkodowany cierpi na krwotok zewnętrzny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pozycja bezpieczna (czyli pozycja boczna ustalona) to jedno z kluczowych narzędzi w udzielaniu pierwszej pomocy. Stosuje się ją wtedy, gdy poszkodowany jest nieprzytomny, ale oddycha samodzielnie i nie ma podejrzenia urazu kręgosłupa. Chodzi przede wszystkim o zabezpieczenie dróg oddechowych przed ewentualnym zadławieniem np. przez ślinę, krew czy wymiociny. Niby proste, ale w praktyce często ludzie mają wątpliwości, czy powinni ruszać nieprzytomną osobę. Ja sam widziałem jak ktoś bał się tego zrobić, bo nie był pewny, czy to bezpieczne. Moim zdaniem lepiej tu działać niż zwlekać – oczywiście, jeśli nie podejrzewasz złamania kręgosłupa. Ważne jest, by pozycję bezpieczną stosować dopiero po sprawdzeniu oddechu – to naprawdę podstawa i tak uczą na wszystkich szkoleniach BLS według standardów Europejskiej Rady Resuscytacji. Przykład z życia: ktoś zasłabł na przystanku, jest nieprzytomny, ale oddycha. Przekręcasz go na bok, głowa odchylona, żeby język nie zablokował gardła – i masz spokój, dużo zmniejszone ryzyko uduszenia. Warto też pamiętać, że trzeba regularnie monitorować stan poszkodowanego, bo sytuacja może się pogorszyć, wtedy przechodzisz do resuscytacji. Pozycja bezpieczna to taki złoty środek kiedy nie musisz jeszcze reanimować, ale musisz chronić życie przez zabezpieczenie oddechu.

Pytanie 20

Który z objawów może sugerować zawał serca?

A. Spadek nastroju
B. Intensywny ból w klatce piersiowej promieniujący do lewej ręki
C. Gorączka oraz dreszcze
D. Ból brzucha po spożyciu posiłku

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Silny ból w klatce piersiowej promieniujący do lewej ręki to klasyczny objaw zawału serca (ostrego zespołu wieńcowego). Ból ten często pojawia się nagle, jest intensywny, gniotący lub piekący i może towarzyszyć mu duszność, zawroty głowy, zimne poty i nudności. Zawał serca wynika z zablokowania jednej z tętnic wieńcowych, co prowadzi do niedokrwienia mięśnia sercowego. Szybka reakcja i wezwanie pomocy medycznej mogą uratować życie i zminimalizować uszkodzenia serca. Każda minuta jest kluczowa – nie należy czekać na ustąpienie objawów, lecz natychmiast zadzwonić na numer alarmowy 112 lub udać się do najbliższego szpitala.

Pytanie 21

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

A. Narzędzie do zarządzania bazami danych
B. Android Studio Layout Editor
C. Kompilator Javy
D. PyCharm Debugger

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 22

Z analizy złożoności obliczeniowej różnych algorytmów sortowania na dużych zbiorach danych (przekraczających 100 elementów) wynika, że najefektywniejszą metodą jest algorytm sortowania

sortowanie bąbelkoweO(n²)
sortowanie przez wstawianieO(n²)
sortowanie przez scalanieO(n log n)
sortowanie przez zliczanieO(n)
sortowanie kubełkoweO(n²)
A. przez scalanie
B. przez zliczanie
C. bąbelkowego
D. kubełkowego

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie przez zliczanie jest jedną z najszybszych metod sortowania w przypadku określonych typów danych wejściowych. W szczególności działa ono efektywnie, gdy znamy ograniczenia co do zakresu wartości w zbiorze danych, ponieważ jego złożoność obliczeniowa wynosi O(n+k), gdzie n to liczba elementów do posortowania, a k to zakres wartości. Dzięki temu, w przeciwieństwie do metod sortowania porównawczego, takich jak sortowanie przez scalanie czy bąbelkowe, sortowanie przez zliczanie może osiągnąć liniową złożoność czasową, jeśli k jest stosunkowo małe w porównaniu do n. Algorytm ten działa poprzez zliczanie wystąpień każdego elementu, co pozwala na szybkie umieszczenie go w odpowiedniej pozycji w posortowanej tablicy. Przykładowe zastosowania sortowania przez zliczanie to sortowanie wyników egzaminów czy organizacja danych liczbowych w określonym przedziale, co jest często spotykane w analizach statystycznych. Standardy branżowe często korzystają z tej metody, gdy operujemy na dużych zbiorach danych o ograniczonym zakresie, co jest zgodne z najlepszymi praktykami efektywnego przetwarzania danych.

Pytanie 23

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

A. Pozwala na dynamiczne dodawanie nowych metod
B. Zachowuje wspólną wartość dla wszystkich instancji tej klasy
C. Ogranicza dostęp do metod publicznych w klasie
D. Automatycznie likwiduje obiekty klasy po zakończeniu działania programu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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

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

A. wyzwalacze i polimorfizm
B. zmienne, procedury oraz funkcje
C. klasy, obiekty oraz hermetyzację
D. pola, metody, rekurencję oraz kwerendy

Brak odpowiedzi na to pytanie.

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

Pytanie 25

Który z wymienionych elementów NIE stanowi części instrukcji dla użytkownika programu?

A. Opis testów jednostkowych
B. Opis metody instalacji aplikacji
C. Instrukcje dotyczące obsługi poszczególnych funkcji aplikacji
D. Rozwiązywanie problemów związanych z użytkowaniem aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Instrukcja użytkownika programu zawiera opisy dotyczące sposobu instalacji aplikacji, konfiguracji oraz obsługi poszczególnych funkcji. Jest to kluczowy dokument pomagający użytkownikom w szybkim wdrożeniu się w pracę z oprogramowaniem. Zawiera również sekcje dotyczące rozwiązywania typowych problemów oraz wskazówki, jak efektywnie korzystać z narzędzi i funkcji aplikacji. Instrukcja użytkownika może być dostępna w formie elektronicznej (PDF, strony WWW) lub papierowej, a jej celem jest uproszczenie procesu wdrażania oraz ograniczenie liczby zgłoszeń do działu wsparcia technicznego. Dokumentacja tego typu stanowi również ważny element budowania pozytywnego doświadczenia użytkownika (UX).

Pytanie 26

Które z wymienionych działań zwiększa bezpieczeństwo transakcji online?

A. Zastosowanie publicznego Wi-Fi do logowania się na konto bankowe
B. Udostępnianie informacji o karcie kredytowej w e-mailach
C. Weryfikowanie certyfikatów SSL na stronach zajmujących się transakcjami
D. Nieaktualizowanie oprogramowania przeglądarki

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sprawdzanie certyfikatów SSL na stronach transakcyjnych to jeden z najważniejszych kroków w zapewnieniu bezpieczeństwa transakcji internetowych. Certyfikat SSL szyfruje dane przesyłane między użytkownikiem a serwerem, chroniąc je przed przechwyceniem przez osoby trzecie. Adresy stron z certyfikatem SSL zaczynają się od 'https', co wskazuje na bezpieczne połączenie. Certyfikaty SSL zapewniają integralność danych i są podstawą dla każdej strony internetowej obsługującej płatności lub przechowującej dane użytkowników. Zignorowanie tej kwestii naraża użytkowników na ataki typu man-in-the-middle i phishing.

Pytanie 27

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

A. Flutter
B. WPF
C. Qt
D. Node.js

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Qt to jeden z najczęściej używanych frameworków do tworzenia aplikacji desktopowych w języku C++. Dzięki Qt programiści mogą budować aplikacje wieloplatformowe (Windows, macOS, Linux) z jednolitym interfejsem użytkownika. Qt oferuje szeroką gamę narzędzi do tworzenia graficznych interfejsów użytkownika (GUI), obsługi baz danych, aplikacji sieciowych oraz animacji. Framework ten jest ceniony za wydajność, stabilność i możliwość pisania kodu raz, a następnie kompilowania go na różne platformy. Qt umożliwia również tworzenie aplikacji mobilnych i wbudowanych, co czyni go niezwykle uniwersalnym narzędziem dla programistów C++.

Pytanie 28

W wyniku realizacji zaprezentowanego kodu na ekranie pojawią się:

int tablica[10];

for (int i = 0; i < 10; i++) {
    if (i % 3 != 0)
        std::cout << tablica[i] << ", ";
}
A. wszystkie elementy tablicy, które mają wartość nieparzystą
B. elementy tablicy o indeksach: 1, 2, 4, 5, 7, 8
C. wszystkie elementy tablicy, które są wielokrotnością 3
D. elementy z indeksów tablicy, które są podzielne przez 3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tym zadaniu najważniejsze było zrozumienie warunku if oraz sposobu działania instrukcji for. Kod przechodzi po wszystkich elementach tablicy o 10 pozycjach, ale wyświetla tylko te, dla których indeks nie jest podzielny przez 3. Sprawdzenie tego realizuje się przez resztę z dzielenia: i % 3 != 0. Czyli dla i=0,3,6,9 warunek nie zostanie spełniony, więc te elementy zostaną pominięte. Zostaną więc wyświetlone elementy o indeksach 1, 2, 4, 5, 7, 8. To jest bardzo popularny patent w programowaniu, kiedy chcemy pominąć pewne elementy w tablicy lub kolekcji na podstawie prostego warunku logicznego. Często używa się podobnych konstrukcji przy analizie danych, np. przy wykluczaniu co któregoś rekordu z przetwarzania, czy też przy operacjach na grafach lub macierzach. Moim zdaniem warto zapamiętać taki sposób sprawdzania, bo pozwala pisać kod bardziej czytelny i łatwy do modyfikacji. Z mojego doświadczenia, gdy programuje się coś na konkursy albo optymalizuje zadania, takie triki z modulo przyspieszają proces myślowy. Dodam jeszcze, że domyślne wartości w tablicy typu int nie są zainicjalizowane, więc wynik jest zależny od środowiska, ale w tym pytaniu chodzi tylko o indeksy, nie wartości.

Pytanie 29

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

A. Nagłe zdarzenie związane z pracą, powodujące uraz lub śmierć
B. Każde zdarzenie, które wymaga interwencji technicznej w miejscu zatrudnienia
C. Każdy incydent wynikający z działania osób trzecich
D. Każde zdarzenie, które prowadzi do opóźnienia w wykonaniu obowiązków

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wypadek przy pracy to nagłe zdarzenie związane z wykonywaną pracą, które powoduje uraz lub śmierć pracownika. Wypadki te mogą być wynikiem zaniedbań, nieprzestrzegania zasad BHP lub nieodpowiedniego zabezpieczenia stanowiska pracy. Przykładami wypadków przy pracy są upadki z wysokości, porażenia prądem, oparzenia chemiczne lub uszkodzenia ciała przez maszyny. Pracodawca jest zobowiązany do zgłaszania każdego wypadku przy pracy, prowadzenia dochodzenia w celu ustalenia przyczyn i wdrażania działań zapobiegających powtórzeniu się podobnych sytuacji. Wypadki przy pracy są jedną z głównych przyczyn absencji oraz roszczeń pracowniczych, dlatego prewencja i edukacja w zakresie BHP są niezwykle istotne.

Pytanie 30

Celem zastosowania wzorca Obserwator w tworzeniu aplikacji WEB jest

A. zarządzanie funkcjami synchronicznymi w kodzie aplikacji
B. dostosowanie interfejsu użytkownika do różnych typów odbiorców
C. monitorowanie interakcji użytkownika i wysyłanie wyjątków
D. informowanie obiektów o modyfikacji stanu innych obiektów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec Obserwator, znany również jako Observer, jest fundamentem programowania związanego z aplikacjami webowymi, szczególnie w kontekście architektury MVC (Model-View-Controller). Jego głównym celem jest umożliwienie obiektom (zwanym obserwatorami) subskrybowania zmian stanu innych obiektów (zwanych obserwowanymi). Kiedy stan obiektu obserwowanego ulega zmianie, wszystkie powiązane obiekty obserwujące są automatycznie powiadamiane o tej zmianie. Takie podejście jest szczególnie użyteczne w aplikacjach, gdzie interfejs użytkownika musi być dynamicznie aktualizowany w odpowiedzi na zmiany danych, na przykład w przypadku aplikacji do zarządzania danymi w czasie rzeczywistym. Przykładem może być aplikacja czatu, w której nowe wiadomości są automatycznie wyświetlane użytkownikom, gdy tylko są dodawane przez innych. Wzorzec ten jest również zgodny z zasadami SOLID, zwłaszcza z zasadą otwarte-zamknięte, umożliwiając rozwijanie aplikacji bez konieczności modyfikowania istniejących klas. W różnych technologiach webowych, takich jak JavaScript z użyciem frameworków takich jak React czy Angular, wzorzec Obserwator jest implementowany przez mechanizmy takie jak stany komponentów, co przyczynia się do lepszej organizacji kodu i zachowania jego czytelności.

Pytanie 31

Aplikacje webowe stworzone z użyciem frameworka Angular lub biblioteki React, działające na standardowych portach, można uruchomić na lokalnym serwerze, wpisując w przeglądarkę

A. localhost:8080 (React) lub localhost:8000 (Angular)
B. localhost:8000 (React) lub localhost:49887 (Angular)
C. localhost:5001 (React) lub localhost:8080 (Angular)
D. localhost:3000 (React) lub localhost:4200 (Angular)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
React domyślnie startuje na porcie 3000, a Angular na 4200 – to są takie standardy, które praktycznie wszyscy w branży znają i stosują. Kiedy zaczynasz nowy projekt w React, korzystając na przykład z create-react-app, serwer deweloperski po prostu nasłuchuje na http://localhost:3000. Analogicznie, jak generujesz projekt w Angular CLI i odpalasz ng serve, wtedy aplikacja wystartuje na http://localhost:4200. To są domyślne porty – nie musisz nic specjalnie ustawiać, wystarczy wpisać te adresy w przeglądarce. Z mojego doświadczenia, dobrze jest zapamiętać te ustawienia, bo praktycznie na każdym warsztacie czy bootcampie te adresy padają od ręki. Jeśli chodzi o praktykę, czasami port jest już zajęty i wtedy narzędzie zaproponuje inny, ale te wartości startowe to taka baza. Warto pamiętać, że zmiana portu wynika zazwyczaj z konfliktu, a nie z jakiejś specjalnej potrzeby. Dodatkowo, rozpoznanie tych portów pozwala szybciej debugować problemy z uruchomieniem aplikacji – jak coś nie wstaje na tych adresach, to od razu wiadomo, gdzie szukać. Ogólnie rzecz biorąc, korzystanie z tych domyślnych portów przyspiesza współpracę w zespole, bo każdy wie, gdzie szukać aplikacji, więc nie trzeba się rozpisywać w README, na jakim porcie coś działa. Moim zdaniem, to jeden z tych drobnych szczegółów, które składają się na dobre nawyki programistyczne.

Pytanie 32

Cytat zaprezentowany powyżej dotyczy metodyki RAD. Co oznacza ten skrót w języku polskim?

... (RAD) .... is a general term for adaptive software development approaches, and the name for James Martin's method of rapid development. In general, RAD approaches to software development put less emphasis on planning and more emphasis on an adaptive process. Prototypes are often used in addition to or sometimes even instead of design specifications.
Źródło: https://en.wikipedia.org/wiki Dostęp: 25.03.2021
A. środowisko błyskawicznego programowania
B. zintegrowane środowisko deweloperskie
C. środowisko do tworzenia aplikacji
D. szybki rozwój aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
RAD czyli Rapid Application Development to podejście do tworzenia oprogramowania które skupia się na szybkim wytwarzaniu aplikacji. Kluczowym elementem tej metodyki jest minimalizacja czasu spędzanego na planowaniu i projektowaniu na rzecz szybkiego prototypowania i elastycznego dostosowywania się do zmieniających się wymagań. W praktyce RAD wykorzystuje krótkie cykle rozwoju oraz intensywną współpracę z użytkownikami końcowymi co pozwala na szybkie reagowanie na ich potrzeby. W porównaniu do tradycyjnych metod RAD zapewnia większą elastyczność i skrócenie czasu dostarczenia produktu co jest szczególnie wartościowe w dynamicznie zmieniających się środowiskach biznesowych. Dobre praktyki w RAD obejmują użycie narzędzi do szybkiego prototypowania oraz zaangażowanie użytkowników w proces testowania co pozwala na bieżące wprowadzanie zmian i udoskonaleń. Dzięki temu uzyskuje się produkt lepiej dopasowany do oczekiwań użytkowników co zwiększa jego użyteczność i satysfakcję końcową. RAD jest często stosowany w projektach gdzie czas dostarczenia jest krytycznym czynnikiem sukcesu co odzwierciedla jego praktyczne zastosowanie w wielu branżach

Pytanie 33

Jakie środowisko deweloperskie jest najczęściej używane do programowania w C#?

A. Eclipse
B. PyCharm
C. Visual Studio
D. NetBeans

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Visual Studio to najczęściej wykorzystywane środowisko programistyczne (IDE) do tworzenia aplikacji w języku C#. Oferuje pełne wsparcie dla platformy .NET i umożliwia szybkie tworzenie aplikacji desktopowych, webowych i mobilnych. Visual Studio jest wyposażone w zaawansowane narzędzia do debugowania, projektowania interfejsów oraz integrację z systemami kontroli wersji. Dzięki rozbudowanemu ekosystemowi wtyczek i rozszerzeń Visual Studio jest idealnym rozwiązaniem zarówno dla początkujących, jak i zaawansowanych programistów, którzy tworzą aplikacje na system Windows oraz inne platformy.

Pytanie 34

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

A. Java
B. C++
C. Python
D. C#

Brak odpowiedzi na to pytanie.

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

Pytanie 35

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

console.log(typeof null);
console.log(typeof undefined);
console.log(typeof []);
console.log(typeof NaN);
A. null, undefined, object, NaN
B. object, undefined, array, number
C. null, undefined, array, number
D. object, undefined, object, number

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wynikowy wyraz z konsoli, czyli 'object, undefined, object, number' jest zgodny z zachowaniem typu danych w JavaScript. Funkcja typeof zwraca typ zmiennej, a w przypadku null to zaskakujący wynik, bo według standardów ECMAScript, null jest traktowane jako obiekt. To historyczny błąd w języku, który z biegiem czasu się utrzymał. Z kolei undefined oznacza, że zmienna nie została przypisana, co jest jasne i zrozumiałe. Jeśli chodzi o tablice, w JavaScript są one traktowane jako obiekty, dlatego wynik typeof dla pustej tablicy również to pokazuje. NaN, będące skrótem od 'Not-a-Number', jest szczególnym przypadkiem, który wskazuje, że coś poszło nie tak z operacją arytmetyczną. Jego typ to number, ponieważ w JavaScript wszystko jest na poziomie liczbowym. Wiedza na temat typów danych jest kluczowa w programowaniu, szczególnie przy pracy z danymi i funkcjami, które oczekują konkretnego typu. Użycie typeof jest bardzo praktyczne, gdy chcemy dynamicznie zarządzać typami w kodzie.

Pytanie 36

Przedstawiony na filmie kod napisany w języku C++ nie kompiluje się. Co należy zmienić w tym kodzie, aby proces kompilacji wykonał się bez błędów?

A. naprawić błąd w funkcji sprawdz, który polega na braku nawiasów {} w pętli for
B. dodać deklarację funkcji sprawdz przed funkcją main
C. zadeklarować zmienną sprawdz przed jej wykorzystaniem w linii 11
D. poprawnie zapisać warunek w instrukcji if w linii 11, np. sprawdz(x)==true

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź jest trafna, bo w języku C++ kompilator musi wiedzieć o istnieniu funkcji zanim zostanie ona użyta w kodzie, np. w funkcji main. Bez wcześniejszej deklaracji, kompilator nie zna sygnatury funkcji i nie potrafi zweryfikować wywołania, co skutkuje błędem typu 'implicit declaration of function'. Deklaracja funkcji to taki sygnał informujący kompilator „hej, taka funkcja będzie i będzie przyjmować takie argumenty, a zwracać taki typ”. Praktycznie rzecz biorąc, przed funkcją main wystarczy wpisać np. 'bool sprawdz(int x);', żeby wszystko grało. To szczególnie ważne przy większych projektach czy pracy w zespołach, gdzie pliki nagłówkowe z deklaracjami funkcji są standardem. Pozwala to na lepszą czytelność i porządek w kodzie – kompilator wie, czego się spodziewać, a Ty unikasz dziwnych, trudnych do znalezienia błędów. Moim zdaniem taka organizacja kodu to podstawa, szczególnie jeśli kiedyś będziesz korzystać z bibliotek lub cudzych funkcji – deklaracje są wtedy wręcz obowiązkowe. To zasada, której trzyma się większość zespołów programistycznych i, szczerze mówiąc, sam kilka razy w młodości zapomniałem o deklaracji, przez co debugowanie trwało wieki. Warto od razu wyrobić sobie taki nawyk, bo to oszczędza sporo nerwów i czasu, a kod staje się solidniejszy i bardziej profesjonalny.

Pytanie 37

W klasie o nazwie samochod przypisano atrybuty: marka, rocznik, parametry[]. Atrybuty te powinny zostać zdefiniowane jako

A. funkcje
B. pola
C. interfejsy
D. metody

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pola w klasie samochod to właśnie te elementy, które przechowują dane, takie jak marka, rocznik czy tablica parametry. To jest absolutna podstawa programowania obiektowego – najczęściej spotyka się to w językach takich jak Java, C# albo nawet w Pythonie, choć tam często nazywamy je po prostu atrybutami. Dla przykładu, jeśli tworzysz klasę Samochod w C#, to pole 'marka' będzie np. typu string, 'rocznik' – int, a 'parametry' możesz zadeklarować jako tablicę albo listę (List<T>) zależnie od potrzeb. Przechowywanie danych w polach pozwala na lepszą organizację, bo każda instancja klasy ma swoje własne wartości tych pól. Tak się właśnie tworzy modele danych, na których potem operuje cała aplikacja – czy to baza samochodów w warsztacie, czy system ubezpieczeń komunikacyjnych. Takie podejście jest zgodne z zasadami hermetyzacji i solidnych, nowoczesnych standardów pisania kodu. Dużo profesjonalnych frameworków i narzędzi (np. Entity Framework, Hibernate) korzysta z takiego podejścia, nawet jeśli potem te pola opakowujesz w właściwości (properties). Krótko mówiąc, pola to nieodłączny element każdej klasy, która coś reprezentuje, i moim zdaniem nie da się dobrze projektować kodu obiektowego bez zrozumienia tej konwencji.

Pytanie 38

Które z poniższych narzędzi jest używane do zarządzania wersjami kodu?

A. Kubernetes
B. Docker
C. Jenkins
D. Git

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Git jest narzędziem służącym do zarządzania wersjami kodu, które zyskało ogromną popularność wśród programistów na całym świecie. Jego podstawową funkcją jest umożliwienie śledzenia zmian w kodzie źródłowym, co jest niezbędne w procesie tworzenia oprogramowania. Dzięki Gitowi możemy w łatwy sposób przechowywać historię zmian, co pozwala na cofanie się do wcześniejszych wersji projektu, a także na pracę zespołową, gdzie wielu programistów może jednocześnie pracować nad różnymi częściami tego samego projektu. Git wspiera również gałęzie (ang. branches), które umożliwiają równoległe rozwijanie nowych funkcji bez zakłócania głównej linii rozwoju. Jest to kluczowe w środowiskach, gdzie rozwój i wydanie nowych funkcji musi być dobrze zorganizowane. Narzędzie to jest nie tylko darmowe, ale również open-source, co oznacza, że każdy może przyczynić się do jego rozwoju. Git jest standardem w branży IT, a jego znajomość jest często wymagana przez pracodawców. Dzięki swojej elastyczności i wszechstronności Git jest stosowany w projektach open-source, komercyjnych i edukacyjnych.

Pytanie 39

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

A. Obowiązek zamieszczenia publicznych przeprosin
B. Zakaz korzystania z oprogramowania open-source
C. Unieważnienie umowy licencyjnej użytkownika końcowego
D. Nałożenie grzywny lub kary więzienia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 40

Która z metodologii w zarządzaniu projektami umożliwia łatwe dostosowywanie się do zmieniających się potrzeb klienta?

A. Kanban
B. Model Waterfall
C. Scrum
D. Model spiralny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Scrum to metodologia zarządzania projektami, która pozwala na elastyczne reagowanie na zmieniające się wymagania klienta. W Scrumie rozwój produktu odbywa się w iteracyjnych sprintach, a na końcu każdego z nich dostarczana jest działająca część aplikacji. Regularne przeglądy i retrospekcje umożliwiają dostosowywanie zakresu prac, co pozwala na bieżąco wprowadzać zmiany i spełniać oczekiwania klienta. Scrum promuje współpracę z interesariuszami, co zwiększa prawdopodobieństwo sukcesu projektu i dostarczenia wartościowego produktu.