Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 17 grudnia 2025 13:45
  • Data zakończenia: 17 grudnia 2025 13:58

Egzamin zdany!

Wynik: 23/40 punktów (57,5%)

Wymagane minimum: 20 punktów (50%)

Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Który z wymienionych typów danych należy do typu logicznego?

A. int
B. bool
C. char
D. float
Typ danych 'bool' (boolean) jest typem logicznym, który przechowuje jedną z dwóch wartości: 'true' lub 'false'. Typy logiczne są nieodłącznym elementem programowania, ponieważ umożliwiają implementację warunków i pętli sterujących przepływem programu. Typ 'bool' znajduje zastosowanie w praktycznie każdym języku programowania, w tym C++, Java, Python i C#. Operacje logiczne, takie jak 'AND', 'OR' i 'NOT', opierają się na wartościach typu 'bool', co czyni je podstawą dla algorytmów decyzyjnych i strukturalnych. Zastosowanie typów logicznych zwiększa czytelność kodu i pozwala na efektywne zarządzanie warunkami logicznymi.

Pytanie 2

Jakie są różnice między dialogiem modalnym a niemodalnym?

A. Dialog modalny umożliwia interakcję z innymi oknami aplikacji, a dialog niemodalny tego nie pozwala
B. Dialog modalny działa w tle, podczas gdy dialog niemodalny jest zawsze wyświetlany na pierwszym planie
C. Dialog modalny jest ograniczony wyłącznie do aplikacji konsolowych
D. Dialog modalny wymaga zamknięcia, aby powrócić do głównego okna aplikacji, natomiast dialog niemodalny tego nie wymaga
Stwierdzenie, że dialog modalny działa w tle, jest błędne – dialog modalny jest zawsze na pierwszym planie i blokuje interakcję z innymi oknami aplikacji. Niemodalny dialog to ten, który działa w tle i nie wymaga natychmiastowej reakcji użytkownika. Określenie, że dialog modalny pozwala na interakcję z innymi oknami aplikacji, to nieporozumienie – to właśnie dialog niemodalny umożliwia taką interakcję. Stwierdzenie, że dialog modalny jest ograniczony tylko do aplikacji konsolowych, jest błędne – dialogi modalne są powszechnie stosowane w aplikacjach desktopowych i graficznych, a nie w aplikacjach konsolowych, gdzie interakcja odbywa się głównie za pomocą tekstu.

Pytanie 3

Jaką rolę odgrywa pamięć operacyjna (RAM) w komputerowym systemie?

A. Zarządzanie transferem danych pomiędzy urządzeniami wejścia/wyjścia
B. Trwałe przechowywanie systemu operacyjnego
C. Umożliwienie tworzenia kopii zapasowej danych użytkownika
D. Tymczasowe magazynowanie danych i instrukcji dla procesora
Pamięć operacyjna, znana jako RAM (Random Access Memory), odgrywa kluczową rolę w funkcjonowaniu systemu komputerowego. Jej głównym zadaniem jest tymczasowe przechowywanie danych i instrukcji, które są niezbędne dla procesora w trakcie wykonywania programów. Kiedy uruchamiamy aplikację, jej kod oraz dane są ładowane z pamięci masowej (np. dysku twardego) do pamięci RAM, co umożliwia szybki dostęp do nich przez procesor. Dzięki dużej prędkości działania pamięć operacyjna znacząco przyspiesza procesy obliczeniowe, ponieważ operacje na danych przechowywanych w RAM są wielokrotnie szybsze niż na danych znajdujących się na dysku twardym. Współczesne komputery często wyposażone są w kilka gigabajtów pamięci RAM, co pozwala na efektywne zarządzanie wieloma uruchomionymi aplikacjami jednocześnie. Standardy takie jak DDR4 i DDR5 określają nie tylko wydajność, ale również szybkość przesyłania danych, co ma kluczowe znaczenie w kontekście wydajności systemu komputerowego. W efekcie, pamięć operacyjna jest niezbędna do płynnego działania systemu operacyjnego oraz aplikacji, a jej pojemność i szybkość mają bezpośredni wpływ na ogólną wydajność komputera.

Pytanie 4

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

A. Intensywne pocenie się w gorącym otoczeniu
B. Zwiększona efektywność pracy
C. Obniżony nastrój w ciągu dnia
D. Ostry ból w klatce piersiowej
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 5

Zaprezentowany symbol odnosi się do

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

Pytanie 6

W jakim celu wykorzystuje się diagram Gantta?

A. do dokładnej analizy czasowo-kosztowej projektu
B. do wizualizacji powiązań między elementami systemów
C. do przedstawiania funkcjonalności systemu
D. do planowania i zarządzania projektem
Diagram Gantta to jeden z podstawowych i – moim zdaniem – najfajniejszych narzędzi używanych w zarządzaniu projektami, zwłaszcza w budowlance, IT czy produkcji. Jest bardzo praktyczny, bo pozwala wizualnie rozplanować, jakie zadania są do wykonania, ile mają trwać i co od czego zależy. Dzięki prostemu układowi poziomych pasków na osi czasu można szybko ogarnąć całość projektu, zobaczyć które zadania się pokrywają i gdzie mogą być wąskie gardła. Branżowe standardy, np. PMBOK, zalecają korzystanie z diagramu Gantta właśnie do planowania i monitorowania postępu. Z mojego doświadczenia to narzędzie, które łączy ludzi – wszyscy od razu widzą, kto co robi i na kiedy. Fajne jest też to, że łatwo aktualizować taki diagram w miarę zmian w projekcie. Diagram Gantta pomaga też w kontroli terminowości i identyfikacji opóźnień. Jeśli ktoś kiedyś miał styczność z programami jak MS Project czy nawet prostym Excelem – na pewno widział taki wykres. Można tam nawet dodać kamienie milowe czy zależności między zadaniami (np. jedno musi się skończyć, zanim drugie się zacznie). Tak naprawdę, w profesjonalnych firmach, zarządzanie projektem bez takiego narzędzia byłoby trochę strzałem w stopę.

Pytanie 7

Który z wymienionych elementów stanowi przykład zbiorowej ochrony?

