Wyniki egzaminu

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

Egzamin niezdany

Wynik: 11/40 punktów (27,5%)

Wymagane minimum: 20 punktów (50%)

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

Jakie narzędzie jest wykorzystywane do zgłaszania błędów w projektach IT?

A. Photoshop
B. JIRA
C. Git
D. Blender
Photoshop to narzędzie do edycji grafiki rastrowej i nie jest związane z raportowaniem błędów w projektach informatycznych. Blender to zaawansowane narzędzie do modelowania 3D, animacji oraz renderowania, używane głównie w produkcji filmów, gier i wizualizacji, ale nie posiada funkcji zarządzania błędami w kodzie. Git to system kontroli wersji, który umożliwia zarządzanie kodem źródłowym, śledzenie zmian i współpracę programistów nad projektem, ale nie służy bezpośrednio do raportowania błędów w projektach – choć można wykorzystać go pośrednio poprzez integrację z narzędziami do zarządzania błędami, jak np. JIRA.

Pytanie 2

Jakie są kluczowe różnice pomiędzy strukturą (struct) a unią (union) w języku C?

A. Unia umożliwia dynamiczne przypisywanie typów danych, struktura natomiast nie
B. Struktura wymaga więcej miejsca w pamięci niż unia
C. Unia nie jest obsługiwana przez kompilatory współczesnych języków
D. Struktura przechowuje wiele wartości równocześnie, unia tylko jedną
Główna różnica między strukturą ('struct') a unią ('union') w języku C polega na sposobie przechowywania danych. Struktura przechowuje wszystkie pola jednocześnie, przydzielając każdemu z nich osobne miejsce w pamięci, natomiast unia używa wspólnej przestrzeni pamięci dla wszystkich swoich pól – w danym momencie można przechowywać tylko jedną wartość. Unia jest bardziej efektywna pod względem pamięci, ale mniej wszechstronna, ponieważ zmiana wartości jednego pola nadpisuje pozostałe. Struktury są powszechnie wykorzystywane w aplikacjach, gdzie konieczne jest przechowywanie wielu niezależnych danych, podczas gdy unie są używane do oszczędzania pamięci.

Pytanie 3

Która z wymienionych zasad jest istotna dla bezpiecznego użytkowania portali społecznościowych?

A. Udostępnianie jak największej ilości informacji osobowych
B. Regularne kontrolowanie ustawień prywatności
C. Zgłaszanie treści, które naruszają regulamin
D. Unikanie stosowania silnych haseł do konta
Udostępnianie jak największej ilości danych osobowych jest jedną z najniebezpieczniejszych praktyk w kontekście korzystania z portali społecznościowych. Takie działanie naraża użytkowników na różne formy cyberprzestępczości, w tym kradzież tożsamości czy oszustwa. Im więcej informacji osoba udostępnia, tym łatwiej dla przestępców zbudować profil potencjalnej ofiary i wykorzystać go do oszustw. Kolejnym błędem jest unikanie ustawiania silnych haseł do konta. Słabe hasła, które są łatwe do odgadnięcia lub uzyskania, stają się powodem wielu nieautoryzowanych dostępu do kont. Przykłady prostych haseł, jak '123456' czy 'hasło', są powszechnie używane przez wiele osób, co czyni je niezwykle podatnymi na ataki brute force. Wreszcie, zgłaszanie postów, które nie są zgodne z regulaminem, choć jest to działanie pozytywne, nie wpływa bezpośrednio na bezpieczeństwo użytkownika. Zgłaszanie niewłaściwych treści jest ważne dla utrzymania zdrowego środowiska w sieci, ale nie chroni użytkownika przed zagrożeniami związanymi z prywatnością i bezpieczeństwem danych. Wspólnie, te praktyki mogą prowadzić do poważnych naruszeń bezpieczeństwa i nie powinny być stosowane przez świadomych użytkowników portali społecznościowych.

Pytanie 4

Jaki framework umożliwia tworzenie interaktywnych interfejsów użytkownika w języku TypeScript?

A. Django
B. ASP.NET Core
C. jQuery
D. Angular
Angular to popularny framework oparty na TypeScript, który umożliwia tworzenie dynamicznych i rozbudowanych interfejsów użytkownika. Jest rozwijany przez Google i używany do budowy aplikacji typu Single Page Applications (SPA), które cechują się płynnością działania i interaktywnością. Angular oferuje bogaty ekosystem narzędzi wspierających programistów, takich jak Angular CLI, który pozwala na szybkie generowanie komponentów, serwisów i modułów. Wsparcie dla TypeScript oznacza, że Angular pozwala na wykorzystywanie typów, interfejsów oraz zaawansowanych narzędzi do refaktoryzacji kodu, co przekłada się na większą czytelność i bezpieczeństwo aplikacji. Dzięki modularnej architekturze Angular wspiera tworzenie aplikacji, które są łatwe w utrzymaniu i skalowaniu. Jego dwukierunkowe wiązanie danych (two-way data binding) oraz możliwość dynamicznej aktualizacji widoków czynią go jednym z liderów na rynku frameworków frontendowych.

Pytanie 5

Podstawowym celem środowisk IDE takich jak: IntelliJ IDEA, Eclipse, NetBeans jest programowanie w języku:

A. C#
B. C++
C. Java
D. Python
Wielu początkujących programistów może się pomylić, zakładając, że IDE typu IntelliJ IDEA, Eclipse czy NetBeans są uniwersalne i równie dobrze nadają się do języków takich jak C++, Python czy C#. Tymczasem, chociaż te środowiska oferują jakieś wsparcie dla innych języków przez dodatkowe wtyczki czy rozszerzenia, to jednak nie są one dla tych języków głównym wyborem w branży. W praktyce, osoby programujące w C++ zdecydowanie częściej korzystają z Visual Studio lub CLion – IDE wręcz zbudowanych pod potrzeby C++ i jego specyficzny workflow kompilacji oraz debugowania. Jeśli chodzi o Pythona, liderem jest PyCharm albo dla lżejszych rozwiązań – VS Code czy nawet Sublime Text z odpowiednimi rozszerzeniami. Z kolei dla C# najbardziej oczywistym wyborem jest Visual Studio od Microsoftu, które jest zoptymalizowane pod .NET i narzędzia Windowsowe. Błąd w rozumowaniu pojawia się najczęściej wtedy, gdy ktoś nie odróżnia „możliwości” środowiska od jego „głównego” przeznaczenia – a to jest bardzo ważne z punktu widzenia efektywności pracy i wsparcia technologicznego. IntelliJ, Eclipse i NetBeans były i wciąż są rozwijane głównie z myślą o programistach Java, co widać choćby po dokumentacji, wsparciu społeczności, ilości dedykowanych pluginów czy integracji z narzędziami typowymi dla ekosystemu Java. Warto o tym pamiętać przy wyborze IDE, bo korzystanie z narzędzia nie do końca zoptymalizowanego pod dany język może skutkować niepotrzebnymi trudnościami w pracy i niższą produktywnością.

