Wyniki egzaminu

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

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

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

Wskaż uproszczoną wersję kodu XAML dla elementów w pokazanym oknie dialogowym?

Ilustracja do pytania
A. Kod 2
B. Kod 3
C. Kod 4
D. Kod 1
Dobrze jest znać podstawowe różnice pomiędzy ListBox, ComboBox, CheckBox, RadioButton oraz Label w XAML. W tym oknie dialogowym widać wyraźnie, że po lewej stronie użytkownik ma możliwość wyboru gatunku zwierzęcia spośród kilku opcji wyświetlonych jednocześnie. Takie zadanie najlepiej spełnia ListBox, bo umożliwia wygodną selekcję z widocznej listy. U góry po prawej jest pole tekstowe do wpisania imienia zwierzaka, więc TextBox jak najbardziej pasuje. Poniżej mamy dwa pola wyboru – „Zaszczepiony?” i „Na diecie?” – to są typowe przypadki na CheckBoxy: można zaznaczyć dowolne lub oba naraz. Kluczowe jest to, że CheckBox pozwala użytkownikowi wybrać dowolną kombinację, a nie tylko jedną opcję jak RadioButton. Z mojego doświadczenia często początkujący mylą ComboBox z ListBoxem, ale tu akurat lista jest zawsze widoczna, co jest typowe dla ListBoxa. Stosowanie CheckBoxów dla takich dwustanowych opcji też jest zgodne z dobrymi praktykami UX i standardami opisu formularzy w XAML. W pracy zawodowej często się to wykorzystuje, bo kod jest czytelny i łatwo go rozszerzać. Właśnie taki zestaw – ListBox, TextBox, CheckBox – jest najbardziej przejrzysty i zgodny z zamysłem projektanta interfejsów. Fajnie jest to zapamiętać, bo ta kombinacja pojawia się w wielu firmowych projektach.

Pytanie 2

Który z wymienionych algorytmów pracujących na tablicy jednowymiarowej ma złożoność obliczeniową O(n2)?

A. Sortowanie bąbelkowe
B. Wyszukiwanie metodą binarną
C. Sortowanie szybkie
D. Wyświetlenie elementów
Sortowanie bąbelkowe to taki klasyczny algorytm, który ma złożoność O(n^2). Chociaż jest dość prosty w zrozumieniu, to nie za bardzo sprawdza się w większych zbiorach danych. Działa tak, że porównuje sąsiadujące ze sobą elementy i zamienia je miejscami, jeśli są w złej kolejności. Trochę to czasochłonne, ale warto znać ten algorytm, bo pokazuje podstawy sortowania.

Pytanie 3

Pętla przedstawiona w zadaniu działa na zmiennej typu string o nazwie ciag. Jej celem jest:

int i = 0;
while (ciag[i] != 0)  {
    if (ciag[i] > 96 && ciag[i] < 123)  {
        ciag[i] = (ciag[i] - 32);
    }
    i++;
}
A. Od każdego znaku w ciągu odjąć kod 32.
B. Zamienić w ciągu małe litery na wielkie.
C. Zamienić w ciągu wielkie litery na małe.
D. Od każdego znaku w ciągu, który nie jest równy 0, odjąć kod 32.
Odejmowanie 32 od wszystkich znaków w napisie to trochę kiepski pomysł, bo to nie zawsze działa. Nie wszystkie znaki, takie jak cyfry czy symbole, mają swoje wielkie odpowiedniki, więc ich kod ASCII nie powinien być zmieniany. Kabel od wielkich liter na małe to zupełnie inna bajka – tutaj dodajemy 32 do kodu. Odejmowanie kodu tylko dla znaków różniących się od 0 pomija istotę operacji na literach, co może skutkować dziwnymi rezultatami. Z mojego doświadczenia wynika, że lepiej to przemyśleć przed wprowadzeniem w życie.

Pytanie 4

Jaka będzie zawartość zmiennej filteredItems po wykonaniu poniższego kodu?

const items = [
  { id: 1, name: 'phone', price: 500 },
  { id: 2, name: 'laptop', price: 1000 },
  { id: 3, name: 'tablet', price: 750 }
];

const filteredItems = items.filter(item => item.price > 600)
                          .map(item => item.name);
A. ['phone']
B. ['laptop', 'tablet']
C. [{id: 2, name: 'laptop', price: 1000}, {id: 3, name: 'tablet', price: 750}]
D. ['laptop', 'tablet', 'phone']
Zmienna filteredItems zawiera tylko te elementy, których cena jest większa niż 600. W tym przypadku w tablicy items mamy trzy obiekty: 'phone' z ceną 500, 'laptop' z ceną 1000 oraz 'tablet' z ceną 750. Funkcja filter przeszukuje tablicę items i zwraca tylko te obiekty, które spełniają warunek price > 600, co daje nam 'laptop' oraz 'tablet'. Następnie, metoda map przekształca te obiekty w tablicę ich nazw, co skutkuje finalnym wynikiem ['laptop', 'tablet']. Takie podejście do filtrowania danych i mapowania ich na inne wartości jest niezwykle przydatne w programowaniu, szczególnie w pracy z danymi, gdzie często potrzebujemy wyodrębnić i przekształcić dane w bardziej użyteczne formy. Użycie metod filter i map jest zgodne z najlepszymi praktykami w JavaScript i przyczynia się do bardziej czytelnego oraz zwięzłego kodu.

Pytanie 5

Która z poniższych metod HTTP jest idempotentna?

A. GET
B. PATCH
C. POST
D. CONNECT
Wybór metod HTTP, które nie są idempotentne, może prowadzić do zamieszania i nieporozumień w aplikacjach webowych. Metoda POST, w przeciwieństwie do GET, jest zazwyczaj stosowana do tworzenia nowych zasobów na serwerze. Każde wywołanie POST może prowadzić do utworzenia nowego wpisu lub zmiany stanu zasobu, co sprawia, że jest to operacja nieidempotentna. Przykładowo, korzystając z metody POST do przesyłania formularzy rejestracyjnych, każdy nowy użytkownik powoduje dodanie nowego wpisu do bazy danych. Z kolei metoda PATCH jest używana do częściowej aktualizacji istniejącego zasobu. W przypadku wielokrotnego zastosowania tej samej poprawki, stan zasobu może się zmieniać, co również klasyfikuje ją jako nieidempotentną. Dodatkowo, metoda CONNECT, służąca do nawiązywania tuneli przez serwer proxy, w typowym użyciu nie może być uznana za idempotentną, ponieważ jej działanie zależy od kontekstu i może prowadzić do różnych rezultatów przy wielokrotnym wywoływaniu. Dlatego, przy projektowaniu API, istotne jest zrozumienie różnicy między metodami idempotentnymi a nieidempotentnymi, aby uniknąć nieprzewidywalnych skutków i zapewnić spójność w interakcji z serwerem.

