Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 29 stycznia 2026 02:17
  • Data zakończenia: 29 stycznia 2026 02:46

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

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

Jaką wartość zwróci funkcja napisana w języku C++, jeżeli jej argumentem wejściowym jest tablica stworzona w następujący sposób:

int tablica[6] = {3,4,2,4,10,0};

int fun1(int tab[]) {
    int wynik = 0;

    for(int i = 0; i < 6; i++)
        wynik += tab[i];
    return wynik;
}
A. 10
B. 20
C. 23
D. 0
W tego typu zadaniach bardzo łatwo popełnić błąd w ocenie działania pętli oraz sumowania wartości w tablicy. Często pojawia się przekonanie, że funkcja może zwracać zero, bo ostatni element tablicy to 0 – ale trzeba pamiętać, że funkcja sumuje wszystkie elementy i zero po prostu nie wpływa na całą sumę, więc wynik się nie wyzeruje. Bywa też, że sugerujemy się pierwszą liczbą z tablicy albo jakąś wyróżniającą się, na przykład 10, myśląc, że to ona jest odpowiedzią – ale to nie ma uzasadnienia w kodzie. W pętli for wyraźnie jest napisane i < 6, czyli przeglądamy sześć elementów. Każdy z nich jest dodawany do zmiennej wynik. Kod nie ma żadnych warunków ani instrukcji przerwania, więc nie można zatrzymać się „na” jakiejś wartości, ani zignorować jakiejkolwiek liczby. Niektóre osoby mogą też popełnić błąd i dodać tylko część elementów albo pomylić kolejność, przez co suma wychodzi 10, 20 lub inna, ale przy mechanicznej analizie kodu to niemożliwe. Odpowiedź 20 pojawia się czasem, kiedy ktoś przez przypadek nie zliczy ostatniego zera, a z kolei 10 to typowy skrót myślowy – może wynikający z szybkiego rzutu oka na największą liczbę w tablicy, jednak suma elementów to nie to samo, co ich maksimum. Z mojego doświadczenia wynika, że bardzo wielu uczniów nie przywiązuje wagi do sumowania wszystkich elementów, zwłaszcza jak pojawia się zero – a przecież matematyka jest tu bezlitosna. W programowaniu sumujesz wszystko jak leci, jeśli nie ma warunku czy filtru. Takie drobne nawyki, jak dokładne śledzenie każdej iteracji pętli, potem procentują podczas bardziej złożonych zadań na egzaminach czy w prawdziwych projektach. Pamiętaj: jeśli kod nie sprawdza warunków, to wykonuje dokładnie to, co jest napisane – nic mniej, nic więcej. Warto się tego trzymać.

Pytanie 2

Który z wymienionych programów jest przeznaczony do zarządzania projektami przy pomocy tablic kanban?

A. Word
B. Photoshop
C. Trello
D. Jira
Jira to zaawansowane narzędzie do zarządzania projektami, ale jest bardziej skoncentrowane na metodykach Agile i Scrum, a nie wyłącznie na tablicach kanban. Photoshop to narzędzie do edycji grafiki i tworzenia projektów wizualnych, które nie ma funkcji zarządzania projektami. Word jest edytorem tekstu i służy do tworzenia dokumentów, ale nie jest używany jako narzędzie do zarządzania zadaniami i projektami w sposób, w jaki robi to Trello.

Pytanie 3

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

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

Pytanie 4

W języku Python, jak nazywa się funkcja, która jest wykonywana automatycznie, gdy obiekt jest niszczony?

A. __str__
B. __repr__
C. __del__
D. __init__
Metoda <code>__init__</code> jest konstruktorą w Pythonie i jest wywoływana automatycznie, gdy tworzony jest nowy obiekt klasy. Jej zadaniem jest inicjalizacja obiektu, czyli nadanie mu początkowych wartości atrybutów. Konstruktor nie ma nic wspólnego z niszczeniem obiektów, co jest zadaniem destruktora <code>__del__</code>. Częstym błędem jest mylenie tych dwóch metod, ponieważ obie są specjalnymi metodami magicznymi, ale pełnią zupełnie inne role. <code>__str__</code> i <code>__repr__</code> to inne specjalne metody, które również nie mają związku z niszczeniem obiektów. Pierwsza z nich, <code>__str__</code>, jest odpowiedzialna za zwracanie czytelnej reprezentacji obiektu, czyli tego, co użytkownik zobaczy, gdy użyje funkcji <code>print()</code> na obiekcie. <code>__repr__</code>, z kolei, zwraca bardziej szczegółową reprezentację tekstową obiektu, która powinna być jednoznaczna i użyteczna dla programisty, często używana w debugowaniu. Obie te metody są związane z reprezentacją obiektów jako ciągi znaków, a nie z ich usuwaniem. W programowaniu często pojawia się pokusa, by wykorzystywać destruktory do sprzątania po obiektach, ale w Pythonie lepiej jest polegać na zarządzaniu kontekstem i manualnym zamykaniu zasobów, aby uniknąć problemów związanych z automatycznym niszczeniem obiektów.

Pytanie 5

Które z wymienionych stwierdzeń najcelniej opisuje proces uruchamiania aplikacji?

A. Tłumaczenie kodu źródłowego na język pośredni
B. Generowanie pliku źródłowego
C. Przetwarzanie kodu źródłowego przez kompilator
D. Wykonywanie programu na podstawie przetłumaczonego kodu maszynowego
Zaczynanie od pliku źródłowego to jakby start w procesie programowania, zanim jeszcze dojdzie do kompilacji. Twierdzisz, że kompilator wykonuje kod źródłowy, ale to nie tak. Kompilator tłumaczy, a nie wykonuje ten kod. Zamiana kodu źródłowego na język pośredni, jak bytecode w Javie, to właśnie etap kompilacji. Uruchomienie następuje później, więc jest to ważne, żeby to zrozumieć.