Pytanie 6

Jakie znaczenie ma deklaracja zmiennej w programowaniu?

A. Określenie typu oraz nazwy zmiennej w kodzie programu
B. Przypisanie zmiennej wartości domyślnej
C. Stworzenie nowej wartości w bazie danych
D. Zarezerwowanie miejsca w pamięci dla wyników operacji arytmetycznych
Utworzenie wartości w bazie danych nie jest związane z deklaracją zmiennej – to operacja wykonywana w językach baz danych (np. SQL). Przypisanie zmiennej wartości domyślnej następuje po jej deklaracji, ale samo przypisanie wartości nie jest równoznaczne z deklaracją. Zarezerwowanie miejsca w pamięci dla wyników operacji arytmetycznych to efekt działania programu, a nie deklaracji zmiennej – rezerwacja pamięci następuje po uruchomieniu kodu, a nie na etapie jego pisania.

Pytanie 7

Po uruchomieniu poniższego kodu w języku C++ na konsoli zobaczymy następujący tekst:

#include <stdio.h>
int main() {
    int a = 5;
    float b = 5.12345;
    double w;
    w = a + b;
    printf("%s dodawania: %d + %.2f = %f", "Wynik", a, b, w);
    return 0;
}
A. Wynik dodawania: 5+5.12=10.123450
B. "%s dodawania: %d + %.2f = %f", "Wynik", 5, 5.12345, 10.123450
C. dodawania: 5+5.12345=10.123450 Wynik
D. "%s dodawania: %d + %.2f=%f", "Wynik", a, b, w
Wiele osób daje się złapać na nieco podchwytliwe formatowanie tekstu i nie do końca rozumie mechanizm działania funkcji printf w języku C++. Kluczowe jest, że printf nie wypisuje dosłownie wszystkiego, co znajduje się w cudzysłowie, tylko podmienia tzw. specyfikatory formatu na konkretne wartości przekazane po przecinku. Próby dosłownego przepisania wywołania funkcji printf jako wyjścia na ekran są mylące – program nie drukuje ""%s dodawania: %d + %.2f = %f"", tylko zamienia to na odpowiednie liczby i teksty. Równie powszechnym błędem jest niedopasowanie precyzji – np. wypisanie 5.12345 zamiast 5.12 przy %.2f, bo printf automatycznie zaokrągla wynik do dwóch miejsc po przecinku w tym miejscu. Część osób pomija też fakt, że argumenty w printf muszą być przekazane w tej samej kolejności, co specyfikatory – co jest bardzo istotne przy większej liczbie zmiennych. Należy zwrócić szczególną uwagę na to, jak typy danych są prezentowane i obsługiwane przez printf: %d to zawsze liczba całkowita, %.2f – liczba zmiennoprzecinkowa dokładnie z dwoma cyframi po przecinku, %f – domyślnie sześć miejsc po przecinku. W praktyce niepoprawne jest zapisywanie wywołania funkcji jako tekst do wyświetlenia albo przestawianie kolejności czy branie wartości z pamięci bez sprawdzenia ich formatu. Z mojego doświadczenia takie potknięcia wynikają raczej z braku praktyki z printf i nieuważnego czytania dokumentacji. Warto zawsze sprawdzać, jak formatowanie będzie wyglądać na wyjściu i testować fragmenty kodu – bo komputer nie domyśli się, co autor miał na myśli, tylko wykona dokładnie to, co zadeklarowano w kodzie.

Pytanie 8

Który z wymienionych poniżej wzorców projektowych można zakwalifikować jako wzorzec strukturalny?

A. Metoda szablonowa (Template method)
B. Fasada (Facade)
C. Obserwator (Observer)
D. Fabryka abstrakcyjna (Abstract Factory)
Metoda Szablonowa (Template Method) to wzorzec behawioralny, który definiuje sposób realizacji algorytmu. Fabryka Abstrakcyjna (Abstract Factory) to wzorzec kreacyjny, który koncentruje się na tworzeniu obiektów bez określania ich konkretnych klas. Wzorzec Obserwator (Observer) to wzorzec behawioralny, który umożliwia powiadamianie obiektów o zmianach stanu innego obiektu, co jest kluczowe w implementacji reaktywnych systemów, ale nie jest przykładem wzorca strukturalnego.

Pytanie 9

Co oznacza pojęcie TDD w kontekście programowania?

A. Technical Design Document - dokumentacja techniczna projektu
B. Type Definition Document - dokumentacja typów danych w aplikacji
C. Task Deployment Diagram - schemat wdrażania zadań w projekcie
D. Test-Driven Development - praktyka pisania testów przed implementacją kodu
Test-Driven Development (TDD) to metodologia programowania, w której proces tworzenia kodu zaczyna się od pisania testów. TDD polega na cyklicznym podejściu do rozwoju oprogramowania, w którym najpierw definiujemy, jakie funkcjonalności będzie miał nasz kod, a następnie implementujemy tylko te elementy, które są niezbędne do przejścia wcześniej napisanych testów. Dzięki temu, deweloperzy mają możliwość natychmiastowego sprawdzenia poprawności swojego kodu, co sprzyja eliminacji błędów na wczesnym etapie. Przykład zastosowania TDD można zobaczyć w tworzeniu aplikacji webowych, gdzie programista pisze testy jednostkowe dla nowych funkcji, a następnie implementuje te funkcje, poprawiając kod tylko w przypadku, gdy testy nie przechodzą. Takie podejście pozwala na zwiększenie jakości oprogramowania oraz jego łatwiejszą refaktoryzację. Warto również zauważyć, że TDD jest zgodne z praktykami Agile i Continuous Integration, co pozwala na efektywniejsze zarządzanie projektem i dostosowywanie go do wymagań zmieniającego się rynku.

Pytanie 10

Jakie cechy powinien posiadać skuteczny negocjator?

A. asertywność, pesymizm, buta
B. intuicja, cierpliwość, asertywność
C. lojalność, nieśmiałość, uczciwość
D. dobra reputacja, przekora, porywczość
Skuteczny negocjator powinien mieć zestaw cech, które pozwolą mu osiągać kompromisy, rozwiązywać konflikty i dążyć do korzystnych rozwiązań dla obu stron. Intuicja pozwala wyczuć nastroje rozmówcy, wychwycić niewerbalne sygnały i przewidywać możliwe zagrożenia czy okazje jeszcze zanim druga strona je wprost zasygnalizuje. Cierpliwość jest kluczowa, bo proces dochodzenia do porozumienia bywa żmudny, a presja czasu często prowadzi do pochopnych decyzji. Często miałem okazję obserwować, że ci, którzy potrafią zaczekać na ruch drugiej strony, zyskują przewagę negocjacyjną. Asertywność natomiast pozwala jasno wyrażać swoje oczekiwania i granice, bez agresji i bez uległości – to klasyka wśród dobrych praktyk negocjacyjnych, choć nadal niedoceniana w wielu branżach. Asertywność pomaga uniknąć niedomówień i manipulacji, a także buduje szacunek. W praktyce, na sali negocjacyjnej czy nawet przy codziennych rozmowach z klientami, zestaw tych trzech cech daje naprawdę mocną pozycję. Moim zdaniem nie ma jednego uniwersalnego szablonu, ale właśnie intuicja, cierpliwość i asertywność pojawiają się prawie zawsze w podręcznikach czy na szkoleniach dedykowanych profesjonalistom. Warto je ćwiczyć na co dzień, nawet poza pracą, bo to się po prostu opłaca.