Pytanie 6

Która z poniższych właściwości odnosi się do sieci bezprzewodowej?

A. Jest bardziej narażona na zakłócenia w przesyłaniu danych
B. Wymaga zastosowania przewodów do łączenia urządzeń
C. Nie funkcjonuje w obszarach z dużą liczbą urządzeń
D. Nie potrzebuje zabezpieczeń, ponieważ jest domyślnie chroniona
Pierwsza odpowiedź sugeruje, że sieci bezprzewodowe wymagają użycia kabli do połączenia urządzeń, co jest nieprawdziwe. W rzeczywistości, sieci bezprzewodowe działają niezależnie od kabli, wykorzystując technologie takie jak Wi-Fi czy Bluetooth do komunikacji między urządzeniami bez fizycznego połączenia. Taka technologia pozwala na większą mobilność oraz elastyczność użytkowników, eliminując ograniczenia związane z kablami. Kolejnym nieprawidłowym stwierdzeniem jest to, że sieci bezprzewodowe nie wymagają zabezpieczeń, ponieważ są automatycznie chronione. W rzeczywistości, sieci bezprzewodowe są bardzo narażone na nieautoryzowany dostęp, co czyni implementację odpowiednich zabezpieczeń, takich jak WPA3, niezbędną do ochrony danych użytkowników. Ostatnia niepoprawna odpowiedź stwierdza, że sieci bezprzewodowe nie działają w miejscach z dużą liczbą urządzeń. W rzeczywistości, nowoczesne sieci bezprzewodowe są projektowane z myślą o dużym natężeniu ruchu i mogą obsługiwać wiele jednoczesnych połączeń dzięki technologiom takim jak MU-MIMO (Multi-User Multiple Input Multiple Output). To pozwala na równoczesną obsługę wielu użytkowników, co jest niezwykle ważne w obszarach o dużym zagęszczeniu, takich jak biura czy kawiarnie.

Pytanie 7

W jakiej fazie cyklu życia projektu informatycznego następuje integracja oraz testowanie wszystkich modułów systemu?

A. Faza analizy
B. Etap planowania
C. Etap implementacji
D. Faza wdrożenia
Faza implementacji to etap cyklu życia projektu informatycznego, w którym następuje integracja i testowanie wszystkich modułów systemu. Po zakończeniu fazy projektowania i programowania, elementy aplikacji są łączone w jeden spójny system. Integracja polega na połączeniu komponentów, co umożliwia sprawdzenie ich współpracy oraz poprawności przepływu danych. Następnie przeprowadzane są testy integracyjne i systemowe, których celem jest wykrycie błędów w interakcji między modułami. Proces ten jest niezbędny, aby zapewnić stabilność aplikacji przed wdrożeniem do środowiska produkcyjnego. Skuteczna integracja minimalizuje ryzyko awarii i zwiększa niezawodność systemu.

Pytanie 8

Jakie są typowe frameworki/biblioteki używane w aplikacjach webowych?

A. ASP.NET Core, jQuery, Joomla!, Wordpress, Angular
B. jquery, Joomla!, Wordpress, android Studio, Xamarin
C. Visual Studio, Eclipse, angular, React.js, Node.js
D. ASP.NET Core, Django, Angular, React.js, Node.js
Wybrana grupa frameworków i bibliotek — ASP.NET Core, Django, Angular, React.js, Node.js — to w praktyce jedne z najbardziej rozpoznawalnych i szeroko wykorzystywanych rozwiązań w branży tworzenia aplikacji webowych. Każdy z nich pełni trochę inną rolę, co powoduje, że są stosowane na różnych warstwach aplikacji. Na przykład ASP.NET Core oraz Django to frameworki po stronie serwera, obsługujące backend, logikę biznesową i komunikację z bazą danych. Są bardzo popularne zwłaszcza tam, gdzie liczy się szybkość wdrożenia i bezpieczeństwo. Node.js również zalicza się do backendowych technologii, z tym że pozwala pisać po stronie serwera w JavaScript, co bywa ogromnym plusem, gdy zespół jest mocno frontendowy. Angular i React.js to natomiast narzędzia, które pomagają budować rozbudowane, interaktywne interfejsy użytkownika po stronie klienta. Takie podejście, gdzie backend i frontend są rozdzielone, to obecnie standard — tzw. architektura SPA (Single Page Application) albo nawet JAMstack. Warto pamiętać, że dobrym zwyczajem jest korzystać właśnie z takich nowoczesnych frameworków, bo zapewniają solidne wsparcie społeczności, regularne aktualizacje i kompatybilność z nowymi standardami webowymi. Moim zdaniem, jeżeli myśli się poważnie o pracy jako developer webowy, to znajomość przynajmniej dwóch z wymienionych narzędzi to absolutny must-have. Przy okazji — wiele firm prowadzi projekty wieloplatformowe, więc umiejętność korzystania z tych frameworków można łatwo przenieść również do świata mobilnego czy nawet IoT.

Pytanie 9

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 10

Które z wymienionych poniżej błędów podczas wykonywania programu można obsłużyć poprzez zastosowanie wyjątków?

A. Niekompatybilność typów danych w kodzie
B. Błąd kompilacyjny
C. Błąd dzielenia przez zero
D. Błąd w składni
Błędy składniowe są wykrywane na etapie kompilacji i nie mogą być obsługiwane za pomocą wyjątków – kompilator generuje komunikat o błędzie, zanim program zostanie uruchomiony. Błędy kompilacji, takie jak niezgodność typów danych, również są wychwytywane na etapie kompilacji i wymagają poprawienia kodu źródłowego. Wyjątki są przeznaczone do obsługi błędów, które występują w czasie wykonywania programu, a nie błędów wykrywanych przez kompilator. Dlatego obsługa błędów składniowych i kompilacyjnych wymaga innego podejścia niż mechanizm wyjątków.

