Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 10 kwietnia 2026 13:00
  • Data zakończenia: 10 kwietnia 2026 13:02

Egzamin niezdany

Wynik: 13/40 punktów (32,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu— sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Który z wymienionych parametrów określa prędkość procesora?

A. Liczba rdzeni
B. Wielkość pamięci podręcznej
C. Częstotliwość taktowania
D. Rodzaj złącza
Ilość rdzeni w procesorze odnosi się do liczby jednostek obliczeniowych w jego architekturze. Choć większa liczba rdzeni może przyczynić się do zwiększenia multitaskingu i wydajności w aplikacjach obsługujących równoległe przetwarzanie, sama ilość rdzeni nie definiuje szybkości procesora w kontekście jego podstawowych cykli zegara. Pojemność pamięci podręcznej, z kolei, dotyczy ilości pamięci dostępnej bezpośrednio w procesorze, co wpływa na szybkość dostępu do często używanych danych. Większa pamięć podręczna może przyspieszyć operacje, ale znowu, nie jest to bezpośredni wskaźnik szybkości działania procesora. Typ złącza jest parametrem technicznym, który określa, w jaki sposób procesor łączy się z płytą główną. Różne rodzaje złączy, jak LGA czy PGA, wpływają na kompatybilność, ale nie mają bezpośredniego wpływu na samą szybkość obliczeniową procesora. W kontekście oceny wydajności procesora, istotne jest zrozumienie, że chociaż ilość rdzeni, pamięć podręczna i typ złącza są ważnymi parametrami, to jednak to częstotliwość taktowania jest kluczowym wskaźnikiem wskazującym na szybkość jego działania.

Pytanie 2

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

A. Obowiązek zamieszczenia publicznych przeprosin
B. Zakaz korzystania z oprogramowania open-source
C. Unieważnienie umowy licencyjnej użytkownika końcowego
D. Nałożenie grzywny lub kary więzienia
Obowiązek opublikowania przeprosin w mediach jest rzadko stosowaną sankcją i zazwyczaj dotyczy naruszeń dóbr osobistych, a nie praw autorskich. Zakaz używania oprogramowania open-source nie wynika z naruszenia prawa autorskiego – licencje open-source pozwalają na szerokie korzystanie z oprogramowania, pod warunkiem przestrzegania ich zapisów. Unieważnienie licencji użytkownika końcowego (EULA) może mieć miejsce w przypadku naruszenia warunków licencji, ale nie jest to standardowa kara za naruszenie praw autorskich.

Pytanie 3

Który z wymienionych procesów NIE jest częścią etapu kompilacji?

A. Optymalizacja kodu
B. Weryfikacja błędów składniowych
C. Analiza działania programu w czasie rzeczywistym
D. Tłumaczenie kodu źródłowego na język maszynowy
Optymalizacja kodu to integralna część kompilacji, mająca na celu zwiększenie wydajności programu poprzez usunięcie zbędnych instrukcji i usprawnienie algorytmów. Tłumaczenie kodu źródłowego na język maszynowy jest głównym zadaniem kompilatora, który generuje plik wykonywalny. Weryfikacja błędów składniowych jest jednym z pierwszych etapów kompilacji, mającym na celu upewnienie się, że kod jest poprawny pod względem składni, zanim zostanie przekształcony na kod maszynowy.

Pytanie 4

Która z poniższych nie jest cechą architektury mikroserwisów?

A. Autonomia zespołów rozwijających poszczególne usługi
B. Niezależne wdrażanie poszczególnych usług
C. Odporność na awarie pojedynczych komponentów
D. Wspólna baza danych dla wszystkich usług
Architektura mikroserwisów opiera się na praktykach, które umożliwiają wzrost skalowalności, elastyczności oraz odporności systemu. Wspólna baza danych dla wszystkich usług, będąca jedną z zaproponowanych odpowiedzi, jest sprzeczna z tymi fundamentalnymi zasadami. Utrzymywanie centralnej bazy danych prowadzi do sytuacji, gdzie zmiany w jednym mikroserwisie mogą mieć niepożądane konsekwencje dla innych, co z kolei zmniejsza niezależność każdej usługi. W mikroserwisach kluczowe jest, aby każda usługa miała swoje własne źródło danych, co pozwala na decoupling, czyli luźne powiązanie między komponentami. Ponadto, w architekturze mikroserwisów, każda usługa powinna być w stanie działać i być wdrażana niezależnie, co jest niemożliwe w przypadku korzystania z jednej bazy danych, ponieważ wszelkie zmiany wymagałyby zsynchronizowanego podejścia. Kolejnym aspektem jest odporność na awarie, która również ulega osłabieniu w przypadku wspólnej bazy danych. Jeśli baza danych ulegnie awarii, wszystkie usługi korzystające z niej są jednocześnie dotknięte problemem, co jest sprzeczne z koncepcją mikroserwisów, gdzie pojedyncze komponenty powinny być zdolne do działania niezależnie. Wreszcie, autonomia zespołów jest również podważana przez wspólną bazę danych, ponieważ zespoły nie mogą pracować równolegle nad swoimi usługami, a zmiany są wymuszone przez współzależności. Dlatego stosowanie wspólnej bazy danych jest jednym z najczęstszych błędów, który może prowadzić do problemów w projektowaniu i zarządzaniu architekturą mikroserwisów.

Pytanie 5

Na przedstawionym obrazie widać fragment emulacji systemu iOS z prostą aplikacją. Górna część ekranu nachodzi na pasek stanu baterii. Który z poniższych zapisów powinien zostać użyty w miejscu znaków zapytania, aby ustawić jedynie marginesy górne tylko dla systemu iOS?

Ilustracja do pytania
A. x:TypeArguments="Thickness" <br/> (0, 20, 0, 0)
B. x:TypeArguments="Thickness"<br/> iOS= 20
C. x:TypeArguments="Thickness"<br/> iOS= "0, 20, 0, 0"<br/> Android= "0, 0, 0, 0"<br/> WinPhone= "0, 0, 0, 0"
D. x:TypeArguments="Thickness"<br/> iOS= "0, 0, 0, 0"<br/> Android= "0, 20, 0, 0"<br/> WinPhone= "0, 0, 0, 0"
Odpowiedź czwarta jest prawidłowa, ponieważ prawidłowo wykorzystuje mechanizm OnPlatform w XAML do zastosowania specyficznych ustawień dla różnych platform. W przypadku iOS zastosowano margines górny wynoszący 20 jednostek, co jest konieczne, aby uwzględnić przestrzeń zajmowaną przez status bar systemowy. Takie podejście jest zgodne z dobrymi praktykami projektowania aplikacji wieloplatformowych, gdzie różne platformy mogą wymagać różnych ustawień interfejsu użytkownika. Przykładowo, w aplikacjach tworzonych przy użyciu Xamarin.Forms, korzystanie z OnPlatform pozwala na dynamiczne dostosowywanie interfejsu w zależności od platformy, co zwiększa elastyczność i poprawia doświadczenie użytkownika. Dodatkowo, zastosowanie marginesów tylko dla platformy iOS pozwala na zachowanie spójności i pełną kontrolę nad wyglądem aplikacji na innych platformach takich jak Android czy Windows Phone, gdzie takie dostosowanie nie jest konieczne. Uwzględnienie tych różnic jest kluczowe dla tworzenia aplikacji, które wyglądają i działają dobrze na wszystkich docelowych urządzeniach.

Pytanie 6

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

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

Pytanie 7

Jakie kroki należy podjąć, aby skutecznie zabezpieczyć dane na komputerze?

A. Dzielić się hasłami do plików z współpracownikami
B. Przechowywać dane na niezabezpieczonych nośnikach przenośnych
C. Nie używać kopii zapasowych
D. Systematycznie aktualizować oprogramowanie i wykonywać kopie zapasowe
Regularne aktualizowanie oprogramowania oraz tworzenie kopii zapasowych to kluczowe działania zapewniające bezpieczeństwo danych na komputerze. Aktualizacje łatają luki w zabezpieczeniach i eliminują błędy, które mogą zostać wykorzystane przez hakerów. Kopie zapasowe chronią dane przed utratą spowodowaną awarią sprzętu, atakiem ransomware lub przypadkowym usunięciem. Najlepszą praktyką jest przechowywanie kopii zapasowych w różnych miejscach – lokalnie i w chmurze – co dodatkowo zwiększa poziom zabezpieczenia przed nieprzewidzianymi sytuacjami.

Pytanie 8

Jakie metody umożliwiają przesyłanie danych z serwera do aplikacji front-end?

A. biblioteki jQuery
B. formatu JSON
C. protokołem SSH
D. metody POST
JSON, czyli JavaScript Object Notation, to dość lekki format wymiany danych. Jest prosty do zrozumienia zarówno dla ludzi, jak i komputerów. To dlatego jest tak popularny w aplikacjach webowych, gdzie przesyła się dane między serwerem a klientem. Dzięki strukturze klucz-wartość łatwo jest mapować obiekty w JavaScript, co przyspiesza cały proces z danymi. Pomysł na zastosowanie? Na przykład, gdy przesyłasz dane użytkownika z serwera do swojej aplikacji, to często zamieniasz obiekt JavaScript na format JSON i wysyłasz go przez AJAX. A co ważne, JSON jest zgodny z różnymi standardami, więc możesz go używać praktycznie wszędzie. Co ciekawe, w nowoczesnych aplikacjach JSON jest zdecydowanie bardziej popularny niż XML, bo jest prostszy i mniej obciążający dla sieci. To wszystko sprawia, że strony ładują się szybciej, a użytkownicy mają lepsze doświadczenia.

Pytanie 9

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

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

Pytanie 10

Jakie jest główne zadanie portali społecznościowych?

A. Udostępnianie informacji i interakcja między użytkownikami
B. Zarządzanie handlem produktami i usługami
C. Analiza rezultatów działalności gospodarczej
D. Tworzenie kopii zapasowych plików
Zarządzanie sprzedażą produktów i usług nie jest główną funkcją portali społecznościowych, choć niektóre z nich, jak Facebook, oferują możliwości sprzedaży poprzez sklepy online. Jednakże, ich pierwotnym celem nie jest sprzedaż, lecz interakcja społeczna. Portale społecznościowe skupiają się na budowaniu relacji i angażowaniu użytkowników, a nie na transakcjach handlowych. Tworzenie kopii zapasowych danych to proces związany z archiwizowaniem informacji, które są przechowywane w chmurze lub na serwerach lokalnych. Portale społecznościowe nie pełnią roli narzędzi do tworzenia kopii zapasowych, co jest zadaniem dedykowanych aplikacji i rozwiązań technologicznych. Analiza wyników biznesowych, chociaż istotna w kontekście marketingu i sprzedaży, nie jest funkcją portali społecznościowych. Portale te mogą dostarczać statystyk dotyczących interakcji użytkowników, ale nie oferują kompleksowych narzędzi analitycznych takich jak Google Analytics, które monitorują zachowanie użytkowników na stronach internetowych. Zatem, chociaż te odpowiedzi mogą być związane z działalnością biznesową, nie oddają one kluczowej roli, jaką odgrywają portale społecznościowe w zakresie komunikacji i udostępniania treści.

Pytanie 11

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

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

Pytanie 12

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

A. 10100100
B. 10100010
C. 1010100
D. 1011100
Temat zamiany liczb z systemu szesnastkowego na binarny wraca na różnych etapach nauki elektroniki czy informatyki i z mojego doświadczenia właśnie tutaj pojawia się sporo zamieszania. Problem najczęściej polega na tym, że próbując zamienić liczbę A4 na binarną, niektórzy traktują całość jako liczbę dziesiętną (np. 1010100 to 84 dziesiętnie), nie wiedząc, że każdy znak heksadecymalny to dokładnie cztery bity. Taka pomyłka prowadzi do niepoprawnych wyników – w efekcie powstają binarne reprezentacje za krótkie lub za długie, nieodzwierciedlające rzeczywistego układu bitów. Zdarza się też, że przeliczając ręcznie, ktoś zamienia jedynie ostatnią cyfrę (np. 4 na 100), zapominając, że litery A-F mają swoje konkretne wartości (A=1010). To bardzo częsty błąd, szczególnie na początku nauki, bo intuicyjnie łatwiej pracować tylko z cyframi 0-9. Można też spotkać się z sytuacją, gdy ktoś próbuje połączyć bity w niewłaściwej kolejności, przez co uzyskuje np. 10100010 – to połączenie 1010 (A) i 0010 (2), a nie 0100 (4). Z punktu widzenia profesjonalisty, każda taka pomyłka może skutkować bardzo poważnymi konsekwencjami w praktyce – wystarczy źle zinterpretować adres czy wartości rejestru i cały algorytm się wywraca. Dlatego warto wyrobić nawyk dzielenia każdej cyfry heksadecymalnej na osobne grupy czterech bitów i dopiero potem sklejać całość. Standardy branżowe, np. w dokumentacji układów cyfrowych czy protokołach komunikacyjnych, zawsze prezentują dane w jednym z tych systemów, dlatego bez tej umiejętności trudno przejść na wyższy poziom. Sam kiedyś parę razy na tym poległem i teraz wiem, że warto się zatrzymać i dokładnie przemyśleć każdy krok zamiany.

Pytanie 13

Jaką rolę pełni debugger w trakcie programowania?

A. Do wykrywania błędów w czasie działania programu
B. Do automatycznego generowania dokumentacji projektu
C. Do kontrolowania wersji kodu źródłowego
D. Do konwersji kodu źródłowego na język maszynowy
Debugger to takie narzędzie, które pomaga programistom w znajdowaniu błędów i śledzeniu, co się dzieje z programem, kiedy go uruchamiamy. Można go zatrzymać w dowolnym momencie, co nazywamy breakpoints, i wtedy można zobaczyć, jakie zmienne mają jakie wartości. Dzięki temu można łatwiej dostrzegać błędy logiczne czy składniowe. Wydaje mi się, że to naprawdę ważne narzędzie w pracy każdego programisty, bo ułatwia życie!

Pytanie 14

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

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success');
  }, 1000);
});

