Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik informatyk
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 17 marca 2026 23:45
  • Data zakończenia: 18 marca 2026 00:03

Egzamin zdany!

Wynik: 22/40 punktów (55,0%)

Wymagane minimum: 20 punktów (50%)

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

Definicja obiektu została zapisana w języku JavaScript jako var osoba={imie:"Anna", nazwisko:"Kowalska", rok_urodzenia:1985}; Jak można odwołać się do właściwości nazwisko?

A. osoba.nazwisko
B. osoba[1]
C. osoba::nazwisko
D. osoba[2]
Wszystkie inne odpowiedzi są niepoprawne z różnych powodów technicznych. Pierwsza z nich, osoba[1], opiera się na indeksowaniu tablicy, co jest błędne w kontekście obiektów. W JavaScript obiekty nie mają indeksów; zamiast tego są zorganizowane w pary klucz-wartość, gdzie klucze są nazwami właściwości. Próba uzyskania dostępu do właściwości przez indeksowanie zwróci undefined, ponieważ obiekt nie ma takiego klucza. Kolejna niepoprawna odpowiedź, osoba[2], jest analogicznie błędna, ponieważ odnosi się do drugiego elementu, co również nie ma zastosowania w obiektach. Obiekty w JavaScript nie są tablicami i nie można do nich odwoływać się w sposób, który sugeruje, że mają one numerowane właściwości. Ostatnia odpowiedź, osoba::nazwisko, jest syntaktycznie niepoprawna w JavaScript. Notacja z podwójnymi dwukropkami nie jest stosowana w języku, a niepoprawne użycie operatorów prowadzi do błędów wykonania. W JavaScript poprawny jest tylko dostęp przez notację kropkową lub nawiasową, ponieważ język nie wspiera takiej składni. Te pomyłki mogą wynikać z nieporozumienia w zakresie struktur danych w JavaScript oraz ich właściwego dostępu.

Pytanie 2

Co oznacza jednostka ppi (pixels per inch)?

A. określa rozdzielczość obrazów wektorowych
B. określa rozdzielczości obrazów generowanych przez drukarki i plotery
C. określa rozdzielczość obrazów rastrowych
D. jest parametrem określającym rozdzielczość cyfrowych urządzeń wykonujących pomiary
Pojęcie ppi często miesza się z innymi jednostkami opisującymi jakość obrazu, dlatego łatwo o złe skojarzenia. Pixels per inch to parametr ściśle związany z grafiką rastrową, czyli taką, która składa się z siatki pikseli. W plikach rastrowych ppi określa gęstość tych pikseli na cal i wprost wpływa na postrzeganą ostrość oraz szczegółowość obrazu przy danym fizycznym rozmiarze. Jeśli ktoś łączy ppi głównie z drukarkami czy ploterami, to zahacza o sąsiednie pojęcie, ale nie to samo. Urządzenia drukujące opisuje się standardowo jednostką dpi (dots per inch), czyli ilością fizycznych punktów atramentu lub tonera nanoszonych na papier. Owszem, w praktyce pracy z drukiem trzeba brać pod uwagę zarówno ppi pliku rastrowego, jak i dpi drukarki, jednak są to dwa różne poziomy: ppi to właściwość obrazu, dpi to właściwość sprzętu. Z kolei traktowanie ppi jako parametru dowolnych cyfrowych urządzeń pomiarowych też jest mylące, bo w metrologii używa się zupełnie innych jednostek i opisów rozdzielczości, związanych raczej z precyzją przetworników A/C, zakresem czy błędem pomiaru. Ppi nie ma nic wspólnego z grafiką wektorową, ponieważ wektor opisuje kształty matematycznie (linie, krzywe, wypełnienia) i może być skalowany bez utraty jakości, bez przypisanego na stałe rastera pikseli. Dopiero w momencie rasteryzacji wektora do postaci bitmapy pojawia się znaczenie ppi. Typowy błąd myślowy polega na wrzuceniu do jednego worka wszystkich „rozdzielczości”: ekranu, drukarki, obrazu, wektora, sensora. W praktyce dobrze jest rozróżniać: ppi dla gęstości pikseli w obrazie rastrowym i na ekranie, dpi dla fizycznych punktów druku, a dla wektora raczej pojęcia takie jak rozmiar dokumentu w jednostkach fizycznych i ewentualna docelowa rozdzielczość eksportu do bitmapy.

Pytanie 3

Tablica tab[] jest wypełniona losowymi liczbami całkowitymi. Jaka będzie wartość zmiennej zm2 po wykonaniu poniższego fragmentu kodu?

int tab[10];
int zm1 = 0;
double zm2 = 0;

for (int i=0; i < 10; i++)
{
    zm1 = zm1 + tab[i];
}
zm2 = zm1 / 10;
A. Suma elementów z tablicy
B. Średnia arytmetyczna liczb z tablicy
C. Średnia geometryczna liczb od 0 do 9
D. Suma liczb od 1 do 10
W tym kodzie jest trochę do zrozumienia, zwłaszcza w kontekście pętli for i operacji matematycznych. Mylisz się, myśląc, że zm2 to średnia geometryczna liczb od 0 do 9, bo w tym kodzie nie ma ani mnożenia, ani pierwiastkowania, które są konieczne do obliczenia średniej geometrycznej. Zmienna zm2 odnosi się do liczb w tablicy tab[], a nie do tych od 0 do 9. Ponadto, twierdzenie, że zm2 to suma liczb od 1 do 10, jest błędne, bo kod nie operuje na takich liczbach. Sumowanie dotyczy tylko wartości w tablicy. Mylna jest też informacja, że zm2 to suma z tablicy – to zm1 przechowuje tę sumę, a zm2 to średnia po podzieleniu przez 10. Błędy takie mogą wynikać z braku zrozumienia działania pętli i operacji matematyk. Ważne, żeby zawsze śledzić, co się dzieje z danymi w kodzie i jakie operacje są wykonywane, bo to klucz do rozwiązywania problemów w programowaniu. Warto dokładnie zrozumieć strukturę kodu i rolę zmiennych, aby unikać błędów logicznych.

Pytanie 4

W przedstawionym kodzie JavaScript występuje błąd logiczny. Program, zamiast informować, czy liczby są równe, nie działa prawidłowo. Wskaż, która odpowiedź dotyczy tego błędu.

var x = 5;
var y = 3;
if (x = y)
  document.getElementById("demo").innerHTML = "zmienne są równe";
else
  document.getElementById("demo").innerHTML = "zmienne się różnią";
A. Przed instrukcją else nie powinno być średnika
B. Zmienne zostały błędnie zadeklarowane
C. W instrukcji if znajduje się przypisanie zamiast operacji porównania
D. Polecenia w sekcjach if i else powinny zostać zamienione miejscami
W tym przypadku mamy do czynienia z częstym błędem w programowaniu, gdzie zamiast porównania użyto operatora przypisania. W języku JavaScript operator przypisania '=' służy do przypisywania wartości do zmiennej, natomiast do porównania dwóch wartości używa się operatora '==' dla równości lub '===' dla równości i sprawdzania typu. Użycie '=' w warunku if powoduje przypisanie wartości y do x, co zawsze zwróci true, jeśli y jest różne od zera. To prowadzi do nieoczekiwanych rezultatów w logice programu. Poprawnym zapisem w tym kontekście jest if (x == y). Warto pamiętać o dobrych praktykach, które zalecają używanie '===' zamiast '==' dla uzyskania lepszej precyzji i uniknięcia błędów spowodowanych niejawnych konwersji typów. To podejście minimalizuje ryzyko błędów logicznych i poprawia czytelność kodu. Regularne stosowanie takich dobrych praktyk zwiększa jakość kodu i ułatwia jego późniejszą konserwację oraz rozwój.

Pytanie 5

Przypisanie w JavaScript, zapisane jako var x=true;, prowadzi do tego, że zmienna x przyjmuje typ