Pytanie 6

Jaką funkcję pełnią okna dialogowe niemodalne?

A. wstrzymywania działania aplikacji w czasie wprowadzania oraz zatwierdzania danych
B. zarządzania ustawieniami aplikacji, jako okno, które pozostaje widoczne na ekranie przez cały czas trwania aplikacji
C. prezentowania komunikatów, które wymagają potwierdzenia, aby kontynuować działanie aplikacji
D. zarządzania stanem aplikacji za pomocą systemów menu
Wiele osób myli okna dialogowe niemodalne z innymi typami okien, szczególnie modalnymi, co w sumie nie dziwi, bo na pierwszy rzut oka mogą wyglądać podobnie. Jednym z typowych błędów jest przekonanie, że okna niemodalne zatrzymują działanie aplikacji do czasu zatwierdzenia jakichś danych. To akurat cecha okien modalnych – one faktycznie wymuszają interakcję użytkownika, zanim wróci on do głównego okna programu. W praktyce okno niemodalne daje pełną swobodę poruszania się po aplikacji nawet wtedy, gdy jest otwarte. Kolejnym nieporozumieniem jest myślenie, że niemodalne służą do prezentowania komunikatów wymagających potwierdzenia – to znowu domena okien modalnych, takich jak alerty czy potwierdzenia, które muszą być obsłużone przed dalszym działaniem aplikacji. Często spotykam się też z poglądem, że okna niemodalne służą do zarządzania stanem aplikacji przez systemy menu. To w zasadzie nie jest domena żadnych okien dialogowych, tylko klasycznych pasków menu czy nawigacji. Okna niemodalne są zaprojektowane po to, by zapewnić użytkownikowi narzędzia lub ustawienia „pod ręką” przez cały czas, bez zamykania czy blokowania głównego widoku aplikacji. Mylenie tych funkcjonalności prowadzi do złych decyzji projektowych – czasem programiści wrzucają coś do okna modalnego, gdzie powinno być niemodalne i odwrotnie, przez co użytkownicy są sfrustrowani, bo muszą zamykać okna, żeby móc dalej pracować. Warto więc dobrze rozumieć różnice, bo branżowe standardy (jak Apple Human Interface Guidelines czy Windows UX Guidelines) jasno oddzielają te pojęcia i rekomendują konkretne zastosowania każdego typu okna. Moim zdaniem, świadomość tych subtelności to podstawa profesjonalnego projektowania interfejsów.

Pytanie 7

Który z języków programowania jest najczęściej wykorzystywany do budowania aplikacji internetowych po stronie serwera?

A. PHP
B. JavaScript
C. CSS
D. HTML
JavaScript jest językiem działającym głównie po stronie klienta (przeglądarki), chociaż dzięki Node.js może być używany także po stronie serwera, jednak tradycyjnie nie jest językiem stricte backendowym. HTML to język znaczników służący do strukturalnego tworzenia treści na stronach internetowych, ale sam w sobie nie może obsługiwać logiki serwera. CSS to język odpowiedzialny za stylizację stron internetowych i nie pełni roli języka programowania po stronie serwera.

Pytanie 8

Na schemacie widoczny jest fragment diagramu blokowego pewnego algorytmu. Ile razy zostanie zweryfikowany warunek n<7?

Ilustracja do pytania
A. 6
B. 5
C. 8
D. 7
Wartość 8 pokazuje, że chyba źle zrozumiałeś, jak działa liczba iteracji. Pojawiły się dodatkowe porównania, które nie powinny się zdarzyć w pętli. A wynik 5 może być przez to, że pętla zakończyła się za szybko, albo myślałeś, że zmienna zaczyna się z innej wartości. Z kolei 7 to już za dużo iteracji, co nie pasuje do standardowego działania pętli warunkowej.

Pytanie 9

Który system operacyjny jest podstawowym środowiskiem do tworzenia aplikacji mobilnych w języku Swift?

A. Windows UWP
B. LG UX
C. Android
D. iOS
Chociaż może się wydawać, że język programowania taki jak Swift da się wykorzystać na wielu różnych platformach mobilnych, to jednak jego projektowanie i rozwój były bardzo mocno związane z ekosystemem Apple. Android, choć jest największym systemem mobilnym na świecie, korzysta z innych technologii – głównie języka Java i Kotlin. Próbując pisać aplikacje mobilne na Androida w Swifcie, natrafiamy na całą masę problemów technicznych: brak oficjalnych narzędzi, wsparcia społeczności i integracji z Android SDK. Z moich obserwacji wynika, że są jakieś eksperymentalne mosty, ale to bardziej ciekawostka niż coś, co można używać w produkcji. Z kolei LG UX nie jest nawet osobnym systemem operacyjnym, tylko nakładką na Androida wykorzystywaną przez wybrane telefony LG – tu w ogóle nie ma mowy o natywnym wykorzystaniu Swifta, zresztą praktycznie nikt go tam nie używa. Jeśli chodzi o Windows UWP – ta platforma służy budowaniu uniwersalnych aplikacji na Windowsa, ale używa się tam innych technologii, głównie C#, czasami C++, czy nawet JavaScript. Swift na tej platformie to raczej egzotyczny temat i nie ma oficjalnego wsparcia. Myślę, że sporo osób myli dostępność języka (bo Swift jest open source) z możliwościami praktycznego wdrożenia. W branży przyjęło się, że wybierając środowisko do budowy aplikacji mobilnych w Swifcie, wybieramy przede wszystkim iOS, bo tylko tam mamy pełnię wsparcia, narzędzi i zgodność z wytycznymi Apple. Warto o tym pamiętać, żeby nie tracić czasu na próby wdrażania Swifta tam, gdzie po prostu nie jest to przewidziane przez producentów platform.