Pytanie 11

Który z poniższych opisów najlepiej definiuje kompilator?

A. Program łączący dynamiczne biblioteki z kodem źródłowym
B. Narzędzie do analizy kodu w czasie rzeczywistym
C. System monitorujący zmiany w kodzie źródłowym
D. Narzędzie przekształcające kod źródłowy na plik wykonywalny
Kompilator to narzędzie, które przekształca kod źródłowy napisany w języku programowania na plik wykonywalny (binarny), który może być uruchomiony bez potrzeby ponownej kompilacji. Proces ten obejmuje kilka etapów, takich jak analiza leksykalna, analiza składniowa, optymalizacja kodu oraz generowanie kodu maszynowego. Kompilator jest nieodzownym elementem w językach takich jak C, C++ czy Java. Generowany plik wykonywalny może działać szybciej niż kod interpretowany, ponieważ nie wymaga tłumaczenia w czasie rzeczywistym.

Pytanie 12

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

A. Laptop z zintegrowanym układem graficznym
B. Laptop z interfejsem dotykowym
C. Serwer dysponujący dużą ilością pamięci RAM
D. Komputer stacjonarny z kartą graficzną NVIDIA Quadro
W kontekście projektowania graficznego w programach typu CAD, kluczowym elementem jest wybór odpowiedniego sprzętu, który zapewni nie tylko stabilność, ale także wydajność. Komputer stacjonarny wyposażony w kartę graficzną NVIDIA Quadro jest najlepszym rozwiązaniem, ponieważ te karty są specjalnie zaprojektowane do obsługi złożonych obliczeń i renderowania grafiki 3D. Dzięki zaawansowanej architekturze oraz optymalizacji pod kątem aplikacji inżynieryjnych i projektowych, karty NVIDIA Quadro oferują znacznie wyższą wydajność w porównaniu do standardowych kart graficznych. Dodatkowo, stacjonarne komputery pozwalają na łatwiejszą rozbudowę, co może być kluczowe w przypadku rosnących wymagań projektowych. W praktyce, użytkownicy CAD często muszą radzić sobie z dużymi i złożonymi modelami, które wymagają nie tylko odpowiedniej mocy obliczeniowej, ale także dużej ilości pamięci wideo, co zapewnia NVIDIA Quadro. Warto dodać, że standardy branżowe, takie jak OpenGL i DirectX, są w pełni wspierane przez te karty, co przekłada się na ich niezawodność i efektywność w profesjonalnym środowisku projektowym.

Pytanie 13

Jakie jest oznaczenie normy międzynarodowej?

A. CE
B. EN
C. ISO
D. PN
ISO (International Organization for Standardization) to międzynarodowa organizacja zajmująca się opracowywaniem i wdrażaniem standardów technicznych. Oznaczenie ISO wskazuje, że produkt lub usługa spełnia międzynarodowe normy jakości i bezpieczeństwa, co ułatwia handel oraz współpracę na arenie międzynarodowej. Normy ISO obejmują szeroki zakres dziedzin, takich jak zarządzanie jakością (ISO 9001), zarządzanie środowiskowe (ISO 14001) czy bezpieczeństwo informacji (ISO 27001). Certyfikacja ISO buduje zaufanie klientów i zwiększa konkurencyjność firmy na rynku globalnym.

Pytanie 14

Programista tworzy system zarządzania buforem drukowania dokumentów. Najnowsze zlecenie drukowania dodawane jest na koniec kolejki, a najstarsze z nich są przekazywane do drukarki. Jaką strukturę danych najłatwiej zastosować w tej sytuacji?

A. Sterta
B. FIFO
C. LIFO
D. Stos
FIFO (First In, First Out) to struktura danych idealnie pasująca do implementacji kolejki wydruku, gdzie zadania są przetwarzane w kolejności ich zgłoszenia. Najstarsze zadanie (pierwsze dodane) jest przetwarzane jako pierwsze, co odwzorowuje rzeczywisty sposób działania kolejek drukowania. FIFO znajduje szerokie zastosowanie w wielu dziedzinach informatyki, takich jak programowanie systemów operacyjnych, zarządzanie buforami oraz implementacja kolejek sieciowych. Dzięki temu zadania są obsługiwane w przewidywalnej kolejności, co jest kluczowe dla zachowania porządku i efektywności przetwarzania.

Pytanie 15

Jakie elementy powinny być uwzględnione w dokumentacji testowej aplikacji?

A. Harmonogram wdrożenia aplikacji
B. Specyfikacje techniczne serwera
C. Zalecenia dotyczące optymalizacji kodu
D. Opis procedur testowych oraz rezultaty wykonanych testów
Opis procedur testowych i wyników przeprowadzonych testów to kluczowy element dokumentacji testów aplikacji. Tego rodzaju dokumentacja obejmuje szczegółowe instrukcje dotyczące metod testowania, użytych narzędzi oraz kroków niezbędnych do przeprowadzenia testów jednostkowych, integracyjnych i systemowych. W dokumentacji znajdują się również raporty z wynikami testów, które wskazują, czy aplikacja działa zgodnie z wymaganiami oraz jakie błędy zostały wykryte. Testy pozwalają na wczesne wychwycenie problemów i eliminację błędów przed wdrożeniem aplikacji na produkcję, co znacząco zwiększa jakość oprogramowania. Dokumentacja testowa jest także nieocenionym źródłem informacji dla zespołów QA (Quality Assurance), umożliwiając śledzenie historii testów i zapewnienie, że wszystkie elementy aplikacji zostały przetestowane zgodnie z procedurami.

Pytanie 16

Jakie są kluczowe różnice między typami stałoprzecinkowymi a zmiennoprzecinkowymi?