promise
  .then(res => {
    console.log(res);
    return 'first then';
  })
  .then(res => {
    console.log(res);
  });
A. success, first then
B. success
C. first then, success
D. first then
Podany kod JavaScript korzysta z obietnic (Promises), co jest nowoczesnym podejściem do zarządzania asynchronicznością w JavaScript. W momencie, gdy tworzymy nową obietnicę, wykorzystujemy funkcję `setTimeout`, która po 1 sekundzie wywołuje metodę `resolve`, przekazując tekst 'success'. To jest pierwszy krok, w którym obietnica zostaje spełniona. Następnie, w łańcuchu `then`, pierwsza funkcja `then` przyjmuje wynik obietnicy, czyli 'success', loguje go na konsolę, a następnie zwraca nowy tekst 'first then'. Druga funkcja `then` odbiera ten wynik i również go loguje. W rezultacie na konsoli pojawią się kolejno: 'success' oraz 'first then'. Taki sposób tworzenia łańcuchów obietnic jest zgodny z najlepszymi praktykami programowania asynchronicznego w JavaScript, ponieważ pozwala na czytelniejsze i bardziej zrozumiałe zarządzanie kodem asynchronicznym, eliminując złożoność związaną z tzw. „callback hell”. Warto zaznaczyć, że obietnice mogą być stosowane do radzenia sobie z żądaniami sieciowymi, operacjami na plikach czy innymi długotrwałymi procesami, co czyni je niezbędnym narzędziem w nowoczesnym programowaniu webowym.