Pytanie 11

Jakie są różnice pomiędzy środowiskiem RAD a klasycznym IDE w kontekście aplikacji webowych?

A. RAD nie wspiera żadnych języków backendowych
B. RAD funkcjonuje tylko w systemach Windows
C. RAD umożliwia szybsze prototypowanie i rozwój aplikacji dzięki narzędziom wizualnym
D. RAD koncentruje się wyłącznie na budowie frontendu aplikacji
RAD nie ogranicza się jedynie do tworzenia frontendu aplikacji – obejmuje cały proces budowy aplikacji, zarówno frontend, jak i backend. Twierdzenie, że RAD działa tylko w systemach Windows, jest błędne, ponieważ wiele narzędzi RAD (np. OutSystems, Mendix) działa w środowisku wieloplatformowym. RAD obsługuje języki backendowe i umożliwia pełną integrację z serwerami, bazami danych oraz API, co czyni go kompleksowym rozwiązaniem do tworzenia aplikacji webowych.

Pytanie 12

Zapisany kod w języku Python ilustruje

pierwiastki = {"N": "Azot", "O": "Tlen", "P": "Fosfor", "Si": "Siarka"}
A. kolejkę (LIFO)
B. tablicę asocjacyjną (słownik)
C. strukturę
D. stos
Żeby zrozumieć, czemu inne struktury danych nie zadziałały w tym przykładzie, trzeba się przyjrzeć, jak one działają. Stos, czyli kolejka LIFO, to taki układ, w którym ostatni dodany element idzie jako pierwszy. Przykłady to różne algorytmy przeszukiwania czy cofniki w edytorach tekstu. Problem w tym, że stos nie przechowuje par klucz-wartość, przez co nie nadaje się do tego zadania. Zwykła struktura to raczej szerokie pojęcie i nie daje jasnej odpowiedzi na pytanie, jakie mamy w Pythonie. W przeciwieństwie do tego, słownik idealnie pasuje, bo przechowuje dane w formie klucz-wartość, co pozwala na szybki dostęp do informacji. W stosie brak jest też kolejności, jaką można by stosować. Często, gdy wybieramy błędne odpowiedzi, zapominamy o specyfice działania tych struktur, co może prowadzić do pomyłek. Dlatego ważne jest, żeby rozumieć, jak odpowiednio przypisać struktury danych do ich zastosowań, co jest istotne w programowaniu.

Pytanie 13

Jaki z wymienionych komponentów jest kluczowy do inicjalizacji pola klasy podczas tworzenia instancji obiektu?

A. Instrukcja warunkowa
B. Funkcja zaprzyjaźniona
C. Konstruktor
D. Metoda statyczna
Metoda statyczna działa na poziomie klasy, a nie obiektu, i nie jest używana do inicjalizacji pól instancji. Funkcja zaprzyjaźniona może mieć dostęp do prywatnych pól klasy, ale jej głównym celem nie jest inicjalizacja obiektu – służy do wykonywania operacji na istniejących obiektach. Instrukcja warunkowa kontroluje przepływ programu, ale nie jest odpowiedzialna za inicjalizację pól klasy – jest to zadanie konstruktora, który działa automatycznie przy tworzeniu obiektu.

Pytanie 14

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

A. Gdy poszkodowany cierpi na krwotok zewnętrzny
B. Gdy poszkodowany jest nieprzytomny, ale oddycha
C. Gdy poszkodowany nie oddycha
D. Gdy poszkodowany jest świadomy, lecz ma uraz kończyny
Wiedza o tym, kiedy zastosować pozycję bezpieczną, jest naprawdę kluczowa w praktyce pierwszej pomocy i niestety często bywa mylona z innymi sytuacjami urazowymi lub zagrożeniami. Częstym błędem jest przekonanie, że wystarczy jakikolwiek uraz – na przykład złamana noga czy ręka – i już trzeba układać poszkodowanego w pozycji bocznej ustalonej. Tymczasem, jeśli ktoś jest przytomny i oddycha samodzielnie, dużo ważniejsze jest zadbać o unieruchomienie urazu i komfort poszkodowanego, zamiast go obracać – a już na pewno nie stosować pozycji bezpiecznej, bo możesz wtedy tylko pogorszyć sprawę. Jeszcze częściej ludzie myślą, że pozycja bezpieczna jest dla osoby nieoddychającej – to jest bardzo poważny błąd! Jeśli ktoś nie oddycha, musisz natychmiast rozpocząć resuscytację krążeniowo-oddechową (RKO) – odkładanie tego na rzecz układania w pozycji bocznej może skończyć się tragicznie. To samo zresztą dotyczy silnego krwotoku – wtedy priorytetem jest tamowanie krwawienia, a nie układanie na boku (chyba że poszkodowany przestaje oddychać i musisz zacząć RKO). Często wynika to z mylenia działań ratowniczych: pozycja bezpieczna ma jedno, bardzo konkretne zastosowanie – zabezpieczanie dróg oddechowych u osoby nieprzytomnej, oddychającej, bez urazów kręgosłupa. W pozostałych przypadkach, właściwe postępowanie wynika stricte z rodzaju urazu lub zagrożenia życia. Moim zdaniem, dobrze jest zawsze wrócić myślami do podstaw BLS i powtarzać sobie: oddycha – pozycja bezpieczna; nie oddycha – RKO. Takie podejście minimalizuje ryzyko popełnienia krytycznych błędów w stresie.

Pytanie 15

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

Ilustracja do pytania
A. 7
B. 8
C. 5
D. 6
Wybór innej odpowiedzi niż 4 wskazuje na nieprawidłowe rozumienie mechanizmu działania pętli z warunkiem końcowym Problem może tkwić w błędnym założeniu dotyczącym liczby iteracji które ma miejsce gdy nie uwzględnia się początkowej wartości n Wynik 8 mógłby wynikać z mylnego założenia że pętla sprawdza warunek również po zakończeniu gdy n wynosi 7 co jest nieprawidłowe Ponadto wybór 5 może sugerować że zrozumienie zakresu wartości n jest niepełne ponieważ pomija się pierwszą iterację gdy n równa się 1 Odpowiedź 7 mogłaby wynikać z błędnego przeliczania liczby iteracji lub niepoprawnego przeanalizowania działania inkrementacji w algorytmie Ważne jest aby zrozumieć że warunek n mniejsze od 7 jest sprawdzany na początku każdej iteracji pętli i gdy n osiąga wartość 7 pętla nie wykonuje się ponownie Zrozumienie tego mechanizmu jest kluczowe do poprawnego projektowania algorytmów i unikania typowych błędów logicznych które mogą prowadzić do nieefektywności kodu oraz trudności w jego debugowaniu i utrzymaniu Praktykując analizę schematów blokowych i algorytmów warto zwrócić uwagę na działanie warunków i ich wpływ na przebieg pętli co ma szerokie zastosowanie zarówno w programowaniu jak i w analizie danych oraz automatyzacji procesów