A. Zatyczki do uszu
B. Kask ochronny
C. Ekran akustyczny
D. Okulary ochronne
Ekran akustyczny to przykład środka ochrony zbiorowej, który redukuje poziom hałasu w miejscu pracy, chroniąc większą grupę pracowników jednocześnie. Środki ochrony zbiorowej mają na celu eliminowanie zagrożeń u źródła i zabezpieczanie całego środowiska pracy, a nie pojedynczych osób. Ekrany akustyczne są często stosowane w zakładach produkcyjnych, gdzie hałas maszyn może przekraczać dopuszczalne normy. Dzięki nim można zmniejszyć poziom hałasu i poprawić komfort pracy, bez konieczności wyposażania każdego pracownika w ochronniki słuchu. Środki ochrony zbiorowej są bardziej efektywne w długoterminowej perspektywie, ponieważ zmniejszają ryzyko dla wszystkich pracowników na danym stanowisku.

Pytanie 8

Jakie z wymienionych działań jest fundamentalne w modelu kaskadowym?

A. Przeprowadzanie testów systemu po zakończeniu każdej fazy
B. Zakończenie jednej fazy przed rozpoczęciem następnej
C. Równoległe prowadzenie wielu etapów projektu
D. Iteracyjne wprowadzanie modyfikacji na każdym poziomie
Kończenie jednej fazy przed rozpoczęciem kolejnej to kluczowa cecha modelu kaskadowego (Waterfall). W tym podejściu projekt jest realizowany etapami – analiza, projektowanie, implementacja, testowanie i wdrożenie – bez możliwości powrotu do poprzednich faz. Dzięki temu model Waterfall jest przejrzysty i łatwy do zarządzania, szczególnie w projektach o stabilnych wymaganiach. Jednak jego ograniczeniem jest brak elastyczności, co może prowadzić do problemów, jeśli wymagania zmienią się w trakcie trwania projektu.

Pytanie 9

W podanym fragmencie kodu Java wskaż, która zmienna może przechować wartość "T":

int zm1;
float zm2;
char zm3;
boolean zm4;
A. zm3
B. zm4
C. zm1
D. zm2
Zmienna o nazwie zm3 została zadeklarowana jako typu char co oznacza że może przechowywać pojedynczy znak w tym przypadku wartość T. Typ char w języku Java jest używany do przechowywania znaków Unicode co czyni go idealnym do obsługi liter jako danych. Każdy znak jest przechowywany jako 16-bitowa wartość liczby całkowitej co umożliwia reprezentację szerokiego zakresu symboli w tym litery cyfry i inne znaki specjalne. Przykładowymi zastosowaniami typu char są przypadki gdzie konieczne jest przechowywanie i przetwarzanie liter np. w sytuacjach gdy aplikacja wymaga manipulacji pojedyńczymi znakami w tekście czy analizą ich wartości w kontekście porównywania danych. Dobre praktyki przy pracy z typem char obejmują świadome zarządzanie pamięcią i unikanie niepotrzebnych konwersji do innych typów danych co może prowadzić do strat precyzji lub nieoczekiwanych rezultatów. Ważne jest także zrozumienie jak znaki są kodowane i dekodowane szczególnie w kontekście międzynarodowym gdzie prawidłowa obsługa znaków Unicode jest kluczowa dla zapewnienia kompatybilności i poprawnego działania aplikacji w różnych językach.

Pytanie 10

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. elementy z indeksów tablicy, które są podzielne przez 3
B. wszystkie elementy tablicy, które są wielokrotnością 3
C. wszystkie elementy tablicy, które mają wartość nieparzystą
D. elementy tablicy o indeksach: 1, 2, 4, 5, 7, 8
Wiele osób przy tego typu zadaniu potrafi się pomylić przez nieuważne czytanie warunku w instrukcji if albo przez błędne założenie, że chodzi o wartości, a nie indeksy. Kod analizuje tylko indeksy tablicy. Jeżeli założy się, że warunek i % 3 != 0 dotyczy wartości tablicy, a nie samego indeksu, można dojść do wniosku, że na ekranie pojawią się elementy będące wielokrotnościami 3 lub tylko te mające wartości nieparzyste, co jednak jest niezgodne z rzeczywistością, bo tablica nie jest w ogóle inicjalizowana konkretnymi danymi. Zamiast tego, pętla iteruje po i od 0 do 9 i sprawdza, czy indeks nie jest podzielny przez 3. Elementy o indeksach podzielnych przez 3 (czyli 0, 3, 6, 9) są pomijane, więc wyświetlone są tylko te z pozostałych indeksów. Często też popełnia się błąd, myląc warunek „podzielny przez 3” z „niepodzielny przez 3”, co zmienia zupełnie sens działania programu. Dobrą praktyką jest zawsze dokładnie sprawdzać, czy warunek odnosi się do indeksu, czy do wartości oraz jaki jest operator porównania w if-ie. Z mojego doświadczenia wynika, że takie drobiazgi potrafią prowadzić do naprawdę irytujących błędów podczas rozwiązywania większych problemów algorytmicznych. Ważne jest także, by pamiętać, że jeżeli tablica int nie jest zainicjalizowana, nie ma sensu analizować wartości, bo mogą być losowe. Tu liczył się wyłącznie indeks i jego podzielność przez 3, więc każda odpowiedź opierająca się na wartościach elementów zamiast ich położenia jest nietrafiona. Warto na przyszłość dokładnie analizować, czego dotyczy warunek i jakie dane są rzeczywiście dostępne w danej chwili programu.

Pytanie 11

Z jakiej kolekcji powinno się korzystać, aby przechowywać informacje związane z elementem interfejsu użytkownika w taki sposób, aby ten element był informowany przez kolekcję o dodaniu, usunięciu lub zmianie jej zawartości?