Pytanie 10

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

A. ASP.NET Core
B. Django
C. Node.js
D. React.js
Node.js to środowisko uruchomieniowe JavaScript, które działa po stronie serwera i umożliwia tworzenie aplikacji backendowych, a nie komponentów frontendowych. Django to framework do budowy aplikacji webowych w Pythonie i nie jest oparty na komponencie w JavaScript. ASP.NET Core to framework wykorzystywany do budowy aplikacji w języku C# i nie ma związku z tworzeniem komponentów w JavaScript.

Pytanie 11

W którym przypadku algorytm sortowania bąbelkowego działa z optymalną wydajnością?

A. Dla tablicy z dużą liczbą powtórzeń
B. Dla tablicy uporządkowanej rosnąco
C. Dla tablicy losowej
D. Dla tablicy uporządkowanej malejąco
W przypadku tablicy posortowanej malejąco algorytm bąbelkowy działa najmniej efektywnie, ponieważ wymaga pełnej liczby przejść i zamian, osiągając złożoność O(n²). Dla losowych tablic sortowanie bąbelkowe również wykonuje dużą liczbę porównań i zamian. Tablice o dużej liczbie powtórzeń mogą zwiększać liczbę iteracji, ponieważ algorytm nadal musi porównać wszystkie elementy, aby upewnić się, że są one we właściwej kolejności.

Pytanie 12

Który z poniższych elementów jest częścią architektury PWA (Progressive Web App)?

A. Service Worker
B. Virtual Machine
C. Media Encoder
D. DOM Renderer
Wybór innych odpowiedzi może wynikać z nieporozumienia dotyczącego terminologii i funkcji różnych komponentów w architekturze aplikacji webowych. DOM Renderer, który jest odpowiedzialny za renderowanie struktury dokumentu HTML w przeglądarkach, nie ma bezpośredniego związku z architekturą PWA. Jego zadaniem jest prezentacja treści, ale nie wpływa na funkcjonalności offline czy zarządzanie zasobami. W kontekście PWA, kluczowe są aspekty zapewniające dostępność i wydajność aplikacji, a DOM Renderer nie odnosi się do tych wymagań. Virtual Machine, często kojarzona z technologiami takimi jak Java czy JavaScript (np. V8 w Google Chrome), jest odpowiedzialna za wykonywanie kodu, ale nie pełni roli w architekturze PWA, ponieważ nie zarządza ani nie optymalizuje interakcji sieciowych. Ostatni element, Media Encoder, to narzędzie do kodowania multimediów, które również nie ma zastosowania w kontekście PWA. Typowe błędy polegają na myleniu komponentów odpowiedzialnych za renderowanie i wykonywanie kodu z tymi, które mają na celu poprawę doświadczenia użytkownika w aplikacjach webowych. Zrozumienie roli Service Workera jest kluczowe dla efektywnego projektowania aplikacji, które zapewniają użytkownikom lepsze doświadczenie, szczególnie w warunkach ograniczonej dostępności sieci.

Pytanie 13

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. 1 lub 5
B. 4
C. 3
D. 2 lub 3
Wybierając algorytm do zastosowania w praktycznej aplikacji, kluczowe jest zwracanie uwagi na złożoność obliczeniową, bo to ona decyduje, jak algorytm radzi sobie ze wzrostem ilości danych. Często spotykam się z błędnym przekonaniem, że algorytm o złożoności na przykład O(n²) jest w porządku, o ile nie mamy naprawdę gigantycznych zbiorów danych. Problem polega na tym, że już przy kilkuset czy kilku tysiącach elementów taki algorytm potrafi znacząco spowolnić działanie aplikacji. Jeszcze gorzej jest z O(n³), bo tutaj czas wykonania rośnie bardzo szybko, praktycznie wykładniczo – co praktycznie wyklucza użycie tego algorytmu w prawdziwie produkcyjnych rozwiązaniach, chyba że mamy do czynienia z ekstremalnie małymi zbiorami danych. Odpowiedzi wskazujące na algorytmy z O(n²) lub O(n³) pomijają najlepszą opcję, która znajduje się w tabeli – czyli Algorytm 4 z O(n). Tylko O(n) gwarantuje, że czas działania rośnie w sposób liniowy, co daje praktycznie jedyną szansę na obsługę dużych wolumenów danych bez zatorów i „zadyszki” aplikacji. Odpowiedź wskazująca Algorytm 2 (O(n!)) to już w ogóle bardzo typowy błąd – tego typu złożoność spotyka się głównie w algorytmach, gdzie trzeba sprawdzić wszystkie możliwe permutacje, jak np. problem komiwojażera, i na pewno nie jest to wybór optymalny. Podsumowując, cała ta sytuacja pokazuje, jak ważna jest umiejętność czytania notacji O(...) i świadomego wybierania algorytmów – to podstawa w programowaniu, szczególnie jeśli zależy nam na wydajności i skalowalności naszych rozwiązań.

Pytanie 14

Co to jest event bubbling w JavaScript?