A. logicznym
B. liczbowym
C. ciągu znaków
D. wyliczeniowym
Deklaracja zmiennej w języku JavaScript, przy użyciu słowa kluczowego 'var', tworzy zmienną x, której typ jest logiczny. Typ logiczny (boolean) w JavaScript ma dwa możliwe wartości: true oraz false. Jest to podstawowy typ danych, który jest szeroko używany w programowaniu do reprezentacji wartości prawda/fałsz, co jest niezbędne przy podejmowaniu decyzji, takich jak warunki w instrukcjach if, pętlach czy operacjach logicznych. Dlatego też, przypisanie wartości true do zmiennej x oznacza, że x jest typu boolean, co można zweryfikować za pomocą operatora typeof. W praktycznych zastosowaniach, typ logiczny jest niezwykle ważny, na przykład w formularzach internetowych, gdzie wartości typu boolean mogą określać, czy dany warunek został spełniony. W odniesieniu do standardów, typ boolean jest zdefiniowany w ECMAScript, co czyni go fundamentalnym elementem w programowaniu w tym języku. Zrozumienie typów danych, a szczególnie typu logicznego, jest kluczowe dla efektywnego programowania i optymalizacji kodu.

Pytanie 6

Zademonstrowano fragment kodu JavaScript. Po jego uruchomieniu zmienna str2 otrzyma wartość. ```var str1 = "JavaScript"; var str2 = str1.substring(2, 6);```

A. avaScr
B. avaS
C. vaSc
D. vaScri
Pierwsza z niepoprawnych odpowiedzi 'avaS' sugeruje, że odczytujemy znaki zaczynając od drugiego indeksu, jednak końcowy indeks 6 zmienia sposób odczytu. Możliwe, że ktoś mógł pomylić kolejność lub sposób, w jaki substring działa, co jest częstym błędem w zrozumieniu tej metody. Druga odpowiedź 'vaScri' wydaje się sugerować, że ktoś zrozumiał, jak działa substring, ale błędnie wyznaczył końcowy indeks, co prowadzi do wyodrębnienia znacznie większej ilości znaków. W rzeczywistości, aby uzyskać 'vaScri', należałoby użyć indeksów 2 i 8, co również jest nieprawidłowe. Ostatnia niepoprawna odpowiedź 'avaScr' wskazuje na błędne wyznaczenie pierwszego znaku. Użytkownik mógł pomylić interpretację indeksu zaczynając od 0, co w JavaScript jest istotne. W kontekście całego łańcucha, odpowiedzi te pokazują, jak ważne jest zrozumienie indeksowania i prawidłowego użycia metod do manipulacji tekstem, aby unikać błędów w kodzie. Rozwój umiejętności w pracy z łańcuchami tekstowymi jest kluczowy dla efektywnego programowania w JavaScript.

Pytanie 7

Jakie wyrażenie logiczne powinno zostać użyte w języku JavaScript, aby przeprowadzić operacje wyłącznie na dowolnych liczbach ujemnych z zakresu jednostronnie domkniętego <-200, -100)?

A. (liczba <= -200) || (liczba > -100)
B. (liczba <= -200) && (liczba < -100)
C. (liczba >= -200) && (liczba < -100)
D. (liczba >= -200) || (liczba > -100)
Wybór innego wyrażenia logicznego niż (liczba >= -200) && (liczba < -100) prowadzi do nieprawidłowego zakresu liczb, który nie odpowiada zdefiniowanym wymaganiom. Na przykład, użycie (liczba <= -200) && (liczba < -100) ogranicza zakres do wartości mniejszych lub równych -200 oraz mniejszych niż -100, co nie łapie wartości -200 jako dolnej granicy i odrzuca wszystkie liczby między -200 a -100. Podobnie, (liczba >= -200) || (liczba > -100) sprawdza, czy liczba jest większa lub równa -200, co obejmuje wszystkie liczby ujemne, a to nie jest zgodne z oczekiwanym przedziałem. Z kolei (liczba <= -200) || (liczba > -100) również nie pasuje do wymogów, ponieważ akceptuje liczby mniejsze niż -200 oraz te większe niż -100, co znów nie pokrywa się z ustalonym zakresem. Typowe błędy w myśleniu mogą wynikać z nieprecyzyjnego zrozumienia operatorów logicznych oraz sposobu, w jaki dane warunki wpływają na zakres wartości. Zrozumienie działania operatorów oraz ich wpływu na logikę aplikacji jest kluczowe dla skutecznego programowania, a ich niewłaściwe zastosowanie prowadzi do błędów, które mogą być trudne do zdiagnozowania. Ważne jest, aby przy definiowaniu warunków, zwracać szczególną uwagę na znaki porównania i ich dobór do oczekiwanego rezultatu.

Pytanie 8

Co zazwyczaj wchodzi w skład Framework'a?

A. wbudowany serwer i obsługa formularzy
B. certyfikat http oraz mechanizm przetwarzania i uruchamiania akcji
C. obsługa błędów i domena
D. zarządzanie komunikacją z bazą danych, mechanizm uruchamiania i przetwarzania akcji
Frameworki to zestawy narzędzi i bibliotek, które ułatwiają rozwój aplikacji webowych, a ich najważniejsze elementy to zarządzanie komunikacją z bazą danych oraz mechanizm uruchamiania i przetwarzania akcji. Zarządzanie komunikacją z bazą danych odnosi się do sposobu, w jaki aplikacja łączy się z systemem zarządzania bazą danych (DBMS), wykonuje zapytania oraz przetwarza wyniki. Przykładem może być użycie ORM (Object-Relational Mapping), które upraszcza interakcję z bazą, eliminując potrzebę pisania skomplikowanych zapytań SQL. Mechanizm uruchamiania i przetwarzania akcji odnosi się do sposobu, w jaki framework zarządza cyklem życia żądania. Obejmuje to odbieranie żądania od użytkownika, przetwarzanie logiki biznesowej oraz generowanie odpowiedzi. Frameworki takie jak Ruby on Rails czy Django stosują wzorzec MVC (Model-View-Controller), co pozwala na rozdzielenie logiki aplikacji od warstwy prezentacji, co zwiększa czytelność i ułatwia zarządzanie kodem. Aby w pełni zrozumieć te mechanizmy, warto zaznajomić się z dokumentacją odpowiedniego frameworka, co dostarczy informacji na temat najlepszych praktyk i standardów.

Pytanie 9

Instrukcja użytkownika aplikacji nie powinna zawierać

A. opisu instalacji programu.
B. opisu zastosowanych algorytmów.
C. wymagań sprzętowych.
D. sposobu działania poszczególnych komponentów.
Wiele osób intuicyjnie myśli, że dobra instrukcja użytkownika powinna zawierać „wszystko o programie”, łącznie z tym, jak jest on zbudowany od środka. To dość częsty błąd. Instrukcja użytkownika to dokument stricte praktyczny, nastawiony na obsługę, a nie na analizę wewnętrznej logiki systemu. Dlatego wymagania sprzętowe są tam jak najbardziej na miejscu – użytkownik musi wiedzieć, czy aplikacja w ogóle uruchomi się na jego komputerze, jakiego systemu operacyjnego potrzebuje, ile pamięci RAM czy wolnego miejsca na dysku. To podstawowy element każdej sensownej instrukcji, spotykany w oprogramowaniu komercyjnym i open source. Podobnie opis instalacji programu jest absolutnie kluczowy. Bez przejrzystej procedury instalacji, najlepiej krok po kroku, z krótkimi komentarzami, wielu użytkowników po prostu nie poradzi sobie z poprawnym uruchomieniem aplikacji. W dobrych praktykach dokumentacyjnych (np. styl Microsoft, Atlassian, Red Hat) sekcje typu „Instalacja”, „Pierwsze uruchomienie”, „Konfiguracja wstępna” to standard. Trzecia kwestia to sposób działania poszczególnych komponentów, ale z perspektywy użytkownika, nie programisty. Nie chodzi o opisy klas, modułów czy bibliotek, tylko o to, co użytkownik widzi: okna, zakładki, panele, przyciski, formularze. Instrukcja powinna tłumaczyć, do czego służą konkretne elementy interfejsu, jakie mają opcje, co się stanie po wybraniu danej funkcji. Bez takiego opisu użytkownik błądzi po omacku. Problem zaczyna się wtedy, gdy do instrukcji użytkownika próbuje się wcisnąć opis zastosowanych algorytmów. To już jest poziom dokumentacji technicznej, przeznaczony dla deweloperów. Użytkownik końcowy nie potrzebuje wiedzieć, czy dane są sortowane quicksortem, mergesor­tem, jak działa algorytm szyfrowania albo jaka jest złożoność czasowa przetwarzania. Takie informacje nie pomagają mu wykonać zadania w aplikacji, tylko wprowadzają niepotrzebny chaos. Typowy błąd myślowy polega tu na mieszaniu dwóch różnych grup odbiorców: użytkowników i programistów. Dobrą praktyką jest ich rozdzielenie i trzymanie instrukcji użytkownika na poziomie funkcji, kroków i efektów, a nie implementacji.