A. ReadOnlyCollection
B. ObservableCollection
C. Collection
D. KeyedCollection
Wiele osób potrafi pomylić, która kolekcja faktycznie nadaje się do powiązania z elementem UI, szczególnie gdy pracują z .NET i mają do wyboru tyle różnych klas. Collection czy KeyedCollection mogą kusić, bo na pierwszy rzut oka wydają się elastyczne – Collection to po prostu bazowa kolekcja generyczna, można ją dziedziczyć i rozszerzać, ale nie powiadamia automatycznie interfejsu o zmianach. KeyedCollection to niby sprytna hybryda listy i słownika, czasem się przydaje, gdy potrzebujesz szybkiego wyszukiwania po kluczu, ale znowu – nie ma mechanizmu powiadomień, więc UI się w ogóle o niczym nie dowie. Niektórzy błędnie myślą, że jakakolwiek kolekcja generyczna wystarczy do zbudowania dynamicznego widoku, ale to niestety prowadzi do konieczności manualnego odświeżania widoków albo tworzenia niepotrzebnych wrapperów. ReadOnlyCollection wydaje się atrakcyjna, bo zapewnia bezpieczeństwo, nie pozwala na modyfikacje przez użytkownika, ale tak naprawdę to tylko opakowanie, które nie wnosi żadnych zdarzeń informujących o zmianach. Moim zdaniem, jeśli zależy Ci na nowoczesnym, elastycznym i dynamicznym interfejsie opartym o wzorce MVVM czy MVU, to tylko ObservableCollection daje sensowne narzędzia do pracy. Pozostałe typy kolekcji są świetne, ale bardziej do scenariuszy nieinteraktywnych albo tam, gdzie synchronizacja z widokiem nie jest wymagana. Typowym błędem jest myślenie, że wystarczy po prostu zamienić List na cokolwiek innego, a UI się jakoś „odświeży” samo – to niestety tak nie działa. Prawidłowe powiązanie danych w .NET wymaga wsparcia dla notyfikacji zmian, a to zapewnia wyłącznie ObservableCollection i implementacje interfejsów powiadamiających o zmianie stanu kolekcji.

Pytanie 12

Jakie jest najważniejsze działanie w trakcie analizy wymagań klienta przed rozpoczęciem realizacji projektu aplikacji?

A. Rozdzielenie ról w zespole projektowym
B. Stworzenie diagramu Gantta
C. Zrozumienie potrzeb biznesowych i oczekiwań klienta
D. Selekcja języka programowania
Fajnie, że zauważyłeś, jak ważne jest zrozumienie potrzeb biznesowych i oczekiwań klienta. To kluczowa sprawa przed rozpoczęciem pracy nad projektem aplikacji. Bez tego, nawet najfajniejszy kod może nie spełniać wymagań, a to byłoby szkoda, prawda? Analiza wymagań to nie tylko rozpoznanie celów, ale też spotkania z osobami zaangażowanymi w projekt i zbadanie rynku. Dzięki temu możemy stworzyć aplikację, która naprawdę odpowiada na specyficzne potrzeby, co czyni ją bardziej użyteczną i konkurencyjną. No i oczywiście, jak dobrze określimy, czego potrzebują użytkownicy, to mniej nieporozumień po drodze, a klienci będą bardziej zadowoleni, co zawsze jest na plus.

Pytanie 13

Która z poniższych technologii służy do tworzenia interfejsu użytkownika zarówno dla aplikacji webowych jak i mobilnych?

A. jQuery
B. Angular
C. Vue.js
D. React Native
React Native to framework stworzony przez Facebook, który pozwala na tworzenie natywnych aplikacji mobilnych przy użyciu JavaScriptu oraz React. Jego największą zaletą jest możliwość współdzielenia kodu pomiędzy aplikacjami mobilnymi a webowymi, co znacząco przyspiesza proces developmentu i redukuje koszty. React Native umożliwia wykorzystanie jednego kodu źródłowego do budowy aplikacji zarówno na systemy iOS, jak i Android, co jest idealnym rozwiązaniem w kontekście rosnącego zapotrzebowania na aplikacje wieloplatformowe. Framework ten korzysta z natywnych komponentów UI, co przekłada się na wysoką wydajność oraz natywne wrażenia użytkownika. Przykłady zastosowania React Native można znaleźć w popularnych aplikacjach, takich jak Instagram czy Airbnb, które z powodzeniem wykorzystują ten framework do tworzenia dynamicznych i responsywnych interfejsów. Dobre praktyki przy używaniu React Native obejmują optymalizację komponentów, stosowanie odpowiednich bibliotek do nawigacji oraz zarządzania stanem aplikacji.

Pytanie 14

Która funkcja z biblioteki jQuery w JavaScript służy do naprzemiennego dodawania oraz usuwania klasy z elementu?

A. .changeClass()
B. .switchClass()
C. .toggleClass()
D. .bingClass()
Wybrałeś .toggleClass() i to jest strzał w dziesiątkę pod względem praktycznego stosowania jQuery. Funkcja .toggleClass() dokładnie odpowiada na potrzebę dynamicznej zmiany wyglądu elementu — pozwala jednym wywołaniem dodać klasę, jeśli jej nie ma, albo usunąć, jeśli już istnieje. To niesamowicie przydatne, zwłaszcza przy tworzeniu efektów interaktywnych, takich jak menu rozwijane, animacje kliknięcia, czy zmiany stanów przycisków. W praktyce wygląda to często tak: $('div').toggleClass('active'), gdzie po każdym kliknięciu div otrzymuje lub traci klasę 'active'. Warto zauważyć, że .toggleClass() obsługuje też opcjonalny drugi argument typu boolean, więc możesz wymusić dodanie lub usunięcie klasy zależnie od logiki — to takie jQuery’owe „sprytne przełączanie”. Z mojego doświadczenia, ta metoda jest zdecydowanie jednym z fundamentów, kiedy chodzi o szybkie prototypowanie i pisanie kodu front-endowego zgodnego z zasadami DRY (Don’t Repeat Yourself). Dobrą praktyką jest też, żeby nie nadużywać tej funkcji do zbyt skomplikowanych operacji, bo wtedy łatwo się pogubić w logice klas CSS. No i jak patrzę na projekty w branży, to .toggleClass() jest stosowane praktycznie wszędzie tam, gdzie chodzi o responsywną zmianę interfejsu klienta bez potrzeby pisania rozbudowanego JavaScriptu.

Pytanie 15

Który z poniższych języków programowania jest statycznie typowany?