A. Typy zmiennoprzecinkowe przechowują wyłącznie liczby ujemne
B. Typy stałoprzecinkowe przechowują liczby całkowite, a typy zmiennoprzecinkowe przechowują liczby z ułamkami dziesiętnymi
C. Typy stałoprzecinkowe obsługują liczby ujemne, natomiast typy zmiennoprzecinkowe tylko dodatnie
D. Typy stałoprzecinkowe wymagają większej ilości pamięci niż typy zmiennoprzecinkowe
Główna różnica między typami stałoprzecinkowymi a zmiennoprzecinkowymi polega na tym, że stałoprzecinkowe przechowują liczby całkowite, podczas gdy zmiennoprzecinkowe przechowują liczby z częściami dziesiętnymi. Stałoprzecinkowe typy, takie jak 'int', są bardziej efektywne pod względem wydajności i zajmują mniej pamięci, co czyni je idealnym rozwiązaniem w przypadkach, gdzie precyzja dziesiętna nie jest wymagana. Z kolei typy zmiennoprzecinkowe, takie jak 'float' i 'double', umożliwiają dokładne reprezentowanie wartości niecałkowitych, co jest niezbędne w aplikacjach matematycznych i graficznych. Każdy z tych typów ma swoje zastosowanie w zależności od wymagań projektu.

Pytanie 17

Jedną z dolegliwości, która pojawia się u programistów w wyniku długotrwałego korzystania z myszki komputerowej lub klawiatury, objawiającą się bólami, drętwieniem oraz zaburzeniami czucia w obszarze 1-3 palca dłoni jest

A. zespół suchego oka
B. zespól cieśni kanału nadgarstka
C. kifoza
D. Dyskopatia
Zespół cieśni kanału nadgarstka to schorzenie, które powstaje w wyniku ucisku na nerw pośrodkowy w kanale nadgarstka. Jest to wąski tunel utworzony przez kości nadgarstka oraz więzadła, przez który przechodzą ścięgna oraz nerwy odpowiedzialne za czucie i ruch w dłoni. Objawy zespołu cieśni kanału nadgarstka obejmują bóle, drętwienie oraz zaburzenia czucia, szczególnie w obszarze pierwszych trzech palców ręki. Praca z myszą komputerową i klawiaturą przez długi czas, szczególnie w niewłaściwej ergonomicznej pozycji, może prowadzić do nadmiernego obciążenia i zapalenia tkanek otaczających nerw pośrodkowy. W praktyce, osoby cierpiące na to schorzenie często skarżą się na problemy z chwytaniem przedmiotów, a także na osłabienie siły uchwytu. W leczeniu zespołu cieśni kanału nadgarstka zaleca się m.in. unikanie czynników przyczynowych, stosowanie ortez, fizjoterapię oraz w niektórych przypadkach leczenie chirurgiczne. Należy również zwrócić uwagę na ergonomię stanowiska pracy, co może znacząco zredukować ryzyko wystąpienia tej dolegliwości. Zarządzanie czasem spędzanym przy komputerze oraz regularne przerwy są kluczowe w prewencji tego schorzenia.

Pytanie 18

Który z poniższych wzorców projektowych jest używany do tworzenia pojedynczej instancji klasy w całej aplikacji?

A. Decorator
B. Singleton
C. Factory
D. Observer
Wzorzec projektowy Singleton jest kluczowym rozwiązaniem w sytuacjach, gdy chcemy zapewnić istnienie tylko jednej instancji danej klasy w całej aplikacji. Singleton kontroluje instancję wewnętrznie, co oznacza, że niezależnie od tego, ile razy próbujemy stworzyć obiekt tej klasy, zawsze otrzymamy ten sam obiekt. W praktyce, wzorzec ten jest szeroko stosowany w sytuacjach, gdzie zarządzanie zasobami, takimi jak połączenia z bazą danych czy konfiguracyjne obiekty, musi być centralizowane. Przykładowo, przy użyciu wzorca Singleton możemy mieć jeden obiekt zarządzający połączeniem z bazą danych, co redukuje nadmiarowe zasoby i zwiększa wydajność. Istotne jest jednak, aby zaimplementować Singleton zgodnie z zasadami wielowątkowości, aby uniknąć problemów w aplikacjach równoległych, co jest zgodne z najlepszymi praktykami branżowymi. Dodatkowo, wzorzec ten podkreśla znaczenie zarządzania stanem aplikacji oraz przestrzegania zasad odpowiedzialności klas, co wspiera czystość i utrzymanie kodu.

Pytanie 19

Która z metod zarządzania projektami stawia na przejrzystość oraz wizualizację bieżących zadań?

A. Agile
B. Scrum
C. Waterfall
D. Kanban
Scrum to metoda iteracyjna, która koncentruje się na sprintach i dostarczaniu działającego produktu w krótkich cyklach, ale nie skupia się na wizualizacji pracy na poziomie takim jak Kanban. Agile to ogólna filozofia zarządzania projektami, która obejmuje różne metodyki (w tym Scrum i Kanban), ale nie koncentruje się wyłącznie na wizualizacji. Waterfall to model sekwencyjny, gdzie prace realizowane są etapami, a transparentność nie jest kluczowym elementem tego podejścia, ponieważ każda faza musi zostać zakończona przed rozpoczęciem kolejnej.

Pytanie 20

Jakie narzędzie najlepiej sprawdza się w przekształcaniu liczby szesnastkowej na binarną?

A. Kalkulator programisty
B. Aplikacja internetowa
C. Program do arkuszy kalkulacyjnych
D. Program do edycji tekstu
Kalkulator programisty jest najbardziej odpowiednim narzędziem do konwersji liczby szesnastkowej na binarną ze względu na swoje wyspecjalizowane funkcje matematyczne i programistyczne. Narzędzia te umożliwiają użytkownikom łatwe przekształcanie różnych systemów liczbowych, w tym konwersji z systemu szesnastkowego (hex) na system binarny. Kalkulatory programistyczne często zawierają dedykowane opcje dla konwersji liczbowej, co pozwala na szybkie i dokładne uzyskanie wyników bez potrzeby stosowania skomplikowanych algorytmów lub wzorów. Na przykład, aby przekształcić liczbę szesnastkową '1A' na binarną, użytkownik wprowadza '1A' do kalkulatora, a wynik '00011010' zostaje automatycznie wygenerowany. Dodatkowo, wiele kalkulatorów programistycznych jest zgodnych z międzynarodowymi standardami, co zapewnia ich wiarygodność w obliczeniach. Warto również zauważyć, że kalkulatory programistyczne mogą obsługiwać konwersje z różnych systemów liczbowych, co czyni je wszechstronnym narzędziem w pracy z danymi cyfrowymi i kodowaniem. Dzięki temu, kalkulator programisty stanowi idealne rozwiązanie dla programistów i inżynierów, którzy regularnie pracują z różnymi formatami danych.