Pytanie 15

Którego nagłówka używamy w C++ do obsługi plików?

A. <fstream>
B. <iostream>
C. <fileio.h>
D. <stdio.h>
'<stdio.h>' to nagłówek biblioteki C, a nie C++, i jest używany do standardowych operacji wejścia i wyjścia, ale nie jest przeznaczony do pracy z plikami w stylu obiektowym. '<fileio.h>' to nieistniejący standardowy nagłówek C++ – nazwa ta może wprowadzać w błąd. '<iostream>' to biblioteka standardowa służąca do obsługi strumieni wejścia/wyjścia w konsoli (np. 'cin' i 'cout'), ale nie jest używana do pracy z plikami. Tylko 'fstream' oferuje narzędzia dedykowane do obsługi plików na dysku w języku C++.

Pytanie 16

Zamieszczony fragment kodu w Android Studio wdraża metodę nasłuchującą dla obsługi zdarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. wybierania daty
B. naciśnięcia przycisku
C. zmiany stanu kontrolki Switch
D. zmiany w polu tekstowym
W tym fragmencie kodu pojawia się metoda setOnClickListener, która, jeśli się tak chwilę zastanowić, nie jest wykorzystywana do reagowania na zmianę tekstu, wybieranie daty czy też zmianę stanu kontrolki Switch. To właśnie kliknięcia – czyli naciśnięcia przycisku – są tutaj obsługiwane. Spotkałem się już z tym, że osoby zaczynające przygodę z Androidem mylą czasem różne typy listenerów, bo faktycznie jest ich sporo i mają dość podobne nazwy, przez co łatwo się pogubić. Żeby wykryć zmianę w polu tekstowym (np. EditText), trzeba zastosować TextWatcher, gdzie obsługujemy metody jak afterTextChanged czy beforeTextChanged. Z kolei wybieranie daty zwykle wiąże się z użyciem DatePickerDialog, a tam stosujemy DatePickerDialog.OnDateSetListener, który zupełnie inaczej wygląda w kodzie. Jeśli chodzi o kontrolki Switch, to reagowanie na ich stan odbywa się za pomocą setOnCheckedChangeListener, gdzie w metodzie onCheckedChanged dowiadujemy się, czy Switch został włączony czy wyłączony. Typowym błędem jest patrzenie tylko na nazwę metody i przypisywanie jej do obsługi różnych kontrolek bez głębszego zastanowienia. Moim zdaniem warto poświęcić chwilę na przestudiowanie dokumentacji Androida, bo tam dość jasno opisano, które listener’y są przeznaczone do jakich zdarzeń. Ostatecznie, setOnClickListener zawsze oznacza, że obsługujemy kliknięcie – to taki standard branżowy w Androidzie i praktycznie nie stosuje się go do niczego innego niż reakcja na naciśnięcie widoku przez użytkownika.

Pytanie 17

Jaki będzie wynik działania poniższego kodu JavaScript?