A. JavaScript
B. PHP
C. Ruby
D. TypeScript
Odpowiedzi JavaScript, PHP i Ruby są przykładami języków programowania, które są statycznie typowane, co jest niepoprawne. JavaScript jest językiem dynamicznie typowanym, co oznacza, że typy zmiennych są określane w czasie wykonywania, a nie w czasie kompilacji. To podejście, choć elastyczne, może prowadzić do błędów, których nie widać do momentu uruchomienia programu. Na przykład, w JavaScript można przypisać do zmiennej wartość liczbową, a następnie przypisać do niej wartość tekstową, co może prowadzić do nieprzewidzianych problemów w logice aplikacji. PHP także jest językiem dynamicznie typowanym, co oznacza, że nie wymaga określenia typów zmiennych przed ich użyciem. Choć PHP oferuje pewne mechanizmy do wprowadzania typowania, to jego zachowanie jest bardziej bliskie dynamicznemu podejściu niż statycznemu, co może obniżać jakość kodu i prowadzić do trudności w jego utrzymaniu. Ruby, podobnie jak poprzednie języki, również charakteryzuje się dynamicznym typowaniem, co sprawia, że programiści mogą łatwo zmieniać typy zmiennych w trakcie działania programu, ale znowu, takie podejście niesie ze sobą ryzyko błędów, które mogą być trudne do zdiagnozowania. Te przykłady ilustrują, jak dynamiczne typowanie może prowadzić do pomyłek i błędów w programach, dlatego statyczne typowanie, jak w TypeScript, jest często preferowane w projektach o większej skali oraz tam, gdzie wymagane jest wysokie bezpieczeństwo kodu.

Pytanie 16

Do implementacji w aplikacji jednokierunkowej funkcji skrótu, zwanej funkcją haszującą, można wykorzystać algorytm

A. RSA
B. MD5
C. AES
D. DES
MD5 to przykład klasycznej funkcji skrótu, czyli właśnie tej funkcji, która generuje z dowolnie długych danych wejściowych stałej długości skrót (hash). Funkcje haszujące są szeroko stosowane w informatyce, szczególnie tam, gdzie potrzebna jest szybka weryfikacja integralności danych albo przechowywanie haseł w bazie danych w sposób bezpieczny (chociaż MD5 dziś już nie poleca się do haseł przez znane luki bezpieczeństwa – lepsze są SHA-256 czy bcrypt). To, co wyróżnia funkcje skrótu jak MD5, to ich jednokierunkowość: znając wynik, praktycznie nie jesteśmy w stanie odtworzyć oryginalnych danych wejściowych, a nawet minimalnie różniące się dane dają zupełnie inne hashe. Przykład praktyczny? Sprawdzenie sumy kontrolnej pliku po pobraniu z internetu – porównujemy hash MD5 z podanym na stronie wydawcy i mamy pewność, że plik nie został podmieniony. W praktyce branżowej, zgodnie z normami bezpieczeństwa jak np. ISO/IEC 27001, funkcje haszujące są podstawą wielu procesów kryptograficznych. Moim zdaniem, znajomość takich algorytmów jak MD5, nawet jeśli już nie jest zalecany w nowych systemach, to podstawa do zrozumienia ogólnego działania funkcji skrótu i różnicy między nimi a szyfrowaniem. Często spotykałem się z myleniem tych pojęć, więc warto to dobrze rozumieć.

Pytanie 17

Który z podanych algorytmów można zrealizować zarówno w sposób iteracyjny, jak i rekurencyjny?

A. Algorytm sortowania bąbelkowego
B. Algorytm wyszukiwania binarnego
C. Algorytm generowania liczb losowych
D. Algorytm mapowania kluczy w tablicach asocjacyjnych
Sortowanie bąbelkowe to algorytm iteracyjny i nie ma naturalnej wersji rekurencyjnej, ponieważ jego działanie opiera się na powtarzających się pętlach. Algorytm mapowania kluczy w tablicach asocjacyjnych nie korzysta z rekurencji – jest to proces przypisywania wartości do odpowiednich kluczy, który realizowany jest w sposób iteracyjny. Algorytm generowania liczb losowych nie wymaga rekurencji ani iteracji – jest to operacja oparta na wywołaniu odpowiednich funkcji w zależności od użytej biblioteki i języka programowania.

Pytanie 18

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

A. Streaming
B. Pobieranie danych
C. Przesyłanie danych
D. Wysyłanie danych
Pojęcia takie jak pobieranie danych, przesyłanie danych oraz streaming są często mylone z wysyłaniem danych, jednak każde z nich ma swoją unikalną definicję i zastosowanie. Pobieranie danych odnosi się do procesu ściągania informacji z serwera na komputer lokalny. Jest to operacja odwrotna do wysyłania danych i jest kluczowa dla użytkowników, którzy chcą uzyskać dostęp do plików lub zasobów umieszczonych na serwerze. Przykładowo, podczas przeglądania internetu, przeglądarka pobiera dane z serwerów, aby wyświetlić stronę użytkownikowi. Przesyłanie danych, z kolei, to termin ogólny, który można wykorzystać do opisania dowolnej wymiany informacji między lokalnym a zdalnym systemem. Obejmuje zarówno wysyłanie, jak i pobieranie danych, co sprawia, że użycie go w kontekście konkretnej operacji może być mylące. Wreszcie, streaming odnosi się do strumieniowego przesyłania danych, które umożliwia użytkownikom nieprzerwaną transmisję multimediów, takich jak filmy czy muzyka, w czasie rzeczywistym. W tym przypadku, dane są przesyłane w małych partiach, co pozwala na ich natychmiastowe odtwarzanie, a nie przechowywanie lokalnie. W związku z tym, choć wszystkie te procesy dotyczą transferu danych, to tylko wysyłanie danych odnosi się do przesyłania informacji z komputera lokalnego na serwer.

Pytanie 19

Zaproponowany fragment kodu w Android Studio realizuje metodę nasłuchującą do obsługi wydarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. zmiany stanu kontrolki Switch
B. wybór daty
C. zmiany w polu tekstowym
D. naciśnięcia przycisku
Metoda OnClickListener, to coś, co na pewno warto znać, gdy pracujesz z aplikacjami na Androida. Gdy użytkownik klika przycisk, wywoływana jest metoda onClick. I tu możesz zrobić różne rzeczy, jak na przykład przejść do innego ekranu, zapisać dane albo uruchomić jakąś akcję w tle. To jest dobry przykład wzorca projektowego zwanego Delegacja, który pomaga oddzielić to, co widzisz w interfejsie, od tego, co dzieje się w aplikacji. Dzięki temu łatwiej zarządzać kodem i wprowadzać zmiany. Fajnie jest, gdy logikę umieszczasz w osobnych metodach, bo wtedy testowanie całej aplikacji staje się prostsze. Przykłady? Możesz na przykład użyć OnClickListenera, żeby zrobić logowanie po kliknięciu przycisku lub wysłać formularz. Pamiętaj też, żeby unikać ciężkich operacji w metodzie onClick, żeby aplikacja działała płynnie.

