Wyniki egzaminu

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

Egzamin zdany!

Wynik: 20/40 punktów (50,0%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu— sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Które z podanych logo reprezentuje narzędzie, które nie jest używane do tworzenia aplikacji mobilnych?

Ilustracja do pytania
A. 1
B. 3
C. 2
D. 4
Wiele osób myli narzędzia do tworzenia aplikacji internetowych z tymi do natywnych aplikacji mobilnych, szczególnie gdy chodzi o popularne frameworki. Android Studio to środowisko dedykowane budowie aplikacji mobilnych na system Android – bez niego trudno wyobrazić sobie profesjonalny rozwój na tę platformę. Xcode natomiast to narzędzie, bez którego nie ma sensu zaczynać pracy nad aplikacjami na iOS, bo Apple stawia bardzo konkretne wymagania dotyczące narzędzi i kompilatorów. Xamarin pozwala pisać aplikacje mobilne w C#, co sprawia, że można tworzyć jednocześnie wersje na Androida i iOS przy wykorzystaniu wspólnej bazy kodu – to bardzo popularne podejście w korporacyjnych środowiskach, gdzie trzeba minimalizować koszty utrzymania kilku aplikacji. Tymczasem Angular jest frameworkiem do budowy nowoczesnych aplikacji webowych i o ile istnieją technologie (np. Ionic), które pozwalają zamknąć aplikację webową w kontenerze mobilnym, to nie jest to tożsame z budowaniem natywnych aplikacji mobilnych. W praktyce rozwiązania hybrydowe często mają ograniczenia wydajnościowe i nie zapewniają pełnego dostępu do funkcji systemowych, przez co w środowisku profesjonalnych deweloperów traktowane są raczej jako półśrodek niż standard. Wybierając Angulara jako narzędzie do budowy natywnych aplikacji mobilnych można popełnić błąd strategiczny i napotkać trudności z rozwojem produktu, zwłaszcza gdy zależy nam na responsywności i głębokiej integracji z systemem operacyjnym. Takie błędne założenia prowadzą często do frustracji zespołów developerskich i wydłużenia czasu pracy nad projektem.

Pytanie 2

Jakie jest przeznaczenie dokumentacji wdrożeniowej?

A. Do zarządzania bazą danych aplikacji
B. Do tworzenia zadań w systemie kontroli wersji
C. Do opisania procesu instalacji i konfiguracji aplikacji w środowisku produkcyjnym
D. Do testowania wydajności aplikacji
Dokumentacja wdrożeniowa opisuje proces instalacji i konfiguracji aplikacji w środowisku produkcyjnym. Obejmuje ona szczegółowe instrukcje dotyczące wymaganych komponentów systemowych, zależności oraz kroków niezbędnych do prawidłowego wdrożenia aplikacji. Dzięki dokumentacji wdrożeniowej administratorzy IT oraz zespoły DevOps mogą skutecznie zarządzać procesem implementacji, minimalizując ryzyko błędów i przestojów. Dokument ten zawiera również informacje o kopiach zapasowych, procedurach przywracania systemu oraz testach przeprowadzanych po wdrożeniu, co zapewnia stabilność i bezpieczeństwo aplikacji po przeniesieniu jej na serwery produkcyjne. Kompleksowa dokumentacja wdrożeniowa to kluczowy element zarządzania cyklem życia oprogramowania (SDLC).

Pytanie 3

Jakie z wymienionych funkcji są typowe dla narzędzi służących do zarządzania projektami?

A. Tworzenie interfejsu użytkownika
B. Przeprowadzanie analizy statystycznej
C. Opracowywanie diagramów przepływu
D. Nadzorowanie postępu realizacji
Monitorowanie postępu prac to jedna z kluczowych funkcji narzędzi do zarządzania projektami. Dzięki temu zespoły mogą śledzić realizację zadań, identyfikować opóźnienia oraz efektywnie alokować zasoby. Narzędzia takie jak Jira, Trello czy Asana pozwalają na wizualizację postępów, co ułatwia kontrolowanie harmonogramu oraz planowanie kolejnych etapów projektu. Monitorowanie postępu prac pomaga także w wykrywaniu wąskich gardeł i umożliwia szybkie podejmowanie decyzji, co znacząco zwiększa efektywność całego zespołu. Funkcja ta jest szczególnie istotna w zarządzaniu projektami IT, budowlanymi i kreatywnymi, gdzie koordynacja wielu zadań jest kluczowa dla sukcesu projektu.

Pytanie 4

Aplikacje funkcjonujące w systemach Android do komunikacji z użytkownikiem wykorzystują klasę

A. Screens
B. Windows
C. Activity
D. Fragments
W pytaniu pojawiły się również odpowiedzi, które teoretycznie brzmią znajomo z programowania aplikacji mobilnych, jednak nie do końca trafiają w sedno tego, jak Android faktycznie działa. Przykładowo, klasa Screens nie występuje w oficjalnym API Androida – to raczej potoczne określenie na ekrany aplikacji, ale technicznie taka klasa po prostu nie istnieje. Bardzo łatwo można się tu pomylić, zwłaszcza jeśli ktoś myśli o strukturze interfejsu tylko przez pryzmat tego, co widzi użytkownik. Fragments to z kolei bardzo ważny element w architekturze Androida, ale fragmenty nie są samodzielnymi ekranami – zawsze muszą być powiązane z jakąś Activity, bo to ona jest tym nadrzędnym komponentem. Fragmenty pomagają lepiej zarządzać złożonymi interfejsami i umożliwiają np. dzielenie ekranu na części, ale nie funkcjonują niezależnie poza Activity. Jeśli chodzi o Windows, można się spotkać z takim określeniem w kontekście platformy desktopowej, a w Androidzie „Window” to raczej wewnętrzny mechanizm zarządzania wyświetlaniem widoku, z którym większość programistów nie ma bezpośrednio do czynienia. Często spotykany błąd to mylenie fragmentów lub okien z Activity, bo na pierwszy rzut oka wszystko to są jakieś elementy interfejsu. Jednak zgodnie ze standardami projektowania aplikacji na Androida, to właśnie Activity jest najważniejszą klasą do obsługi komunikacji z użytkownikiem. Warto wyrobić sobie nawyk odróżniania tych pojęć, bo to potem mocno ułatwia pracę i pozwala pisać kod zgodny z dobrymi praktykami Google. W sumie, dopiero jak się zaczyna coś więcej dłubać w Androidzie, wychodzi na jaw, jak istotne są poprawne wyobrażenia o tych podstawowych klasach systemowych.

Pytanie 5

Które z wymienionych sytuacji jest przykładem hermetyzacji w programowaniu obiektowym?

A. Tworzenie wielu metod o tej samej nazwie w różnych klasach
B. Tworzenie klasy abstrakcyjnej
C. Ograniczenie dostępu do pól klasy poprzez modyfikatory dostępu
D. Wykorzystanie klasy nadrzędnej w innej klasie
Hermetyzacja (ang. encapsulation) to mechanizm programowania obiektowego, który polega na ukrywaniu wewnętrznych danych obiektu oraz udostępnianiu dostępu do nich tylko za pośrednictwem metod publicznych (gettery i settery). Dzięki hermetyzacji dane klasy są chronione przed bezpośrednią modyfikacją, co zwiększa bezpieczeństwo i stabilność kodu. Przykład w C++: `class Konto { private: double saldo; public: void wplata(double kwota) { saldo += kwota; } }` – saldo jest polem prywatnym, które można modyfikować tylko poprzez metody publiczne, co zapobiega nieautoryzowanemu dostępowi.

Pytanie 6

Szablon MojaTablica oferuje funkcjonalność tablicy z indeksami oraz elementami różnych typów. W oparciu o pokazany kod, który wykorzystuje ten szablon do tworzenia tablicy asocjacyjnej, wskaż definicję, która posługuje się szablonem do zainicjowania tablicy, gdzie indeksami są liczby całkowite, a elementami są napisy?

MojaTablica tab1 = new MojaTablica<string, string>();
tab1["good"] = "dobry";
A. MojaTablica tab2 = new MojaTablica()
B. int tab2 = new MojaTablica()
C. MojaTablica tab2 = MOjaTablica()
D. int tab2[] = new MojaTablica()
Aby utworzyć tablicę asocjacyjną w oparciu o szablon, należy zainicjalizować ją przy użyciu właściwej składni: MojaTablica tab2 = new MojaTablica();. Tego typu deklaracja tworzy obiekt tablicy, gdzie klucze są liczbami całkowitymi, a wartości przechowywane w tablicy to napisy. Tablice asocjacyjne to potężne narzędzie pozwalające na szybkie wyszukiwanie i przechowywanie danych, bazujące na unikalnych kluczach, co umożliwia efektywne zarządzanie złożonymi strukturami danych.

Pytanie 7

Które z poniższych nie jest systemem kontroli wersji?

A. MongoDB
B. Git
C. Mercurial
D. SVN
Git, SVN i Mercurial to systemy kontroli wersji, które służą do śledzenia zmian w kodzie źródłowym aplikacji, co jest kluczowym aspektem współczesnego inżynierii oprogramowania. Te narzędzia pozwalają programistom na zarządzanie historią zmian, współpracę nad kodem oraz łatwe przywracanie wcześniejszych wersji, co jest niezwykle istotne w procesie tworzenia i utrzymania projektów. Wybierając Git, deweloperzy korzystają z rozproszonego modelu, który umożliwia każdemu użytkownikowi posiadanie pełnej kopii repozytorium na swoim lokalnym komputerze, co znacznie upraszcza proces rozwijania oprogramowania w zespołach zdalnych. SVN, z kolei, opiera się na centralnym modelu, co może być korzystne w określonych kontekstach, zwłaszcza w większych przedsiębiorstwach, gdzie kontrola dostępu do kodu źródłowego jest kluczowa. Mercurial podobnie jak Git oferuje rozproszoną architekturę, ale jego prostszy interfejs użytkownika sprawia, że jest bardziej intuicyjny dla nowych użytkowników. Błędem jest mylenie systemów baz danych z systemami kontroli wersji, co wynika z niepełnej wiedzy na temat ich podstawowych funkcji. Systemy kontroli wersji są niezbędne do zapewnienia efektywnej współpracy w zespołach programistycznych oraz do minimalizacji ryzyka utraty danych podczas pracy nad projektem, natomiast systemy baz danych koncentrują się na przechowywaniu i zarządzaniu informacjami.

Pytanie 8

Co to jest PWA (Progressive Web App)?

A. Framework do tworzenia aplikacji mobilnych
B. System zarządzania treścią dla stron internetowych
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 9

Który z wymienionych frameworków służy do budowy aplikacji webowych w C#?

A. Django
B. ASP.NET Core
C. Angular
D. React.js
Django to framework dla języka Python, który nie jest związany z ekosystemem C#. Angular to framework frontendowy oparty na TypeScript, używany do tworzenia interfejsów użytkownika, ale nie pełni roli backendowego frameworka webowego w C#. React.js to biblioteka JavaScript dedykowana budowie dynamicznych komponentów frontendowych i nie jest wykorzystywana do budowy backendowych aplikacji w C#.

Pytanie 10

Jaką nazwę nosi framework CSS, który służy do definiowania wyglądu stron internetowych i którego klasy zostały użyte w przedstawionym przykładzie?

<div class="col-sm-3 col-md-6 col-lg-4">
  <button class="btn btn-primary dropdown-toggle" type="button">
</button>
</div>
A. Yaml
B. Bootstrap
C. Angular
D. Symfony
Bootstrap jest jednym z najpopularniejszych frameworków CSS używanych do tworzenia responsywnych aplikacji internetowych. Jest to zestaw narzędzi open-source, który oferuje gotowe klasy CSS oraz komponenty JavaScript, ułatwiające projektowanie interfejsów użytkownika. W podanym przykładzie klasy takie jak 'col-sm-3' 'col-md-6' i 'col-lg-4' odnoszą się do siatki Bootstrapowej, która umożliwia elastyczne rozplanowanie elementów na stronie w zależności od rozmiaru ekranu. Klasa 'btn-primary' stosowana jest w Bootstrapie do stylizacji przycisków w sposób, który pasuje do domyślnych kolorów motywu. Z kolei 'dropdown-toggle' jest używana do obsługi rozwijanych list. Dzięki Bootstrapowi można z łatwością tworzyć nowoczesne i estetyczne aplikacje, które są zgodne z zasadami responsywnego web designu, co jest kluczowym standardem w dzisiejszej branży. Użycie Bootstrapu przyspiesza proces developmentu, pozwalając skupić się na funkcjonalności i logice aplikacji, zamiast na ręcznym stylizowaniu elementów.

Pytanie 11

Jakie są kluczowe zasady WCAG 2.0?

A. Dostosowana, błyskawiczna, mobilna, dostępna
B. Ewolucyjna, interaktywna, efektywna
C. Percepcyjna, operacyjna, zrozumiała, solidna
D. Elastyczna, prosta, przejrzysta, trwała
Zasady WCAG 2.0, czyli Wytycznych dotyczących dostępności treści internetowych, skupiają się na zapewnieniu, że strony internetowe są dostępne dla wszystkich użytkowników, niezależnie od ich zdolności. Główne zasady to percepcyjna, operacyjna, zrozumiała i solidna. Percepcyjna oznacza, że ​​wszystkie elementy na stronie muszą być przedstawione w sposób, który umożliwia ich percepcję przez różne zmysły, takie jak wzrok i słuch. Na przykład, tekst alternatywny dla obrazów pozwala osobom niewidomym zrozumieć zawartość wizualną. Operacyjna dotyczy interakcji użytkownika z treścią; nawigacja powinna być intuicyjna, a elementy interaktywne łatwo osiągalne. Zrozumiała oznacza, że ​​treść powinna być zrozumiała dla wszystkich użytkowników, co można osiągnąć poprzez prosty język i jasne instrukcje. Solidna koncentruje się na tym, aby treść była wystarczająco elastyczna, aby działała w różnych przeglądarkach i urządzeniach, co jest kluczowe w dobie różnorodności technologii. Przykładem wdrożenia tych zasad może być wykorzystanie ARIA (Accessible Rich Internet Applications), które wspomagają dostępność dynamicznych treści w aplikacjach internetowych.

Pytanie 12

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

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

Pytanie 13

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

A. Tworzenie kopii zapasowych plików
B. Udostępnianie informacji i interakcja między użytkownikami
C. Analiza rezultatów działalności gospodarczej
D. Zarządzanie handlem produktami i usługami
Główna funkcja portali społecznościowych polega na umożliwieniu użytkownikom tworzenia, udostępniania oraz wymiany treści, a także komunikacji w czasie rzeczywistym. Portale takie jak Facebook, Twitter czy Instagram pozwalają na interakcję poprzez posty, komentarze, polubienia oraz wiadomości prywatne. Użytkownicy mogą dzielić się zdjęciami, filmami, artykułami lub osobistymi przemyśleniami, co sprzyja budowaniu społeczności i nawiązywaniu relacji. Funkcjonalności te są zgodne z najlepszymi praktykami UX/UI, które kładą nacisk na intuicyjność i łatwość obsługi. W kontekście SEO, portale społecznościowe są także ważne ze względu na możliwość generowania ruchu na zewnętrzne strony internetowe poprzez linki i udostępnienia. Przykładem może być wykorzystanie platformy Instagram do promocji produktów, gdzie użytkownicy mogą kliknąć w linki do sklepu. Takie działania zwiększają widoczność marki w Internecie oraz angażują odbiorców, co jest kluczowe dla efektywnej strategii marketingowej.

Pytanie 14

Jakie informacje można uzyskać na temat metod w klasie Point?

public class Point {
    public void Move(int x, int y) {...}
    public void Move(int x, int y, int z) {...}
    public void Move(Point newPt) {...}
}
A. Są przeciążone.
B. Zawierają przeciążenie operatora.
C. Zawierają błąd, ponieważ nazwy metod powinny być różne.
D. Służą jako konstruktory w zależności od liczby argumentów.
Metody przeciążone mogą mieć tę samą nazwę – różnią się sygnaturą, czyli liczbą i typami argumentów, co jest zgodne z zasadami programowania obiektowego. Przeciążenie metod to nie to samo co przeciążenie operatorów, które polega na definiowaniu nowego sposobu działania operatorów (np. +, -, *). Pełnienie funkcji konstruktorów to inny mechanizm i dotyczy głównie klas i ich instancjonowania, nie przeciążania metod.

Pytanie 15

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. liczby całkowite
B. liczby rzeczywiste
C. elementy typu List
D. elementy o nieokreślonym typie
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 16

Przedstawione w filmie działania wykorzystują narzędzie

A. debuggera analizującego wykonujący kod
B. generatora kodu java
C. kompilatora dla interfejsu graficznego
D. generatora GUI przekształcającego kod do języka XAML
Wybrana odpowiedź jest trafna, bo faktycznie narzędzie pokazane w filmie to generator GUI, który potrafi przekształcać kod do języka XAML. XAML (czyli Extensible Application Markup Language) jest powszechnie używany do deklaratywnego opisywania interfejsów użytkownika, na przykład w aplikacjach WPF czy UWP na platformie .NET. Jak dla mnie, korzystanie z takich generatorów to ogromna wygoda, bo pozwala błyskawicznie przenosić projekt graficzny do formatu czytelnego dla platformy Microsoftu. Z mojego doświadczenia, wiele zespołów programistycznych stosuje takie rozwiązania, żeby oszczędzić czas na ręcznym pisaniu XAML-a (co potrafi być naprawdę żmudne przy dużych projektach). Co ciekawe, takie narzędzia bardzo dobrze współpracują z designerskimi edytorami UI i potrafią zautomatyzować konwersję nawet z innych formatów graficznych, np. Sketch czy Adobe XD do XAML-a. Branżowe standardy zalecają, by wykorzystywać generatorów GUI właśnie do tego celu, bo minimalizuje to liczbę błędów, przyspiesza wdrożenie zmian i ułatwia współpracę między programistami a projektantami. Warto pamiętać, że XAML jest bardzo elastyczny i umożliwia potem ręczną edycję wygenerowanego kodu – czasem powstają drobne poprawki, ale ogólnie to naprawdę przydatne narzędzie. Ogólnie – jeśli tylko projektujesz UI pod .NET, to automatyczna konwersja do XAML-a to jest coś, co warto znać i wykorzystywać w praktyce.

Pytanie 17

Jakie metody pozwalają na przesłanie danych z serwera do aplikacji front-end?

A. biblioteki jQuery
B. protokołu SSH
C. metody POST
D. formatu JSON
Format JSON to zdecydowanie najpopularniejszy i najwygodniejszy sposób przesyłania danych pomiędzy serwerem a aplikacją front-end. JSON, czyli JavaScript Object Notation, jest lekkim formatem wymiany danych, który został zaprojektowany właśnie pod kątem prostoty odczytu i zapisu, zarówno przez ludzi, jak i maszyny. Moim zdaniem trudno dziś znaleźć nowoczesną aplikację webową, która nie korzysta z JSON-a. W praktyce wygląda to tak, że serwer generuje odpowiedź HTTP z danymi w formacie JSON, a front-end (często napisany w JavaScript lub TypeScript) potrafi je bez problemu sparsować i wykorzystać. Standardy branżowe – jak REST API czy GraphQL – bazują w dużej mierze na tym formacie, bo jest uniwersalny, prosty i dobrze wspierany przez frameworki. JSON wspiera nawet zagnieżdżone struktury, tablice, obiekty, więc przekazywanie danych jest bardzo elastyczne. Z mojego doświadczenia, dzięki JSON-owi można bardzo sprawnie integrować różne technologie na back-endzie i front-endzie, co się naprawdę często przydaje przy dużych projektach. Warto pamiętać, że praktycznie każdy język programowania ma biblioteki do obsługi JSON-a, więc nie ma tu żadnych barier technologicznych. Nawet przy komunikacji asynchronicznej (np. z użyciem fetch czy XMLHttpRequest) JSON jest domyślnym wyborem. Tak naprawdę, jeśli chodzi o wymianę danych w aplikacjach webowych, JSON jest po prostu standardem de facto i warto go dobrze znać.

Pytanie 18

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

A. Obserwator (Observer)
B. Metoda szablonowa (Template method)
C. Fasada (Facade)
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 19

W jakim języku programowania kod źródłowy musi być skompilowany do kodu maszynowego konkretnej architektury procesora przed jego uruchomieniem?

A. PHP
B. C++
C. Perl
D. Java
Wiele osób zakłada, że języki takie jak PHP, Perl czy Java działają podobnie do C++, jeśli chodzi o uruchamianie kodu, ale to tylko pozory. PHP i Perl są językami interpretowanymi – ich kod źródłowy jest analizowany i wykonywany 'w locie' przez interpreter, bez wcześniejszego tłumaczenia na natywny kod maszynowy procesora. To oznacza, że można szybko wdrażać zmiany, ale kosztem wydajności i czasem większego zużycia zasobów. Takie podejście jest popularne w aplikacjach webowych, gdzie szybkość wdrażania jest ważniejsza niż absolutna prędkość działania. Java wygląda na pierwszy rzut oka na język kompilowany, bo korzysta z kompilatora, ale w rzeczywistości kompiluje kod źródłowy do tzw. bytecode'u, który jest wykonywany przez maszynę wirtualną JVM. To sprawia, że programy w Javie są bardzo przenośne (mogą działać na różnych systemach operacyjnych), ale nie są bezpośrednio tłumaczone na instrukcje dla konkretnego modelu procesora. W C++ natomiast kompilacja to proces tłumaczenia kodu na czysto maszynowe instrukcje, takie jakie rozumie konkretny fizyczny procesor – to daje większą wydajność, ale i mniejszą przenośność (trzeba kompilować osobno dla każdej platformy). Moim zdaniem często mylimy kompilację do kodu bajtowego z kompilacją do kodu maszynowego, a to są dwa zupełnie różne podejścia. W profesjonalnych projektach wybór technologii zawsze zależy od potrzeb – jeżeli wymagana jest pełna wydajność i kontrola nad sprzętem, to stawia się na języki takie jak C++. W przypadku PHP, Perla czy Javy liczy się raczej łatwość wdrażania i przenośność. To rozróżnienie jest kluczowe dla zrozumienia, jak działa świat programowania na poziomie systemowym i aplikacji wysokopoziomowych.

Pytanie 20

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

A. .bingClass()
B. .switchClass()
C. .toggleClass()
D. .changeClass()
Wybór innej funkcji niż .toggleClass() może wynikać z mylnego założenia, że mechanizm zmiany klas w jQuery działa intuicyjnie jak w czystym JavaScripcie, albo z braku doświadczenia z dokumentacją jQuery. Przykładowo, .switchClass() faktycznie istnieje w bibliotece jQuery UI (a nie w podstawowej wersji jQuery), lecz jej zadaniem jest płynne przejście z jednej klasy do drugiej, często z animacją. Nie obsługuje ona jednak naprzemiennego dodawania i usuwania pojedynczej klasy. .changeClass() oraz .bingClass() to natomiast funkcje wymyślone — w oficjalnej dokumentacji jQuery nie występują i ich użycie zakończyłoby się błędem w konsoli przeglądarki. Zdarza się, że osoby początkujące szukają metody z nazwą „change”, bo wydaje się to logiczne w języku angielskim, jednak w jQuery składnia i konwencje opierają się na słowach typu add, remove, a w tym przypadku toggle. Typowym błędem jest też mieszanie funkcjonalności jQuery z czystym JavaScriptem, gdzie operacje na klasach odbywają się przez classList.toggle(), co może wprowadzać w błąd podczas nauki. Dobra praktyka w branży polega na wykorzystywaniu wyłącznie udokumentowanych metod i czytaniu oficjalnych materiałów — w ten sposób łatwiej uniknąć nieporozumień i zyskać pewność, że kod będzie działał poprawnie we wszystkich przeglądarkach wspieranych przez jQuery. Moim zdaniem najwięcej zamieszania wprowadza podobieństwo nazw metod oraz chęć uproszczenia kodu, co czasami prowadzi do nieświadomego wybierania nieistniejących funkcji. Warto więc regularnie zaglądać do dokumentacji, bo nawet jeśli coś wydaje się logiczne, to nie zawsze jest zaimplementowane w bibliotece.

Pytanie 21

Jakie aspekty powinny być brane pod uwagę przy tworzeniu zestawów danych?

A. Narzędzia do analizy błędów
B. Typ zastosowanego kompilatora
C. Metoda alokacji pamięci dla danych
D. Ilość linii kodu programu
Sposób alokacji pamięci dla danych to kluczowy element projektowania zestawów danych, ponieważ wpływa na wydajność i efektywność programu. Dynamiczna alokacja pamięci pozwala na tworzenie struktur, których rozmiar jest zmienny i dostosowuje się w trakcie działania aplikacji. Dzięki temu programiści mogą optymalnie zarządzać zasobami systemowymi, unikając marnowania pamięci lub jej niedoboru. Wybór odpowiedniej metody alokacji, np. stosowanie wskaźników, dynamicznych tablic lub struktur danych takich jak lista czy mapa, pozwala na budowanie bardziej skalowalnych i elastycznych aplikacji.

Pytanie 22

Reguła zaangażowania i konsekwencji jako jedna z zasad wpływania na innych odnosi się

A. do doprowadzania spraw do końca
B. do uległości wobec autorytetów
C. do kierowania się zdaniem danej grupy
D. do odwzajemniania się osobie, która nam pomogła
Reguła zaangażowania i konsekwencji, o której tu mowa, faktycznie odnosi się do potrzeby doprowadzania spraw do końca. To jedna z podstawowych zasad psychologicznych wykorzystywanych w wpływaniu na decyzje i zachowania ludzi, szczególnie w sprzedaży czy negocjacjach. Kiedy już się na coś zgodzimy lub podejmiemy pierwsze, nawet drobne zobowiązanie, automatycznie pojawia się w nas silna potrzeba zachowania spójności z wcześniejszymi deklaracjami — tak po prostu działa ludzka psychika. Z mojego doświadczenia wynika, że firmy bardzo często to wykorzystują, np. prosząc klienta o drobną przysługę, podpis czy mikroakceptację, bo potem jest większa szansa, że pójdzie za ciosem i zdecyduje się na większy krok. W psychologii społecznej ten mechanizm uznaje się za bardzo skuteczny – zresztą Robert Cialdini w swoich książkach szeroko o tym pisze. Na rynku pracy też to widać, bo pracodawcy chętniej powierzają ważne zadania osobom, które mają zwyczaj kończyć to, co zaczęły. W praktyce, jeśli ktoś raz się w coś zaangażuje — nawet formalnie nie podpisując żadnej umowy — to potem z dużym prawdopodobieństwem wytrwa przy swojej decyzji. Dlatego znajomość tej zasady jest nie tylko teoretycznie ciekawa, ale daje konkretne narzędzia do skuteczniejszego działania w relacjach międzyludzkich, marketingu czy zarządzaniu projektami.

Pytanie 23

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

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

Pytanie 24

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

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

Pytanie 25

Jaką wartość przyjmie etykieta label po wykonaniu poniższego kodu, gdy zostanie on uruchomiony po naciśnięciu przycisku w aplikacji?

private void Button_click(object sender, routedEventArgs e) {
    int tmp = 0;
    for (int i=0; i<=100; i+=2) {
        tmp += i;
    }
    label.Content = tmp;
}
A. liczby parzyste z przedziału od 0 do 100
B. liczby z przedziału od 0 do 100
C. suma liczb parzystych z przedziału od 0 do 100
D. suma liczb z przedziału od 0 do 100
Kod, który został podany w pytaniu, wykorzystuje pętlę for do obliczenia sumy wszystkich liczb parzystych z przedziału od 0 do 100 włącznie. Zmienna tmp pełni tutaj rolę akumulatora, który z każdą iteracją powiększa swoją wartość o kolejną liczbę parzystą. Startujemy od zera, a dzięki i+=2 pętla przechodzi tylko przez liczby parzyste (0, 2, 4, ..., 100). To bardzo typowy sposób, żeby wyliczyć sumę konkretnego zbioru liczb – w tym przypadku parzystych z określonego zakresu. Moim zdaniem warto zauważyć, że takie podejście świetnie sprawdza się w prostych kalkulatorach, prostych analizach danych czy nawet w grach, gdzie czasem trzeba sumować tylko wybrane wartości. W praktyce, szczególnie w większych projektach, lepiej opakować takie operacje w osobne metody lub korzystać np. z funkcji agregujących LINQ w C#. Ale zasada jest ta sama – najpierw określamy, co konkretnie chcemy sumować (tutaj: liczby parzyste), a potem realizujemy to w pętli. Ten fragment kodu jest też niezłym przykładem, jak optymalnie można przechodzić przez dane, jeśli nie musimy analizować wszystkich możliwych wartości (tutaj: wystarczy co drugi krok). Takie sumowanie przydaje się w pracy z raportami, zestawieniami i w miejscach, gdzie liczy się wydajność przetwarzania danych.

Pytanie 26

Jakiego typu testy są stosowane do sprawdzania funkcjonalności prototypu interfejsu?

A. Testy zgodności
B. Testy obciążeniowe
C. Testy interfejsu
D. Testy efektywnościowe
Testy interfejsu są kluczowe w procesie weryfikacji funkcji prototypu interfejsu użytkownika. Testy te koncentrują się na sprawdzeniu poprawności działania wszystkich elementów graficznych, takich jak przyciski, pola tekstowe, menu rozwijane oraz formularze. Testy interfejsu pozwalają upewnić się, że interakcje użytkownika z aplikacją przebiegają zgodnie z oczekiwaniami i nie powodują błędów w nawigacji. Dzięki nim można wykryć problemy związane z nieprawidłowym rozmieszczeniem elementów, brakiem reakcji na kliknięcia lub nieintuicyjnym działaniem, co pozwala na wczesne wdrożenie poprawek i zwiększenie użyteczności aplikacji.

Pytanie 27

Jaką rolę pełni element statyczny w klasie?

A. Automatycznie likwiduje obiekty klasy po zakończeniu działania programu
B. Ogranicza dostęp do metod publicznych w klasie
C. Pozwala na dynamiczne dodawanie nowych metod
D. Zachowuje wspólną wartość dla wszystkich instancji tej klasy
Składnik statyczny klasy przechowuje wartości współdzielone przez wszystkie obiekty tej klasy. Jest to jedno z najbardziej efektywnych narzędzi w programowaniu obiektowym, pozwalające na ograniczenie zużycia pamięci oraz zapewnienie spójności danych. Główna rola składnika statycznego polega na utrzymaniu jednej kopii zmiennej lub metody, która jest dostępna niezależnie od liczby instancji klasy. To oznacza, że zmiana wartości składowej statycznej jest natychmiast widoczna dla wszystkich obiektów klasy. Przykładem jest licznik instancji klasy lub konfiguracja globalna aplikacji, gdzie statyczność pozwala na scentralizowanie danych i ich jednolite zarządzanie.

Pytanie 28

Co oznacza pojęcie MVP w kontekście projektowania aplikacji?

A. Most Valuable Program - program uznany za najbardziej wartościowy w organizacji
B. Multiple Value Platform - platforma wspierająca wiele typów wartości danych
C. Mobile Virtual Platform - platforma do testowania aplikacji mobilnych
D. Minimum Viable Product - produkt o minimalnej funkcjonalności zdolny do działania
Mimo że inne odpowiedzi mogą wydawać się interesujące, żadna z nich nie odnosi się do kluczowego pojęcia Minimum Viable Product, które jest fundamentalne w projektowaniu aplikacji. Multiple Value Platform sugeruje, że system jest w stanie obsługiwać różne typy danych, co jest ważne w kontekście integracji systemów, ale nie odnosi się bezpośrednio do strategii wprowadzania produktów. Most Valuable Program wskazuje na programy szczególnie cenione w organizacji, co jest terminem zupełnie odwrotnym do idei MVP, która koncentruje się na minimalnych funkcjonalnościach, a nie na wartości programu. Z kolei Mobile Virtual Platform, chociaż może wydawać się zbliżonym konceptem, odnosi się do środowisk wirtualnych używanych do testowania aplikacji mobilnych, co nie ma związku z procesem definiowania minimalnej wersji produktu na rynku. Kluczowym błędem jest zrozumienie, że MVP nie jest tylko o zredukowanej wersji produktu; to strategiczny sposób na wprowadzenie innowacji, który umożliwia naukę i adaptację, a nie tylko skupienie się na poszczególnych funkcjach czy platformach. Takie nieporozumienie może prowadzić do niewłaściwego podejścia do projektowania i wprowadzania produktów na rynek, co w dłuższej perspektywie może znacząco wpłynąć na sukces projektu.

Pytanie 29

Które z wymienionych narzędzi nie znajduje zastosowania w tworzeniu aplikacji desktopowych?

A. Kompilator
B. Debugger
C. Edytor graficzny
D. Przeglądarka internetowa
Kompilator to podstawowe narzędzie, które jest niezbędne w procesie tworzenia aplikacji – bez niego kod źródłowy nie mógłby zostać przekształcony w plik wykonywalny. Debugger odgrywa kluczową rolę w identyfikacji i eliminowaniu błędów w kodzie, co jest niezbędne do prawidłowego działania aplikacji. Edytor graficzny może być używany w tworzeniu interfejsów graficznych aplikacji desktopowych (GUI), zwłaszcza w środowiskach takich jak Visual Studio, WPF czy Qt, co czyni go integralną częścią procesu programistycznego.

Pytanie 30

Jakie są różnice między testami funkcjonalnymi a niefunkcjonalnymi?

A. Testy funkcjonalne oceniają wydajność aplikacji, podczas gdy niefunkcjonalne weryfikują poprawność kodu
B. Testy funkcjonalne oceniają zgodność działania aplikacji z założeniami, a niefunkcjonalne analizują aspekty wydajności, bezpieczeństwa i użyteczności
C. Testy funkcjonalne są realizowane tylko przez końcowych użytkowników, natomiast niefunkcjonalne przez programistów
D. Testy funkcjonalne koncentrują się na interfejsie, a niefunkcjonalne na backendzie aplikacji
Twierdzenie, że testy funkcjonalne sprawdzają wydajność aplikacji, a niefunkcjonalne poprawność kodu, jest błędne – testy funkcjonalne dotyczą zgodności aplikacji z wymaganiami, natomiast wydajność jest domeną testów niefunkcjonalnych. Testy funkcjonalne nie są przeprowadzane wyłącznie przez użytkowników końcowych – najczęściej są realizowane przez zespoły QA i testerów manualnych lub automatycznych. Podział testów na interfejsowe i backendowe nie jest synonimem podziału na testy funkcjonalne i niefunkcjonalne – oba typy mogą dotyczyć zarówno interfejsu, jak i zaplecza aplikacji.

Pytanie 31

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

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

Pytanie 32

Wartość liczby 1AF, zapisana w systemie szesnastkowym, po przeliczeniu na system dziesiętny wynosi

A. 257
B. 6890
C. 26
D. 431
Słuchaj, liczba szesnastkowa 1AF to w systemie dziesiętnym 431. Przeliczenie robimy tak: (1 * 16^2) + (10 * 16^1) + (15 * 16^0). To jest jedna z podstawowych rzeczy, które musisz znać przy konwersji liczb. Szczególnie przydaje się to w programowaniu i ogólnie w informatyce, gdzie często mamy do czynienia z różnymi systemami liczbowymi.

Pytanie 33

Jakie są różnice między konstruktorem a zwykłą metodą w klasie?

A. Konstruktor zawsze nosi tę samą nazwę co klasa i nie zwraca wartości
B. Konstruktor powinien zwracać jakąś wartość
C. Konstruktor jest uruchamiany jedynie przez destruktor
D. Konstruktor można wywołać bez konieczności tworzenia obiektu
Konstruktor różni się od zwykłych metod klasy tym, że nosi taką samą nazwę jak klasa i nie zwraca żadnej wartości, nawet `void`. Konstruktor jest wywoływany automatycznie podczas tworzenia obiektu i nie można go wywołać ręcznie jak zwykłą metodę. Jego zadaniem jest inicjalizacja pól obiektu i przygotowanie go do działania. Przykład w C++: `class Samochod { public: Samochod() { marka = "Ford"; } }`. W przeciwieństwie do innych metod konstruktor nie wymaga deklaracji typu zwracanego, co jest jedną z jego najbardziej charakterystycznych cech.

Pytanie 34

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

A. Method
B. Undefined
C. Number
D. Object
Wybór odpowiedzi związanej z 'Method' jako typem wartości zwracanej przez funkcję w JavaScript może wynikać z nieporozumienia dotyczącego różnicy pomiędzy funkcją a metodą. Warto wiedzieć, że w JavaScript funkcje są obiektami pierwszej klasy, co oznacza, że mogą być przypisywane do zmiennych, przekazywane jako argumenty oraz zwracane z innych funkcji. Wśród typów wartości, które mogą być zwracane przez funkcje, znajdują się obiekty, liczby, stringi oraz typ undefined, co jest wynikiem zachowań typowych dla tego języka. Kiedy funkcja nie zwraca żadnej wartości, domyślnie zwraca undefined. Typowe błędy myślowe pojawiają się, gdy programiści mylą koncepcje funkcji i metod lub mylą pojęcia typów danych. Często mogą założyć, że metoda jest równoważna typowi zwracanemu, co nie jest zgodne z definicjami w programowaniu obiektowym. Obiekt w JavaScript może mieć wiele metod, które są funkcjami, ale to nie czyni metody typem zwracanym. Przykładem tego może być zdefiniowanie obiektu z wieloma funkcjami, które działają na jego danych. To jasno pokazuje, że metody są połączeniem funkcji z obiektami, a nie typami wartości. Ważne jest, aby podczas nauki języka JavaScript skupić się na zrozumieniu struktury języka oraz jego zasad, co pomoże unikać zamieszania związanych z terminologią oraz zastosowaniem tych koncepcji w praktyce.

Pytanie 35

Który z paradygmatów programowania najbardziej akcentuje dziedziczenie oraz polimorfizm?

A. Programowanie obiektowe
B. Programowanie strukturalne
C. Programowanie funkcyjne
D. Programowanie proceduralne
Programowanie obiektowe (OOP) to paradygmat, który kładzie największy nacisk na dziedziczenie i polimorfizm. Dziedziczenie pozwala na tworzenie nowych klas na podstawie już istniejących, co umożliwia ponowne wykorzystanie kodu i jego rozszerzanie. Polimorfizm umożliwia definiowanie metod o tej samej nazwie, ale z różnym zachowaniem w zależności od kontekstu lub obiektu, co zwiększa elastyczność i modularność kodu. Programowanie obiektowe jest szeroko stosowane w językach takich jak Java, C++, Python czy C#, ponieważ pozwala na budowanie skalowalnych i łatwych w utrzymaniu aplikacji.

Pytanie 36

Metodyka zwinna (ang. agile) opiera się na

A. zaplanowaniu całej aplikacji na początku projektu i jej tworzeniu na przemian z testowaniem
B. przygotowaniu testów dla całego projektu, a następnie wprowadzaniu kolejnych jego fragmentów
C. dekompozycji przedsięwzięcia na elementy, które są niezależnie projektowane, wytwarzane i testowane w krótkich iteracjach
D. podzieleniu projektu na kolejne etapy: planowanie, programowanie, testowanie, z ciągłym oszacowaniem ryzyka projektu
Podejście kaskadowe (waterfall) zakłada podział projektu na kolejne etapy (projekt, programowanie, testy), ale nie dopuszcza powrotu do wcześniejszych faz, co czyni je mniej elastycznym niż agile. Projektowanie całej aplikacji na początku jest charakterystyczne dla tradycyjnych metodyk, takich jak V-model, ale nie odzwierciedla idei iteracyjnego rozwoju stosowanego w agile. Implementowanie testów po zakończeniu całości projektu ogranicza możliwość szybkiego reagowania na błędy i jest sprzeczne z filozofią agile, gdzie testy są integralną częścią każdego etapu iteracji.

Pytanie 37

Co to jest SPA (Single Page Application)?

A. Format pliku używany w aplikacjach do przetwarzania danych
B. Metoda projektowania interfejsu użytkownika dla aplikacji mobilnych
C. Technika optymalizacji kodu w aplikacjach JavaScript
D. Aplikacja webowa działająca na jednej stronie, dynamicznie aktualizująca treść bez przeładowywania całej strony
Wiele osób myli pojęcie Single Page Application z innymi pojęciami związanymi z tworzeniem oprogramowania, co prowadzi do nieporozumień. Odpowiedzi sugerujące, że SPA to metoda projektowania interfejsu użytkownika dla aplikacji mobilnych, odnoszą się do aspektów, które nie są bezpośrednio związane z architekturą SPA. Podczas gdy projektowanie interfejsu mobilnego jest istotnym elementem w tworzeniu aplikacji, nie definiuje ono, czym jest SPA. Z kolei odpowiedzi mówiące o formacie pliku używanego do przetwarzania danych lub technikach optymalizacji kodu w JavaScript również nie mają związku z ideą SPA. SPA jest przede wszystkim koncepcją architektoniczną aplikacji, a nie konkretnym formatem czy techniką. W praktyce SPA ma na celu poprawienie doświadczenia użytkownika przez eliminację przeładowania strony, co z kolei prowadzi do zwiększenia wydajności aplikacji i lepszej interakcji. Wiele aplikacji internetowych przechodzi obecnie na model SPA, aby sprostać oczekiwaniom użytkowników, którzy oczekują szybkich, responsywnych rozwiązań. Warto zwracać uwagę na różnice między różnymi podejściami do tworzenia aplikacji, aby uniknąć mylnych interpretacji i poprawnie wdrażać nowoczesne technologie w praktyce.

Pytanie 38

Zaproponowany fragment kodu w języku Java wypełnia tablicę elementami:

int[] tablica = new int [10];
int j = 2;

for (int i = 0; i < 10; i++) {
    tablica[i] = j;
    j += 2;
}
A. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
B. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
C. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
D. 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
Patrząc na kod, można zauważyć, że kluczowe są tu dwie rzeczy: zmienna j zainicjowana jako 2 i to, że za każdym razem w pętli do tablicy trafia właśnie jej aktualna wartość, po czym zwiększa się o 2. Jeśli ktoś wskazał, że tablica będzie zawierać liczby od 0 do 9 lub od 1 do 10, to pewnie zasugerował się klasycznym przykładem wypełniania tablicy kolejnymi indeksami lub wartościami początkowymi. To bardzo częsty błąd, bo wielu początkujących automatycznie myśli, że for (int i = 0; i < n; i++) oznacza, że do tablicy wpisujemy po prostu wartość i albo i+1. Jednak tutaj w ogóle nie używamy zmiennej i do ustalania wartości – ona służy tylko jako indeks do tablicy, a wartość nadpisuje j, która rośnie szybciej i zaczyna się od zupełnie innego miejsca niż zero. Często spotykam się z tym, że ktoś wpisuje do tablicy w kółko tę samą wartość, bo zapomina o inkrementacji, ale w tym kodzie j jest wyraźnie zwiększana – dlatego odpowiedzi z samymi dwójkami też nie pasują. Warto zapamiętać, że kod tego typu można łatwo adaptować do różnych postępów liczbowych, a kluczowe jest rozróżnienie roli zmiennej indeksującej (i) oraz zmiennej, która decyduje o faktycznej wartości wstawianej do tablicy (j). To właśnie takie niuanse odróżniają proste wypełnienie tablicy od tworzenia sekwencji matematycznych – i często decydują o poprawności algorytmu. Z mojego punktu widzenia dobrym nawykiem jest zawsze, nawet na kartce, rozpisać sobie wartości poszczególnych zmiennych w każdej iteracji. Pozwala to uniknąć błędów logicznych i lepiej zrozumieć, co rzeczywiście ląduje w strukturze danych, którą przygotowujemy.

Pytanie 39

W dwóch przypadkach opisano mechanizm znany jako Binding. Jego celem jest

W Android Studio:
<TextView android:text="@{viewmodel.userName}" />
W XAML:
<Label Text="{Binding Source={x:Reference slider2}, Path=Value}" />
A. wiązanie oraz eksportowanie plików z różnych modułów aplikacji
B. zarządzanie mechanizmem obietnic (promises) lub obserwatora (observable) w programowaniu asynchronicznym
C. przetwarzanie zdarzeń kontrolek interfejsu użytkownika przez wywoływanie odpowiednich funkcji
D. wiązać właściwości (property) elementu interfejsu użytkownika z danymi lub właściwością innego obiektu
Bardzo często można natknąć się na nieporozumienia dotyczące roli mechanizmu binding w nowoczesnych aplikacjach. Wiele osób błędnie utożsamia binding z obsługą zdarzeń, czyli na przykład automatycznym wywoływaniem funkcji po kliknięciu przycisku czy zmianie wartości na jakimś polu. Owszem, w interfejsach użytkownika obsługa zdarzeń jest istotna, ale binding to zupełnie inny poziom – on „przyczepia” dane (np. wartość liczbową, tekst, stan checkboxa) do właściwości elementów UI, tak by zmiana w jednym miejscu od razu aktualizowała drugie. Drugim typowym błędem jest mylenie bindingu z mechanizmami programowania asynchronicznego, jak promises czy observable – to trochę inna bajka. Promisy służą do obsługi operacji asynchronicznych, np. pobierania danych z sieci, a obserwatory pozwalają reagować na strumienie zdarzeń, jednak sam binding nie jest tym samym i nie odpowiada bezpośrednio za asynchroniczne zarządzanie danymi. Kolejnym nieporozumieniem bywa traktowanie bindingu jako coś związanego z eksportowaniem plików czy ogólnie zarządzaniem modułami aplikacji – to już w ogóle inny obszar, bardziej związany z organizacją środowiska, budowaniem aplikacji czy strukturą projektów. Z mojego doświadczenia wynika, że takie pomieszanie pojęć wynika głównie z powierzchownego poznania frameworków i chęci uproszczenia sobie obrazu działania aplikacji. Binding to fundament nowoczesnych interfejsów, ale nie zastępuje ani obsługi zdarzeń, ani nie jest narzędziem do zarządzania plikami czy asynchronicznością. On po prostu pozwala utrzymać spójność pomiędzy warstwą logiki a widokiem, co w praktyce czyni kod mniej podatnym na błędy i bardziej „żywym”, reagującym na zmiany.

Pytanie 40

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. Metoda kompresji obrazów przed wysłaniem na serwer
C. Format przechowywania obrazów w pamięci podręcznej przeglądarki
D. Protokół transferu obrazów między serwerem a przeglądarką
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.