function foo() { console.log(a); var a = 1; console.log(a); } foo();
A. ReferenceError, 1
B. undefined, 1
C. undefined, undefined
D. 1, 1
Wynik działania podanego kodu to 'undefined, 1', co jest zgodne z zasadami hoisting w JavaScript. Kiedy funkcja 'foo' jest wywoływana, zmienna 'a' jest zadeklarowana przy użyciu 'var'. Zgodnie z zasadą hoisting, deklaracja zmiennej jest przenoszona na początek funkcji, ale przypisanie wartości następuje w miejscu, gdzie znajduje się kod. Dlatego, podczas pierwszego wywołania 'console.log(a)', 'a' nie ma jeszcze przypisanej wartości, co skutkuje wyświetleniem 'undefined'. Następnie, po przypisaniu '1' do 'a', w drugim 'console.log(a)' zmienna ta już ma wartość, więc wyświetlane jest '1'. Zrozumienie hoisting jest kluczowe dla programistów, ponieważ może wpływać na logikę działania kodu i prowadzić do błędów, jeśli nie jest odpowiednio uwzględnione. W praktyce powinno się unikać korzystania z hoisting, preferując inicjalizację zmiennych na początku funkcji, co zwiększa czytelność i utrzymanie kodu.

Pytanie 18

Jakie jest główne zadanie kontrolera w architekturze MVC (Model-View-Controller)?

A. Prezentowanie danych użytkownikowi
B. Zarządzanie sesją użytkownika
C. Obsługa logiki biznesowej i przetwarzanie danych wejściowych od użytkownika
D. Przechowywanie danych aplikacji
W architekturze MVC kontroler pełni kluczową rolę w procesie przetwarzania danych aplikacji. Jego głównym zadaniem jest obsługa logiki biznesowej oraz przetwarzanie danych, które pochodzą od użytkownika. Kontroler działa jako pośrednik pomiędzy modelem a widokiem, odbierając żądania użytkownika, przetwarzając je (często z wykorzystaniem logiki biznesowej) i decydując, które dane modelu powinny być przekazane do widoku. W praktyce oznacza to, że kontroler interpretuje dane wejściowe, modyfikuje stan modelu na ich podstawie, a następnie wybiera odpowiedni widok do wyświetlenia wyników użytkownikowi. Takie podejście pozwala na lepszą organizację kodu i oddzielenie logiki aplikacji od interfejsu użytkownika, co jest zgodne z dobrymi praktykami projektowania oprogramowania. Dzięki temu aplikacje są bardziej skalowalne i łatwiejsze w utrzymaniu.

Pytanie 19

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 umożliwia szybsze prototypowanie i rozwój aplikacji dzięki narzędziom wizualnym
C. RAD funkcjonuje tylko w systemach Windows
D. RAD koncentruje się wyłącznie na budowie frontendu aplikacji
Rapid Application Development (RAD) to metodologia, która koncentruje się na szybkim prototypowaniu i iteracyjnym tworzeniu aplikacji. Dzięki narzędziom wizualnym RAD umożliwia programistom i projektantom szybkie budowanie interfejsów użytkownika oraz testowanie funkcjonalności aplikacji na wczesnym etapie rozwoju. RAD skraca czas potrzebny na dostarczenie gotowego produktu, co czyni go idealnym rozwiązaniem w dynamicznie zmieniających się projektach webowych. Narzędzia RAD umożliwiają także automatyczne generowanie kodu, co znacznie przyspiesza proces programowania.

Pytanie 20

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

A. oparcie wspiera lordozę w dolnym odcinku pleców
B. oparcie w rejonie szyi jest nachylone do przodu o 40ᵒ
C. podłokietniki znajdują się 20 cm poniżej blatu
D. podłokietniki są 30 cm powyżej blatu
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 21

Jakie wartości może przyjąć zmienna typu boolean?

A. 1, -1
B. true, false
C. O oraz każdą liczbę całkowitą
D. trzy dowolne liczby naturalne
Odpowiedzi 1, -1 oraz O oraz dowolną całkowitą nie są poprawne, ponieważ nie odpowiadają definicji zmiennych logicznych. Zmienna logiczna nie może przyjmować wartości liczbowych, takich jak 1 czy -1, które są typowe dla zmiennych całkowitych. W większości języków programowania wartość 1 często reprezentuje 'true', a wartość 0 - 'false', jednak są to tylko konwencje, a same zmienne logiczne mają swoje ograniczenia i powinny przyjmować wyłącznie wartości logiczne. Kolejnym błędem jest wskazanie zmiennej logicznej, która mogłaby przyjąć wartość 'O oraz dowolną całkowitą'. Tego rodzaju definicja jest myląca, ponieważ zmienna logiczna nie może być całkowita ani ujemna, a jej zakres ogranicza się wyłącznie do true lub false. Podobnie, stwierdzenie 'trzy dowolne naturalne' jest niepoprawne, ponieważ sugeruje, że zmienna logiczna mogłaby przyjmować wartości większe niż dwie, co jest sprzeczne z podstawową definicją zmiennej logicznej. W praktyce poprawne rozumienie zmiennych logicznych jest kluczowe dla programowania, a nieprzestrzeganie tych zasad prowadzi do błędów w logice programu oraz potencjalnych awarii aplikacji.

Pytanie 22

Jaką wartość ma zmienna b po wykonaniu poniższego kodu?

int a = 1, b = 20, c = 3;
while (a <= 10) {
    b = b - c;
    a += 2;
}
A. 20
B. 5
C. 2
D. 11
Powszechnym błędem w rozwiązywaniu tego typu zadań jest nieuwzględnienie wszystkich kroków pętli oraz niepoprawne obliczenie liczby iteracji. Można łatwo przeoczyć fakt jak często pętla się wykonuje i w jaki sposób zmieniają się wartości zmiennych. W przypadku przedstawionego kodu zmienna a początkowo wynosi 1 i zwiększa się o 2 w każdej iteracji aż do przekroczenia wartości 10. To oznacza że pętla wykona się pięć razy. Każdy przebieg pętli zmniejsza wartość b o 3 z powodu operacji b = b - c gdzie c jest równe 3. Jeśli nie uwzględni się wszystkich pięciu iteracji można błędnie wywnioskować inną wartość końcową b. Poprawne zrozumienie działania pętli while i operacji arytmetycznych w niej zawartych jest kluczowe w programowaniu. Takie pomyłki pokazują znaczenie czytelności i precyzji w analizie kodu oraz przypominają o konieczności dokładnego śledzenia zmian w zmiennych w czasie trwania pętli aby poprawnie przewidzieć wynik końcowy. Kluczowym standardem w branży jest testowanie kodu i ręczne śledzenie jego działania zwłaszcza w kontekście algorytmów iteracyjnych co pozwala na uniknięcie błędnych założeń i wyników.