Pytanie 16

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

Ilustracja do pytania
A. Text - dla biblioteki WPF; JText - dla biblioteki Swing
B. Windows - dla biblioteki WPF; JFrame - dla biblioteki Swing
C. Box - dla biblioteki WPF; JField - dla biblioteki Swing
D. TextBox - dla biblioteki WPF; JTextField - dla biblioteki Swing
W tej sytuacji łatwo się pomylić, bo nazewnictwo w różnych frameworkach bywa mylące i czasem wydaje się, że coś powinno się nazywać inaczej. Na przykład, Windows albo JFrame to nie są komponenty służące bezpośrednio do wprowadzania tekstu – Windows w WPF czy JFrame w Swingu to kontenery, czyli miejsca, gdzie umieszczasz różne kontrolki, a nie pole do wprowadzania tekstu. Bardzo częsty błąd początkujących to mylenie kontenera z komponentem – niby oba pojawiają się na ekranie, ale spełniają zupełnie inne role. Z kolei Text w WPF to po prostu właściwość przechowująca wartość tekstową, nie jest to oddzielna kontrolka, a JText w Swingu… cóż, taki komponent w ogóle nie istnieje, więc to trochę strzał w ciemno. Box i JField także nie są standardowymi kontrolkami wejściowymi – Box w WPF nie odnosi się do żadnej kontrolki tekstowej, a JField to nie jest nazwa wykorzystywana w Swingu. To pokazuje, jak ważne jest czytanie dokumentacji i praktykowanie na konkretnych przykładach, bo bardzo łatwo stworzyć sobie błędny obraz struktury frameworka. Najlepiej zapamiętać, że jeśli chodzi o pole tekstowe w WPF, zawsze będzie to TextBox, a w Swingu JTextField – są to podstawowe, powszechnie używane i dobrze udokumentowane klasy. Inne nazwy mogą prowadzić do niepotrzebnych komplikacji i błędnej logiki w aplikacji.

Pytanie 17

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

A. podłokietniki znajdują się 20 cm poniżej blatu
B. podłokietniki są 30 cm powyżej blatu
C. oparcie w rejonie szyi jest nachylone do przodu o 40ᵒ
D. oparcie wspiera lordozę w dolnym odcinku pleców
Niepoprawne odpowiedzi dotyczące ergonomii krzesła przy komputerze zawierają różne nieprawidłowości, które mogą prowadzić do dyskomfortu oraz problemów zdrowotnych. Odpowiedź, w której podłokietniki są 20 cm niżej niż blat, jest niewłaściwa, ponieważ tak duża odległość może zmuszać ramiona do unikania naturalnej pozycji, co prowadzi do napięcia mięśni i bólu karku. Podłokietniki powinny wspierać ramiona w sposób, który pozwala na relaksację ich mięśni. Z kolei odpowiedź, w której podłokietniki są 30 cm wyżej niż blat, również jest niepożądana, ponieważ wywołuje nadmierne napięcie w przedramionach oraz barkach. Takie ustawienie może skutkować przewlekłymi dolegliwościami, jak zespół cieśni nadgarstka. Oparcie w odcinku szyi pochylone do przodu o 40 stopni jest również niekorzystne, gdyż wymusza nienaturalną pozycję głowy, co może prowadzić do dolegliwości takich jak bóle głowy oraz problemy z szyją. Właściwe ustawienie oparcia krzesła jest kluczowe dla utrzymania ergonomicznej postawy, co powinno być zgodne z zaleceniami ergonomii i normami, aby zapewnić długoterminowy komfort pracy przy komputerze.

Pytanie 18

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

A. sumiennie i w ustalonym terminie realizować swoje zadania
B. wspierać się nawzajem
C. przyjmować odpowiedzialności za swoje decyzje
D. skupiać się jedynie na własnych korzyściach
Przeanalizujmy to szerzej. Wspieranie się wzajemnie w zespole to wręcz podstawa nowoczesnych metod pracy – praktycznie wszystkie opracowania dotyczące efektywności zespołowej podkreślają, że bez wzajemnej pomocy żaden zespół nie osiągnie wysokiego poziomu działania. To nie jest tylko teoria; w praktyce nawet przy świetnych umiejętnościach technicznych, brak współpracy doprowadza do konfliktów i dublowania pracy. Z kolei sumienne i terminowe wykonywanie zadań to w zasadzie fundament profesjonalizmu. Dobre praktyki branżowe, chociażby w zarządzaniu projektami IT, wielokrotnie wskazują, że niedotrzymywanie terminów przez jednego członka zespołu rozkłada wysiłki całej grupy. Wielu początkujących błędnie zakłada, że liczy się tylko własna wydajność, ale efekty końcowe zależą od rzetelności wszystkich. Jeśli chodzi o przyjmowanie odpowiedzialności za własne decyzje, to również element dojrzałości zawodowej – w wielu firmach wręcz się tego wymaga, bo tylko wtedy można wyciągać konstruktywne wnioski i usprawniać procesy. Typowym błędem myślowym jest przekonanie, że wystarczy dobrze robić swoją część, a reszta nie ma znaczenia. Niestety takie podejście prowadzi do rozmycia odpowiedzialności i konfliktów przy podziale zadań. Zamiast tego branża preferuje model, gdzie każdy bierze odpowiedzialność za swoje działania i równocześnie myśli o całym zespole. Warto więc unikać pułapki myślenia tylko o indywidualnych potrzebach i pamiętać, że kluczem do sukcesu jest całościowe spojrzenie na pracę grupową.

Pytanie 19

W języku C# szablon List zapewnia funkcjonalność listy. Z tworzenia obiektu typu List wynika, że jego składnikami są:

List<int> wykaz = new List<int>();
A. elementy o nieokreślonym typie
B. liczby całkowite
C. elementy typu List
D. liczby rzeczywiste
Koncepcja listy generycznej w C# zakłada zastosowanie silnego typowania, co oznacza, że każdy element w kolekcji musi być zgodny z określonym typem określonym podczas deklaracji. W przypadku List<int> typem tym są liczby całkowite. Błędne przekonanie, że elementy mogą być niezdefiniowane lub że lista może zawierać inne typy, wynika najczęściej z braku zrozumienia idei generyczności w C#. Generyczność wprowadza elastyczność, pozwalając na tworzenie kolekcji dopasowanych do konkretnego typu, co z kolei zwiększa bezpieczeństwo typów i wydajność działania programu. Niepoprawne jest również założenie, że lista może zawierać inne listy jako elementy bez odpowiedniego zdefiniowania typu List<List<T>>. Taki zbiór jest możliwy, ale wymaga to jasno określonego typu dla wewnętrznych list, co w naszym przypadku nie zostało wskazane. Wybór liczby rzeczywistej jako elementu mógłby prowadzić do błędów konwersji lub rzutowania, co jest sprzeczne z zasadami dobrych praktyk programistycznych, które promują unikanie rzutowań i manipulacji typami jako źródła potencjalnych błędów w czasie wykonania. Stosowanie list generycznych, takich jak List<int>, pozwala na lepszą optymalizację i kontrolę nad danymi, ograniczając błędy związane z niewłaściwym typowaniem, co jest kluczowe w profesjonalnym rozwoju oprogramowania. Poprawne wykorzystanie generyczności staje się fundamentem dla tworzenia rozszerzalnego i niezawodnego kodu, zgodnego z nowoczesnymi standardami przemysłowymi.