A. Metoda zarządzania kolejką zdarzeń w aplikacjach asynchronicznych
B. Proces, w którym zdarzenie zaczyna się od najbardziej szczegółowego elementu i propaguje w górę hierarchii DOM
C. System powiadomień o błędach w konsoli JavaScript
D. Technika optymalizacji wydajności zdarzeń na stronie
Event bubbling to kluczowy mechanizm w modelu zdarzeń JavaScript, który polega na tym, że gdy zdarzenie zostaje wywołane na danym elemencie DOM, propaguje się ono w górę hierarchii DOM, zaczynając od najniższego elementu (czyli elementu, który bezpośrednio wywołuje zdarzenie) i kierując się ku elementom nadrzędnym. To podejście umożliwia efektywne zarządzanie zdarzeniami, gdyż pozwala na przypisanie pojedynczej funkcji obsługi zdarzeń do elementu nadrzędnego, zamiast do każdego z podrzędnych elementów. Na przykład, jeśli mamy listę elementów <li> w <ul>, możemy ustawić jeden nasłuchiwacz zdarzeń na <ul>, co pozwoli na przechwytywanie kliknięć na wszystkich <li>, wykorzystując obiekt Event do określenia, który element został kliknięty. W praktyce, event bubbling przyczynia się do zmniejszenia liczby nasłuchiwaczy zdarzeń i optymalizacji wydajności aplikacji webowych, a także ułatwia organizację kodu. Warto również pamiętać o metodzie stopPropagation(), która może być używana, aby zatrzymać propagację zdarzenia, gdy zajdzie taka potrzeba. Zrozumienie event bubbling jest istotne w kontekście standardów W3C, które definiują zasady dla przetwarzania zdarzeń.

Pytanie 15

Jakie czynniki powinny być brane pod uwagę podczas organizacji zasobów ludzkich w projekcie?

A. Jedynie dostępność technologii
B. Budżet projektu, bez uwzględnienia kompetencji zespołu
C. Wyłącznie techniczne wymagania projektu
D. Umiejętności oraz doświadczenie członków zespołu
Podczas planowania zasobów ludzkich w projekcie kluczowe jest uwzględnienie umiejętności i doświadczenia członków zespołu. Odpowiednie dopasowanie kompetencji do wymagań projektu ma ogromny wpływ na jakość i tempo realizacji zadań. Zespół o różnorodnych umiejętnościach jest bardziej elastyczny i lepiej radzi sobie z napotkanymi wyzwaniami. Analiza umiejętności pozwala na efektywne przydzielanie zadań, co zwiększa produktywność i redukuje ryzyko opóźnień.

Pytanie 16

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

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

Pytanie 17

W programowaniu obiektowym odpowiednikami zmiennych oraz funkcji w programowaniu strukturalnym są

A. hermetyzacja oraz dziedziczenie
B. pola i kwalifikatory dostępu
C. pola i metody
D. metody statyczne i abstrakcyjne
Wiele osób gubi się na początku, próbując przypisać funkcje i zmienne z programowania strukturalnego do bardziej zaawansowanych pojęć OOP, takich jak hermetyzacja, dziedziczenie, czy różne typy metod. Metody statyczne i abstrakcyjne to specjalne mechanizmy, które mają konkretne zastosowania: statyczne należą do klasy, nie do obiektu (nie przechowują stanu pojedynczego egzemplarza), a abstrakcyjne służą do definiowania interfejsu bez implementacji. Żadna z tych kategorii nie odzwierciedla podstawowego podziału na dane i operacje na nich, tak jak pola i metody. Hermetyzacja oraz dziedziczenie to zupełnie inne pary kaloszy – pierwsza dotyczy ukrywania danych i kontrolowania dostępu, druga umożliwia tworzenie hierarchii klas i ponowne wykorzystanie kodu. Oba te pojęcia są kluczowe w OOP, ale nie są odpowiednikami zmiennych i funkcji. Kwalifikatory dostępu, jak public, private czy protected, decydują, kto ma dostęp do pól czy metod, ale same w sobie nie są strukturami danych, ani funkcjonalnościami. Typowy błąd, z którym się spotykam, to mylenie mechanizmów zarządzających dostępem lub abstrakcji z podstawowymi elementami składowymi klasy. W praktyce, jeśli modelujesz klasę, zawsze najpierw myślisz o tym, jakie dane ma reprezentować (pola), a potem – jakie operacje można na tych danych wykonać (metody). Pozostałe aspekty, jak hermetyzacja czy wybór typu metody, są decyzjami na dalszym etapie projektowania, a nie bezpośrednimi odpowiednikami zmiennych i funkcji znanych z programowania strukturalnego.

Pytanie 18

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. zadeklarować zmienną sprawdz przed jej wykorzystaniem w linii 11
C. poprawnie zapisać warunek w instrukcji if w linii 11, np. sprawdz(x)==true
D. dodać deklarację funkcji sprawdz przed funkcją main

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 19

Jaka będzie złożoność czasowa wyszukiwania w posortowanej tablicy przy użyciu algorytmu binarnego?

A. O(n log n)
B. O(n²)
C. O(log n)
D. O(n)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Algorytm binarny to efektywny sposób wyszukiwania elementu w posortowanej tablicy, który działa w czasie O(log n). Działa on na zasadzie dzielenia przestrzeni wyszukiwania na pół w każdym kroku. Przykładowo, jeśli mamy tablicę z miliona elementów, to po pierwszym porównaniu możemy wykluczyć połowę z nich, a następnie kontynuować wyszukiwanie w pozostałej części. W praktyce oznacza to, że nawet dla dużych zbiorów danych, czas wyszukiwania pozostaje stosunkowo krótki. Algorytm ten jest powszechnie stosowany w różnych dziedzinach, takich jak programowanie, grafika komputerowa czy bazy danych, gdzie szybkość wyszukiwania jest kluczowa. Warto również wspomnieć, że aby móc zastosować algorytm binarny, tablica musi być wcześniej posortowana, co może wymagać dodatkowego nakładu czasu, ale po posortowaniu, zyskujemy efektywność algorytmu binarnego.