Pytanie 23

Jaką wartość dziesiętną reprezentuje liczba binarna 1010?

A. 12
B. 14
C. 8
D. 10
Odpowiedzi 8, 12 i 14 są błędne w kontekście konwersji liczby binarnej 1010 na wartość dziesiętną. Liczba 8 w systemie dziesiętnym odpowiada binarnej wartości 1000. W tym przypadku, 1 * 2^3 daje 8, co oznacza, że w zapisie binarnym nie ma cyfr odpowiadających wartościom 2^2, 2^1 oraz 2^0. Liczba 12 w systemie dziesiętnym jest reprezentowana jako 1100 w systemie binarnym, co oznacza, że ma ona 1 na pozycji 2^3, 1 na pozycji 2^2, a 0 na pozycjach 2^1 oraz 2^0. Natomiast liczba 14 jest reprezentowana jako 1110 w systemie binarnym, co wskazuje, że ma 1 na pozycjach 2^3, 2^2 oraz 2^1, a 0 na pozycji 2^0. W każdym z tych przypadków, niepoprawne odpowiedzi wynikają z błędnej interpretacji wartości binarnych oraz ich odpowiedników w systemie dziesiętnym. Zrozumienie systemów liczbowych jest kluczowe w informatyce i inżynierii, ponieważ liczby binarne są podstawą funkcjonowania komputerów oraz cyfrowych systemów obliczeniowych. Dlatego tak ważne jest precyzyjne wykonanie konwersji oraz znajomość reguł związanych z tym procesem.

Pytanie 24

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

A. prezentowania komunikatów, które wymagają potwierdzenia, aby kontynuować działanie aplikacji
B. zarządzania ustawieniami aplikacji, jako okno, które pozostaje widoczne na ekranie przez cały czas trwania aplikacji
C. zarządzania stanem aplikacji za pomocą systemów menu
D. wstrzymywania działania aplikacji w czasie wprowadzania oraz zatwierdzania danych
Okna dialogowe niemodalne, czasem zwane też oknami narzędziowymi albo pomocniczymi, to bardzo praktyczny element interfejsu użytkownika. To, co wyróżnia je spośród innych typów okien, to fakt, że użytkownik może korzystać równocześnie zarówno z tego okna, jak i z głównej aplikacji. Nie blokuje ono działania programu – wszystko jest dostępne w tym samym czasie. Najczęściej takie okna służą do zarządzania ustawieniami aplikacji albo wywoływania funkcji, które użytkownik może modyfikować na bieżąco, bez konieczności zamykania tego okna po każdej zmianie. Przykład z życia: paleta warstw w programach graficznych (np. GIMP czy Photoshop) albo okno stylów w edytorze tekstu. Dla mnie osobiście, taki model pracy jest dużo wygodniejszy niż korzystanie z okien modalnych, bo pozwala płynnie zmieniać ustawienia bez przerywania pracy. Dobrą praktyką w branży jest, żeby okna niemodalne nie zasłaniały kluczowych elementów interfejsu i były jasno oznaczone, by użytkownik wiedział, że może je w każdej chwili zamknąć, nie tracąc postępów. Takie podejście jest wręcz rekomendowane w wytycznych projektowania UX publikowanych przez Apple czy Microsoft (np. Human Interface Guidelines). Okna niemodalne są szczególnie ważne w aplikacjach wymagających ciągłego dostępu do narzędzi lub parametrów, np. edytorach grafiki, IDE czy programach CAD. Warto o tym pamiętać, projektując bardziej złożone systemy.

Pytanie 25

Algorytm wyszukiwania sekwencyjnego z wykorzystaniem wartownika opiera się na założeniu, że

A. zbiór danych wejściowych musi być uporządkowany
B. na końcu analizowanego zbioru należy dodać wartownika
C. zbiór ma zawsze 100 elementów
D. szukany element powinien wystąpić wielokrotnie w zbiorze
Zbiór wejściowy musi być posortowany to błędna informacja, ponieważ algorytm sekwencyjnego wyszukiwania działającego z wartownikiem nie wymaga sortowania danych. W rzeczywistości przeszukiwany zbiór może być w dowolnej kolejności, co jest jedną z jego zalet w porównaniu do bardziej złożonych algorytmów, takich jak wyszukiwanie binarne, które rzeczywiście wymaga posortowanych danych. Kolejna nieprawidłowa opcja odnosi się do założenia, że zbiór jest zawsze 100 elementowy. Algorytm sekwencyjnego wyszukiwania działa na zbiorach o dowolnej wielkości, co czyni go elastycznym rozwiązaniem w różnych kontekstach aplikacyjnych. Ostatnim niepoprawnym stwierdzeniem jest to, że szukany element musi powtórzyć się kilkakrotnie w zbiorze. Algorytm ten jest w stanie zidentyfikować element, który występuje w zbiorze jednorazowo, jak i taki, który występuje wielokrotnie. Jego głównym celem jest zlokalizowanie przynajmniej jednego wystąpienia poszukiwanego elementu, niezależnie od jego ilości w zbiorze. Dlatego każda z tych odpowiedzi jest nieprawidłowa i nie oddaje rzeczywistej natury funkcjonowania algorytmu sekwencyjnego wyszukiwania z wartownikiem.

Pytanie 26

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