Pytanie 20

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

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

Pytanie 21

W języku C# szablon List umożliwia korzystanie z listy. Z definicji obiektu kolekcji wynika, że jego elementami mogą być:

List<int> wykaz = new List<int>();
A. liczby rzeczywiste
B. elementy o nieokreślonym typie
C. elementy typu List
D. liczby całkowite
W C# kolekcje generyczne typu List<> są jednym z podstawowych narzędzi do zarządzania zbiorem danych o określonym typie. Typ elementów w takiej liście nie jest przypadkowy ani dowolny, tylko wynika bezpośrednio z tego, co wpiszemy w nawiasach ostrych. Wiele osób na początku ulega mylnemu przekonaniu, że List<> może przechowywać elementy o nieokreślonym typie, co jest nieporozumieniem – właściwie tylko List<object> pozwala na taką elastyczność, ale i wtedy każda operacja na elementach wymaga rzutowania. Jeśli natomiast chodzi o liczby rzeczywiste, to one są reprezentowane przez typy double lub float, więc List<int> kompletnie się do tego nie nadaje – jeśli spróbujesz przechować tam np. 3.14, kompilator od razu zaprotestuje. Zdarza się, że ktoś sądzi, iż List<int> może przechowywać inne kolekcje typu List, ale to również nieporozumienie. Wtedy należałoby użyć List<List<int>> lub List<List<T>>, jeśli chcemy mieć listę list, a nie pojedynczych wartości. Typowe błędy wynikają tu moim zdaniem z nieznajomości, jak działa generyczność i jak ściśle typowana jest ta kolekcja. Może się to wydawać ograniczające, ale na co dzień ułatwia życie i zmniejsza ryzyko błędów już na etapie kompilacji. Dobrym nawykiem jest więc zawsze przyglądać się, jaki typ przypisujemy w List<>, bo to rzutuje na wszystkie operacje, jakie potem wykonamy na tej liście. Kluczowe jest, żeby dobrze rozumieć typy w C# i korzystać z nich świadomie, bo to podstawa solidnego i bezpiecznego kodu, zgodnie z praktykami profesjonalnych zespołów programistycznych.

Pytanie 22

Która z wymienionych metod najlepiej chroni komputer przed złośliwym oprogramowaniem?

A. Cykliczne wykonywanie kopii zapasowych
B. Właściwie zaktualizowany program antywirusowy
C. Unikanie używania publicznych sieci Wi-Fi
D. Stosowanie mocnych haseł
Tworzenie kopii zapasowych to niewątpliwie ważny krok w zabezpieczaniu danych, ale pamiętaj, że to nie pomaga w aktywnej ochronie przed wirusami. Możesz oczywiście odzyskać dane po ataku, ale lepiej jest zapobiegać niż leczyć, prawda? Unikanie publicznych sieci Wi-Fi zmniejsza ryzyko przechwycenia danych, ale nie zabezpiecza twojego komputera przed złośliwym oprogramowaniem. Silne hasła, no jasne, są ważne, ale nie zapobiegają przedostawaniu się wirusów do systemu.

Pytanie 23

Co to jest ESLint?

A. Narzędzie do statycznej analizy kodu i identyfikacji problemów w kodzie JavaScript
B. Framework do testowania aplikacji napisanych w JavaScript
C. System zarządzania zależnościami w projektach Node.js
D. Kompilator kodu ECMAScript do starszych wersji JavaScript
ESLint to zaawansowane narzędzie do statycznej analizy kodu, które koncentruje się na identyfikacji problemów w kodzie JavaScript. Jego głównym celem jest poprawa jakości kodu poprzez wykrywanie potencjalnych błędów oraz niezgodności ze standardami programowania. ESLint pozwala programistom na definiowanie reguł dotyczących stylu kodu, co ułatwia utrzymanie spójności w projekcie. Narzędzie to wspiera również proces refaktoryzacji kodu, co jest kluczowe dla długoterminowej wydajności aplikacji. Przykładowo, jeśli programista użyje zmiennej, która nie została wcześniej zdefiniowana, ESLint ostrzeże go przed tym błędem, co może zapobiec krytycznym awariom w aplikacji. ESLint jest zgodny z popularnymi standardami, takimi jak Airbnb czy Google JavaScript Style Guide, co czyni go wszechstronnym narzędziem, które można łatwo dostosować do indywidualnych potrzeb zespołu. Dzięki integracji z popularnymi edytorami kodu, takimi jak Visual Studio Code, programiści mogą na bieżąco otrzymywać informacje zwrotne na temat jakości swojego kodu, co przyspiesza proces programowania i zwiększa efektywność pracy zespołowej.

Pytanie 24

Co to jest lazy loading?

A. Proces opóźnionego ładowania bibliotek JavaScript
B. Technika optymalizacji polegająca na ładowaniu zasobów dopiero wtedy, gdy są potrzebne
C. Algorytm kompresji obrazów w aplikacjach webowych
D. Metoda przechowywania danych w pamięci podręcznej przeglądarki
Odpowiedź wskazująca na technikę optymalizacji polegającą na ładowaniu zasobów dopiero wtedy, gdy są one potrzebne, jest prawidłowa, ponieważ lazy loading skutecznie zwiększa wydajność aplikacji webowych. Ta metoda minimalizuje ilość danych przesyłanych na początku ładowania strony, co znacząco poprawia czas ładowania oraz doświadczenie użytkownika. Przykładowo, w przypadku stron z dużą ilością obrazów, lazy loading zapewnia, że grafiki są pobierane tylko wtedy, gdy zbliżają się do obszaru widocznego w przeglądarce. To podejście jest zgodne z najlepszymi praktykami optymalizacji wydajności, jak określone w dokumentach Web Performance Optimization. W praktyce często implementuje się lazy loading za pomocą różnych bibliotek JavaScript, takich jak Intersection Observer API, co pozwala na efektywne zarządzanie zasobami oraz ich asynchroniczne ładowanie. Dzięki temu aplikacje mogą działać bardziej responsywnie, co jest kluczowe w czasie, gdy użytkownicy oczekują szybkiej oraz płynnej interakcji ze stronami internetowymi.

Pytanie 25

Która zasada zwiększa bezpieczeństwo w sieci?