Pytanie 20

Jakie są różnice między procesem kompilacji a interpretacją kodu?

A. Kompilacja jest stosowana jedynie w programowaniu obiektowym
B. Kompilacja wymaga użycia debuggera, natomiast interpretacja tego nie potrzebuje
C. Kompilacja przekształca cały kod źródłowy przed jego wykonaniem, podczas gdy interpretacja tłumaczy kod na bieżąco
D. Interpretacja umożliwia tworzenie bibliotek dynamicznych, a kompilacja bibliotek statycznych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kompilacja i interpretacja to dwa różne sposoby, żeby uruchomić kod. Kiedy kompilujesz, to cały kod jest zamieniany na język maszynowy przed uruchomieniem programu, a na końcu dostajesz plik, który można odpalić. Z kolei w interpretacji, kod jest analizowany i wykonywany linia po linii „na żywo”. Kompilacja jest bardziej typowa dla języków takich jak C czy C++, a interpretacja jest popularna w językach skryptowych jak Python czy JavaScript. Kompilacja daje większą wydajność, ale musisz poczekać, aż cały kod się skompiluje, a interpretacja pozwala na szybkie testowanie i łatwiejsze znajdowanie błędów.

Pytanie 21

Jaki modyfikator dostępu umożliwia dostęp do pól klasy tylko za pomocą jej metod?

A. Public
B. Protected
C. Private
D. Static

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator `private` w językach takich jak C++, Java i C# pozwala na ograniczenie dostępu do pól i metod klasy, umożliwiając ich wykorzystanie wyłącznie w obrębie tej samej klasy. Pola `private` są ukryte przed innymi klasami i mogą być modyfikowane lub odczytywane jedynie poprzez metody publiczne (gettery i settery). Przykład w C++: `class Konto { private: double saldo; public: void ustawSaldo(double s) { saldo = s; } }`. Dzięki temu mechanizmowi dane są chronione przed nieautoryzowanymi zmianami, co zwiększa bezpieczeństwo aplikacji i minimalizuje ryzyko błędów.

Pytanie 22

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

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

Co to jest lazy loading w kontekście ładowania obrazów na stronie?

A. Protokół transferu obrazów między serwerem a przeglądarką
B. Technika ładowania obrazów dopiero w momencie, gdy stają się widoczne dla użytkownika
C. Format przechowywania obrazów w pamięci podręcznej przeglądarki
D. Metoda kompresji obrazów przed wysłaniem na serwer

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Lazy loading to technika, która pozwala na ładowanie obrazów oraz innych zasobów dopiero w momencie, gdy stają się one widoczne dla użytkownika na ekranie. Dzięki temu oszczędzamy zasoby sieciowe i poprawiamy czas ładowania strony, co jest szczególnie istotne w kontekście optymalizacji SEO oraz doświadczenia użytkownika. Na przykład, w przypadku długiej strony internetowej z wieloma obrazami, lazy loading sprawia, że podczas przewijania strony obrazy nie są ładowane od razu, co zmniejsza obciążenie serwera i przyspiesza wczytywanie widocznych części strony. W praktyce można zastosować atrybuty takie jak "loading='lazy'" w znaczniku <img>, co jest zgodne z nowoczesnymi standardami HTML. Ponadto, wiele bibliotek i frameworków, jak np. Intersection Observer API, umożliwia zaawansowaną implementację lazy loadingu, co sprawia, że jest to obecnie powszechnie stosowana praktyka.

Pytanie 24

Które stwierdzenie dotyczące interfejsu w Java jest prawdziwe?

A. Wszystkie metody w interfejsie są domyślnie publiczne i abstrakcyjne
B. Interfejs może dziedziczyć po wielu klasach jednocześnie
C. W interfejsie można definiować implementacje metod statycznych
D. Interfejs może zawierać pola z dostępem protected

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Interfejsy w języku Java są fundamentalnym elementem programowania obiektowego, pozwalającym na definiowanie kontraktów, które muszą być implementowane przez klasy. Stwierdzenie, że wszystkie metody w interfejsie są domyślnie publiczne i abstrakcyjne, jest całkowicie zgodne z zasadami języka Java. Oznacza to, że nie trzeba jawnie deklarować tych modyfikatorów dostępu, ponieważ metody zdefiniowane w interfejsie są zawsze dostępne dla klas implementujących ten interfejs. To podejście promuje luźne powiązania między kodem oraz ułatwia testowanie i utrzymanie aplikacji. Przykładem praktycznym może być interfejs Comparable, który definiuje metodę compareTo. Klasy, które implementują ten interfejs, muszą dostarczyć konkretnej logiki porównywania obiektów, co pozwala na ujednolicenie sposobu, w jaki obiekty są porównywane w kolekcjach. Warto również zauważyć, że od Javy 8 interfejsy mogą zawierać metody domyślne z implementacją, ale nawet te metody są publiczne. Poprawne zrozumienie roli interfejsów jest kluczowe w projektowaniu systemów z zastosowaniem wzorców projektowych, takich jak MVC czy strategia.

Pytanie 25

Jakie cechy posiada model prototypowy w zakresie zarządzania projektami?