A. Technika ładowania obrazów dopiero w momencie, gdy stają się widoczne dla użytkownika
B. Protokół transferu obrazów między serwerem a przeglądarką
C. Metoda kompresji obrazów przed wysłaniem na serwer
D. Format przechowywania obrazów w pamięci podręcznej przeglądarki
Zastosowanie metody kompresji obrazów przed wysłaniem na serwer jest często mylone z techniką lazy loading. Kompresja ma na celu zmniejszenie rozmiaru plików graficznych, co przyspiesza ich przesyłanie, ale nie ma nic wspólnego z opóźnionym ładowaniem, które jest kluczowe dla lazy loadingu. Kompresja polega na redukcji jakości obrazu, co może wpłynąć na jego wygląd, ale nie zmienia faktu, że wszystkie obrazy są ładowane jednocześnie, co może obciążać łącze. Kolejnym błędnym rozumowaniem jest mylenie lazy loadingu z formatem przechowywania obrazów w pamięci podręcznej przeglądarki. Pamięć podręczna działa na zasadzie zapisywania zasobów, aby przyspieszyć ich ponowne ładowanie, ale nie decyduje o tym, kiedy obraz ma być załadowany. Ostatnia koncepcja, dotycząca protokołu transferu obrazów, również jest niepoprawna. Protokół transferu dotyczy metod przesyłania danych pomiędzy serwerem a klientem, ale nie ma bezpośredniego związku z techniką lazy loading. Istotne jest zrozumienie, że lazy loading to nie tylko technika, ale także strategia optymalizacji, a nie każdy aspekt ładowania zasobów wiąże się z tą metodą. Wydaje się, że mylenie tych pojęć wynika z ogólnej nieznajomości zasad działania sieci i efektywności aplikacji internetowych.

Pytanie 27

Co to jest PWA (Progressive Web App)?

A. System zarządzania treścią dla stron internetowych
B. Framework do tworzenia aplikacji mobilnych
C. Aplikacja webowa działająca jak natywna aplikacja mobilna
D. Biblioteka graficzna do tworzenia animacji
Jednym z powszechnych nieporozumień jest mylenie Progressive Web App z frameworkami do tworzenia aplikacji mobilnych, takimi jak React Native czy Flutter. Te frameworki pozwalają na tworzenie natywnych aplikacji, które działają na platformach mobilnych i wykorzystują ich natywne API, podczas gdy PWA jest technologią webową, która działa w przeglądarkach internetowych, niezależnie od systemu operacyjnego urządzenia. Ponadto, niektóre osoby mogą myśleć, że PWA to system zarządzania treścią (CMS), co jest błędem. CMS, jak WordPress czy Joomla, skupiają się na tworzeniu i zarządzaniu treścią stron internetowych, natomiast PWA są aplikacjami zaprojektowanymi dla użytkowników, które wykorzystują technologię webową do zapewnienia natywnego doświadczenia. Inne odpowiedzi sugerują, że PWA to biblioteka graficzna, co również jest mylną interpretacją. PWA nie jest narzędziem do tworzenia animacji, ale raczej kompletnym podejściem do budowy aplikacji internetowych, które mogą działać offline i oferować natywne funkcjonalności. Kluczowym błędem myślowym jest brak zrozumienia, że PWA nie polega na technologiach służących do tworzenia aplikacji mobilnych, lecz na wykorzystaniu możliwości nowoczesnych przeglądarek w celu dostarczenia użytkownikom aplikacji działającej płynnie i efektywnie, z poprawioną dostępnością i użytecznością.

Pytanie 28

Jakie ma znaczenie operator "==" w języku C++?

A. Przypisanie wartości do zmiennej
B. Porównanie dwóch wartości
C. Negacja logiczna
D. Zwiększenie wartości zmiennej o 1
Operator `=` to operator przypisania, który służy do przypisywania wartości do zmiennej (`a = 5`). Jest to jedna z najczęstszych przyczyn błędów logicznych, gdy zamiast `==` przypadkowo używa się `=`, co prowadzi do przypisania wartości zamiast porównania. Operator `!=` oznacza nierówność i zwraca `true`, gdy dwie wartości są różne, co jest przeciwieństwem `==`. Operator `!` to negacja logiczna – przekształca wartość logiczną na jej przeciwną, np. `!true` zwraca `false`. W żadnym z tych przypadków operatory te nie służą do porównywania równości w taki sposób, jak `==`.

Pytanie 29

Które z wymienionych pól klasy można zainicjalizować przed stworzeniem obiektu?

A. Publiczne pole
B. Prywatne pole
C. Static pole
D. Chronione pole
Pola prywatne i chronione są związane z konkretnymi instancjami klasy, co oznacza, że nie mogą być inicjalizowane przed utworzeniem obiektu. Inicjalizacja takich pól następuje w konstruktorze klasy lub w trakcie tworzenia instancji. Publiczne pola, choć dostępne z dowolnego miejsca w programie, także wymagają istnienia konkretnej instancji obiektu, aby mogły zostać zainicjowane i użyte. Statyczność jest kluczowym czynnikiem pozwalającym na inicjalizację pola niezależnie od istnienia obiektu.

Pytanie 30

1 terabajt (TB) to ile gigabajtów (GB)?

A. 512
B. 1000
C. 2048
D. 1024
Odpowiedzi 1000, 2048 i 512 są błędne z różnych powodów. Zaczynając od 1000 – często spotykana w reklamach, zwłaszcza w kontekście dysków twardych, odnosi się do systemu dziesiętnego, gdzie 1 TB to 1 000 GB. Ale w informatyce to tak nie działa, bo 1 TB to 1024 GB, co może nieco mylić. Odpowiedź 2048 to też nie to, bo tu mamy do czynienia z pomyleniem jednostek – 2048 wynika z 2^11 i nie pasuje do terabajtów i gigabajtów. Na koniec, 512, to w ogóle nie gra, bo 512 MB to tylko 0,5 GB, co w porównaniu do 1 TB jest po prostu za małe. Dlatego warto ogarnąć te różnice między systemami binarnym i dziesiętnym, żeby dobrze wiedzieć, jak przeliczać jednostki pamięci.

Pytanie 31

Co zostanie wypisane w konsoli po wykonaniu poniższego kodu?