Pytanie 10

Efekt przedstawiony w filmie powinien być zdefiniowany w selektorze

A. tr:hover { background-color: Pink; }
B. td, th { background-color: Pink; }
C. tr { background-color: Pink; }
D. tr:active { background-color: Pink; }
Poprawny selektor to tr:hover { background-color: Pink; }, bo dokładnie opisuje sytuację pokazaną na filmie: efekt pojawia się dopiero po najechaniu kursorem na cały wiersz tabeli. Pseudo-klasa :hover w CSS służy właśnie do definiowania stylów w momencie, gdy użytkownik „najeżdża” myszką na dany element. Jeśli więc chcemy, żeby podświetlał się cały rząd tabeli, logiczne i zgodne z dobrymi praktykami jest przypięcie efektu do znacznika tr, a nie do pojedynczych komórek. W praktyce taki zapis stosuje się bardzo często w interfejsach webowych: w panelach administracyjnych, listach zamówień, tabelach z uczniami, produktami, logami systemowymi itd. Dzięki temu użytkownik łatwiej śledzi, który wiersz właśnie ogląda. To niby detal, ale z punktu widzenia UX robi sporą różnicę. Z mojego doświadczenia to jeden z tych prostych trików CSS, które od razu poprawiają „odczuwalną” jakość strony. Ważne jest też to, że :hover jest częścią standardu CSS (opisane m.in. w specyfikacji CSS Selectors Level 3/4) i działa w praktycznie wszystkich współczesnych przeglądarkach. Nie trzeba do tego żadnego JavaScriptu, żadnych skomplikowanych skryptów – czysty CSS. Dobrą praktyką jest również używanie bardziej stonowanych kolorów niż Pink w prawdziwych projektach, np. #f5f5f5 albo lekki odcień niebieskiego, tak żeby kontrast był czytelny i nie męczył wzroku. Warto też pamiętać, że podobny mechanizm możesz zastosować na innych elementach: np. a:hover dla linków, button:hover dla przycisków czy nawet div:hover dla całych kafelków w layoutach. Kluczowe jest to, żeby pseudo-klasa :hover była przypięta dokładnie do tego elementu, który ma reagować na interakcję użytkownika.

Pytanie 11

Do modyfikacji danych w bazie danych można wykorzystać

A. filtrowanie
B. raport
C. kwerendę SELECT
D. formularz
Formularz jest narzędziem, które umożliwia użytkownikom wprowadzanie i edytowanie danych w bazie danych w sposób przyjazny i intuicyjny. Przy użyciu formularzy można łatwo zdefiniować, jakie dane mają być wprowadzone, oraz w jakim formacie, co znacząco ogranicza ryzyko błędów. W praktyce, formularze są powszechnie wykorzystywane w aplikacjach webowych oraz systemach zarządzania danymi, takich jak systemy CRM czy ERP. Umożliwiają one także walidację danych przed ich zapisaniem w bazie, co jest ważnym krokiem w zapewnieniu integralności danych. Wykorzystanie formularzy w projektowaniu aplikacji jest zgodne z zasadami UX, które kładą nacisk na łatwość obsługi i wygodę użytkownika. Dodatkowo, standardy takie jak HTML5 oferują różnorodne elementy formularzy, które można łatwo integrować z backendem, co ułatwia przechwytywanie danych i ich późniejsze przetwarzanie.

Pytanie 12

Które z poniższych poleceń przyznaje użytkownikowi uczen najniższy poziom uprawnień w zakresie zmiany danych i struktury tabel?

A. GRANT SELECT ON szkola.przedmioty TO uczen;
B. GRANT ALTER, SELECT ON szkola.przedmioty TO uczen;
C. GRANT DROP ON szkola.przedmioty TO uczen;
D. GRANT INSERT, DROP ON szkola.przedmioty TO uczen;
Rozpatrując inne polecenia, które zostały zaproponowane, należy zauważyć, że każde z nich przyznaje użytkownikowi 'uczen' szerszy zakres uprawnień, co nie jest zgodne z założeniem nadawania minimalnych uprawnień. Przyznanie uprawnień DROP, jak w przypadku polecenia GRANT DROP ON szkola.przedmioty TO uczen, pozwoliłoby użytkownikowi usunąć tabelę 'przedmioty', co jest nieakceptowalne w kontekście użytkownika edukacyjnego. Takie działanie nie tylko zagrażałoby integralności bazy danych, ale również mogłoby prowadzić do utraty ważnych informacji. Podobnie, przyznanie uprawnień INSERT, jak w poleceniu GRANT INSERT, DROP ON szkola.przedmioty TO uczen, umożliwia użytkownikowi dodawanie nowych rekordów do tabeli, co w przypadku ucznia nie jest pożądane, ponieważ jego rola powinna być ograniczona do przeglądania danych. Co więcej, polecenie GRANT ALTER, SELECT ON szkola.przedmioty TO uczen zawiera uprawnienie ALTER, które pozwala na modyfikację struktury tabeli, co również nie powinno mieć miejsca w kontekście użytkownika, który jest tylko uczniem. Wszelkie te niepoprawne podejścia prowadzą do niebezpieczeństwa związane z nieautoryzowanymi zmianami w bazie danych, co jest sprzeczne z najlepszymi praktykami w zakresie zarządzania uprawnieniami i bezpieczeństwa danych. Warto pamiętać, że właściwe zarządzanie uprawnieniami nie tylko zabezpiecza dane, ale również usprawnia procesy edukacyjne, zapewniając odpowiedni dostęp do informacji w sposób kontrolowany.

Pytanie 13

Baza danych zawiera tabelę pod nazwą pracownicy, która ma pola: nazwisko, imię, pensja oraz wiek. Jak brzmi składnia zapytania, aby obliczyć średnią pensję pracowników?

A. select VAR(pensja) from nazwisko
B. select VAR(pracownicy) into pensja
C. select AVG(nazwisko) into pensja
D. select AVG(pensja) from pracownicy
Aby obliczyć średnią pensję pracowników w tabeli 'pracownicy', używamy funkcji agregującej AVG, która zwraca średnią wartość dla podanego pola. W kontekście SQL, składnia polecenia 'select AVG(pensja) from pracownicy' jest poprawna, ponieważ wskazuje, że chcemy obliczyć średnią z kolumny 'pensja' w tabeli 'pracownicy'. Funkcje agregujące, takie jak AVG, SUM, COUNT, MIN i MAX, są fundamentalne w analizie danych, ponieważ umożliwiają zestawienie wyników w sposób zrozumiały i zwięzły. Przydatność funkcji AVG można zauważyć w praktyce, gdy potrzebujemy ocenić wynagrodzenia w firmie, co może wpłynąć na decyzje dotyczące polityki płacowej. Przykładowo, w przypadku tabeli z danymi o wynagrodzeniach, takie zapytanie zwraca pojedynczą wartość – średnią pensję, co pozwala na szybkie zrozumienie sytuacji finansowej firmy. Zgodnie z standardami SQL, polecenia muszą być formułowane w sposób, który jasno określa zarówno źródło danych, jak i sposób ich agregacji, co zostało spełnione w tej odpowiedzi.

Pytanie 14

Co wchodzi w skład standardowego frameworka?