Pytanie 21

Który z wymienionych elementów interfejsu użytkownika jest charakterystyczny dla aplikacji działającej na komputerze?

A. API REST
B. Strona HTML
C. Routing
D. Przycisk (Button)
Przycisk, czyli ten mały element, co go klikamy w aplikacjach, to naprawdę ważna część interfejsu. Używamy go, żeby coś zainicjować, na przykład zapisać dane czy wywołać jakąś funkcję. Fajnie, że można go dowolnie ustawiać – zmieniać wygląd, rozmiar, a nawet to, jak się zachowuje. Dzięki temu pasuje do każdej aplikacji. W dzisiejszych programach, jak WPF, te przyciski mogą mieć różne kolorowe ikony albo nawet animacje, co sprawia, że aplikacja wygląda super. Generalnie, bez przycisków użytkownik by się w aplikacji nie połapał, bo to dzięki nim możemy nawigować, zatwierdzać formularze czy otwierać nowe okna dialogowe.

Pytanie 22

Jakie jest zastosowanie języka XAML przy tworzeniu aplikacji desktopowych?

A. Do projektowania graficznego interfejsu użytkownika
B. Do optymalizacji działania aplikacji
C. Do obsługi zdarzeń klawiatury
D. Do zarządzania bazami danych
XAML (Extensible Application Markup Language) to język znaczników wykorzystywany w technologii WPF (Windows Presentation Foundation) oraz UWP (Universal Windows Platform) do projektowania graficznego interfejsu użytkownika (GUI). XAML pozwala na definiowanie układów, przycisków, etykiet oraz innych elementów interaktywnych w aplikacjach desktopowych. Dzięki XAML, projektowanie interfejsu jest intuicyjne, a kod interfejsu jest oddzielony od logiki aplikacji, co sprzyja przejrzystości projektu. XAML wspiera animacje, style i szablony, co umożliwia budowę nowoczesnych, dynamicznych aplikacji. Jego elastyczność i możliwość współpracy z C# sprawiają, że XAML jest niezastąpiony w środowisku Windows.

Pytanie 23

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

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

Pytanie 24

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

let arr = [1, 2, 3, 4, 5];
let result = arr.filter(num => num % 2 === 0);
console.log(result);
A. 2,4
B. [2, 4]
C. [1, 2, 3, 4, 5]
D. [1, 3, 5]
Wybór odpowiedzi [1, 3, 5] lub [2, 4] oraz 2,4 odzwierciedla niezrozumienie działania metody filter w JavaScript. Odpowiedź [1] sugeruje, że program wyświetli wszystkie parzyste liczby, lecz nie uwzględnia, że filter tworzy nową tablicę tylko z liczb spełniających określony warunek, a w tym przypadku tylko liczby parzyste. Ponadto, [3] wskazuje na brak zastosowania filtru, a więc pokazuje wszystkie elementy tablicy, co również jest błędne. Z kolei odpowiedź 2,4 nie jest nawet poprawnym formatem dla JavaScript, gdzie wyniki w konsoli są prezentowane w postaci tablicy z elementami oddzielonymi przecinkami. Takie podejście, aby zapisać wynik w konsoli, a nie odwoływać się do jego struktury, może prowadzić do błędnych interpretacji. Należy pamiętać, że w JavaScript, kluczowym elementem do zrozumienia jest różnica między metodą filter a innymi metodami tablic, takimi jak map czy forEach. Metoda filter zwraca nową tablicę, podczas gdy inne mogą działać na oryginalnych danych bez ich zmiany. Dlatego ważne jest, aby nie tylko znać technikę, ale i jej zastosowanie w kontekście rozwiązania problemu, co jest niezbędne w pracy programisty.

Pytanie 25

Modyfikator dostępu znajdujący się przed definicją metody Dodaj() w klasie Kalkulator sprawia, że:

protected void Dodaj() {}
A. nie jest ona osiągalna w klasach, które dziedziczą po klasie Kalkulator
B. jest ona dostępna zarówno w samej klasie, jak i w klasach dziedziczących po klasie Kalkulator
C. jest ona możliwa do wykorzystania w programie głównym i można ją wywołać na instancji klasy Kalkulator
D. nie jest ona dostępna z poziomu klas, które są zaprzyjaźnione z klasą Kalkulator
Modyfikator protected w językach takich jak C# czy Java oznacza, że metoda jest dostępna zarówno w tej samej klasie, jak i w każdej klasie, która po niej dziedziczy — niezależnie od tego, w którym miejscu projektu ta klasa pochodna się znajduje. To jest bardzo praktyczne, bo pozwala pisać tzw. szkieletowe klasy bazowe, udostępniając pewne funkcjonalności tylko klasom potomnym, a jednocześnie ukrywając je przed kodem zewnętrznym. Takie podejście umożliwia budowanie bezpiecznych i elastycznych struktur dziedziczenia, gdzie konkretne działania mogą być modyfikowane lub rozszerzane tylko tam, gdzie trzeba. Bardzo często spotyka się protected w dużych projektach, gdzie kluczowe funkcje mają być używane wyłącznie w rodzinie klas, a nie dostępne dla całego świata. Moim zdaniem, to świetny sposób na wymuszanie architektury i porządku w kodzie, no bo wiadomo, jak każdy miałby dostęp do wszystkiego, to zaraz byłby bałagan. Przykład praktyczny: pisząc klasę bazową Kalkulator, możesz mieć protected Dodaj(), a publicznie udostępnić tylko ogólną metodę Oblicz(). Dzięki temu masz większą kontrolę, co i jak jest wykorzystywane. Branżowo przyjęło się, że protected to taki złoty środek pomiędzy public a private, gwarantując odpowiednią enkapsulację i możliwość dziedziczenia. Warto to stosować świadomie, żeby potem nie mieć niespodzianek w dużych projektach.

Pytanie 26

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

A. Debugowanie kodu w celu znalezienia błędów
B. Opracowywanie interfejsu graficznego
C. Kompilowanie aplikacji
D. Projektowanie bazy danych
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 27

Jakie znaczenie ma termin "hierarchia dziedziczenia" w kontekście programowania obiektowego?