let i = 0;
while (i < 5) {
  i++;
  if (i === 3) continue;
  console.log(i);
}
A. 0, 1, 2, 4, 5
B. 1, 2, 4, 5
C. 0, 1, 2, 3, 4
D. 1, 2, 3, 4, 5
W przedstawionym kodzie mamy do czynienia z pętlą while, która działa, dopóki zmienna i jest mniejsza od 5. Na początku i jest równe 0, a w każdej iteracji pętli i jest zwiększane o 1. Wewnątrz pętli mamy warunek, który sprawdza, czy i jest równe 3. Jeżeli tak, to używamy instrukcji continue, co oznacza, że pomijamy resztę kodu w tej iteracji i wracamy do początku pętli. Przeanalizujmy, co się stanie w kolejnych iteracjach: w pierwszej iteracji i jest 1, więc wypisujemy 1, w drugiej iteracji i jest 2, więc wypisujemy 2. Gdy i osiąga 3, warunek if jest spełniony i przechodzimy do następnej iteracji, nie wypisując nic. Następnie i staje się 4 i 5, które również są wypisywane. W efekcie na konsoli zostanie wypisane 1, 2, 4, 5. Takie podejście pokazuje, jak ważne jest zrozumienie działania pętli i instrukcji sterujących w JavaScript, co jest kluczowe w programowaniu i pozwala na efektywne zarządzanie przepływem kodu.

Pytanie 32

Jakie cechy posiada kod dopełniający do dwóch?

A. Reprezentuje liczbę w odwrotnej formie binarnej
B. Umożliwia reprezentację liczb ujemnych w systemie binarnym
C. Służy do przekształcania liczb binarnych na dziesiętne
D. Umożliwia konwersję systemu binarnego na szesnastkowy
Pierwsza z niepoprawnych odpowiedzi sugeruje, że kod uzupełnieniowy do dwóch przedstawia liczbę w postaci odwrotnej binarnej. Chociaż odwracanie bitów jest częścią konwersji do kodu uzupełnieniowego, to jednak nie jest to jedyny krok. Kod uzupełnieniowy do dwóch polega na odwróceniu bitów w liczbie binarnej oraz dodaniu 1, co czyni tę odpowiedź nieprecyzyjną. Druga niepoprawna odpowiedź twierdzi, że kod uzupełnieniowy służy do konwersji liczb binarnych na liczby dziesiętne. W rzeczywistości konwersja z systemu binarnego na dziesiętny polega na zsumowaniu wartości bitów pomnożonych przez odpowiednie potęgi liczby 2, a nie na zastosowaniu kodu uzupełnieniowego. Ostatnia niepoprawna odpowiedź sugeruje, że kod uzupełnieniowy umożliwia zamianę systemu binarnego na szesnastkowy. W rzeczywistości konwersja z systemu binarnego na szesnastkowy opiera się na grupowaniu bitów w zestawy po cztery, co nie ma nic wspólnego z kodem uzupełnieniowym. Kod uzupełnieniowy do dwóch jest zatem techniką reprezentacji liczb, a nie narzędziem do konwersji między różnymi systemami liczbowymi.

Pytanie 33

Które z wymienionych praw autorskich nie wygasa po pewnym czasie?

A. Autorskie prawa majątkowe
B. Autorskie prawa osobiste
C. Prawa pokrewne
D. Licencje wolnego oprogramowania
Autorskie prawa osobiste to rodzaj praw autorskich, które nie wygasają po upływie określonego czasu i są bezterminowe. Obejmują one prawo do autorstwa, oznaczania dzieła swoim nazwiskiem oraz sprzeciwiania się wszelkim zmianom, które mogłyby naruszać reputację twórcy. Prawa osobiste są niezbywalne, co oznacza, że nie można ich przenieść na inną osobę ani sprzedać. Nawet po śmierci twórcy, prawo do ochrony integralności jego dzieła jest respektowane. W praktyce oznacza to, że choć prawa majątkowe mogą wygasnąć (np. po 70 latach od śmierci autora), prawo do bycia uznanym za twórcę trwa wiecznie.

Pytanie 34

Jaką kategorię reprezentuje typ danych "array"?

A. Typ danych złożony
B. Typ danych prosty
C. Typ wskaźników
D. Typ logiczny
Prosty typ danych odnosi się do typów takich jak 'int', 'char' czy 'bool', które przechowują pojedyncze wartości, a nie zestawy danych. Typ wskaźnikowy przechowuje adresy pamięci, a nie kolekcje wartości, jak to ma miejsce w przypadku tablic. Typ logiczny (boolean) przechowuje wartości 'true' lub 'false', ale nie jest przeznaczony do przechowywania wielu elementów. Tablice różnią się od typów prostych tym, że pozwalają na jednoczesne przechowywanie wielu elementów i dostęp do nich za pomocą indeksów.

Pytanie 35

Jak zrealizować definiowanie własnego wyjątku w języku C++?

A. Skorzystać z domyślnej metody obsługi błędów
B. Utworzyć klasę, która dziedziczy po std::exception
C. Wykorzystać blok try z pustym blokiem catch
D. Automatycznie wywołać funkcję throw
Aby zdefiniować własny wyjątek w języku C++, należy stworzyć klasę dziedziczącą po standardowej klasie 'std::exception' lub jednej z jej pochodnych. Klasa ta może zawierać własne metody i pola, dostosowując obsługę błędów do specyficznych potrzeb aplikacji. Dziedziczenie z 'std::exception' umożliwia korzystanie z funkcji takich jak 'what()', która zwraca opis błędu. Dzięki temu programista może precyzyjnie określić typ i przyczynę wyjątku, co prowadzi do bardziej czytelnego i łatwiejszego w utrzymaniu kodu. Tworzenie własnych wyjątków jest szczególnie przydatne w dużych projektach, gdzie występuje potrzeba kategoryzacji i obsługi różnych typów błędów w zależności od ich źródła.

Pytanie 36

Co to jest framework?