Pytanie 20

Czym jest 'refaktoryzacja' w kontekście inżynierii oprogramowania?

A. Usuwanie niepotrzebnych funkcji z kodu
B. Dodawanie nowych funkcji do istniejącego kodu
C. Proces modyfikowania kodu w celu poprawy jego struktury bez zmiany funkcjonalności
D. Optymalizacja wydajności poprzez zmianę algorytmów
Refaktoryzacja to kluczowy proces w inżynierii oprogramowania pozwalający na modyfikację istniejącego kodu, aby poprawić jego strukturę bez zmieniania zewnętrznego zachowania programu. To podejście jest niezwykle istotne, ponieważ kod, podobnie jak każdy inny twór ludzki, z czasem może stać się trudny do zrozumienia i utrzymania. Refaktoryzacja pomaga utrzymać kod w czystości i zrozumiałości, co jest kluczowe dla długoterminowego rozwoju projektu. Praktyczne przykłady refaktoryzacji obejmują takie działania jak eliminacja powtórzeń w kodzie, zmiana nazw zmiennych na bardziej opisowe, czy też rozdzielanie dużych funkcji na mniejsze, bardziej zrozumiałe fragmenty. Ten proces jest zgodny z zasadami KISS (Keep It Simple, Stupid) i DRY (Don't Repeat Yourself), które są fundamentami dobrych praktyk programistycznych. Moim zdaniem, regularna refaktoryzacja jest jak sprzątanie biurka - początkowo może wydawać się niepotrzebna, ale w dłuższej perspektywie znacznie ułatwia pracę. Warto dodać, że narzędzia takie jak IntelliJ IDEA czy Visual Studio oferują wsparcie dla automatycznej refaktoryzacji, co czyni ten proces bardziej efektywnym.

Pytanie 21

Która z poniższych technologii nie jest używana do tworzenia aplikacji mobilnych?

A. COBOL
B. React Native
C. Kotlin
D. Flutter
Zarówno Kotlin, React Native, jak i Flutter są nowoczesnymi technologiami używanymi do tworzenia aplikacji mobilnych, co może prowadzić do mylnych wniosków o ich przydatności w tym kontekście. Kotlin to statycznie typowany język programowania zaprojektowany jako nowoczesna alternatywa dla Javy w ekosystemie Androida. Jest w pełni kompatybilny z Javą i oferuje szereg udogodnień, które przyspieszają proces tworzenia aplikacji. React Native to framework stworzony przez Facebooka, który pozwala na budowanie aplikacji mobilnych przy użyciu JavaScriptu i Reacta. Umożliwia on programistom pisanie jednego kodu, który działa zarówno na iOS, jak i na Androida, co znacząco obniża czas i koszty prac rozwojowych. Z kolei Flutter, stworzony przez Google, to framework do budowy interfejsów użytkownika, który wykorzystuje język Dart i pozwala na tworzenie atrakcyjnych aplikacji mobilnych z jednego kodu źródłowego dla obu platform. Typowe błędy myślowe, które mogą prowadzić do pomylenia tych technologii z COBOL-em, polegają na niewłaściwym zrozumieniu ich przeznaczenia oraz kontekstu użycia. COBOL jest językiem, który nie jest dostosowany do wymagań współczesnego rozwoju aplikacji mobilnych, które wymagają elastyczności, szybkości oraz interaktywności, co jest możliwe jedynie dzięki nowoczesnym technologiom. W związku z tym, podczas nauki programowania aplikacji mobilnych, warto skupić się na nowoczesnych narzędziach i językach, które są szeroko stosowane w branży.

Pytanie 22

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

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

Pytanie 23

Który z poniższych opisów najlepiej charakteryzuje system informatyczny?

A. Zbiór urządzeń technicznych używanych w pracy biurowej
B. Zespół ludzi, procedur, oprogramowania i sprzętu służący do przetwarzania danych
C. Oprogramowanie wspierające jedynie zarządzanie danymi osobowymi
D. Sieć komputerowa, która umożliwia komunikację pomiędzy użytkownikami
Pierwsza z niepoprawnych odpowiedzi definiuje system informatyczny jedynie jako zespół urządzeń technicznych używanych do pracy biurowej. Tego rodzaju podejście jest zbyt wąskie i nie obejmuje istotnych elementów, takich jak ludzie i procedury, które są kluczowe w kontekście przetwarzania danych. Oprogramowanie i procedury są równie ważne, ponieważ stanowią podstawę dla skutecznego działania systemu informatycznego. Kolejna odpowiedź ogranicza się wyłącznie do oprogramowania wspierającego zarządzanie danymi osobowymi, co również jest nieprawidłowe. Systemy informatyczne są zdecydowanie bardziej złożone i obejmują szereg funkcjonalności, takich jak zarządzanie procesami, analizę biznesową czy integrację z innymi systemami. Ostatnia odpowiedź odnosi się do sieci komputerowej, co jest tylko jednym z komponentów systemu informatycznego. Sieć komputerowa może być wykorzystywana do komunikacji, ale nie definiuje całego systemu, ponieważ brak w niej odniesienia do ludzi, procedur i oprogramowania, które są kluczowe dla pełnego zrozumienia roli systemu informatycznego w organizacji.

Pytanie 24

Który z poniższych jest popularnym systemem zarządzania bazami danych NoSQL?

A. Oracle
B. MongoDB
C. MySQL
D. PostgreSQL
MySQL, PostgreSQL i Oracle to systemy zarządzania bazami danych, które opierają się na tradycyjnym modelu relacyjnym, co oznacza, że są zoptymalizowane do pracy z danymi, które mają ustaloną strukturę, często w postaci tabel. W tym kontekście, ich architektura i sposób przechowywania danych różnią się znacznie od systemów NoSQL, takich jak MongoDB. MySQL i PostgreSQL są znane jako bazy danych SQL, co oznacza, że wykorzystują język zapytań SQL do interakcji z danymi. Dzięki temu są one szczególnie skuteczne w przypadkach, gdzie dane mają ściśle zdefiniowaną strukturę i relacje między nimi są kluczowe, ale mogą być mniej elastyczne w obsłudze danych o zróżnicowanej strukturze. Oracle to z kolei jeden z najbardziej rozbudowanych i kompleksowych systemów zarządzania bazami danych, jednak jego złożoność oraz koszty mogą być barierą dla mniejszych projektów. Wybierając system zarządzania bazą danych, warto zwrócić uwagę na specyfikę wymagań aplikacji oraz rodzaj przechowywanych danych. Przyjęcie błędnych założeń co do modelu danych może prowadzić do trudności w skalowaniu, ograniczonej wydajności oraz większych kosztów utrzymania. Dlatego kluczowe jest zrozumienie, że wybór między systemami SQL a NoSQL powinien być uzależniony od charakterystyki danych i wymagań projektowych.

Pytanie 25

Na podstawie zamieszczonego fragmentu kodu można stwierdzić, że element o nazwie rysunek jest

MojaKlasa obj1 = new MojaKlasa();
obj1.rysunek();
A. metodą w klasie
B. polem w klasie
C. konstruktorem
D. obiektem
Wielu początkujących programistów myli pojęcia takie jak pole, metoda, konstruktor czy obiekt – to całkiem powszechny błąd. Spójrzmy na ten fragment kodu: obj1.rysunek(). Najczęstsza pomyłka to uznanie rysunek za pole lub obiekt, bo wszystko wydaje się „należeć” do obj1. Jednak w językach takich jak Java czy C#, wywołanie z nawiasami okrągłymi oznacza jednoznacznie wywołanie metody, a nie dostęp do pola. Pola to najczęściej dane, które nie wymagają nawiasów do odczytu czy zapisu – np. obj1.wysokosc. Konstruktor to zupełnie inna sprawa: służy do inicjowania nowej instancji klasy, wywoływany jest tylko raz przy tworzeniu obiektu (czyli MojaKlasa obj1 = new MojaKlasa();), a nie przez notację kropkową na obiekcie. Kolejnym typowym problemem jest utożsamianie metody z obiektem, bo skoro działa na obiekcie, to może też nim być – ale to nie tak. Obiektem jest obj1, czyli konkretna instancja MojaKlasa, natomiast rysunek jest „czynnością”, którą ten obiekt może wykonać. To bardzo ważne rozróżnienie, bo mylenie tych pojęć prowadzi do chaotycznego kodu i trudności z utrzymaniem projektu. W nowoczesnych językach OOP przyjęło się, by metody nazywać czasownikami („narysuj”, „oblicz”), a pola rzeczownikami („kolor”, „wysokosc”). Takie podejście sprawia, że kod jest bardziej czytelny i łatwiej go rozwijać w zespole. Dlatego praktycy zawsze zwracają uwagę na właściwe rozróżnianie tych elementów, bo to podstawa dobrej architektury kodu.

Pytanie 26

Jaką strukturę danych można zrealizować, korzystając jedynie z wymienionych metod?

push(arg) – dodaje element
pop() – usuwa ostatnio dodany element
peek() – zwraca ostatnio dodany element bez usuwania
isEmpty() – sprawdza czy istnieją dane w strukturze
A. drzewo binarne
B. kolejka FIFO
C. stos
D. tablica
Każda z błędnych odpowiedzi w tym pytaniu odnosi się do popularnych struktur danych, jednak żadna z nich nie pasuje do zestawu metod, które tutaj pokazano. Zacznijmy od kolejki FIFO – tam główną zasadą jest First In, First Out, czyli pierwszy dodany element wypada jako pierwszy. Aby zrealizować kolejkę, potrzebne są zwykle metody enqueue (dodawanie na koniec) i dequeue (usuwanie z początku), czasem jeszcze peek do podejrzenia pierwszego elementu. Natomiast w prezentowanym zestawie nie mamy operacji rozróżniających początek i koniec – wszystko dzieje się tylko „na górze”, co zupełnie nie oddaje natury kolejki. Tablica z kolei daje dostęp do elementów przez indeksy, można przeskakiwać losowo po jej zawartości, zmieniać konkretne pozycje – czego w ogóle nie da się zrobić, mając tylko push, pop, peek i isEmpty. Dla drzewa binarnego brakuje tu zupełnie kluczowych mechanizmów – nie ma odniesień do lewego czy prawego potomka, nie da się wstawić elementu zgodnie z regułami drzewa, ani przeszukiwać go w odpowiedni sposób. Często na etapie nauki pojawia się taki błąd, że ktoś patrzy na pojedyncze funkcje, a nie dostrzega całej filozofii stojącej za strukturą. W praktyce, żeby dobrze dopasować strukturę do zadania, trzeba zawsze pytać, jakie są zasady dostępu do danych i jakich operacji naprawdę potrzebujemy. Dopiero wtedy można ocenić, czy pasuje nam stos, kolejka, tablica czy drzewo – a w tym przypadku, patrząc na metody, tylko stos jest odpowiedzią zgodną z logiką i branżowymi standardami.

Pytanie 27

Który z wymienionych dokumentów jest najczęściej stosowany w zarządzaniu pracą zespołu Scrum?

A. Specyfikacja techniczna
B. Diagram Gantta
C. Lista zasobów ludzkich
D. Product backlog
Diagram Gantta jest fajnym narzędziem do pokazywania harmonogramu, ale nie ma go w zarządzaniu backlogiem. Specyfikacja techniczna to co innego – tam są szczegóły implementacyjne, a nie priorytety funkcji. Lista zasobów ludzkich to temat o zarządzaniu personelem, a nie o zadaniach i priorytetach w Scrumie. Więc tu bardziej musisz uważać na to, co do czego pasuje.

Pytanie 28

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

A. Ból brzucha po spożyciu posiłku
B. Spadek nastroju
C. Gorączka oraz dreszcze
D. Intensywny ból w klatce piersiowej promieniujący do lewej ręki
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 29

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

A. Node.js
B. WPF
C. Flutter
D. Qt
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 30

W frameworkach do budowy aplikacji mobilnych lub desktopowych znajduje zastosowanie wzorzec MVVM, oznaczający Model-View-ViewModel. Te podejście do programowania oznacza, że

A. interfejs użytkownika oraz logika aplikacji są oddzielone
B. interfejs użytkownika i logika aplikacji są umieszczone w jednym pliku
C. w aplikacji obecny jest jedynie interfejs użytkownika
D. kontrolki i widoki interfejsu użytkownika są zintegrowane z logiką aplikacji
Pierwsza odpowiedź sugeruje, że interfejs użytkownika oraz logika aplikacji są kodowane w jednym pliku. Taki sposób organizacji kodu prowadzi do chaotyczności oraz trudności w zarządzaniu projektem. Łączenie tych dwóch warstw w jednym miejscu nie tylko utrudnia testowanie poszczególnych komponentów, ale również zwiększa ryzyko wprowadzenia błędów, gdyż zmiany w jednej części mogą niezamierzenie wpływać na drugą. Druga odpowiedź wskazuje, że kontrolki i widoki interfejsu użytkownika są zaszyte w logice aplikacji, co jest również sprzeczne z ideą MVVM. Kiedy interfejs jest bezpośrednio związany z logiką, programiści nie mogą łatwo modyfikować lub wymieniać elementów UI, co ogranicza elastyczność aplikacji. Czwarta odpowiedź twierdzi, że w aplikacji występuje tylko interfejs użytkownika, co jest niepoprawne, ponieważ każda dobrze zaprojektowana aplikacja wymaga zarówno logiki, jak i interfejsu do funkcjonowania. W kontekście MVVM, brak modelu i ViewModel prowadzi do zastosowania jedynie warstwy prezentacji, co jest nieefektywne i niezgodne z najlepszymi praktykami programistycznymi, które promują separację odpowiedzialności i modularność.

Pytanie 31

Który z wymienionych algorytmów sortowania jest najskuteczniejszy w przypadku dużych zbiorów danych w przeważającej liczbie sytuacji?

A. Sortowanie bąbelkowe
B. Sortowanie szybkie (QuickSort)
C. Sortowanie przez zliczanie
D. Sortowanie przez wstawianie
Sortowanie bąbelkowe ma złożoność O(n²), co czyni je nieefektywnym dla dużych zbiorów danych. Algorytm ten polega na wielokrotnym porównywaniu sąsiadujących elementów i zamianie ich miejscami, co jest procesem czasochłonnym przy dużych danych. Sortowanie przez zliczanie (Counting Sort) jest wydajne, ale najlepiej sprawdza się przy zbiorach o ograniczonym zakresie wartości. Sortowanie przez wstawianie działa w czasie O(n²) i jest skuteczne jedynie dla małych zbiorów danych lub tablic wstępnie posortowanych.

Pytanie 32

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

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

Pytanie 33

Który z wymienionych kroków wchodzi w skład testowania aplikacji?

A. Kompilowanie aplikacji
B. Projektowanie bazy danych
C. Opracowywanie interfejsu graficznego
D. Debugowanie kodu w celu znalezienia błędów
Debugowanie kodu w celu znalezienia błędów to jeden z kluczowych etapów testowania aplikacji. Proces ten polega na uruchamianiu programu w trybie debugowania, co pozwala na śledzenie jego działania linijka po linijce i identyfikowanie miejsc, w których występują błędy. Debugowanie umożliwia analizowanie wartości zmiennych, śledzenie przepływu programu i wykrywanie nieoczekiwanych zachowań, co jest niezbędne do usunięcia błędów i poprawy wydajności aplikacji. Narzędzia do debugowania, takie jak Visual Studio, PyCharm czy Chrome DevTools, pozwalają na dokładne testowanie kodu na różnych etapach jego rozwoju, co znacząco skraca czas naprawy błędów i zwiększa jakość oprogramowania.

Pytanie 34

Co to jest Docker?

A. Platforma do tworzenia, wdrażania i uruchamiania aplikacji w kontenerach
B. System zarządzania bazami danych NoSQL
C. Framework do tworzenia aplikacji mobilnych
D. Narzędzie do testowania wydajności aplikacji webowych
Docker jest platformą do tworzenia, wdrażania i uruchamiania aplikacji w kontenerach, co oznacza, że umożliwia programistom izolowanie aplikacji oraz ich zależności w samodzielne jednostki, niezależne od środowiska, w którym są uruchamiane. Dzięki konteneryzacji, aplikacje działają zgodnie w różnych środowiskach, co znacząco upraszcza procesy związane z wdrażaniem i zarządzaniem. Przykładowo, z wykorzystaniem Dockera, programiści mogą stworzyć kontener z aplikacją webową, a następnie wdrożyć go na serwerze produkcyjnym, nie obawiając się, że aplikacja nie zadziała z powodu różnic w konfiguracjach systemu operacyjnego. Ponadto, Docker wspiera DevOps, co jest zgodne z obecnymi trendami w inżynierii oprogramowania, promując podejście Continuous Integration/Continuous Deployment (CI/CD). Używanie Dockera zwiększa efektywność pracy zespołów deweloperskich oraz ułatwia zarządzanie infrastrukturą, co jest istotne w kontekście dużych projektów. Dodatkowo, wspiera on standardy branżowe, takie jak microservices, które ze względu na swoje zalety są szeroko stosowane w nowoczesnych architekturach aplikacyjnych.

Pytanie 35

Jakie z przedstawionych rozwiązań może pomóc w unikaniu porażeń prądem w biurze?

A. Stosowanie monitorów LCD
B. Kontrolowanie jakości powietrza
C. Systematyczne sprawdzanie instalacji elektrycznych
D. Wykorzystanie foteli o ergonomicznym kształcie
Regularne testowanie instalacji elektrycznych to podstawowy sposób zapobiegania porażeniom prądem w pracy biurowej. Testy te pozwalają wykryć uszkodzenia, przeciążenia i inne usterki, które mogą stanowić zagrożenie dla pracowników. Prawidłowo przeprowadzane przeglądy techniczne obejmują sprawdzanie stanu przewodów, gniazdek oraz urządzeń elektrycznych. Regularne kontrole zgodne z normami BHP oraz przepisami dotyczącymi instalacji elektrycznych są obowiązkowe i mają kluczowe znaczenie dla bezpieczeństwa pracy. Pamiętaj, że zaniedbanie testów elektrycznych może prowadzić do poważnych wypadków, takich jak pożary lub porażenia prądem.

Pytanie 36

Jaką strukturę danych stosuje się w algorytmie BFS (przeszukiwanie wszerz)?

A. Tablica
B. Zbiór
C. Kolejka
D. Graf
Stos jest używany w algorytmie DFS (przeszukiwanie w głąb), a nie w BFS, ponieważ DFS eksploruje możliwie najgłębiej dany graf, zanim wróci do poprzedniego poziomu. Lista jest używana jako struktura ogólnego przeznaczenia, ale nie jest podstawowym narzędziem w algorytmie BFS. Drzewa są strukturą danych, którą BFS może przeszukiwać, ale sama struktura drzewa nie jest narzędziem używanym w algorytmie BFS – to kolejka pełni tę funkcję, przechowując wierzchołki do odwiedzenia.

Pytanie 37

Zaznaczone elementy w przedstawionych obramowaniach mają na celu:
Fragment kodu w WPF/XAML:

<Windows Title="Tekst"...>
Fragment kodu w Java:
public class Okno extends JFrame {
    ...
    public Okno() {
        super();
        this.setTitle("Tekst");
    }
    ...
A. przypisanie nazwy obiektu obrazującego okno aplikacji
B. uzyskanie nazwy obiektu obrazującego okno aplikacji
C. zapisanie tytułu okna do obiektu Tekst
D. ustawienie tytułu okna na "Tekst"
Wybrana odpowiedź dokładnie oddaje sens działania kodu zarówno w WPF/XAML, jak i w Javie z użyciem JFrame. W jednym i drugim przypadku chodzi o ustawienie tytułu okna aplikacji, czyli tego tekstu, który pojawia się na pasku tytułowym okienka po uruchomieniu programu. Z mojego doświadczenia, jest to jedna z pierwszych rzeczy, jakie użytkownicy widzą w każdej aplikacji okienkowej, więc warto pamiętać, jak ją ustawić. W WPF właściwość Title w tagu Window służy właśnie do wyświetlenia krótkiego opisu albo nazwy programu. Z kolei w Javie metoda setTitle pozwala dynamicznie przypisywać tekst, co jest bardzo przydatne przy pisaniu aplikacji z wieloma oknami albo zmieniającym się stanem (np. można dodać tam nazwę pliku, z którym pracujemy). Branżowe standardy zachęcają do tego, żeby tytuły okien były krótkie, jednoznaczne i faktycznie informowały użytkownika o funkcji aktualnego widoku. Co ciekawe, w niektórych frameworkach można nawet dodać ikonę do tego paska tytułowego. Samo ustawienie tytułu nie zmienia żadnych właściwości obiektu aplikacji poza tym, jak jest widoczny dla użytkownika. To mały detal, ale bardzo ważny w codziennej pracy programisty interfejsów graficznych.

Pytanie 38

Jakie z wymienionych czynności można zrealizować przy pomocy składnika statycznego danej klasy?

A. Umożliwienie dzielenia pól klasy pomiędzy zaprzyjaźnione klasy
B. Wywołanie destruktora klasy bez jej usuwania
C. Tworzenie prywatnych kopii pól dla każdej instancji
D. Zachowanie wartości wspólnych dla wszystkich instancji klasy
Składnik statyczny klasy przechowuje wartości wspólne dla wszystkich instancji danej klasy. Oznacza to, że niezależnie od liczby utworzonych obiektów, istnieje tylko jedna kopia składowej statycznej, która jest współdzielona przez wszystkie instancje. Składowe statyczne są często wykorzystywane do przechowywania liczników, stałych wartości lub danych konfiguracyjnych. Metody statyczne mogą być wywoływane bezpośrednio na klasie, bez konieczności tworzenia obiektu, co czyni je niezwykle użytecznymi w przypadku funkcji narzędziowych.

Pytanie 39

Co następuje, gdy błąd nie zostanie uchwycony przez blok catch?

A. Program kontynuuje działanie, pomijając błąd
B. Instrukcja throw zostanie automatycznie wykreślona
C. Błąd zostanie zignorowany przez kompilator
D. Program zakończy działanie z błędem
Program nie może kontynuować działania po wystąpieniu wyjątku bez jego obsługi – to mogłoby prowadzić do nieprzewidywalnych błędów. Wyjątek nie jest ignorowany przez kompilator – jeśli wyjątek wystąpi w czasie wykonywania programu, kompilator nie ma na to wpływu. 'Throw' nie jest automatycznie usuwane – to instrukcja zgłaszająca wyjątek, a jej wykonanie jest zależne od warunków w kodzie. Brak obsługi wyjątku prowadzi do natychmiastowego przerwania programu, a nie do pominięcia instrukcji.

Pytanie 40

Liczba A4 w zapisie heksadecymalnym ma odpowiadający jej zapis binarny

A. 10100100
B. 1010100
C. 10100010
D. 1011100
Zapisanie liczby A4 z systemu szesnastkowego (heksadecymalnego) do systemu binarnego to podstawowa umiejętność przy pracy z systemami cyfrowymi. W praktyce każda cyfra heksadecymalna odpowiada dokładnie czterem cyfrom binarnym, co wynika bezpośrednio z faktu, że 16=2^4. Gdy rozbijamy A4 na dwie części, mamy literę A (co oznacza 10 w dziesiętnym) oraz cyfrę 4. Zamieniamy więc A na binarny: 1010, a 4 – 0100. Sklejamy razem i dostajemy 10100100 – to jest właśnie prawidłowa odpowiedź. W rzeczywistych projektach, np. podczas programowania mikrokontrolerów, przy analizie adresów pamięci czy pracy z danymi w protokołach sieciowych, umiejętność szybkiej zamiany szesnastkowych wartości na binarne (i odwrotnie) jest totalnie niezbędna. Moim zdaniem zapamiętanie tych konwersji bardzo przyspiesza debugowanie kodu czy analizę rejestrów sprzętowych. To też podstawa przy pracy z narzędziami typu oscyloskop cyfrowy lub analizator stanów logicznych, gdzie często wartości wyświetlane są w jednym systemie, a dokumentacja posługuje się innym. Branża IT i elektronika wręcz żyją tymi zamianami – nie ma co się oszukiwać, im szybciej to opanujesz, tym mniej błędów popełnisz przy konfiguracji sprzętu czy pisaniu sterowników.