A. Korzystanie z mocnych, unikalnych haseł
B. Pobieranie plików z niepewnych źródeł
C. Dzielnie się hasłami z przyjaciółmi
D. Zaniedbywanie aktualizacji systemu operacyjnego
Udostępnianie haseł wśród znajomych osłabia bezpieczeństwo konta, ponieważ zwiększa ryzyko, że hasło dostanie się w niepowołane ręce. Każda osoba, która ma dostęp do hasła, może nieświadomie wprowadzić złośliwe oprogramowanie lub zostać ofiarą phishingu, co naraża dane na wyciek. Unikanie aktualizacji systemu operacyjnego jest kolejnym poważnym błędem w kontekście bezpieczeństwa. Aktualizacje często zawierają łaty dla znanych luk w zabezpieczeniach, które są wykorzystywane przez cyberprzestępców. Ignorowanie ich stwarza łatwe cele dla ataków. Pobieranie plików z niezaufanych źródeł również stwarza poważne zagrożenie, ponieważ może prowadzić do zainstalowania złośliwego oprogramowania, które może przejąć kontrolę nad systemem, wykradać dane lub wprowadzać inne zagrożenia. W każdym z tych przypadków, zamiast wzmacniać bezpieczeństwo, podejmowane działania mogą prowadzić do poważnych konsekwencji, w tym utraty danych, złośliwych ataków oraz usunięcia poufnych informacji.

Pytanie 26

Jakie kwestie związane z percepcją są uwzględnione w rekomendacjach standardu WCAG 2.0?

A. jasności i dokładności w dostarczonych treściach na stronie
B. prezentacji elementów interfejsu użytkownika
C. umożliwienia interakcji między elementami użytkownika za pomocą klawiatury
D. zapewnienia odpowiedniego czasu na zapoznanie się i przetworzenie informacji
Odpowiedzi odnoszące się do zapewnienia odpowiedniego czasu na zapoznanie się z informacjami, umożliwienia interakcji poprzez klawiaturę czy jasności i dokładności treści są ważne w kontekście dostępności stron, ale nie dotyczą bezpośrednio percepcji według standardu WCAG 2.0. Często zdarza się, że osoby uczące się mylą pojęcia percepcji z innymi zasadami WCAG, na przykład zrozumiałością (understandable) czy funkcjonalnością (operable). Percepcja w WCAG skupia się na tym, jak treści są postrzegane przez zmysły – głównie wzrok i słuch, ale czasem też dotyk, gdy mowa np. o wyświetlaczach brajlowskich. Zapewnienie odpowiedniego czasu i interakcji klawiaturą to typowe wymagania dla użytkowników z ograniczeniami motorycznymi, i chociaż są one bardzo istotne, to WCAG klasyfikuje je w innych kategoriach niż percepcja. Jasność i dokładność treści to cecha istotna dla zrozumiałości, jednak nie gwarantuje, że użytkownik w ogóle tę treść zauważy lub rozpozna – do tego potrzebna jest właśnie prawidłowa prezentacja elementów interfejsu. Tu najczęściej pojawia się błąd myślowy: zakłada się, że jak coś jest napisane jasno, to każdy to zobaczy i zrozumie, ale wielu użytkowników ma problemy z odbiorem samych wizualnych aspektów strony. WCAG 2.0 podkreśla, żeby nie polegać tylko na jednym kanale percepcji, np. kolorze, dźwięku czy obrazie. Dopiero dbałość o prezentację elementów interfejsu – kontrast, czytelność, alternatywy tekstowe – sprawia, że strona jest dostępna percepcyjnie. Warto zapamiętać, że kategorie WCAG są celowo podzielone właśnie w ten sposób, aby każda istotna kwestia była rozpatrywana osobno i nie mieszana z innymi.

Pytanie 27

Która z wymienionych kart graficznych oferuje lepszą wydajność w grach komputerowych?

A. AMD Radeon R7 240 - 2GB GDDR5, 64-bit
B. NVIDIA GeForce GTX 1050 Ti - 4GB GDDR5, 128-bit
C. Intel UHD Graphics 630 - zintegrowana
D. AMD Radeon RX 580 - 8GB GDDR5, 256-bit
NVIDIA GeForce GTX 1050 Ti, mimo że jest popularną kartą graficzną, nie zapewnia takiej samej wydajności w grach jak RX 580. Z jedynie 4GB pamięci GDDR5 i 128-bitową szyną danych, GTX 1050 Ti ma ograniczone możliwości w obsłudze nowoczesnych gier, co prowadzi do niższej jakości obrazu oraz ograniczonej liczby klatek na sekundę, szczególnie w bardziej wymagających tytułach. Kolejną nieodpowiednią opcją jest Intel UHD Graphics 630, która jest zintegrowaną kartą graficzną, co oznacza, że jest bardziej odpowiednia do podstawowych zadań, takich jak przeglądanie internetu czy oglądanie filmów, niż do grania w gry komputerowe. Tego typu GPU nie ma dedykowanej pamięci, co znacznie ogranicza jego wydajność w aplikacjach wymagających intensywnej obróbki graficznej. Również AMD Radeon R7 240 z 2GB pamięci GDDR5 i 64-bitową szyną danych jest najsłabszym wyborem do gier. Ta karta graficzna, przeznaczona raczej do podstawowych zastosowań multimedialnych, nie ma mocy obliczeniowej potrzebnej do efektywnego działania w nowoczesnych grach, co prowadzi do niskiej wydajności oraz problemów z płynnością. Sumując, wszystkie trzy karty graficzne nie spełniają wymagań współczesnych gier, co czyni AMD Radeon RX 580 najlepszym wyborem dla graczy.

Pytanie 28

Co to jest local storage w kontekście aplikacji webowych?

A. System plików tymczasowych używany przez przeglądarkę
B. Baza danych NoSQL działająca na serwerze aplikacji
C. Technologia przechowywania danych w pamięci RAM aplikacji
D. Mechanizm pozwalający na przechowywanie danych w przeglądarce użytkownika bez określonego czasu wygaśnięcia
Local storage to mechanizm dostępny w przeglądarkach internetowych, który pozwala na przechowywanie danych w formacie klucz-wartość. W przeciwieństwie do cookies, które mają czas wygaśnięcia, dane w local storage są przechowywane bezterminowo, co oznacza, że pozostają dostępne nawet po zamknięciu przeglądarki. Dzięki temu deweloperzy mogą tworzyć aplikacje webowe, które pamiętają preferencje użytkowników, stany formularzy czy inne istotne informacje. Typowym zastosowaniem local storage może być zapisywanie ustawień użytkownika w grach przeglądarkowych lub aplikacjach do zarządzania zadaniami. Warto również wspomnieć, że local storage ma limit pojemności wynoszący zazwyczaj około 5 MB na domenę, co czyni go odpowiednim dla przechowywania małych ilości danych. Ponadto, korzystając z local storage, deweloperzy powinni pamiętać o kwestiach bezpieczeństwa, takich jak unikanie przechowywania wrażliwych danych, a także o stosowaniu technik takich jak serializacja danych w formacie JSON, co ułatwia ich późniejsze wykorzystanie.