A. Przygotowaniem wersji systemu w ograniczonym zakresie w celu uzyskania opinii od użytkownika
B. Rozwojem produktu w sposób iteracyjny w krótkich cyklach
C. Szczegółowym planowaniem każdego etapu projektu przed jego realizacją
D. Realizowaniem pełnej wersji produktu przed przeprowadzeniem testów

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Model prototypowy w zarządzaniu projektami to taka sprytna technika, gdzie tworzymy coś w rodzaju wczesnej wersji systemu, czyli prototypu. To nam pozwala zebrać opinie od użytkowników i przetestować różne pomysły zanim w ogóle weźmiemy się za pełną wersję. Fajną sprawą jest to, że gdy mamy ten prototyp, to łatwiej wyłapać błędy, zanim wszystko zostanie w pełni zbudowane. Największa zaleta? Możemy dostosować i poprawiać aplikację na podstawie tego, co mówią użytkownicy. Dzięki temu ryzyko, że stworzymy coś, co nie spełnia ich oczekiwań, jest znacznie mniejsze. Prototypy to często chleb powszedni w projektach UX/UI, aplikacjach webowych czy oprogramowaniu dla firm, gdzie tak istotne jest, by dobrze trafiać w potrzeby końcowych użytkowników.

Pytanie 26

Jaką istotną właściwość ma algorytm rekurencyjny?

A. Jest podzielony na wiele niezwiązanych funkcji
B. Zawiera wywołanie samego siebie
C. Funkcjonuje tylko w przypadku tablic dynamicznych
D. Wywołuje się wielokrotnie w jednej iteracji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kluczową cechą algorytmu rekurencyjnego jest to, że zawiera on wywołanie samego siebie. Rekurencja pozwala na eleganckie i zwięzłe rozwiązanie problemów, które można podzielić na mniejsze, powtarzające się podproblemy. Każde wywołanie rekurencyjne zmniejsza złożoność problemu, aż do osiągnięcia przypadku bazowego, który kończy dalsze wywołania i rozpoczyna proces zwracania wyników w górę stosu wywołań. Rekurencja znajduje zastosowanie w algorytmach takich jak DFS (przeszukiwanie w głąb), sortowanie szybkie (QuickSort) oraz algorytmy obliczające wartości liczb Fibonacciego i silni.

Pytanie 27

Użycie modyfikatora abstract w definicji metody w klasie wskazuje, że

A. trzeba zaimplementować tę metodę w tej klasie
B. dziedziczenie po tej klasie jest niedozwolone
C. klasy pochodne nie mogą implementować tej metody
D. klasa ta stanowi podstawę dla innych klas

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator abstract w definicji metody jasno wskazuje, że dana klasa jest przeznaczona do dalszego dziedziczenia i stanowi coś w rodzaju szablonu dla innych klas. W praktyce – jeśli w klasie pojawia się choć jedna metoda abstract, cała klasa musi być także oznaczona jako abstract. To taki sygnał: hej, tej klasy nie da się użyć bezpośrednio, ale możesz po niej dziedziczyć i dopiero tam zaimplementować szczegóły. Moim zdaniem to bardzo wygodne, bo pozwala z góry narzucić kontrakt na klasy pochodne – mają dostarczyć własne wersje abstrakcyjnych metod. W wielu językach obiektowych, jak C# czy Java, stosowanie klas abstrakcyjnych jest powszechną praktyką przy projektowaniu rozbudowanych aplikacji, gdzie ważne jest rozdzielenie ogólnej logiki od szczegółowych implementacji. Daje to sporą elastyczność i chroni przed przypadkowymi błędami, kiedy ktoś próbowałby utworzyć obiekt klasy, która nie ma pełnej funkcjonalności. Często spotyka się to np. przy projektowaniu hierarchii typu Zwierzę → Pies/Kot, gdzie klasa Zwierzę jest abstrakcyjna i zawiera np. metodę abstract WydajDźwięk(). Dzięki temu każde konkretne zwierzę musi zaimplementować własną wersję tej metody, a całość kodu jest czytelniejsza i łatwiej ją rozwijać. Zdecydowanie warto poznać ten mechanizm, bo to fundament nowoczesnego programowania obiektowego i coś, co codziennie przydaje się w pracy programisty.

Pytanie 28

Co oznacza walidacja kodu programu?

A. Czynnością weryfikującą poprawność i zgodność kodu z założeniami
B. Czynnością polegającą na kompilowaniu kodu
C. Czynnością związaną z tworzeniem dokumentacji kodu
D. Czynnością dotyczącą publikacji aplikacji w sklepie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Walidacja kodu programu to proces sprawdzania jego poprawności i zgodności z założeniami projektowymi oraz standardami programistycznymi. Celem walidacji jest wykrycie błędów logicznych, składniowych i zgodności kodu z wymaganiami aplikacji. Walidacja może obejmować analizę statyczną kodu (bez jego wykonywania) oraz testy jednostkowe i integracyjne, które sprawdzają funkcjonalność aplikacji. Dzięki walidacji programiści mogą uniknąć błędów na późniejszych etapach rozwoju projektu, co znacząco zwiększa niezawodność i stabilność aplikacji. Proces ten jest nieodzowny w metodykach Agile i Continuous Integration, gdzie regularne testowanie kodu stanowi podstawę dostarczania wysokiej jakości oprogramowania.

Pytanie 29

Która z poniższych metod nie należy do cyklu życia komponentu w React.js?

A. componentDidMount()
B. componentDidUpdate()
C. componentWillPublish()
D. componentWillUnmount()

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Metoda componentWillPublish() nie jest częścią cyklu życia komponentu w React.js, co czyni ją poprawną odpowiedzią na to pytanie. W React.js istnieje szereg zdefiniowanych metod cyklu życia, które umożliwiają programistom zarządzanie stanem komponentów w określonych momentach ich istnienia. Do najbardziej istotnych z nich należą: componentDidMount(), componentDidUpdate() oraz componentWillUnmount(). Metoda componentDidMount() jest wywoływana po zamontowaniu komponentu w DOM, co pozwala na inicjalizację danych, takich jak pobieranie danych z API. Z kolei componentDidUpdate() jest wywoływana, gdy komponent zostaje zaktualizowany, co jest doskonałym momentem na reagowanie na zmiany w stanie lub propach. Metoda componentWillUnmount() jest wywoływana tuż przed odmontowaniem komponentu, co jest przydatne do czyszczenia zasobów, takich jak anulowanie subskrypcji lub usuwanie nasłuchiwaczy. Zrozumienie tych metod jest kluczowe dla efektywnego zarządzania cyklem życia komponentów w aplikacjach React, co prowadzi do lepszej wydajności i utrzymania kodu.