A. Zespół metod i pól posiadających ten sam modyfikator dostępu
B. Układ klas w strukturę, w której klasy pochodne dziedziczą cechy od klas bazowych
C. Zbiór klas, które nie mają wspólnych powiązań
D. Układ klas, który ogranicza występowanie dziedziczenia wielokrotnego
Hierarchia dziedziczenia to fundamentalna koncepcja programowania obiektowego, polegająca na organizacji klas w strukturę, w której klasy pochodne dziedziczą właściwości (pola i metody) od klas bazowych. Pozwala to na wielokrotne wykorzystanie kodu, co zwiększa jego modularność i zmniejsza redundancję. Klasa bazowa dostarcza ogólne cechy i metody, podczas gdy klasy pochodne rozszerzają lub modyfikują tę funkcjonalność, dostosowując ją do bardziej specyficznych wymagań. Przykładem jest klasa 'Pojazd', po której mogą dziedziczyć klasy 'Samochód' i 'Motocykl', zachowując wspólne atrybuty, takie jak 'maksymalna prędkość' czy 'masa'.

Pytanie 28

Jakie są różnice między kompilatorem a interpretem?

A. Interpreter konwertuje kod źródłowy na język maszynowy przed jego kompilacją
B. Kompilator przekształca kod źródłowy na język maszynowy przed uruchomieniem aplikacji
C. Kompilator przetwarza kod na język maszynowy w momencie jego wykonywania
D. Interpreter tworzy plik wykonywalny, który funkcjonuje niezależnie od otoczenia
Kompilator zamienia kod źródłowy na język maszynowy zanim program się uruchomi. W efekcie dostajemy plik wykonywalny, taki jak .exe w Windowsie. To fajne, bo po skompilowaniu aplikacja działa samodzielnie i nie potrzeba jej tłumaczyć od nowa. Dzięki temu programy, które są skompilowane, są zazwyczaj dużo szybsze i lepiej zoptymalizowane niż te, które są interpretowane. Warto wiedzieć, że kompilatory są wykorzystywane w językach takich jak C, C++ czy Java. Kompilacja ma też tę zaletę, że można wykrywać błędy jeszcze przed uruchomieniem programu, co jest naprawdę przydatne.

Pytanie 29

Które z poniższych stwierdzeń jest prawdziwe w kontekście dziedziczenia w języku Java?