Pytanie 29

Który z wymienionych parametrów dysku twardego ma największy wpływ na jego wydajność?

A. Prędkość obrotowa talerzy (RPM)
B. Ilość pamięci podręcznej (Cache)
C. Rodzaj złącza (SATA/PCIe)
D. Pojemność dysku
Pojemność dysku jest istotnym parametrem, ale nie wpływa bezpośrednio na jego szybkość działania. Większa pojemność oznacza, że na dysku można przechowywać więcej danych, jednak nie przyspiesza to operacji odczytu i zapisu. Wydajność jest bardziej związana z tym, jak szybko dane mogą być przesyłane do i z dysku, co nie jest bezpośrednio związane z jego pojemnością. Rodzaj złącza, takiego jak SATA czy PCIe, również ma swoje znaczenie, ale w przypadku dysków HDD to prędkość obrotowa jest kluczowa dla szybkości pracy. Złącza PCIe, które są znacznie szybsze od SATA, są bardziej relevantne w kontekście dysków SSD, gdzie czas dostępu i szybkość transferu są znacznie wyższe niż w przypadku talerzowych dysków HDD. Na koniec, ilość pamięci podręcznej (Cache) dysku, choć ma znaczenie w usprawnieniu operacji odczytu i zapisu, to jej wpływ jest marginalny w porównaniu do prędkości obrotowej. Cache działa jako bufor, ale nie zastąpi wyższej prędkości obrotowej talerzy, która decyduje o tym, jak быстро można uzyskać dostęp do danych przechowywanych na dysku.

Pytanie 30

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

A. Object
B. Undefined
C. Number
D. Method
W języku JavaScript funkcje mogą zwracać różne typy wartości, takie jak obiekty, liczby czy typ undefined. Wśród wymienionych opcji, 'Method' nie jest typem wartości zwracanej przez funkcję. W rzeczywistości, metoda w JavaScript to funkcja przypisana do obiektu. Jeżeli definiujemy funkcję wewnątrz obiektu, to możemy ją nazwać metodą tego obiektu, ale nie jest to typ wartości. Przykładowo, jeżeli mamy obiekt o nazwie 'person' i metodę 'greet', która zwraca powitanie:

const person = {
name: 'Jan',
greet: function() {
return 'Cześć, ' + this.name;
}
};

W powyższym przypadku, 'greet' jest metodą, ale jej wartością zwracaną jest typ string, co jest typowym zachowaniem funkcji. Dobrą praktyką jest zrozumienie różnicy między funkcjami a ich zastosowaniami w obiektach, co pozwala na lepsze projektowanie kodu oraz ukierunkowanie na zasady programowania obiektowego, które są kluczowe w JavaScript.

Pytanie 31

Który z wymienionych algorytmów działających na tablicy jednowymiarowej ma złożoność obliczeniową \( O(n^2) \)?

A. Sortowanie bąbelkowe
B. Wyszukiwanie metodą binarną
C. Wyświetlenie elementów
D. Sortowanie szybkie
Wypisanie elementów tablicy ma złożoność O(n), bo po prostu przechodzimy przez tablicę raz. Wyszukiwanie binarne, z drugiej strony, to coś, co ma złożoność O(log n) i działa w posortowanej tablicy – nie ma tu mowy o sortowaniu. A jeśli chodzi o sortowanie szybkie, to jego złożoność to O(n log n) i jest jednym z najszybszych sposobów sortowania. Więc nie pomylić sortowania z wyszukiwaniem, bo to dwie różne bajki.

Pytanie 32

Aby tworzyć aplikacje desktopowe w języku Java, można wybrać jedno z poniższych środowisk

A. NetBeans
B. Ms Visual Studio
C. PyCharm
D. SharpDevelop
NetBeans to środowisko IDE, które od lat jest mocno kojarzone z programowaniem w Javie, szczególnie jeśli chodzi o tworzenie aplikacji desktopowych. Moim zdaniem to jedno z wygodniejszych narzędzi dla osób, które chcą się na poważnie zabrać za GUI z użyciem Swinga, JavaFX czy nawet starszego AWT. NetBeans posiada wbudowany kreator graficznych interfejsów użytkownika – to tzw. Matisse, który naprawdę upraszcza projektowanie okienek, przycisków czy pól tekstowych. No i nie trzeba się męczyć z ręcznym ustawianiem każdego komponentu w kodzie – wystarczy przeciągnąć i upuścić. To narzędzie od zawsze stawiało na wsparcie dla Javy: podpowiadanie kodu, debugging, zarządzanie bibliotekami czy automatyczna kompilacja… wszystko tu działa od ręki. W praktyce NetBeans wykorzystywany jest zarówno przez początkujących, jak i przez doświadczonych programistów, bo ułatwia utrzymanie dużych projektów. Przykład z życia: wiele aplikacji administracyjnych, narzędziowych czy nawet systemów do zarządzania firmą powstało właśnie przy użyciu NetBeansa i JavaFX. Co ciekawe, środowisko wspiera też inne języki, ale jego rdzeń zawsze był skupiony na Javie. W branży uważa się, że korzystanie z NetBeansa to dobra praktyka, bo pozwala na szybkie prototypowanie interfejsów i jest zgodny ze standardami Java Enterprise. Jeśli chcesz budować desktopowe aplikacje w Javie – nie ma co się długo zastanawiać, NetBeans jest naprawdę solidnym wyborem.

Pytanie 33

Które z poniższych stwierdzeń najlepiej charakteryzuje tablicę asocjacyjną?

A. Tablica, która przechowuje wyłącznie dane tekstowe
B. Tablica przechowująca dane w formie par klucz-wartość
C. Tablica, która zmienia swoje wymiary w trakcie działania programu
D. Tablica, która przechowuje wartości, do których można uzyskać dostęp tylko za pomocą indeksów numerycznych
A więc zwykła tablica działa na zasadzie numerów, nie ma kluczy tekstowych, więc nie ma mowy o parach klucz-wartość. Co prawda, tablice dynamiczne potrafią zmieniać rozmiar, ale mimo to, nie dadzą rady zorganizować danych w taki sposób. Tekst czy inne typy danych w tablicach są po prostu przechowywane jak inne. Kluczowa różnica jest taka, że tablice asocjacyjne pozwalają na użycie kluczy, co czyni je bardziej elastycznymi. Trochę się zgubiłeś w tym wszystkim.

Pytanie 34

Jakie środowisko developerskie służy do tworzenia aplikacji na platformę iOS?

A. Eclipse
B. Visual Studio Code
C. XCode
D. Studio Androida
Android Studio to środowisko przeznaczone do tworzenia aplikacji na system Android, a nie iOS. Visual Studio Code to wieloplatformowe IDE, ale jego natywne wsparcie dla aplikacji iOS jest ograniczone w porównaniu do XCode. Eclipse jest używane głównie do programowania w językach Java i C++, ale nie jest narzędziem pierwszego wyboru dla aplikacji iOS, które wymagają XCode do kompilacji i wdrożenia na urządzenia Apple.