Pytanie 30

Jak w CSS definiuje się element, który ma reagować na najechanie kursorem?

A. :hover
B. :mouse
C. :click
D. :over

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź :hover jest poprawna, ponieważ w CSS pseudo-klasa :hover jest używana do definiowania stylów elementu, gdy kursor myszy znajduje się nad tym elementem. Jest to niezwykle przydatne w tworzeniu interaktywnych stron internetowych, ponieważ umożliwia twórcom zwiększenie responsywności elementów, takich jak przyciski, linki czy obrazy. Przykładowo, można zastosować :hover do zmiany koloru tła przycisku, co wskazuje użytkownikom, że dany element jest aktywny i gotowy do interakcji. Zastosowanie tej pseudo-klasy nie tylko poprawia estetykę strony, ale również zwiększa jej użyteczność oraz dostępność, co jest zgodne z dobrymi praktykami w projektowaniu UI/UX. Należy pamiętać, że :hover działa tylko w przeglądarkach obsługujących CSS, a efekty związane z tą pseudo-klasą są natychmiastowe, co sprawia, że są one bardzo efektywne w zastosowaniu. Warto również zaznaczyć, że w przypadku urządzeń dotykowych, takich jak smartfony, reakcja na najechanie może być symulowana poprzez dotknięcie ekranu, co sprawia, że ta technika jest uniwersalna.

Pytanie 31

Jakie jest główne zadanie debuggera w środowisku programowania?

A. Tworzenie kodu źródłowego
B. Generowanie plików wykonywalnych
C. Kompilowanie kodu źródłowego
D. Analiza i usuwanie błędów w kodzie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Debugger to narzędzie programistyczne służące do analizy i usuwania błędów w kodzie źródłowym. Pozwala na krokowe wykonywanie programu, śledzenie wartości zmiennych i identyfikowanie miejsc, w których występują błędy logiczne lub składniowe. Debugger umożliwia zatrzymanie wykonania programu w dowolnym miejscu, ustawienie tzw. breakpointów (punktów przerwania) i monitorowanie przepływu sterowania. Dzięki temu programista może dokładnie przeanalizować, dlaczego program nie działa zgodnie z oczekiwaniami i szybko znaleźć przyczynę problemu. Debuggery są dostępne w większości zintegrowanych środowisk programistycznych (IDE), takich jak Visual Studio, PyCharm czy IntelliJ IDEA.

Pytanie 32

Jak określa się proces transferu danych z lokalnego komputera na serwer?

A. Pobieranie danych
B. Przesyłanie danych
C. Wysyłanie danych
D. Streaming

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Proces przesyłania danych z komputera lokalnego na serwer nazywany jest wysyłaniem danych. To kluczowy element komunikacji w sieciach komputerowych, który wskazuje na transfer informacji z jednego punktu do drugiego. Wysyłanie danych odbywa się za pomocą różnych protokołów, takich jak FTP (File Transfer Protocol), HTTP (Hypertext Transfer Protocol) czy SFTP (Secure File Transfer Protocol). Przykładem może być przesyłanie plików z komputera na zdalny serwer, co jest powszechnie wykorzystywane w przypadku tworzenia stron internetowych. W kontekście aplikacji, wysyłanie danych może dotyczyć również przesyłania formularzy do bazy danych. Ważne jest, aby dane były odpowiednio pakowane i kodowane w celu zapewnienia ich integralności oraz bezpieczeństwa. Stosowanie protokołów szyfrowania, takich jak SSL/TLS, dodatkowo zabezpiecza proces, co jest istotne w dobie rosnących zagrożeń cybernetycznych. Zbierając wszystkie te elementy, wysyłanie danych jest fundamentalnym procesem w architekturze nowoczesnych systemów informatycznych.

Pytanie 33

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

A. Maksymalny zakres wartości, jakie może przyjąć zmienna danego typu
B. Ilość pamięci, jaką zmienna zajmuje podczas wykonywania programu
C. Czas życia zmiennej podczas wykonywania programu
D. Obszar kodu, w którym zmienna jest dostępna

Brak odpowiedzi na to pytanie.

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

Który z wymienionych typów kolekcji pozwala na dostęp do ostatnio dodanego elementu w pierwszej kolejności?

A. Tablica dwuwymiarowa
B. Lista
C. Kolejka
D. Stos

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Stos to struktura danych działająca na zasadzie LIFO (Last In First Out), co oznacza, że ostatnio dodany element jest usuwany jako pierwszy. Stos znajduje zastosowanie w implementacji mechanizmu wywołań rekurencyjnych, zarządzaniu pamięcią oraz w operacjach związanych z cofaniem i przywracaniem stanu (np. cofanie operacji w edytorach tekstów). Dzięki swojej prostocie stosy są fundamentalnym elementem w programowaniu, szczególnie w językach niskopoziomowych.

Pytanie 35

Jaką rolę odgrywa program Jira?