A. Klasa pochodna może dziedziczyć po wielu klasach bazowych.
B. Dziedziczenie jest niezalecane w języku Java.
C. Klasa pochodna dziedziczy po jednej klasie bazowej.
D. Java nie wspiera dziedziczenia.
Dziedziczenie jest jednym z kluczowych mechanizmów programowania obiektowego, a Java wspiera dziedziczenie jednokrotne. Oznacza to, że klasa pochodna może dziedziczyć tylko po jednej klasie bazowej. Jest to zgodne z modelem dziedziczenia stosowanym w wielu językach obiektowych. Dzięki temu mechanizmowi możemy ponownie wykorzystywać kod, co jest zgodne z zasadą DRY (Don't Repeat Yourself). Dziedziczenie pozwala na tworzenie hierarchii klas, gdzie klasa pochodna dziedziczy właściwości i metody klasy bazowej, co ułatwia rozszerzanie funkcjonalności bez konieczności ponownego pisania kodu. Przykład zastosowania to tworzenie klasy 'Samochód', która dziedziczy po klasie 'Pojazd', co pozwala na automatyczne odziedziczenie wszystkich cech pojazdu, takich jak metoda 'uruchom', a jednocześnie dodanie specyficznych funkcji dla samochodu, jak 'otwórz bagażnik'. Dziedziczenie ułatwia zarządzanie złożonymi systemami, umożliwiając organizację kodu w sposób bardziej zrozumiały i zarządzalny.

Pytanie 30

Która z wymienionych właściwości najlepiej charakteryzuje biblioteki dynamiczne?

A. Są statycznie dołączane do pliku wykonywalnego
B. Są ładowane podczas kompilacji
C. Zawierają kod źródłowy aplikacji
D. Są ładowane w trakcie działania aplikacji
Jak mówimy o ładowaniu bibliotek w czasie kompilacji, to mamy na myśli biblioteki statyczne. One są wplecione w plik wykonywalny. Z kolei biblioteki dynamiczne, to jakby zewnętrzne funkcje, które nie są częścią źródłowego kodu programu. Przy statycznym dołączaniu wszelkie potrzebne zasoby są w jednym pliku, a to odróżnia je od tych dynamicznych, które wchodzą w grę dopiero, gdy program działa.

Pytanie 31

Ergonomiczną oraz właściwą pozycję do pracy przy komputerze zapewni fotel, którego

A. podłokietniki są 30 cm powyżej blatu
B. oparcie wspiera lordozę w dolnym odcinku pleców
C. oparcie w rejonie szyi jest nachylone do przodu o 40ᵒ
D. podłokietniki znajdują się 20 cm poniżej blatu
Prawidłowa i ergonomiczna pozycja pracy przy komputerze jest kluczowa dla zdrowia i komfortu użytkownika. Oparcie krzesła, które zapewnia lordozę w odcinku lędźwiowym, jest niezbędne, ponieważ pozwala na zachowanie naturalnej krzywizny kręgosłupa. Lordoza lędźwiowa to naturalne wygięcie kręgosłupa w dolnej części pleców, które wspiera prawidłowe ułożenie ciała podczas siedzenia. Krzesło powinno być zaprojektowane tak, aby oparcie przylegało do krzywizny ciała, co minimalizuje ryzyko bólu pleców oraz przeciążeń. Praktycznym przykładem ergonomicznej pozycji jest ustawienie oparcia w taki sposób, aby jego dolna część była dostosowana do odcinka lędźwiowego. Zgodnie z normami ISO 9241, które dotyczą ergonomii miejsc pracy przy komputerze, krzesło powinno umożliwiać użytkownikowi przyjęcie wygodnej pozycji z podparciem dla dolnej części pleców. W odpowiedniej pozycji stopy powinny spoczywać płasko na podłodze, a kolana powinny być na poziomie bioder, co wspiera prawidłowe krążenie krwi oraz redukuje napięcia mięśniowe.

Pytanie 32

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

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

Pytanie 33

Po wykonaniu poniższego kodu na konsoli zostanie wyświetlona liczba:

int a = 0x73;
cout << a;
A. 73
B. 108
C. 0
D. 115
Wiele osób myli się, gdy widzi zapis 0x73, uznając, że to po prostu liczba 73 w dziesiętnym, bo tak wygląda najprościej. Jednak w rzeczywistości ten prefiks „0x” informuje kompilator, że mamy do czynienia z liczbą zapisaną w systemie szesnastkowym (heksadecymalnym), a nie dziesiętnym. To jest taki bardzo charakterystyczny zapis w językach programowania (C, C++, Java, czasem nawet Python), który pozwala programiście jasno określić, w jakim systemie podaje liczbę. Zakładając, że ktoś wybierze 108 lub 73, można podejrzewać, że ta osoba nie przeliczyła heksadecymalnej liczby na dziesiętną lub po prostu nie zwróciła uwagi na prefiks. 0x73 to w rzeczywistości (7 * 16) + 3, czyli 112 + 3, co daje 115. Niektórym może się też wydawać, że heksadecymalne 0x73 to 73 dziesiętnie, ale to typowy błąd początkujących. Wybór zera z kolei może wynikać z nieporozumienia – być może ktoś pomyślał, że a nie zostało zainicjalizowane lub kod nie wypisuje nic, ale tutaj jawnie inicjujemy a wartością heksadecymalną. Praktyka pokazuje, że podobne nieporozumienia pojawiają się na początku nauki programowania, szczególnie gdy nie ma jeszcze „wyczucia” systemów liczbowych. Tak naprawdę, jeśli chcemy być profesjonalni, trzeba od razu nauczyć się, że każda liczba z 0x na początku jest heksadecymalna, a cout zawsze wypisze jej dziesiętną reprezentację, o ile nie zmienimy flagi strumienia (std::hex itd.). To takie podstawy, które potem pozwalają pewniej obracać się w kodzie, gdzie często występują maski bitowe czy operacje na rejestrach. Moim zdaniem, wielu początkujących inżynierów właśnie przez nieuwagę na takie detale traci sporo czasu na debugowanie prostych błędów. Warto więc na przyszłość za każdym razem zatrzymać się na chwilę i zastanowić, czy na pewno dobrze rozpoznajemy system liczbowy wykorzystywany w danym fragmencie kodu.

Pytanie 34

W przedstawionej ramce znajduje się fragment opisu metody compile języka Java wykorzystywanej w kontekście wyrażeń regularnych. Który symbol powinien być użyty, aby znaleźć dopasowanie na końcu tekstu?

MetacharacterDescription
|Find a match for any one of the patterns separated by | as in: cat|dog|fish
.Find just one instance of any character
^Finds a match as the beginning of a string as in: ^Hello
$Finds a match at the end of the string as in: World$
\dFind a digit
\sFind a whitespace character
\bFind a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
\uxxxxFind the Unicode character specified by the hexadecimal number xxxx
Źródło https://www.w3schools.com/java/java_regex.asp dostęp 20.08.2020
A. $
B. ^
C. .
D. |
Znak dolara $ w wyrażeniach regularnych w języku Java jest używany do oznaczenia końca ciągu znaków. Jeśli chcemy sprawdzić, czy konkretny wzorzec występuje na końcu danego tekstu, używamy właśnie tego metaznaku. Przykładowo, wyrażenie regularne World$ dopasuje tekst, w którym słowo World pojawia się na samym końcu. Jest to przydatne w wielu scenariuszach, takich jak walidacja struktury tekstu czy filtrowanie logów, gdzie ważna jest pozycja występowania wzorca. Konwencja ta jest zgodna z ogólnymi standardami regex, co czyni ją intuicyjną i uniwersalną w zastosowaniu. Dolar pełni kluczową rolę w automatyzacji procesów w przetwarzaniu tekstu, umożliwiając efektywne dopasowywanie końcowych wzorców w aplikacjach Java. Użycie $ jest zgodne z dobrymi praktykami kodowania, szczególnie w kontekście walidacji danych wejściowych, gdzie określenie końca ciągu jest często wymagane. Jest to także popularne w analizie danych, gdzie dane muszą spełniać określone kryteria co do ich zakończenia, takie jak rozszerzenia plików czy określone etykiety tekstowe.

Pytanie 35

Jakie czynności należy wykonać, aby zrealizować zdarzenie kliknięcia na przycisk w aplikacji desktopowej?

A. Zaprojektować nowy dialog modalny
B. Zmienić plik XAML
C. Utworzyć metodę w systemie menu
D. Powiązać zdarzenie kliknięcia z odpowiednią metodą w kodzie
Podłączenie zdarzenia kliknięcia do odpowiedniej metody w kodzie to podstawowy krok w obsłudze interakcji użytkownika z przyciskiem w aplikacjach desktopowych. W środowiskach takich jak WPF (Windows Presentation Foundation), WinForms czy Qt, każda kontrolka (np. przycisk) może posiadać przypisaną metodę, która zostanie wywołana w momencie kliknięcia. Dzięki temu możliwe jest wykonywanie operacji, takich jak otwieranie nowych okien, przetwarzanie danych lub aktualizacja interfejsu użytkownika. Prawidłowa implementacja zdarzeń jest kluczowa dla funkcjonalności aplikacji i umożliwia dynamiczne reagowanie na działania użytkownika. W środowiskach takich jak Visual Studio, proces ten jest intuicyjny i często realizowany przez mechanizm 'kliknij i przeciągnij', a następnie przypisanie kodu do wygenerowanego szkieletu funkcji.

Pytanie 36

Jakie jest podstawowe działanie w ochronie miejsca zdarzenia?

A. Usunięcie niebezpiecznych przedmiotów z otoczenia
B. Zagwarantowanie odpowiedniego oświetlenia
C. Zastosowanie sterylnych materiałów opatrunkowych
D. Zagwarantowanie stabilności ciała rannego
Z mojego doświadczenia, usunięcie niebezpiecznych rzeczy z miejsca, gdzie doszło do wypadku, to naprawdę kluczowa sprawa. Dzięki temu zmniejszamy szanse na dodatkowe obrażenia i możemy lepiej pomóc poszkodowanemu, nie narażając siebie na ryzyko. Na przykład, warto odsunąć ostre narzędzia, wyłączyć działające maszyny czy podnieść ciężkie przedmioty, które mogłyby kogoś zranić. Takie działania są istotne w każdej sytuacji, czy to wypadek na drodze, czy w pracy.

Pytanie 37

Zajmując się pracą w zespole oraz dbając o jego efektywne funkcjonowanie, nie powinniśmy

A. przyjmować odpowiedzialności za swoje decyzje
B. skupiać się jedynie na własnych korzyściach
C. sumiennie i w ustalonym terminie realizować swoje zadania
D. wspierać się nawzajem
Dokładnie o to chodzi – skupianie się tylko na własnych korzyściach prawie zawsze działa na szkodę zespołu. W praktyce, gdy ktoś patrzy wyłącznie na siebie, najczęściej zaniedbuje współpracę, co prowadzi do napięć i spadku efektywności grupy. W zespole liczy się wspólny cel, a nie indywidualne interesy, bo to właśnie dzięki wzajemnemu wsparciu i otwartej komunikacji można osiągnąć lepsze wyniki. Z mojego doświadczenia wynika, że projekty, w których członkowie współpracowali i dzielili się odpowiedzialnością, szły sprawniej i bez zbędnych spięć. Profesjonalne standardy, np. metodyki Scrum czy Agile, akcentują wartość pracy zespołowej i transparentności – jeśli każdy ciągnie w swoją stronę, cały model współpracy się sypie. Warto pamiętać, że nawet najlepszy specjalista sam nie pociągnie projektu, jeśli nie będzie działał fair wobec innych. Najlepiej się sprawdza takie podejście, gdzie ludzie podchodzą do pracy z otwartością, potrafią poprosić o pomoc i wspólnie świętują sukcesy, a nie tylko skupiają się na własnych liczbach czy bonusach. To naprawdę widać w praktyce – zespoły, gdzie nie liczy się tylko własny interes, mają zwykle znacznie lepsze efekty i atmosferę pracy.

Pytanie 38

Jaki jest kluczowy zamysł wzorca "Kompozyt" (Composite)?

A. Określenie interfejsu komunikacji pomiędzy składnikami systemu
B. Stworzenie jednej klasy do zarządzania wieloma obiektami tego samego rodzaju
C. Umożliwienie klientom obsługi obiektów oraz ich zbiorów w spójny sposób
D. Danie możliwości dynamicznej zmiany zachowania obiektu
Zarządzanie wieloma obiektami tego samego typu to cecha wzorca Fabryka (Factory) lub Builder, a nie Kompozyt. Definiowanie interfejsu komunikacji między komponentami systemu to rola wzorca Mediator, który organizuje interakcje między różnymi obiektami. Umożliwienie dynamicznej zmiany zachowania obiektu jest domeną wzorca Strategia (Strategy) lub Dekorator (Decorator), które oferują elastyczność w zakresie modyfikacji zachowania podczas działania programu.

Pytanie 39

Na ilustracji pokazany jest fragment diagramu blokowego pewnego algorytmu. Ile razy warunek n<7 będzie badany?

Ilustracja do pytania
A. 8
B. 7
C. 5
D. 6
Odpowiedź 4 jest prawidłowa ponieważ algorytm rozpoczyna od n równego 1 i zwiększa tę wartość o jeden w każdej iteracji aż do momentu gdy n stanie się równe 7 Wtedy warunek n mniejsze od 7 przestaje być spełniony co oznacza że warunek ten jest sprawdzany łącznie 6 razy tj dla n równych 1 2 3 4 5 i 6 Jest to typowa pętla kontrolna często spotykana w programowaniu gdzie warunek pętli decyduje o jej zakończeniu W praktyce takie podejście pozwala na efektywne zarządzanie liczbą iteracji i zapewnia klarowność kodu Co więcej użycie pętli z warunkiem końcowym jest zgodne z dobrymi praktykami projektowania algorytmów gdyż minimalizuje ryzyko błędów logicznych poprzez jawne określenie końca pętli Ponadto zrozumienie mechanizmu działania pętli i jej warunków jest kluczowe dla optymalizacji algorytmów i efektywnego zarządzania zasobami co ma bezpośrednie przełożenie na wydajność aplikacji szczególnie w środowiskach wymagających dużej mocy obliczeniowej

Pytanie 40

Rozpoczęcie tworzenia procedury składowej o nazwie dodajUsera w MS SQL wymaga użycia poleceń

A. create procedure dodajUsera
B. create dodajUsera procedure
C. add dodajUsera procedure
D. add procedure dodajUsera
Polecenie 'create procedure dodajUsera' to właśnie ten sposób, w jaki w Microsoft SQL Server deklaruje się początek nowej procedury składowanej. Wynika to bezpośrednio ze składni T-SQL, gdzie słowo 'create' inicjuje tworzenie nowego obiektu w bazie danych, a 'procedure' określa typ obiektu – procedurę składowaną. Dalej podaje się nazwę, tu akurat 'dodajUsera'. Moim zdaniem, to jedno z podstawowych, ale i najważniejszych poleceń dla każdego, kto chce serio pracować z SQL Serverem, bo bez zrozumienia tej składni bardzo szybko można się pogubić nawet przy prostych operacjach. T-SQL od lat nie zmienia tej konwencji i to jest bardzo wygodne – można śmiało korzystać z tutoriali czy dokumentacji sprzed kilku wersji serwera, bo tu akurat niewiele się zmienia. Przykład praktyczny: gdybyś chciał dodać prostą procedurę, która wstawia użytkownika do tabeli, zacząłbyś właśnie tak: 'create procedure dodajUsera AS BEGIN --tutaj kod END'. Warto wiedzieć, że dobrym zwyczajem jest zawsze nazywać procedury zgodnie z tym, co robią, a nie jakoś przypadkowo, i też często dodawać prefix, np. 'usp_' (od 'user stored procedure'), żeby potem łatwo było je odróżnić od funkcji czy triggerów. Przy dużym projekcie pozwala to zachować porządek. No i nie można zapominać o wersjonowaniu takich procedur – w firmach często stosuje się repozytoria kodu SQL. Generalnie, w środowisku produkcyjnym, każda nowa procedura powinna zaczynać się właśnie od 'create procedure', bez żadnych skrótów czy zamienników.