Pytanie 35

Programista umieścił poniższą linię kodu w pliku HTML, aby

<script src="jquery-3.5.1.min.js"></script>
A. pobrać z Internetu w momencie otwierania strony i użyć biblioteki jQuery
B. wstawić kod JavaScript pomiędzy znacznikami &lt;script&gt;&lt;/script&gt;
C. skorzystać z funkcji biblioteki jQuery, która była wcześniej pobrana i zapisana lokalnie
D. zadeklarować własną funkcję JavaScript o nazwie min.js
Kod HTML jest często używany do włączania zewnętrznych bibliotek JavaScript, takich jak jQuery, które zostały wcześniej pobrane i zapisane lokalnie na serwerze. W tym przypadku atrybut src w znaczniku script wskazuje na lokalnie przechowywany plik jQuery, co oznacza, że przeglądarka załaduje bibliotekę z serwera, na którym znajduje się nasza strona. Korzystanie z lokalnych kopii bibliotek jest dobrą praktyką w przypadku ograniczonego lub niestabilnego dostępu do internetu, ponieważ gwarantuje dostępność bibliotek niezależnie od zewnętrznych źródeł. Zaletą tego rozwiązania jest redukcja potencjalnych opóźnień w ładowaniu strony, ponieważ plik jest już dostępny na tym samym serwerze. Użycie lokalnych plików jest również korzystne z punktu widzenia bezpieczeństwa, gdyż pozwala kontrolować dokładną wersję załadowanej biblioteki i uniknąć potencjalnych zagrożeń wynikających z modyfikacji zewnętrznych plików. W praktyce, programiści często łączą lokalne i zdalne zasoby, wybierając odpowiednią metodę w zależności od potrzeb projektu i dostępnych zasobów sieciowych.

Pytanie 36

W przedstawionym filmie ukazano kreator interfejsu użytkownika, dla którego automatycznie powstaje

A. obsługa przycisku ekranu dotykowego
B. obsługa wciśniętego przycisku
C. kod Java
D. kod XML
Często można się pomylić, sądząc, że narzędzia do projektowania interfejsów użytkownika generują od razu kod w takich językach jak Java czy implementują obsługę konkretnych zdarzeń, np. wciśnięcia przycisku. Z mojego doświadczenia wynika, że to jeden z najczęstszych błędów myślowych na początku nauki programowania. W praktyce, narzędzia typu drag&drop koncentrują się na warstwie prezentacyjnej – opisują, jak mają wyglądać poszczególne elementy, ale nie zajmują się logiką działania. Kod Java albo inny kod źródłowy odpowiedzialny za obsługę zdarzeń czy funkcjonalności aplikacji musi być dopisany ręcznie przez programistę. Automatyczne generowanie kodu logicznego przez edytory graficzne jest raczej niezalecane, bo prowadzi do trudnego w utrzymaniu kodu i sprawia, że aplikacja traci na przejrzystości. Jeśli chodzi o obsługę wciśnięcia przycisku czy przycisku ekranu dotykowego, to są to akcje, które definiuje się później w kodzie źródłowym – na przykład poprzez implementację listenerów w kodzie Java w Androidzie albo przez bindingi w innych frameworkach. Te narzędzia mają za zadanie generować opis struktury interfejsu, a nie jego zachowanie. Często spotyka się też przekonanie, że to właśnie kod Java stanowi podstawę aplikacji – oczywiście to prawda, ale nie w kontekście automatycznego generowania przez narzędzia graficzne; one skupiają się na XML, który jest dużo bardziej uniwersalny do takich celów. Moim zdaniem najlepszą praktyką jest wyraźne oddzielenie warstwy prezentacji (np. XML) od logiki biznesowej i ręcznego kodowania zdarzeń, bo to pozwala na wygodne rozwijanie i utrzymywanie aplikacji, szczególnie w większych zespołach.

Pytanie 37

Który z wymienionych składników charakteryzuje się typowym wystąpieniem w diagramie Gantta?

A. Oś czasu oraz przedziały czasowe dla zadań
B. Model relacji pomiędzy tabelami w bazie danych
C. Wykaz użytkowników w systemie
D. Wykaz błędów w projekcie
Lista błędów w projekcie to część dokumentacji jakościowej, ale nie jest elementem diagramu Gantta. Model relacji między tabelami w bazie danych (ERD) przedstawia zależności między danymi, ale nie odnosi się do zarządzania harmonogramem zadań. Lista użytkowników w systemie to element dokumentacji operacyjnej, a nie narzędzie do wizualizacji czasu trwania i postępu prac w projekcie.

Pytanie 38

Jakie jest główne zadanie ochrony danych osobowych?

A. Udostępnianie danych osobowych w celach marketingowych
B. Zabezpieczenie danych osobowych przed nieautoryzowanym dostępem i ich wykorzystaniem
C. Gwarantowanie anonimowości dla internautów
D. Utrudnianie działalności organom ścigania
Zapewnienie anonimowości użytkownikom internetu nie jest celem ochrony danych osobowych – anonimowość dotyczy innych dziedzin, takich jak prywatność w sieci. Utrudnianie pracy organom ścigania jest nielegalne i nie jest celem ochrony danych. Publikowanie danych osobowych w celach marketingowych bez zgody użytkownika narusza przepisy i prowadzi do sankcji, a ochrona danych osobowych ma za zadanie zapobiegać takim sytuacjom.

Pytanie 39

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

MojaKlasa obj1 = new MojaKlasa();
obj1.rysunek();
A. konstruktorem
B. polem w klasie
C. obiektem
D. metodą w klasie
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 40

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

A. iOS: dodać do nazw sufiksy oznaczające rozdzielczość, np. 32ppi. Android: umieścić grafikę w odpowiednich katalogach: 32ppi, 64ppi, 96ppi
B. iOS: dodać do nazw plików sufiksy @2x, @3x. Android: umieścić grafikę w odpowiednich folderach drawable: -hdpi, -xhpi, xxhdpi
C. iOS: utworzyć katalogi hdpi, lhpi, xhpi i dodać do nich grafiki. Android: utworzyć katalogi 32x32, 64x64, 96x96 i dodać do nich grafiki
D. iOS: dodać do nazw sufiksy #2x, #3x. Android: dodać do nazw sufiks rozdzielczości: -32x32, -64x64, -96x96
Lepiej nie używać oznaczeń w stylu 32ppi czy 64ppi, bo to nie pasuje do żadnej z tych platform. To bardziej pasuje do druku, a nie aplikacji mobilnych. Foldery 32x32 czy 64x64 też nie mają sensu w kontekście Androida czy iOS. Jak stworzysz foldery o nazwach lhpi czy 32x32 to może być problem z wyświetlaniem grafiki na różnych urządzeniach. Z mojego doświadczenia, lepiej trzymać się ustalonych standardów, żeby uniknąć błędów.