A. Planowanie, śledzenie oraz raportowanie zadań projektowych
B. Zarządzanie edycjami systemu operacyjnego
C. Produkcja grafik 3D
D. Modyfikowanie arkuszy kalkulacyjnych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Jira to jedno z najpopularniejszych narzędzi do zarządzania projektami, wykorzystywane głównie w metodykach Agile i Scrum. Umożliwia planowanie, monitorowanie i raportowanie zadań projektowych na różnych etapach ich realizacji. Dzięki elastycznym tablicom kanban i sprintom, Jira pozwala zespołom programistycznym śledzić postępy, zarządzać backlogiem oraz efektywnie przydzielać zasoby. Funkcjonalności takie jak automatyzacja procesów, śledzenie błędów (bug tracking) i integracja z innymi narzędziami (np. GitHub, Bitbucket) sprawiają, że Jira jest wszechstronnym rozwiązaniem do zarządzania nawet najbardziej złożonymi projektami. Dzięki generowanym raportom i wykresom burndown, menedżerowie mogą dokładnie analizować tempo pracy i podejmować decyzje w oparciu o dane.

Pytanie 36

Który z poniższych przykładów stanowi aplikację mobilną wykorzystującą bazę danych?

A. Aplikacja wyświetlająca lokalny czas
B. Aplikacja do robienia zdjęć
C. Aplikacja kalkulator
D. Aplikacja gromadząca listę kontaktów użytkownika

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Aplikacja przechowująca listę kontaktów użytkownika korzysta z bazy danych do przechowywania, odczytywania i zarządzania danymi. Tego typu aplikacje mobilne muszą efektywnie zarządzać dużą ilością danych i zapewniać ich szybki dostęp. Bazy danych, takie jak SQLite czy Firebase, są szeroko stosowane w aplikacjach mobilnych, umożliwiając przechowywanie kontaktów, wiadomości, notatek i innych informacji użytkownika. Dzięki bazom danych możliwe jest także synchronizowanie danych pomiędzy urządzeniami i przechowywanie ich w chmurze.

Pytanie 37

Które z poniższych NIE jest zasadą programowania SOLID?

A. Code Reuse Principle (Zasada ponownego użycia kodu)
B. Open/Closed Principle (Zasada otwarte/zamknięte)
C. Dependency Inversion Principle (Zasada odwrócenia zależności)
D. Single Responsibility Principle (Zasada pojedynczej odpowiedzialności)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź "Code Reuse Principle" jest prawidłowa, ponieważ nie stanowi ona jednej z pięciu zasad programowania SOLID. SOLID to akronim, który odnosi się do pięciu podstawowych zasad, które mają na celu ułatwienie tworzenia oprogramowania, które jest łatwe w utrzymaniu i rozwijaniu. W skład tych zasad wchodzą: Zasada pojedynczej odpowiedzialności (Single Responsibility Principle), Zasada otwarte/zamknięte (Open/Closed Principle), Zasada segregacji interfejsów (Interface Segregation Principle), Zasada odwrócenia zależności (Dependency Inversion Principle) oraz Zasada Liskov (Liskov Substitution Principle). Przykładowo, Zasada pojedynczej odpowiedzialności zakłada, że każda klasa powinna mieć jedną, jasno określoną odpowiedzialność, co pozwala na łatwiejsze testowanie i modyfikowanie kodu bez wpływu na inne jego części. Użycie zasad SOLID w praktyce prowadzi do lepszego rozdzielenia logiki aplikacji i ułatwia jej rozwój oraz utrzymanie, co jest kluczowe w długoterminowych projektach programistycznych.

Pytanie 38

Co należy do zadań interpretera?

A. ulepszanie większej części kodu, aby przyspieszyć jego wykonanie
B. sprawdzanie składni całego programu przed jego uruchomieniem
C. przekładanie kodu na kod maszynowy
D. wykonanie skryptu instrukcja po instrukcji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Interpreter to taki program, który odczytuje kod źródłowy i wykonuje go krok po kroku, instrukcja po instrukcji, bez wcześniejszego tłumaczenia całości na kod maszynowy. W praktyce oznacza to, że interpreter analizuje każdą linię lub blok kodu i natychmiast realizuje odpowiadające im działania na komputerze. Przykładem są języki takie jak Python czy JavaScript – tam właśnie interpreter gra główną rolę. Umożliwia to szybkie testowanie i prototypowanie, bo nie trzeba czekać na kompilację całego programu, wystarczy wpisać polecenie i od razu widzimy efekt. Moim zdaniem to genialne rozwiązanie zwłaszcza do nauki programowania czy pisania prostych skryptów systemowych, gdzie liczy się szybka informacja zwrotna. Warto wiedzieć, że interpreter nie generuje pliku wykonywalnego na stałe – każdy raz trzeba uruchomić kod za jego pośrednictwem. W branży często używa się interpreterów do automatyzacji zadań, analizy danych czy tworzenia narzędzi do testów. Z własnego doświadczenia wiem, że interpreter pozwala łatwo wyłapać błędy logiczne na bieżąco, chociażby w konsoli Pythona. To świetne narzędzie, gdy chcemy eksperymentować z kodem, bo nic nie stoi na przeszkodzie, żeby szybko coś zmodyfikować i od razu zobaczyć rezultat. Trzeba tylko pamiętać, że takie podejście czasem może być wolniejsze niż wykonanie kodu skompilowanego, ale w wielu zadaniach wygoda i elastyczność przeważają nad wydajnością.

Pytanie 39

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

A. Zwiększona efektywność pracy
B. Obniżony nastrój w ciągu dnia
C. Ostry ból w klatce piersiowej
D. Intensywne pocenie się w gorącym otoczeniu

Brak odpowiedzi na to pytanie.

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

Pytanie 40

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

A. JavaScript
B. CSS
C. HTTP
D. SQL

Brak odpowiedzi na to pytanie.

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