A. system uruchamiania i przetwarzania akcji oraz certyfikat http
B. zarządzanie komunikacją z bazą danych, system uruchamiania i przetwarzania akcji
C. domena oraz obsługa błędów
D. przetwarzanie formularzy oraz wbudowany serwer
Frameworki aplikacji webowych dostarczają zestawu narzędzi i standardów, które ułatwiają tworzenie oprogramowania. W kontekście tego pytania, zarządzanie komunikacją z bazą danych oraz mechanizm uruchamiania i przetwarzania akcji stanowią kluczowe komponenty każdego frameworka. Zarządzanie komunikacją z bazą danych odnosi się do sposobów, w jakie aplikacja łączy się z bazą danych, wykonuje zapytania i przetwarza wyniki. Przykładowo, w frameworkach takich jak Django czy Ruby on Rails, stosuje się ORM (Object-Relational Mapping), co ułatwia interakcję z bazą danych poprzez obiektowe podejście zamiast pisania surowych zapytań SQL. Mechanizm uruchamiania i przetwarzania akcji opisuje, jak framework interpretuje i obsługuje żądania użytkowników, co obejmuje routing, middleware i obsługę logiki biznesowej. Takie podejście jest zgodne z zasadą DRY (Don't Repeat Yourself), co zwiększa efektywność i jakość kodu w projektach programistycznych.

Pytanie 15

Warunek zapisany w języku PHP wyświetli liczbę, gdy

if ($liczba % 2 == 0)
{
    echo $liczba;
}
A. jest to liczba parzysta
B. wynik dzielenia danej liczby przez 2 jest równy 0
C. jest to liczba dodatnia
D. jest to liczba pierwsza
Analizując inne odpowiedzi należy zauważyć że dzielenie liczby przez 2 i uzyskiwanie wyniku 0 odnosi się do całkowitego ilorazu a nie reszty co jest fundamentalnym błędem w interpretacji operatora modulo. Przykładowo liczba 0 po podzieleniu przez 2 daje iloraz 0 ale to nie jest tym czego dotyczy operator % który ocenia resztę. Z kolei liczba pierwsza nie jest związana z dzieleniem przez 2 i nie musi być parzysta. Liczby pierwsze to liczby większe od 1 które dzielą się tylko przez 1 i siebie samą co wyklucza możliwość posługiwania się wyrażeniem modulo 2 do ich identyfikacji. Dodatkowo bycie liczbą dodatnią nie jest w żaden sposób związane z dzieleniem przez 2 ani z właściwościami operatora modulo. Liczby dodatnie mogą być zarówno parzyste jak i nieparzyste dlatego użycie warunku modulo w kontekście określania czy liczba jest dodatnia jest błędne. Te błędne interpretacje często wynikają z nieznajomości specyfiki działania operatorów arytmetycznych w PHP co jest kluczowe dla unikania logicznych błędów w kodzie.

Pytanie 16

Które ze znaczników HTML umożliwią wyświetlenie na stronie tekstu w jednym wierszu, jeżeli żadne formatowanie CSS nie zostało zdefiniowane?

Dobre strony mojej strony

A. <h3>Dobre strony </h3><h3 style=”letter-spacing:3px”>mojej strony</h3>
B. <div>Dobre strony </div><div style=”letter-spacing:3px”>mojej strony</div>
C. <p>Dobre strony </p><p style=”letter-spacing:3px”>mojej strony</p>
D. <span>Dobre strony </span><span style=”letter-spacing:3px”>mojej strony</span>
Niestety, Twoja odpowiedź nie była prawidłowa. Wybrałeś jedną z odpowiedzi zawierających znaczniki blokowe: <p>, <h3> lub <div>. Te znaczniki domyślnie zaczynają nowy wiersz przed i po swoim zakończeniu, co oznacza, że tekst zawarty w kolejnych takich znacznikach będzie wyświetlany w oddzielnych wierszach. To jest dobre podejście, kiedy chcemy utworzyć strukturę dokumentu z wyraźnie zdefiniowanymi sekcjami. Jednak w przypadku pytania, które polegało na wyświetlaniu tekstu w jednym wierszu bez dodatkowego formatowania CSS, odpowiedzi z użyciem tych znaczników są niepoprawne. W takim przypadku powinniśmy skorzystać z znacznika liniowego <span>, który nie wprowadza nowych linii. Ważne jest, aby dobrze rozumieć różnice między znacznikami liniowymi i blokowymi, ponieważ mają one istotne znaczenie dla struktury i wyglądu naszej strony internetowej.

Pytanie 17

Jaką maksymalną liczbę znaczników &lt;td&gt; można zastosować w tabeli składającej się z trzech kolumn i trzech wierszy, która nie zawiera złączeń między komórkami oraz wiersza nagłówkowego?

A. 9
B. 6
C. 3
D. 12
Odpowiedź 9 jest poprawna, ponieważ w tabeli składającej się z trzech kolumn i trzech wierszy, każdy wiersz może zawierać trzy komórki danych. Zatem, aby obliczyć maksymalną liczbę znaczników &lt;td&gt;, należy pomnożyć liczbę kolumn przez liczbę wierszy: 3 kolumny x 3 wiersze = 9 znaczników &lt;td&gt;. Ważne jest, aby pamiętać, że w kontekście HTML, znacznik &lt;td&gt; służy do definiowania komórek tabeli i jest używany tylko do umieszczania danych w tabeli. Przy projektowaniu tabel w HTML, dobrym rozwiązaniem jest stosowanie przejrzystej struktury oraz odpowiednich znaczników, aby poprawić czytelność i dostępność stron. Zgodnie z dobrymi praktykami, zawsze warto używać znaczników &lt;th&gt; do nagłówków kolumn, ale w tym przypadku, zgodnie z treścią pytania, zakładamy, że nie stosujemy wiersza nagłówkowego. W efekcie maksymalna liczba komórek, które można wykorzystać w takiej tabeli, wynosi 9. Przykładem zastosowania takiej tabeli może być wyświetlanie danych o produktach, gdzie każda komórka zawierać może różne informacje, takie jak nazwa produktu, cena i ilość.

Pytanie 18

Baza danych 6-letniej szkoły podstawowej zawiera tabelę szkola z polami: imie, nazwisko oraz klasa. Uczniowie z klas 1-5 przeszli do wyższej klasy. Jakie polecenie należy użyć, aby zwiększyć wartość w polu klasa o 1?

A. UPDATE nazwisko, imie SET klasa=klasa+1 WHERE klasa>1 OR klasa<5
B. SELECT nazwisko, imie FROM klasa=klasa+1 WHERE klasa>1 OR klasa <5
C. SELECT szkola FROM klasa=klasa+1 WHERE klasa >=1 AND klasa <=5
D. UPDATE szkola SET klasa=klasa+1 WHERE klasa>=1 AND klasa <=5
W analizie błędnych odpowiedzi należy zwrócić uwagę na nieprawidłowości w składni i logice zapytań. Pierwsza odpowiedź sugeruje użycie 'UPDATE nazwisko, imie SET klasa=klasa+1 WHERE klasa>1 OR klasa<5;', co jest niepoprawne, ponieważ 'UPDATE' powinno odnosić się do całej tabeli, a nie do pojedynczych pól. Ponadto warunki w klauzuli 'WHERE' są zbyt ogólne, co skutkowałoby aktualizacją uczniów, którzy nie zdali do kolejnej klasy. Druga odpowiedź zawiera poprawną strukturę, ale użycie 'SELECT szkola FROM klasa=klasa+1 WHERE klasa >=1 AND klasa <=5;' jest błędne, gdyż 'SELECT' nie jest odpowiednie do aktualizacji danych - powinno być użyte 'UPDATE'. Ostatnia propozycja również myli pojęcia, stosując 'SELECT' zamiast 'UPDATE', co skutkuje próbą odczytania danych, zamiast ich aktualizacji. Typowym błędem myślowym jest mylenie tych dwóch komend w SQL, co prowadzi do nieporozumień w zakresie manipulacji danymi. Kluczowe jest zrozumienie, że 'UPDATE' jest używane do zmiany istniejących rekordów, podczas gdy 'SELECT' służy do pobierania danych. Aby uniknąć takich błędów, ważne jest, aby zrozumieć funkcje i zastosowania różnych poleceń SQL oraz praktykować ich wykorzystanie w rzeczywistych scenariuszach.

Pytanie 19

W języku JavaScript funkcja document.getElementById(id) służy do

A. pobierania danych z pola formularza i przypisania ich do zmiennej id
B. uzyskania odniesienia do pierwszego elementu HTML o wskazanym id
C. umieszczenia tekstu 'id' na stronie WWW
D. sprawdzania poprawności formularza z identyfikatorem id
Zrozumienie funkcji document.getElementById(id) jest fundamentalne dla efektywnej pracy z DOM w JavaScript. Wiele błędnych odpowiedzi na to pytanie wynika z nieporozumień dotyczących podstawowych zasad działania tej metody. Propozycja, że metoda ta sprawdza poprawność formularza o identyfikatorze id, jest nieprawidłowa, ponieważ jej głównym celem nie jest walidacja danych, lecz lokalizacja elementu w dokumencie. Walidacja formularza zwykle realizowana jest za pomocą innych metod, takich jak event listeners, które reagują na interakcje użytkownika. Twierdzenie, że document.getElementById() pobiera dane z pola formularza i wstawia je do zmiennej id, jest także mylące, ponieważ id to atrybut, który wskazuje na element, a nie zmienną do przechowywania wartości. W rzeczywistości, jeśli chcielibyśmy uzyskać wartość pola formularza, musielibyśmy najpierw uzyskać odniesienie do tego elementu, a następnie odczytać jego wartość za pomocą np. element.value. Ostatnia nieprawidłowa koncepcja, czyli wstawienie tekstu o treści 'id' na stronie WWW, również jest błędna, gdyż metoda ta nie wstawia tekstu, a jedynie zwraca odniesienie do elementu. Wskazuje to na powszechne błędy myślowe, gdzie użytkownicy mylą funkcję szukania elementu z funkcjami manipulacji jego zawartością. Zrozumienie tych różnic jest kluczowe w nauce programowania w JavaScript.

Pytanie 20

W poniższym zapytaniu SQL, co oznacza symbol gwiazdki w jego wyniku?

SELECT * FROM mieszkancy WHERE imie = 'Anna';
A. zignorowanie warunku dotyczącego imienia
B. wyświetlenie wszystkich rekordów z tabeli mieszkancy
C. wyświetlenie wszystkich kolumn z tabeli mieszkancy
D. pokazanie pola o nazwie '*' (gwiazdka)
W zapytaniu SQL znak gwiazdki (*) nie oznacza wyświetlenia wszystkich rekordów w tabeli, lecz wskazuje, że w wyniku zapytania mamy otrzymać wszystkie kolumny. To ważne rozróżnienie, ponieważ mylenie tych pojęć prowadzi do nieporozumień dotyczących struktury wyników. Każde zapytanie z gwiazdką ograniczone jest jedynie kolumnami nie rekordami. W tym przypadku część WHERE imie = 'Anna' dodatkowo sie mplementuje ograniczenie do konkretnych rekordów co należy do odrębnej części logiki zapytania. Z kolei interpretacja gwiazdki jako pola o nazwie '*' jest błędnym założeniem ponieważ w standardzie SQL nie istnieje możliwość nadania pola o takiej nazwie poprzez użycie gwiazdki. Gdybyśmy chcieli wyświetlić pole o konkretnej nazwie musielibyśmy użyć jego dokładnej nazwy a nie gwiazdki. Interpretacja gwiazdki jako zignorowania warunku WHERE również jest niepoprawna ponieważ WHERE jest integralną częścią zapytania SQL określającą kryteria filtrowania rekordów i działa niezależnie od gwiazdki. Zrozumienie różnic między wyborem kolumn a wyborem rekordów jest kluczowe dla prawidłowego konstruowania zapytań SQL i optymalizacji ich działania w praktycznych zastosowaniach.

Pytanie 21

Jakie skutki przynosi wielokrotne uruchomienie poniższego kodu PHP?

if (!isset($_COOKIE["ciastko"]) 
 $zm = 1; 
 else 
 $zm = intval($_COOKIE["ciastko"]) + 1; 
setcookie("ciastko", $zm);
A. Przechowywanie informacji w ciasteczku tylko przy pierwszym otwarciu strony.
B. Liczenie liczby wejść na stronę.
C. Pokazanie ciasteczka z wartością zmiennej.
D. Zapisywanie wartości 1 w ciasteczku przy każdym odświeżeniu strony.
Poprawna odpowiedź to zliczanie liczby odwiedzin strony, ponieważ przedstawiony kod PHP wykorzystuje ciasteczka do przechowywania liczby wizyt. Kiedy użytkownik wchodzi na stronę, skrypt sprawdza, czy ciasteczko o nazwie 'ciastko' już istnieje. Jeśli nie, oznacza to, że jest to pierwsza wizyta użytkownika, więc zmienna '$zm' jest inicjowana na wartość 1. W przeciwnym razie, wartość ciasteczka jest odczytywana, konwertowana na liczbę całkowitą i zwiększana o jeden. Następnie nowa wartość jest zapisywana w ciasteczku. Takie podejście jest zgodne z praktykami związanymi z analizą ruchu na stronie, gdzie zliczanie odwiedzin jest kluczowe dla zrozumienia interakcji użytkowników z witryną. Może to być użyteczne w kontekście analizy statystyk odwiedzin, co jest istotne dla marketerów i administratorów stron internetowych. Ponadto, umiejętność zarządzania ciasteczkami jest niezbędna w kontekście bezpieczeństwa i prywatności użytkowników, co powinno być brane pod uwagę przy implementacji takich rozwiązań.

Pytanie 22

Która z podanych funkcji napisanych w PHP oblicza sumę połowy a oraz połowy b?

A. function licz($a, $b) { return $a/2 + $b; }
B. function licz($a, $b) { return 2/$a + 2/$b; }
C. function licz($a, $b) { return ($a/2 + $b)/2; }
D. function licz($a, $b) { return $a/2 + $b/2; }
Funkcja 'function licz($a, $b) { return $a/2 + $b/2; }' jest naprawdę w porządku. Dokładnie wykonuje to, co pytanie wymaga: sumuje połowy zmiennych a i b. W PHP dzielenie robimy przez operator '/', a tu obie liczby są dzielone przez 2, więc dostajemy ich połówki. Potem te połówki dodajemy, co się zgadza z tym, o co chodzi w zadaniu. Na przykład, jak a = 6 i b = 4, to funkcja zwraca (6/2) + (4/2) = 3 + 2 = 5. Takie podejście jest super, bo kod jest czytelny i prosty. W ekipach programistycznych, gdzie różni ludzie mogą pracować nad tym samym kodem, to ma duże znaczenie. Nazwa 'licz' też jest całkiem zrozumiała i dobrze pasuje do tego, co ta funkcja robi, więc później można łatwo z niej korzystać czy zmieniać ją, jak będzie potrzeba.

Pytanie 23

Jak nazywa się proces, w trakcie którego identyfikuje się oraz eliminuje błędy w kodzie źródłowym aplikacji?

A. Kompilacja
B. Debugowanie
C. Normalizacja
D. standaryzacja
Debugowanie to proces, który polega na identyfikacji, analizie i usuwaniu błędów w kodzie źródłowym programów. Jest to kluczowy etap w cyklu życia oprogramowania, który zapewnia, że aplikacje działają zgodnie z zamierzonymi specyfikacjami. W praktyce debugowanie może obejmować różnorodne techniki, takie jak używanie narzędzi do analizy statycznej, wykonanie testów jednostkowych oraz korzystanie z debuggerów, które pozwalają na śledzenie wykonania kodu w czasie rzeczywistym. Dobre praktyki debugowania obejmują dokumentowanie napotkanych błędów, co może ułatwić ich ponowne wystąpienie oraz szybsze ich usunięcie w przyszłości. Debugowanie nie tylko poprawia jakość kodu, ale również ułatwia rozwój i utrzymanie oprogramowania, co jest zgodne z zasadami Agile i DevOps, gdzie ciągła integracja i dostarczanie są kluczowymi elementami procesu. W ten sposób debugowanie stanowi integralną część programowania, która wpływa na wydajność i stabilność tworzonych aplikacji.

Pytanie 24

Instrukcja JavaScript: document.write5==='5'); co zostanie wyświetlone?

A. false
B. true
C. 0
D. 1
Analizując inne opcje odpowiedzi, można zauważyć, że pierwsza z nich sugeruje wynik 1. W kontekście JavaScript, wynik 1 zazwyczaj odnosi się do wartości prawdy, co jest mylne w przypadku porównania 5 === '5', które nie może zwrócić takiej wartości. Kolejna opcja wskazuje na 0, co w JavaScript również jest interpretowane jako fałsz, ale nie jest zgodne z logiką porównania typów, gdzie wynik jest jednoznacznie 'false', a nie liczbowy. Trzecia opcja, 'true', jest szczególnie myląca, ponieważ może sugerować, że porównanie zakończyło się sukcesem, co jest sprzeczne z zasadą porównania typów: 5 jako liczba i '5' jako string nie mogą być uznawane za identyczne przy użyciu operatora '===' w JavaScript. Warto pamiętać, że JavaScript jest językiem z dynamicznym typowaniem, co oznacza, że typy danych mogą być zmieniane, ale operator '===' wymaga, aby obie strony porównania były tego samego typu. Dlatego każda z tych niepoprawnych odpowiedzi błędnie interpretuje zasady operatorów w JavaScript, prowadząc do nieprawidłowych wniosków.

Pytanie 25

Tabela Pracownicy zawiera informacje o zatrudnionych w różnych działach, co jest określone przez pole liczbowe dzial. Z uwagi na to, że zazwyczaj wykonuje się kwerendy jedynie dla działu równego 2, można uprościć zapytania do tej tabeli, tworząc wirtualną tabelę o nazwie Prac_dzial2 przy użyciu zapytania

A. VIEW Prac_dzial2 SELECT FROM Pracownicy WHERE dzial=2
B. VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2
C. CREATE VIEW Prac_dzial2 AS SELECT * FROM Pracownicy WHERE dzial=2
D. CREATE VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2
Odpowiedź 'CREATE VIEW Prac_dzial2 AS SELECT * FROM Pracownicy WHERE dzial=2;' jest poprawna, ponieważ syntaktycznie i semantycznie odnosi się do standardów SQL używanych do tworzenia widoków. Komenda 'CREATE VIEW' służy do zdefiniowania wirtualnej tabeli, która agreguje dane według określonych kryteriów. W tym przypadku, widok 'Prac_dzial2' wyciąga wszystkie rekordy z tabeli 'Pracownicy', które spełniają warunek, że wartość pola 'dzial' wynosi 2. Używanie widoków jest praktyką zalecaną, ponieważ pozwala na uproszczenie złożonych zapytań oraz zabezpiecza przed niepożądanym dostępem do danych. Dzięki temu, użytkownicy mogą łatwiej filtrować dane, co zwiększa wydajność zapytań i poprawia organizację kodu. Widoki są także korzystne w kontekście zarządzania danymi, ponieważ mogą być zaktualizowane, a ich struktura może być zmieniana w zależności od potrzeb użytkownika, co czyni je elastycznym narzędziem w bazach danych.

Pytanie 26

W bazie danych znajdują się dwie tabele, które są ze sobą połączone relacją 1..n. Jakiej klauzuli SQL należy użyć, aby uzyskać odpowiadające sobie dane z obu tabel?

A. INNER LINK
B. OUTER LINK
C. AND
D. JOIN
Klauzula JOIN w SQL służy do łączenia tabel w bazie danych, pozwalając na pobranie powiązanych danych z różnych tabel. W przypadku relacji 1..n, przy której jedna tabela (nazwa tabeli `A`) może mieć wiele powiązanych rekordów w drugiej tabeli (nazwa tabeli `B`), klauzula JOIN jest idealna do uzyskania korespondujących wartości z obu tabel. Przykład zastosowania to: SELECT A.*, B.* FROM A JOIN B ON A.id = B.a_id; W powyższym zapytaniu `A.id` to klucz główny tabeli `A`, a `B.a_id` to klucz obcy w tabeli `B`, który odnosi się do `A`. Klauzula JOIN może przyjmować różne formy, takie jak INNER JOIN, LEFT JOIN, RIGHT JOIN, i FULL JOIN, które różnią się sposobem łączenia danych i wynikami. JOIN jest standardem SQL, co oznacza, że jest wspierany przez większość systemów zarządzania bazami danych, takich jak MySQL, PostgreSQL, Oracle, czy Microsoft SQL Server. Użycie klauzuli JOIN jest kluczowe w relacyjnych bazach danych, gdzie dane są rozdzielone w różnych tabelach, ale muszą być analizowane łącznie.

Pytanie 27

Jakie znaki będą przechowywane w zmiennej $napis po uruchomieniu poniższego kodu PHP?

$napis = "Programowanie w PHP";
$napis = substr($napis, 3, 5);
A. og
B. gr
C. ogram
D. gramo
Wybrana odpowiedź jest niepoprawna, ponieważ nie uwzględnia prawidłowego działania funkcji substr w PHP. Ta funkcja wyodrębnia określoną liczbę znaków z ciągu, zaczynając od określonego indeksu. Tutaj funkcja substr wyodrębniła 5 znaków, zaczynając od czwartego znaku (indeks 3). Stąd poprawna odpowiedź to 'gramo', nie 'og', 'ogram' czy 'gr'. W przypadku odpowiedzi 'og', wydaje się, że nastąpiło błędne zrozumienie jak działa indeksowanie w PHP. Indeksy zaczynają się od zera, nie od jednego. Dlatego też czwarty znak ma indeks 3, a nie 4. W przypadku odpowiedzi 'ogram', prawdopodobnie zrozumiano, że substr wyodrębni całe słowo od indeksu 3, a nie tylko 5 znaków. Natomiast odpowiedź 'gr' sugeruje, że nie zrozumiano liczby znaków do wyodrębnienia. To jest typowy błąd, gdzie zakłada się, że funkcja substr wyodrębni tylko dwa następne znaki, a nie określoną liczbę znaków.

Pytanie 28

W języku HTML, aby uzyskać efekt podobny do tego w przykładzie, trzeba użyć konstrukcji

Ilustracja do pytania
A. <p><big>Duży tekst</p> zwykły tekst
B. <p><big>Duży tekst</big> zwykły tekst</p>
C. <p><strike>Duży tekst zwykły tekst</p>
D. <p><strike>Duży tekst</strike> zwykły tekst</p>
Odpowiedź jest prawidłowa, ponieważ w języku HTML, aby zwiększyć rozmiar czcionki dla części tekstu, można użyć znacznika <big>. Znacznik ten powoduje, że tekst wewnątrz jest wyświetlany w większym rozmiarze niż tekst otaczający. Jest to przydatne w sytuacjach, gdy chcemy wyróżnić część tekstu bez stosowania zaawansowanego stylu CSS. Chociaż <big> jest uznawany za przestarzały w nowoczesnym HTML, dla celów edukacyjnych i zgodności z starszymi dokumentami HTML wciąż może być stosowany. Praktyką zalecaną w aktualnych standardach jest używanie stylów CSS, np. poprzez przypisanie klasy lub bezpośrednie stylowanie in-line. Warto zaznaczyć, że stosowanie <big> nie jest zalecane w nowych projektach, ponieważ CSS oferuje większą elastyczność i kontrolę nad wyglądem tekstu. Niemniej jednak, znajomość takich znaczników jak <big> pomaga w zrozumieniu, jak rozwijał się HTML i jakie są różnice między starszymi a nowoczesnymi metodami formatowania tekstu.

Pytanie 29

Jakim zapisem w języku PHP można określić komentarz, który rozciąga się na wiele linii?

A. <!-- -->
B. //
C. #
D. /*  */
W języku PHP komentarz wieloliniowy definiuje się za pomocą zapisu /* */. Taki komentarz może obejmować wiele linii tekstu, co czyni go niezwykle przydatnym do opisywania fragmentów kodu, które są zbyt obszerne, by umieścić je w pojedynczej linii. Używanie komentarzy wieloliniowych pozwala programistom na dodawanie szczegółowych wyjaśnień dotyczących funkcji, algorytmów czy też sposobu działania poszczególnych sekcji kodu. Dobrą praktyką jest stosowanie takich komentarzy, aby ułatwić innym programistom zrozumienie kodu lub przypomnienie sobie samego siebie, co dany fragment robi. Przykładowo: /* Funkcja oblicza sumę dwóch liczb Parametr 1: pierwsza liczba Parametr 2: druga liczba Zwraca: suma obu liczb */ Ponadto, stosowanie komentarzy jest zgodne z zasadami programowania zorientowanego na zrozumiałość, które są kluczowe w projektach zespołowych oraz w długofalowym utrzymaniu kodu. Poprawne stosowanie komentarzy pomaga w dokumentowaniu kodu oraz w jego przyszłym rozwoju.

Pytanie 30

Definicja formularza została wykorzystana na stronie www, która przesyła dane do pliku w języku PHP. W której tablicy będą dostępne informacje z formularza?

<form action="plik.php" method="post">
A. $_GET
B. $_POST
C. $_ACTION
D. $_COOKIE
Formularze w HTML służą do przesyłania danych do serwera, a w kontekście języka PHP dane te są dostępne poprzez różne superglobalne tablice, z których najczęściej używaną przy metodzie POST jest tablica $_POST. Metoda POST, określona w atrybucie 'method' formularza, jest używana do przesyłania danych w bardziej bezpieczny sposób niż metoda GET, ponieważ nie pokazuje przesyłanych informacji w URL. Kiedy dane są wysyłane do skryptu PHP z formularza, wszystkie klucze i wartości formularza stają się dostępne jako elementy tablicy $_POST. Przykładowo, jeśli w formularzu znajduje się pole tekstowe o nazwie 'username', po wysłaniu formularza na stronie 'plik.php' można uzyskać dostęp do wartości tego pola za pomocą $_POST['username']. Ta metoda jest zalecana w przypadku przesyłania danych poufnych, takich jak hasła, ponieważ nie są one widoczne w pasku adresu przeglądarki. Dodatkowo, korzystając z $_POST, można przesyłać dane o większej objętości, co jest niemożliwe w przypadku $_GET, który ma ograniczenia długości URL.

Pytanie 31

Co oznacza w języku C++ przedstawiony fragment kodu?

struct CONTACT
{
std::string nazwisko;
std::string telefon;
int numer;
};
A. Organizację zmiennych
B. Trzy niezależne zmienne
C. Interakcję między zmiennymi lokalnymi a globalnymi
D. Typ strukturalny składający się z trzech pól
Fragment kodu, który przedstawiłeś, dotyczy struktury CONTACT w C++. W sumie fajnie, że w jednym miejscu udało się zebrać różne dane, bo struktury właśnie do tego służą. Mają one trzy pola: dwa typu std::string, czyli nazwisko i telefon, oraz jedno pole typu int, które nazywa się numer. To pole int służy do przechowywania liczb, na przykład identyfikatorów kontaktów. Struktury są super przydatne, bo pozwalają w łatwy sposób zarządzać danymi, które są ze sobą powiązane. W programowaniu obiektowym, jak w C++, to bardzo ważne, by mieć ładnie zorganizowane dane, bo to znacznie ułatwia życie przy większych projektach. Używanie struktur nie tylko poprawia czytelność kodu, ale też pozwala na łatwiejsze przekazywanie danych do funkcji. Różne konwencje, jak ta, że struktury reprezentują obiekty rzeczywiste, naprawdę mogą zwiększać modularność i elastyczność naszego kodu.

Pytanie 32

Zapis koloru w formacie #ff00e0 odpowiada zapisowi

A. rgb(f,0,e0)
B. rgb(255,0,224)
C. rgb(ff,0,e0)
D. rgb(255,0,128)
Analizując pozostałe odpowiedzi, można zauważyć kilka nieprawidłowości w ich interpretacji. Przy pierwszej odpowiedzi, zapis rgb(f,0,e0) jest błędny, ponieważ wartości w formacie RGB muszą być w przedziale od 0 do 255. 'f' jako wartość szesnastkowa odpowiada 15 w systemie dziesiętnym, co jest nieprawidłowe w kontekście całościowego zapisu koloru. Każda z trzech wartości RGB musi zawierać pełną gamę kolorów, co nie jest spełnione w tym przypadku. W drugiej odpowiedzi, rgb(ff,0,e0) również jest błędny, ponieważ zawiera nieprawidłowe dane. Chociaż 'ff' jest poprawnym zapisem szesnastkowym odpowiadającym wartości 255, to 'e0' nie zostało przeliczone na wartość dziesiętną, co skutkuje brakiem pełnej jasności koloru. Osoby zajmujące się projektowaniem powinny mieć na uwadze, że poprawne przeliczenie wartości jest kluczowe dla uzyskania zamierzonych efektów wizualnych. W trzeciej odpowiedzi, rgb(255,0,128) jest także błędne, ponieważ ta kombinacja odpowiada zupełnie innemu kolorowi, który jest mniej intensywnym odcieniem różowego. Wartości te przekładają się na kolor pomarańczowy, co nie jest zgodne z zadanym kolorem szesnastkowym #ff00e0. Przy projektowaniu graficznym, precyzyjność w definiowaniu kolorów jest niezwykle ważna, a każdy błąd w interpretacji wartości może prowadzić do niezamierzonych efektów.

Pytanie 33

Jaką czynność należy wykonać przed przystąpieniem do tworzenia kopii zapasowej danych w bazie MySQL?

A. przyznanie uprawnień do przeglądania bazy dla Administratora
B. określenie systemu kodowania znaków w bazie
C. sprawdzenie integralności bazy oraz ewentualna jej naprawa
D. weryfikacja, czy baza działa wystarczająco efektywnie
Sprawdzenie integralności bazy danych MySQL przed wykonaniem kopii bezpieczeństwa jest kluczowym krokiem, który zapewnia, że wszystkie dane są w dobrym stanie i nie występują żadne uszkodzenia. Integralność bazy danych odnosi się do spójności i poprawności danych przechowywanych w bazie. Narzędzia takie jak 'CHECK TABLE' oraz 'REPAIR TABLE' pozwalają na identyfikację i naprawę potencjalnych problemów związanych z uszkodzeniami tabel. Przykładem może być sytuacja, w której dane zostały nieprawidłowo zapisane lub usunięte, co może prowadzić do błędów w aplikacjach korzystających z bazy. W przypadku wykrycia problemów, ich naprawa przed stworzeniem kopii zapasowej jest niezbędna, aby uniknąć przenoszenia uszkodzonych danych do nowej lokalizacji. Standardy branżowe, takie jak ISO 27001, podkreślają znaczenie zarządzania integralnością danych, co stanowi fundament skutecznych strategii backupowych. Właściwie przeprowadzona diagnostyka przed wykonaniem kopii bezpieczeństwa nie tylko minimalizuje ryzyko utraty danych, ale również zwiększa efektywność procesów przywracania systemu po awarii.

Pytanie 34

W języku JavaScript przedstawiona poniżej definicja jest definicją
var imiona=["Anna", "Jakub", "Iwona", "Krzysztof"];

A. tablicy.
B. obiektu.
C. klasy.
D. kolekcji.
W języku JavaScript definicja var imiona=["Anna", "Jakub", "Iwona", "Krzysztof"]; przedstawia tablicę, która jest jednym z fundamentalnych typów danych w tym języku. Tablice są używane do przechowywania zbiorów danych w sposób uporządkowany. W tym przypadku tablica imiona przechowuje cztery stringi, każdy reprezentujący imię. Wartością dodaną tablicy jest możliwość dostępu do poszczególnych elementów za pomocą indeksów, które zaczynają się od zera. Na przykład, imiona[0] zwróci \"Anna\", a imiona[1] zwróci \"Jakub\". W praktyce tablice są niezwykle przydatne w programowaniu, ponieważ pozwalają na łatwe zarządzanie i manipulację danymi. Dobrą praktyką jest używanie tablic do przechowywania związków danych, co umożliwia ich efektywne przetwarzanie i iterację za pomocą pętli, co zwiększa czytelność i organizację kodu. Warto również zaznaczyć, że tablice w JavaScript są obiektami, co daje dodatkowe możliwości manipulacji, takie jak metody tablicowe (np. push, pop, map, filter) do operacji na zbiorach danych. Poznanie i zrozumienie tablic jest kluczowe dla każdego programisty, ponieważ są one podstawą wielu algorytmów i struktur danych."

Pytanie 35

W sklepie internetowym wykorzystuje się tabelę faktura. W trakcie generowania faktury pole dataPlatnosci nie zawsze jest uzupełnione. Aby to skorygować, pod koniec dnia należy wprowadzić bieżącą datę do wierszy, gdzie to pole jest puste. W tym celu można wykorzystać kwerendę

A. UPDATE faktury SET dataPlatnosci=CURTIME() WHERE dataPlatnosci IS NOT NULL
B. UPDATE faktury SET dataPlatnosci=CURTIME() WHERE id = 3
C. UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataplatnosci = '0000-00-00'
D. UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataPlatnosci IS NULL
Poprawna odpowiedź to 'UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataPlatnosci IS NULL;'. Ta kwerenda jest odpowiednia, ponieważ aktualizuje pole 'dataPlatnosci' w tabeli 'faktury' tylko w tych wierszach, gdzie to pole jest puste (NULL). Użycie funkcji CURDATE() pozwala na wprowadzenie aktualnej daty, co jest praktycznym rozwiązaniem dla problemu niewypełnionych dat płatności. Warto pamiętać, że korzystanie z NULL jest standardem w bazach danych, który oznacza brak wartości. Z perspektywy dobrych praktyk w zarządzaniu danymi, ważne jest, aby dbać o pełność danych, co wpływa na późniejsze analizy i generowanie raportów. Tego rodzaju kwerendy powinny być stosowane regularnie, aby zapewnić integralność i aktualność danych w systemie, co jest kluczowe w kontekście e-commerce, gdzie terminowość transakcji ma istotne znaczenie. Na przykład, w sytuacji, gdy system generuje raporty dotyczące płatności, brak daty płatności może prowadzić do nieprawidłowych wniosków.

Pytanie 36

Zamieszczone poniżej zapytanie SQL przyznaje uprawnienie SELECT:

GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost';
A. do wszystkich kolumn w tabeli hurtownia
B. do wszystkich tabel w bazie danych hurtownia
C. dla konta root na serwerze sprzedawca
D. dla konta root na serwerze localhost
Podane polecenie SQL <code>GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost';</code> jest poprawne, ponieważ przyznaje uprawnienia do wykonywania zapytań SELECT na wszystkich tabelach w bazie danych hurtownia. Operator <code>.*</code> w kontekście bazy danych oznacza, że dotyczy to wszystkich tabel znajdujących się w tej bazie. Przyznawanie uprawnień w taki sposób jest zgodne z najlepszymi praktykami zarządzania dostępem w systemach baz danych, ponieważ umożliwia kontrolowanie, którzy użytkownicy mogą uzyskiwać dostęp do danych. W praktyce, jeśli 'sprzedawca' potrzebuje przeglądać dane ze wszystkich tabel w hurtowni, to takie przyznanie uprawnień jest najbardziej efektywne. Takie podejście ułatwia zarządzanie uprawnieniami, pozwalając administratorom na nadawanie ogólnych uprawnień w ramach bazy danych, zamiast przypisywania ich dla każdej tabeli z osobna. Dobrą praktyką jest również regularne przeglądanie i aktualizowanie przydzielonych uprawnień, aby zapewnić bezpieczeństwo i zgodność z zasadami ochrony danych.

Pytanie 37

Aby przyspieszyć operacje na bazie danych należy dla pól często wyszukiwanych lub sortowanych

A. utworzyć osobną tabelę przechowującą tylko te pola.
B. dodać klucz obcy.
C. dodać więzy integralności.
D. utworzyć indeks.
W tym pytaniu chodzi o przyspieszenie operacji wyszukiwania i sortowania, czyli stricte o wydajność wykonywania zapytań SELECT. Bardzo łatwo jest tu pomylić pojęcia z projektowania relacyjnych baz danych i sięgnąć po rozwiązania, które są ważne, ale rozwiązują inne problemy niż wydajność zapytań. Klucz obcy jest mechanizmem służącym do utrzymania spójności między tabelami. Określa on, że wartość w jednej tabeli musi odpowiadać istniejącemu rekordowi w innej tabeli. To świetne narzędzie do pilnowania integralności referencyjnej, ale samo dodanie klucza obcego nie przyspiesza wyszukiwania po dowolnej kolumnie. Co prawda silniki baz danych często automatycznie tworzą indeks na kolumnie będącej kluczem głównym, a czasem również na kluczu obcym, ale sednem optymalizacji jest właśnie indeks, nie sam fakt istnienia klucza obcego. Kolejna sprawa to więzy integralności, czyli różnego rodzaju ograniczenia typu NOT NULL, UNIQUE, CHECK czy wspomniane klucze obce. One pomagają w utrzymaniu poprawności danych, zapobiegają wprowadzaniu bzdurnych rekordów, ale nie są mechanizmem projektowanym z myślą o przyspieszaniu sortowania czy filtrowania. Można powiedzieć, że dbają o jakość danych, a nie o szybkość ich wyszukiwania. Ostatnia koncepcja, czyli tworzenie osobnej tabeli zawierającej tylko często wyszukiwane pola, to typowy przykład nadmiernej normalizacji albo wręcz niewłaściwej denormalizacji. Taki zabieg zazwyczaj zwiększa złożoność systemu, utrudnia zapytania (potrzeba dodatkowych JOIN-ów) i wcale nie gwarantuje lepszej wydajności. Bez indeksów na odpowiednich kolumnach nowa tabela dalej będzie skanowana w całości. Typowy błąd myślowy polega tu na założeniu, że „mniej kolumn = szybsze zapytania”, co w praktyce nie jest prawdą, jeśli baza i tak musi przeszukać każdy wiersz. Standardowa, sprawdzona w branży metoda to dobrze zaprojektowane indeksy, a nie mnożenie tabel czy ślepe dokładanie więzów integralności w nadziei na przyspieszenie bazy.

Pytanie 38

W HTML zdefiniowano hiperłącze zawierające znak #. Co się wydarzy po kliknięciu na ten odsyłacz?

<a href="#dane"></a>
A. Otworzy się nowa karta przeglądarki o nazwie dane
B. Uruchomi się skrypt o nazwie dane
C. Strona przewinie się do elementu o id równym dane
D. Zostanie wskazany względny adres URL o nazwie dane
Pierwsza odpowiedź nie jest trafna, bo myśli, że kliknięcie w hiperłącze otworzy nową kartę w przeglądarce. Żeby tak się stało, trzeba użyć atrybutu target="_blank", ale w tym przypadku to nie ma sensu. Druga odpowiedź sugeruje, że kliknięcie wywoła jakiś skrypt, co też jest błędem. Żeby uruchomić skrypt przez <a>, musiałbyś skorzystać z JavaScriptu i użyć onclick, a w przypadku href z # to nie działa. Trzecia odpowiedź wspomina o adresie względnym, co też nie jest właściwe w kontekście znaku # w URL. Adresy względne dotyczą ścieżek związanych z aktualnym URL, a nie nawigacją wewnętrzną do elementów na stronie. To częsty błąd początkujących w tworzeniu stron. Dobrze jest zrozumieć różnice między nawigacją wewnętrzną a zewnętrzną oraz jak to wszystko działa w HTML. Poprawne użycie # jest bardzo ważne, jeśli chcesz, żeby Twój interfejs był przyjazny i dostępny dla użytkowników.

Pytanie 39

W aplikacji webowej komunikat powinien być wyświetlany jedynie wtedy, gdy użytkownik odwiedza stronę po raz pierwszy. Jakiej funkcji PHP należy użyć w tym przypadku?

A. session_destroy
B. define
C. mysqli_change_user
D. setcookie
Odpowiedzi, które nie są zgodne z funkcjonalnością opisaną w pytaniu, często opierają się na nieporozumieniach dotyczących zastosowań różnych funkcji w PHP. Funkcja define służy do definiowania stałych w aplikacji, co nie ma zastosowania w kontekście zarządzania stanem użytkownika czy komunikatami. Użycie define do wyświetlania komunikatów byłoby nieefektywne, ponieważ stałe są niezmienne w czasie działania skryptu. Z kolei session_destroy to funkcja, która kończy sesję użytkownika, co również nie jest zgodne z wymaganiami pytania. Zniszczenie sesji skutkuje utratą wszystkich danych sesyjnych, co często jest niepożądane, zwłaszcza jeśli potrzebujemy śledzić stan użytkownika. Mysqli_change_user to funkcja służąca do zmiany aktualnego użytkownika bazy danych, co jest zupełnie niezwiązane z wyświetlaniem komunikatów użytkownikom. Mylne jest przekonanie, że funkcje te mogą zastąpić mechanizm ciasteczek, ponieważ każda z nich ma swoje specyficzne zastosowanie w kontekście PHP. Właściwe zrozumienie roli ciasteczek, sesji oraz stałych jest kluczowe dla tworzenia aplikacji webowych, które są zarówno funkcjonalne, jak i przystosowane do potrzeb użytkowników.

Pytanie 40

Jakie jest zadanie funkcji PHP o nazwie mysql_select_db?

A. pobrać dane z bazy danych na podstawie zapytania
B. wyznaczyć tabelę, z której będą pobierane informacje
C. wyznaczyć bazę, z której będą pobierane informacje
D. nawiązać połączenie bazy danych z serwerem SQL
Funkcja PHP mysql_select_db() jest używana do wyboru aktywnej bazy danych w kontekście połączenia z serwerem MySQL. Jej głównym celem jest określenie, z której bazy danych będą pobierane dane podczas wykonywania zapytań SQL. Działa to w ten sposób, że po nawiązaniu połączenia z serwerem MySQL za pomocą funkcji mysql_connect(), musimy wskazać, którą bazę danych chcemy używać. Przykład użycia to: mysql_select_db('nazwa_bazy');. Jeśli baza danych o podanej nazwie istnieje, zostaje ustawiona jako aktywna i wszystkie subsequentne zapytania będą odnosiły się do tej bazy. Warto również zauważyć, że w nowszych wersjach PHP zaleca się korzystanie z rozszerzenia mysqli lub PDO, ponieważ mysql_select_db() oraz inne funkcje z rodziny mysql zostały usunięte w PHP 7. Standardy dotyczące korzystania z baz danych, takie jak SQL, wymagają, aby przed wykonaniem zapytania, zdefiniować bazę danych, co czyni mysql_select_db() kluczowym elementem zarządzania danymi.