A. narzędzie przeznaczone do opracowywania, edytowania, testowania i uruchamiania oprogramowania
B. platforma programistyczna oferująca określone komponenty oraz narzucająca szkielet lub metodologię tworzenia aplikacji
C. oprogramowanie, które za pomocą metody drag and drop pozwala na stworzenie interfejsu aplikacji
D. zbiór procedur, danych oraz złożonych typów danych używanych w kodzie źródłowym aplikacji
Sporo osób myli framework z innymi narzędziami programistycznymi, co moim zdaniem wynika z tego, że wszystkie te elementy – biblioteki, IDE, gotowe komponenty – jakoś się ze sobą przeplatają w codziennej pracy. Jednak framework to pojęcie o wiele szersze niż tylko zbiór procedur, danych czy typów danych obecnych w kodzie aplikacji. Tak naprawdę framework tworzy cały szkielet pod projekt i narzuca określone reguły, przez co programista nie ma pełnej swobody, ale za to zyskuje uporządkowanie pracy. Często ludzie utożsamiają framework z narzędziami typu drag and drop, bo te też przyspieszają budowę interfejsu, ale to zupełnie inna bajka. Framework nie ogranicza się wyłącznie do warstwy wizualnej ani do samego projektowania UI – obejmuje ogólną architekturę, zarządzanie zależnościami, obsługę zapytań czy nawet bezpieczeństwo. Z kolei środowisko programistyczne (IDE) rzeczywiście służy do kodowania, testowania czy uruchamiania aplikacji, ale nie narzuca architektury, nie daje gotowych założeń projektowych. Typowy błąd myślowy to traktowanie frameworka jako „większej biblioteki” albo narzędzia, które coś ułatwia – a sedno leży właśnie w tym, że narzuca określony sposób myślenia o projekcie i pilnuje, żeby kod rozwijał się według ustalonego schematu. Przykłady jak Spring, Django czy Laravel pokazują, że framework wyznacza kierunek całej aplikacji, a nie tylko dostarcza pojedyncze funkcje czy narzędzia. W praktyce, korzystanie z frameworka to nie tylko wygoda, ale i przestrzeganie pewnych standardów, co jest bardzo cenione w profesjonalnych zespołach developerskich.

Pytanie 37

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 XML
D. kod Java
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 38

Która z poniższych technologii jest używana do tworzenia wykresów i animacji w przeglądarce?

A. XML
B. SVG
C. CSV
D. JSON
Podejścia związane z innymi odpowiedziami nie są odpowiednie do tworzenia wykresów i animacji w przeglądarce. XML (Extensible Markup Language) jest formatem opisu danych, który służy do strukturalnego przechowywania i transportu danych, ale nie jest bezpośrednio używany do generowania grafik czy animacji. Chociaż można zbudować na jego podstawie system do tworzenia grafik, wymagałoby to dodatkowego przetwarzania, co czyni go mniej wydajnym. CSV (Comma-Separated Values) jest formatem tekstowym wykorzystywanym do przechowywania danych tabelarycznych, co ogranicza go do zadań związanych z wymianą danych, a nie ich wizualizacją. JSON (JavaScript Object Notation) jest z kolei formatem do wymiany danych, który jest czytelny dla ludzi i łatwy do przetworzenia przez maszyny, jednak nie odnosi się bezpośrednio do grafiki wektorowej. Często popełnianym błędem jest mylenie tych formatów z ich zastosowaniem w kontekście wizualizacji danych. Kluczowe jest, aby zrozumieć, że do skutecznego tworzenia interaktywnych i estetycznych wykresów lepiej jest używać technologii specjalnie zaprojektowanych do tego celu, jak SVG, które zapewniają odpowiednią funkcjonalność i wsparcie. Ostatecznie, wybór technologii powinien być uzależniony od specyficznych potrzeb projektu oraz jego wymagań.

Pytanie 39

Które z poniższych nie jest językiem programowania?

A. Kotlin
B. HTML
C. Ruby
D. Python
Wybór jednego z języków programowania takich jak Python, Ruby czy Kotlin jako odpowiedzi nie jest poprawny, ponieważ wszystkie te języki mają na celu tworzenie logiki i funkcjonalności aplikacji, a nie tylko prezentację treści. Python to wszechstronny język programowania, który znajduje zastosowanie w różnych dziedzinach, takich jak analiza danych, rozwój aplikacji webowych czy automatyzacja. Ruby, znany z eleganckiej składni, jest powszechnie używany w tworzeniu aplikacji webowych, szczególnie w ramach frameworka Ruby on Rails. Z kolei Kotlin, który stał się popularnym wyborem dla programistów Android, jest nowoczesnym językiem, który łączy cechy programowania obiektowego z funkcyjnym, co czyni go bardzo elastycznym. Typowym błędem myślowym jest mylenie języków znaczników z językami programowania, co wynika z niepełnego zrozumienia ich podstawowych funkcji. Warto pamiętać, że HTML ma za zadanie jedynie strukturę dokumentu, natomiast programowanie polega na manipulowaniu danymi oraz definiowaniu logiki działania aplikacji. Dlatego rozróżnienie między tymi kategoriami jest kluczowe w procesie nauki programowania oraz w pracy jako deweloper.

Pytanie 40

W jaki sposób procesor nawiązuje komunikację z pamięcią podręczną (cache)?

A. Za pomocą systemu przerwań
B. Poprzez linie danych w magistrali systemowej
C. Bezpośrednio, omijając mostki systemowe
D. Używając wyłącznie pamięci RAM
Komunikacja między procesorem a pamięcią podręczną nie odbywa się poprzez system przerwań, ponieważ przerwania są mechanizmem umożliwiającym procesorowi reagowanie na zdarzenia zewnętrzne, a nie transfer danych między pamięcią a procesorem. Przerwania są używane głównie do komunikacji z urządzeniami peryferyjnymi, które informują procesor o konieczności przetworzenia danych, a nie do bezpośredniej interakcji z pamięcią podręczną. Ponadto stwierdzenie, że procesor komunikuje się z pamięcią podręczną, wykorzystując jedynie pamięć RAM, jest błędne, ponieważ pamięć RAM i pamięć podręczna to różne typy pamięci, o różnych szybkościach i funkcjach. Pamięć podręczna jest znacznie szybsza i działa jako pośrednik między procesorem a wolniejszą pamięcią RAM, co oznacza, że procesor nie korzysta z pamięci RAM do komunikacji z pamięcią podręczną. Warto również zaznaczyć, że komunikacja bezpośrednia z pominięciem mostków systemowych jest niepraktyczna i technicznie niemożliwa. Mostki systemowe są niezbędne do zarządzania ruchem danych między różnymi komponentami w architekturze komputerowej, a ich pominięcie mogłoby prowadzić do chaosu w komunikacji oraz znacznie obniżyć wydajność systemu.