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: 8 czerwca 2026 23:48
  • Data zakończenia: 9 czerwca 2026 00:06

Egzamin niezdany

Wynik: 17/40 punktów (42,5%)

Wymagane minimum: 20 punktów (50%)

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

Której kwerendy SQL należy użyć, aby utworzyć tabelę samochod z atrybutami marka, model, cena, gdzie marka i model są typu tekstowego, natomiast cena jest liczbą rzeczywistą typu stałoprzecinkowego?

A. CREATE TABLE samochod VALUES (marka CHAR(30), model CHAR(30), cena DOUBLE);
B. CREATE TABLE samochod (marka CHAR(30), model CHAR(30), cena DECIMAL(15,2));
C. CREATE TABLE samochod VALUES (marka CHAR(30), model CHAR(30), cena FLOAT);
D. CREATE TABLE samochod (marka INT(30), model INT(30), cena DECIMAL(2,15));
W niepoprawnych propozycjach odpowiedzi widać kilka typowych nieporozumień związanych z SQL-em i typami danych. Po pierwsze, składnia CREATE TABLE nie używa słowa VALUES do definiowania struktury tabeli. VALUES pojawia się przy wstawianiu danych (INSERT INTO ... VALUES ...), a nie przy tworzeniu tabeli. Jeśli po nazwie tabeli pojawia się VALUES, to jest to od razu czerwone światełko, że ktoś pomieszał tworzenie struktury z wstawianiem rekordów. Z mojego doświadczenia to bardzo częsty błąd u osób, które dopiero zaczynają i próbują intuicyjnie łączyć znane słowa kluczowe.
Druga sprawa to dobór typów danych. W zadaniu wyraźnie jest mowa o atrybutach tekstowych dla marka i model. Zastosowanie INT(30) oznacza typ liczbowy całkowity, a nie tekstowy. Nawet jeśli ktoś myśli, że w nawiasie wpisuje się „ilość znaków”, to w przypadku INT(30) tak to nie działa – ten nawias w MySQL ma inne znaczenie (szerokość wyświetlania), a w nowoczesnych wersjach i tak jest ignorowany. Marka samochodu typu „Audi” czy „Toyota” po prostu nie zmieści się w typie liczbowym, bo to nie jest reprezentacja tekstowa.
Trzeci istotny błąd dotyczy kolumny cena. Zadanie wymaga liczby rzeczywistej typu stałoprzecinkowego. Typy FLOAT czy DOUBLE są typami zmiennoprzecinkowymi binarnymi, które przechowują przybliżone wartości i mogą wprowadzać drobne błędy zaokrągleń. To jest nieakceptowalne przy pieniądzach, bo kwoty muszą się dokładnie zgadzać co do grosza. Dlatego stosuje się DECIMAL lub NUMERIC, gdzie jawnie podajemy precyzję i skalę, np. DECIMAL(15,2). Odwrócenie tych wartości, jak w DECIMAL(2,15), jest bez sensu w kontekście cen – oznaczałoby maksymalnie dwie cyfry łącznie i piętnaście po przecinku, co w praktyce nie ma zastosowania. Takie konstrukcje biorą się zwykle z mechanicznego wpisywania liczb bez zrozumienia, co oznacza precyzja i skala. Dobra praktyka w branży jest taka, że dla kwot pieniężnych używa się DECIMAL z 2 miejscami po przecinku, ewentualnie 3–4 w specyficznych zastosowaniach, a tekst przechowuje się w typach znakowych, nie liczbowych. Rozumienie tych zasad bardzo ułatwia późniejsze projektowanie sensownych schematów baz danych.

Pytanie 2

Jaki będzie rezultat po uruchomieniu podanego skryptu?

class Owoc {
    function __construct() {
        echo "test1";
    }
    function __destruct() {
        echo "test2";
    }
}
$gruszka = new Owoc();
A. Pojawią się oba teksty: „test1” i „test2”
B. Nie pojawi się żaden tekst
C. Pojawi się jedynie tekst „test1”
D. Pojawi się wyłącznie tekst „test2”
Wybór błędnych odpowiedzi może wynikać z tego, że nie do końca rozumiesz, jak działają konstruktory i destruktory w programowaniu obiektowym. Nie jest tak, że nie ma żadnego napisu, bo nawet jeżeli nie stworzysz obiektu, to przy końcu skryptu destruktor powinien się uruchomić i wtedy wyświetli się 'test2'. Tak że, gdy mówisz, że tylko 'test1' się pokaże, to nie bierzesz pod uwagę, co się dzieje po zakończeniu skryptu. I to, co napisałeś, że tylko 'test2' się wyświetli, też nie jest prawdą, bo konstruktor musi być wywołany, kiedy robi się obiekt. Zrozumienie tych wszystkich spraw jest naprawdę ważne, by dobrze zarządzać danymi w aplikacjach, zwłaszcza w większych projektach, gdzie jest masa obiektów i różne interakcje między nimi.

Pytanie 3

Wykonanie zapytania SQL spowoduje skasowanie rekordów:

DELETE FROM mieszkania WHERE status = 1;
A. tabel, w których wartość pola status wynosi 1, z bazy danych mieszkania
B. rekordów, w których wartość pola status jest równa 1, z tabeli mieszkania
C. tabeli mieszkania znajdującej się w bazie danych
D. elementów o nazwie status z tabeli mieszkania
Odpowiedź wskazująca na usunięcie rekordów, w których pole status jest równe 1, z tabeli mieszkania jest poprawna ponieważ w zapytaniu SQL użyto składni DELETE, która jest odpowiedzialna za usuwanie danych z określonej tabeli. W kontekście tego zapytania, po słowie 'FROM' znajduje się nazwa tabeli, czyli 'mieszkania', a warunek 'WHERE status = 1' precyzuje, które rekordy mają zostać usunięte. Przykładowo, jeśli w tabeli mieszkania znajdują się mieszkania oznaczone jako dostępne (status = 1), to po wykonaniu tego zapytania wszystkie takie mieszkania zostaną trwale usunięte z bazy danych. Ważne jest, aby przed wykonaniem zapytania DELETE rozważyć konieczność wykonania kopii zapasowej danych, aby zapobiec ich nieodwracalnej utracie. Dobrą praktyką jest również stosowanie zapytania SELECT z tym samym warunkiem, aby najpierw zweryfikować, które rekordy zostaną usunięte. Tego rodzaju podejście umożliwia lepsze zarządzanie danymi oraz redukuje ryzyko pomyłek podczas operacji na bazach danych.

Pytanie 4

Dodanie do tabeli Produkty kolumny data_produkcji zostanie wykonane kwerendą SQL

A. ALTER TABLE Produkty DROP data_produkcji DATE;
B. ALTER TABLE Produkty ADD DATE data_produkcji;
C. ALTER TABLE Produkty ADD data_produkcji DATE;
D. ALTER TABLE Produkty DROP COLUMN data_produkcji DATE;
Prawidłowa odpowiedź wykorzystuje dokładną składnię polecenia ALTER TABLE, którą stosuje się w SQL do modyfikowania struktury istniejącej tabeli. Instrukcja `ALTER TABLE Produkty ADD data_produkcji DATE;` robi dwie kluczowe rzeczy: wskazuje tabelę, którą zmieniamy (`Produkty`) oraz dodaje nową kolumnę (`data_produkcji`) z określonym typem danych (`DATE`). Taka forma jest zgodna z typową składnią w popularnych systemach bazodanowych, jak MySQL, PostgreSQL, SQL Server czy Oracle (choć drobne różnice składniowe mogą się pojawiać w innych, bardziej egzotycznych systemach).
W praktyce oznacza to, że po wykonaniu tej komendy tabela zyska nową kolumnę, w której można przechowywać datę produkcji każdego produktu. Typ `DATE` służy do przechowywania samej daty (rok, miesiąc, dzień), bez czasu. To jest dobre rozwiązanie, jeśli interesuje nas tylko kiedy produkt został wyprodukowany, a nie konkretna godzina. W wielu projektach w technikum czy w pracy zawodowej taka kolumna przydaje się np. do wyliczania terminu przydatności, raportów wiekowania towaru, filtrowania produktów po dacie produkcji, a nawet do prostych analiz, kiedy dana partia była wytwarzana.
Moim zdaniem warto od razu kojarzyć sobie taką komendę z dobrymi praktykami modelowania danych: nazwa kolumny powinna być czytelna i jednoznaczna (tutaj `data_produkcji` bardzo dobrze opisuje zawartość), typ danych powinien być możliwie najbardziej dopasowany do przechowywanej informacji (tu `DATE`, a nie np. `VARCHAR`), a zmiany struktury tabeli trzeba wykonywać świadomie, najlepiej mając kopię zapasową bazy lub przynajmniej danej tabeli. W realnych systemach produkcyjnych często dodaje się też ograniczenia, np. `NOT NULL` albo domyślną wartość, na przykład:
`ALTER TABLE Produkty ADD data_produkcji DATE NOT NULL DEFAULT CURRENT_DATE;`
W testach i nauce zaczyna się jednak od prostszej wersji, takiej jak w tym pytaniu, żeby dobrze zapamiętać podstawowy schemat: `ALTER TABLE <nazwa_tabeli> ADD <nazwa_kolumny> <typ_danych>;`.

Pytanie 5

W stylu CSS ustalono obramowanie pojedyncze, które ma następujące kolory dla krawędzi:

border: solid 1px; border-color: red blue green yellow;
A. prawa – czerwona, dolna – niebieska, lewa – zielona, górna – żółta
B. górna – czerwona, lewa – niebieska, dolna – zielona, prawa – żółta
C. górna – czerwona, prawa – niebieska, dolna – zielona, lewa – żółta
D. lewa – czerwona, dolna – niebieska, prawa – zielona, górna – żółta
Definicja obramowania za pomocą stylu CSS z użyciem właściwości border-color pozwala na określenie kolorów każdej z krawędzi elementu w kolejności zgodnej ze wskazówkami zegara. Gdy podano cztery wartości jak w border-color: red blue green yellow; oznaczają one odpowiednio kolory krawędzi górnej prawej dolnej i lewej. Właściwość border: solid 1px; definiuje typ obramowania jako solidne i jego szerokość jako 1px. Warto zaznaczyć że podanie czterech wartości kolorów w border-color jest zgodne z zasadami CSS i umożliwia konfigurowanie wyglądu elementów w sposób szczegółowy i zindywidualizowany. Projektanci stron internetowych często używają tej techniki do tworzenia graficznych stylów które zwiększają czytelność i estetykę witryny. W praktyce wiedza o manipulacji stylem obramowania w CSS jest kluczowa dla tworzenia responsywnych i wizualnie atrakcyjnych interfejsów użytkownika. Takie podejście wspiera zachowanie spójności wizualnej co jest jedną z dobrych praktyk w projektowaniu front-endu.

Pytanie 6

Poniższy fragment kodu w PHP wyświetli

$n = '[email protected]';
$dl = strlen($n);
$i = 0;
while($i < $dl && $n[$i] != '@')
{
    echo $n[$i];
    $i++;
}
A. samą nazwę domeny, czyli "host.pl"
B. cały adres e-mail, czyli "[email protected]"
C. tylko nazwę konta, czyli "adres"
D. nazwa konta z symbolem @, czyli "adres@"
Analizując poszczególne odpowiedzi, można zrozumieć, gdzie mogą tkwić typowe błędy myślowe. Pierwsza odpowiedź zakłada, że kod wypisze nazwę konta ze znakiem '@'. Jednak kod zatrzymuje się przed '@', więc ten znak nie jest wypisywany. Jest to typowy błąd wynikający z niezrozumienia warunku pętli, która przerywa iterację, gdy napotka '@'. Druga odpowiedź poprawnie wskazuje, co kod faktycznie robi, czyli wypisuje nazwę konta. Trzecia odpowiedź myli się, oczekując, że cały adres e-mail zostanie wypisany. W rzeczywistości kod nigdy nie przejdzie przez '@', więc ani domena, ani '@' nie zostaną uwzględnione w wyniku. Jest to błąd wynikający z założenia, że pętla obsłuży cały ciąg bez przerwania. Brak zrozumienia logiki warunku pętli while może prowadzić do takiego błędnego wniosku. Czwarta odpowiedź sugeruje, że kod wypisze nazwę domeny, co jest błędne, ponieważ iteracja kończy się przed '@', nie osiągając części domenowej. Takie błędy mogą wynikać z mylnego zrozumienia przepływu sterowania w kodzie lub założenia, że kod wykonuje parsowanie zupełne, co w tym przypadku jest nieprawidłowe. W praktykach programistycznych ważne jest zrozumienie iteracji i warunków, co pozwala uniknąć takich nieporozumień w analizie kodu. Podstawowe zrozumienie logicznych warunków i iteracji w językach programowania jest kluczowe do prawidłowej analizy kodu i jego przewidywanego działania.

Pytanie 7

W języku CSS wprowadzone zostało następujące formatowanie:

h1 i {color:red;}
Kolor czerwony będzie stosowany do
A. całego tekstu nagłówka pierwszego stopnia oraz całego tekstu pochylonego, niezależnie od lokalizacji na stronie
B. całego tekstu nagłówka pierwszego stopnia oraz tekstu pochylonego w akapicie
C. wyłącznie pochylonego tekstu w każdym rodzaju nagłówka
D. tylko tekstu pochylonego nagłówka pierwszego poziomu
Wszystkie odpowiedzi, które nie odpowiadają na pytanie, wynikają z niepoprawnego zrozumienia selektora CSS. Odpowiedzi, które sugerują, że kolor czerwony dotyczy całego tekstu nagłówka pierwszego stopnia, są błędne, ponieważ kolor czerwony jest przypisany jedynie do elementów 'i' znajdujących się w 'h1'. Nieprawidłowe jest także sugerowanie, że stylizacja dotyczy tekstu pochylonego we wszystkich poziomach nagłówków, ponieważ selektor odnosi się wyłącznie do 'h1', co wyklucza inne nagłówki. Dodatkowo, stwierdzenie, że styl obejmuje cały tekst nagłówka oraz wszelki tekst pochylony, nie jest zgodne z zasadami dziedziczenia stylów CSS. W rzeczywistości, selektor ogranicza się do określonego kontekstu, co oznacza, że tylko elementy 'i' w ramach 'h1' podlegają tym regułom. W związku z tym, jakiekolwiek inne elementy czy nagłówki nie są brane pod uwagę w tej regule stylizacji, co z kolei podkreśla precyzyjność i zastosowanie selektorów w CSS.

Pytanie 8

Którego znacznika użyć do sekcji cytatu (mogącej zawierać kilka akapitów, z wcięciem)?

A.
<blockquote>
B.
<q>
C.
<indent>
D.
<blockq>
Do oznaczenia dłuższego cytatu blokowego - mogącego obejmować kilka akapitów i domyślnie wyświetlanego z wcięciem - służy <blockquote>. To element blokowy. Dlatego sekcję cytatu tworzy <blockquote>.

Pytanie 9

Które źródło danych może posłużyć do utworzenia raportu?

A. zapytanie SELECT
B. projekt raportu
C. zapytanie ALTER
D. etykieta
Pozostałe odpowiedzi nie są źródłem danych. Etykieta to element wyglądu raportu (opis pola), a „projekt raportu” to jego konstrukcja, nie dane. Zapytanie ALTER zmienia STRUKTURĘ tabeli i nie zwraca danych. Dane dla raportu dostarcza SELECT.

Pytanie 10

Znacznik

<pre> </pre>
służy do prezentacji:
A. znaku przekreślenia
B. znaku wielokropka
C. treści czcionką o stałej szerokości
D. treści polską czcionką
Interpretacja znacznika <pre> jako narzędzia do wyświetlania znaku przekreślenia lub wielokropka jest błędna, ponieważ te elementy nie mają związku z funkcją, jaką pełni <pre>. W kontekście HTML, znacznik <pre> nie jest zaprojektowany do formatowania treści na podstawie stylów czcionek, takich jak 'polska czcionka', ale skupia się na zachowaniu oryginalnego formatowania tekstu. Próba zrozumienia <pre> w kontekście czcionek wyłącznie ze względu na ich wygląd prowadzi do pomyłek, ponieważ nie dotyczy to głównego celu tego znacznika. Ponadto, używanie <pre> dla treści, które nie wymagają stałej szerokości czcionki, może prowadzić do złożonych problemów w responsywności układu strony oraz trudności w dostosowaniu treści do różnych urządzeń. Znaki przekreślenia i wielokropka są raczej reprezentowane przez inne znaczniki HTML, takie jak <s> lub <span>, które są bardziej odpowiednie do stylizacji tekstu. Właściwe zrozumienie roli każdego znacznika HTML jest kluczowe dla skutecznego projektowania stron internetowych i aplikacji, co podkreśla znaczenie edukacji w zakresie web developmentu.

Pytanie 11

Dla celu strony internetowej stworzono grafikę rysunek.jpg o wymiarach: szerokość 200 px, wysokość 100 px. Aby zaprezentować tę grafikę jako miniaturę – pomniejszoną z zachowaniem proporcji, można użyć znacznika

A. <img src="/rysunek.png" style="width: 50px">
B. <img src="/rysunek.png" style="width: 25px; height:25px;">
C. <img src="/rysunek.png">
D. <img src="/rysunek.png" style="width: 25px; height:50px;">
Wybór innych opcji, takich jak <img src="/rysunek.png" style="width: 25px; height:50px;"> czy <img src="/rysunek.png" style="width: 25px; height:25px;"> prowadzi do nieproporcjonalnego wyświetlenia obrazu, co skutkuje jego zniekształceniem. Ustalenie zarówno szerokości, jak i wysokości w stylach CSS sprawia, że obrazek jest zmuszony do dopasowania się do tych wymiarów, co narusza jego naturalne proporcje. To podejście jest niezgodne z zaleceniami dotyczącymi responsywności, które sugerują, aby ograniczać się do jednego wymiaru, co pozwala drugiemu na automatyczne dostosowanie. Typowym błędem jest przyjęcie, że podanie obu wymiarów w pikselach zawsze przyniesie optymalny efekt wizualny, co jest mylące i może prowadzić do złego doświadczenia użytkownika. Zniekształcenie obrazów nie tylko obniża estetykę strony, ale także może wpływać na jej użyteczność oraz SEO. Dobrą praktyką jest również używanie atrybutów 'alt' w znacznikach obrazów, aby poprawić dostępność i SEO, co nie zostało uwzględnione w żadnej z opcji. Warto także zauważyć, że stosowanie odpowiednich formatów obrazów i ich optymalizacja pod względem rozmiaru pliku są kluczowe dla przyspieszenia ładowania strony.

Pytanie 12

Przedstawiony w ramce kod języka PHP oznacza, że zmienna $liczba2 jest:

$liczba2 = &$liczba1;
A. wskaźnikiem do $liczba1
B. iloczynem logicznym ze zmienną $liczba1
C. negacją logiczną zmiennej $liczba1
D. referencją do $liczba1
Kod $liczba2 = &$liczba1; w PHP często bywa mylony z różnymi innymi mechanizmami, bo ten sam znak & występuje także w innych kontekstach. Tutaj jednak nie mamy ani wskaźnika w sensie znanym z języka C, ani operacji logicznej. Silnik PHP traktuje taki zapis jako utworzenie referencji, czyli dwóch nazw dla tej samej wartości w pamięci. To jest dość wysokopoziomowa konstrukcja, a nie bezpośrednia manipulacja adresami.
Mylenie tego zapisu ze wskaźnikiem bierze się z analogii do C/C++, gdzie & kojarzy się z adresem. W PHP programista nie dostaje jednak do ręki adresów pamięci, nie może ich inkrementować, przesuwać ani wykonywać typowych operacji wskaźnikowych. Referencja w PHP jest bardziej mechanizmem zarządzania zmiennymi przez silnik, ukrytym pod prostą składnią. Dlatego mówienie, że $liczba2 jest wskaźnikiem do $liczba1, jest merytorycznie błędne – to inny poziom abstrakcji.
Kolejne częste nieporozumienie dotyczy logiki. Operator negacji logicznej w PHP to !, a nie &, więc zapis &$liczba1 nie może oznaczać negacji. Ampersand w kontekście logicznym w PHP w ogóle nie występuje jako samodzielny operator, więc łączenie go z pojęciem negacji jest całkowicie chybione. Podobnie w przypadku iloczynu logicznego: w PHP używa się && albo and, natomiast pojedyncze & ma inne znaczenie – w starszych wersjach języka było też używane do operacji bitowych oraz właśnie do referencji. Żaden z tych wariantów nie pasuje do odpowiedzi o iloczynie logicznym zmiennej $liczba1.
Typowy błąd myślowy polega na tym, że ktoś kojarzy sam znak & z „jakąś logiką” lub „adresami pamięci” i na tej podstawie strzela odpowiedź, zamiast odnieść się do konkretnej składni PHP. W programowaniu webowym, szczególnie w PHP, warto patrzeć na pełny kontekst: gdzie stoi &, czy jest przed nazwą zmiennej w definicji funkcji, przy przypisaniu, czy może pomiędzy wyrażeniami. Dopiero z tego wynika prawidłowa interpretacja. W tym zadaniu kontekst jest jasny: mamy operator referencji przy przypisaniu, więc chodzi wyłącznie o powiązanie dwóch zmiennych z tą samą wartością, a nie o logikę czy wskaźniki w niskopoziomowym znaczeniu.

Pytanie 13

W jakim języku została napisana podana linia kodu

Ilustracja do pytania
A. JavaScript
B. PHP
C. Python
D. C#
Kod pokazany na obrazku jest zapisany w języku JavaScript. JavaScript jest językiem programowania, który odgrywa kluczową rolę w tworzeniu dynamicznych i interaktywnych stron internetowych. Linia kodu wykorzystuje metodę document.getElementById która jest częścią Document Object Model (DOM) w JavaScript. DOM pozwala na manipulację elementami HTML strony internetowej. W tym wypadku, metoda getElementById odwołuje się do elementu o identyfikatorze paragraf1, a właściwość innerHTML umożliwia zmianę zawartości tego elementu. To podejście jest powszechnie stosowane w celu dynamicznej aktualizacji treści na stronach bez konieczności przeładowania całej strony. Znajomość JavaScriptu pozwala na tworzenie bardziej responsywnych i atrakcyjnych wizualnie aplikacji webowych. JavaScript jest integralną częścią stosu technologii sieciowych i jest szeroko stosowany w praktycznie każdej nowoczesnej witrynie internetowej. Standardy ECMAScript definiują zasady i poprawne użycie JavaScript, co wspiera rozwój profesjonalny i zgodny z dobrymi praktykami.

Pytanie 14

Celem testów związanych ze skalowalnością oprogramowania jest ocena, czy aplikacja

A. posiada odpowiednią funkcjonalność
B. potrafi funkcjonować przy założonym i wyższym obciążeniu
C. jest chroniona przed nieautoryzowanymi operacjami, np. dzieleniem przez zero
D. jest właściwie udokumentowana
Twoja odpowiedź o funkcjonalności aplikacji i unikaniu błędów, jak dzielenie przez zero, nie do końca odnosi się do testów skalowalności. Właściwie, kluczowym punktem w testach skalowalności jest to, jak system radzi sobie z większym obciążeniem. Funkcjonalność trochę dotyczy tego, co aplikacja umie, ale to nie to samo co skalowanie. Posiadanie dobrej dokumentacji jest istotne, ale nie wpływa na to, jak aplikacja reaguje na rosnące obciążenie. Owszem, zabezpieczenia są ważnym elementem, żeby system był stabilny, ale to właśnie nie ma wiele wspólnego z zagadnieniem skalowalności. Myślę, że część osób myli różne aspekty, takie jak funkcjonalność z wydajnością i zabezpieczeniami. Ważne, żeby umieć je oddzielać i wiedzieć, jak każdy z tych elementów wpływa na ogólną jakość aplikacji w obliczu zmieniającego się zapotrzebowania.

Pytanie 15

Po zrealizowaniu polecenia SQL użytkownik Ela zyska możliwość wykorzystania poniższych uprawnień:

GRANT SELECT, INSERT, UPDATE, DELETE ON baza1.tab1 TO 'Ela'@'localhost';
A. tylko dodawać oraz zmieniać dane
B. realizować wszystkie działania na strukturze danych
C. przeprowadzać wszystkie operacje na danych
D. tylko tworzyć i zmieniać strukturę tabeli
Poprawna odpowiedź to możliwość wykonywania wszystkich akcji na danych przyznanych przez polecenie GRANT. W kontekście SQL, uprawnienia SELECT, INSERT, UPDATE oraz DELETE dają użytkownikowi pełną kontrolę nad danymi w tabeli. Dzięki uprawnieniu SELECT użytkownik może przeglądać dane, a INSERT umożliwia dodawanie nowych rekordów. Z kolei UPDATE pozwala na modyfikację istniejących danych, natomiast DELETE umożliwia ich usunięcie. Przykładowo, jeśli użytkownik Ela chce prowadzić analizy danych, korzystając z SELECT, a następnie wprowadzać poprawki lub dodawać nowe dane, polecenie to daje jej odpowiednie narzędzia do ich realizacji. W praktyce, wydawanie uprawnień dla użytkowników w bazach danych powinno być zgodne z zasadą minimalnych uprawnień, co oznacza, że użytkownicy powinni otrzymywać tylko te uprawnienia, które są konieczne do wykonywania ich zadań. Dzięki temu zwiększa się bezpieczeństwo bazy danych i zmniejsza ryzyko nieautoryzowanego dostępu.

Pytanie 16

Które z pól są umieszczone w formularzu?





Studia podyplomowe Kurs

A. Input(Text), Select, Input(Radio), Input(Radio), Input (Submit), Input(Reset)
B. Textarea, Option, Input(Checkbox), Input(Checkbox), Input (Submit), Input(Reset)
C. Textarea, Select, Input(Radio), Input(Radio), Input(Reset), Input(Submit)
D. Input(Text), Input(Checkbox), Select, Select, Input(Submit), Input(Reset)
Dobrze zrozumiałeś różne typy pól, które mogą pojawić się w formularzu html. Wybrana przez Ciebie odpowiedź składa się z różnych typów pól, które są często używane w formularzach internetowych. Pierwsze, Input(Text), jest podstawowym polem do wprowadzania tekstu, które jest szeroko stosowane do zbierania informacji od użytkowników, takich jak imię, nazwisko itp. Pole Select to lista rozwijana, która pozwala użytkownikowi wybrać jedną z wielu opcji. W tym przypadku, używane jest do wyboru województwa. Input(Radio) to przyciski wyboru, które umożliwiają wybór jednej opcji z kilku. W formularzu, są one używane do wyboru między 'Studia podyplomowe' a 'Kurs'. Input(Submit) to przycisk służący do wysyłania formularza, a Input (Reset) pozwala na wyczyszczenie wszystkich pól formularza. Wszystkie te elementy są zgodne ze standardami i dobrymi praktykami tworzenia formularzy html. Dobre zrozumienie tych elementów jest kluczowe do tworzenia efektywnych i użytkowników formularzy.

Pytanie 17

Podczas przygotowywania grafiki do umieszczenia na stronie internetowej konieczne jest wycięcie tylko pewnego fragmentu. Jak nazywa się ta czynność?

A. kadrowanie.
B. odwracanie obrazu.
C. zmiana rozmiaru.
D. łączanie warstw.
Kadrowanie to taka technika, która pomaga nam lepiej uchwycić to, co najważniejsze w obrazie. Wycinając niektóre fragmenty grafiki, skupiamy uwagę na tym, co naprawdę się liczy. Dobrze jest to mieć na uwadze, zwłaszcza przy zdjęciach portretowych, gdzie chcemy, żeby wzrok przyciągała twarz modela, a nie jakieś niepotrzebne tło. Kiedy kadrujemy, warto pamiętać o takich zasadach jak zasada trzecich, bo to pomaga zrobić fajną kompozycję. Można to robić w wielu programach graficznych, jak na przykład Adobe Photoshop czy GIMP. Tak w ogóle, dobrze jest dbać o proporcje i rozdzielczość, żeby obraz nie stracił na jakości. Gadżetem kadrowania można się też posługiwać w projektowaniu stron www, bo odpowiednie wybory graficzne poprawiają estetykę i funkcjonalność strony.

Pytanie 18

<?php
function silnia($liczba)
{
    if($liczba < 2)
        return 1;
    else
        return $liczba * silnia($liczba - 1);
}
?>
Funkcja silnia jest funkcją
A. abstrakcyjną.
B. bezparametrową.
C. rekurencyjną.
D. nie zwracającą wyniku.
Funkcja „silnia” w tym przykładzie jest klasycznym przykładem funkcji rekurencyjnej w PHP. Rekurencja polega na tym, że funkcja w swoim wnętrzu wywołuje samą siebie z innym argumentem. Tutaj dokładnie to widzimy w instrukcji `return $liczba * silnia($liczba - 1);`. Każde kolejne wywołanie zmniejsza wartość parametru `$liczba` o 1, aż dojdziemy do warunku zakończenia, czyli tzw. warunku brzegowego: `if($liczba < 2) return 1;`. Ten warunek jest kluczowy, bo bez niego rekurencja nigdy by się nie zatrzymała i skończyłaby się błędem przepełnienia stosu (stack overflow). Z punktu widzenia algorytmiki, silnia jest jednym z pierwszych przykładów, na których uczy się rekurencji, bo definicja matematyczna jest też rekurencyjna: n! = n * (n-1)!, przy 0! = 1 oraz 1! = 1. W kodzie odwzorowujemy to praktycznie 1:1. W profesjonalnym programowaniu webowym rekurencję stosuje się nie tylko do silni, ale np. do przetwarzania drzew kategorii, menu wielopoziomowych, parsowania struktur XML/JSON, czy przechodzenia po drzewach uprawnień. Moim zdaniem ważne jest, żeby przy rekurencji zawsze pilnować dwóch rzeczy: dobrze zdefiniowanego warunku zakończenia i tego, żeby w każdym kroku argument „zbliżał się” do tego warunku. W PHP można też porównać to z wersją iteracyjną (z pętlą), ale w wielu przypadkach rekurencyjna wersja jest czytelniejsza, szczególnie przy strukturach drzewiastych. W praktyce produkcyjnej warto jednak pamiętać o ograniczeniach głębokości stosu i przy bardzo dużych danych czasem lepiej przepisać rekurencję na iterację, ale sam wzorzec, który tu widzisz, jest jak najbardziej zgodny z dobrymi praktykami i podręcznikową definicją funkcji rekurencyjnej.

Pytanie 19

W hurtowni utworzono tabelę sprzedaż, która zawiera pola: id, kontrahent, grupa_cenowa oraz obrot. Jakie polecenie należy wykorzystać, aby znaleźć tylko kontrahentów z drugiej grupy cenowej, których obrót przekracza 4000 zł?

A. SELECT sprzedaz FROM kontrahent WHERE obrot>4000
B. SELECT sprzedaz FROM kontrahent WHERE grupa_cenowa=2 AND obrot>4000
C. SELECT kontrahent FROM sprzedaz WHERE grupa_cenowa=2 AND obrot>4000
D. SELECT kontrahent FROM sprzedaz WHERE grupa_cenowa=2 OR obrot>4000
W analizowanych odpowiedziach znajdują się elementy, które nie spełniają wymogów stawianych przez zapytanie o kontrahentów z drugiej grupy cenowej i obrotem powyżej 4000 zł. W pierwszym przypadku, zapytanie używa niewłaściwej konstrukcji, ponieważ polecenie 'SELECT sprzedaz FROM kontrahent WHERE obrot>4000;' odnosi się do błędnych tabel i kolumn, wprowadzając zamieszanie. Użycie 'FROM kontrahent' zamiast 'FROM sprzedaz' wskazuje na nieprawidłowe zrozumienie struktury bazy danych. Kolejny błąd polega na zastosowaniu operatora OR w jednym z zapytań, co prowadzi do zwrócenia wszystkich kontrahentów, którzy mają obrót większy niż 4000 zł, niezależnie od grupy cenowej. W kontekście wymagań pytania, taki zabieg nie jest wystarczający, ponieważ nie segreguje wyników według grupy cenowej, co może skutkować uzyskaniem niepożądanych danych. W ostatniej niepoprawnej odpowiedzi także występuje mylna konstrukcja, ponieważ 'SELECT sprzedaz FROM kontrahent WHERE grupa_cenowa=2 AND obrot>4000;' błędnie wskazuje na tabele i kolumny, co jest niezgodne z zasadami normalizacji baz danych. Zastosowanie niewłaściwych aliasów i odniesień do tabel uniemożliwia skuteczne wykonanie zapytania i analizę danych.

Pytanie 20

Które narzędzie edytora grafiki przedstawia rozkład jasności (tonów) pikseli obrazu w postaci wykresu?

A. warstwy
B. histogram
C. kadrowanie
D. kanał alfa
Histogram to wykres rozkładu jasności obrazu: na osi poziomej są poziomy jasności (od czerni do bieli), a na pionowej - liczba pikseli o danej jasności. Pozwala ocenić ekspozycję i kontrast - np. wykres „upchnięty” po lewej oznacza niedoświetlenie. Dlatego rozkład tonów obrazu pokazuje histogram.

Pytanie 21

Zdarzenie JavaScript onmousedown występuje, gdy

A. wskaźnik myszy komputerowej wyszedł poza obręb obiektu.
B. wskaźnik myszy komputerowej znalazł się w obrębie obiektu.
C. został naciśnięty dwa razy klawisz myszy komputerowej.
D. został wciśnięty dowolny klawisz myszy komputerowej na danym elemencie.
W tym pytaniu wszystkie niepoprawne odpowiedzi kręcą się wokół podobnego nieporozumienia: pomieszania różnych zdarzeń myszy dostępnych w JavaScript. Przeglądarka rozróżnia bardzo precyzyjnie momenty, kiedy kursor wchodzi w obszar elementu, kiedy go opuszcza, kiedy przycisk jest naciskany, kiedy jest puszczany i kiedy nastąpiło faktyczne kliknięcie lub podwójne kliknięcie. Każda z tych sytuacji ma swój osobny event i warto to mieć poukładane w głowie, bo inaczej łatwo dobrać złe zdarzenie do danego efektu na stronie. Pojawienie się kursora myszy w obrębie elementu nie ma nic wspólnego z onmousedown. Do tego służą zdarzenia onmouseover i onmouseenter, a do opuszczenia obszaru onmouseout lub onmouseleave. Typowy błąd to myślenie w stylu „skoro coś się dzieje z myszą nad elementem, to pewnie onmousedown”, ale specyfikacja DOM Events bardzo jasno definiuje, że mousedown dotyczy tylko fizycznego naciśnięcia przycisku, a nie samego ruchu wskaźnika. Równie mylące bywa utożsamianie onmousedown z podwójnym kliknięciem. Podwójne kliknięcie ma własne zdarzenie ondblclick i jest generowane dopiero, gdy przeglądarka wykryje dwa szybkie kliknięcia pod rząd w krótkim odstępie czasu. Owszem, technicznie przy podwójnym kliknięciu pojawią się dwa mousedown i dwa mouseup, ale to nie znaczy, że mousedown „oznacza” podwójne kliknięcie. To tylko jeden z niższopoziomowych eventów, na podstawie których przeglądarka składa wyższy poziom interakcji. Koncepcja, że onmousedown występuje w momencie wyjścia kursora poza element, też wynika z pomieszania pojęć – za takie sytuacje odpowiadają właśnie zdarzenia typu mouseout, a nie mousedown. Z mojego doświadczenia takie błędy biorą się z patrzenia na zdarzenia bardziej „intuicyjnie” niż zgodnie ze specyfikacją. Dlatego dobrą praktyką jest zapamiętanie prostego schematu: mousedown – fizyczne naciśnięcie przycisku na elemencie, mouseup – puszczenie, click – pełne kliknięcie, dblclick – dwa kliknięcia, mouseover/mouseout – wejście i wyjście kursora. Dopiero mając to w głowie, można świadomie dobierać właściwe zdarzenie do działania, którego potrzebujesz na stronie.

Pytanie 22

Aby utworzyć tabelę w relacyjnej bazie danych, należy zastosować polecenie SQL CREATE TABLE:

A.
NEW TABLE
B.
CREATE TABLE
C.
ADD TABLE
D.
PLUS TABLE
Tabelę tworzy instrukcja CREATE TABLE, należąca do języka definiowania danych (DDL) w SQL. Definiujesz w niej nazwę tabeli oraz listę kolumn wraz z ich typami danych, a opcjonalnie dodajesz ograniczenia, takie jak klucz główny czy NOT NULL. Najprostsza składnia to CREATE TABLE nazwa (kolumna typ);, na przykład CREATE TABLE pracownicy (id INT PRIMARY KEY, nazwisko VARCHAR(50));. Polecenie jest częścią standardu SQL, więc działa w większości systemów bazodanowych (MySQL, PostgreSQL, SQLite, SQL Server) i to właśnie ono buduje strukturę, do której później wstawiasz dane.

Pytanie 23

Dany jest fragment kodu PHP z zadeklarowaną zmienną typu tablicowego W wyniku wykonania kodu zostanie wypisane imię

$imiona = array('Anna', 'Tomasz', 'Krzysztof', 'Aleksandra');
echo $imiona[2];
A. Krzysztof
B. Anna
C. Tomasz
D. Aleksandra
Brawo! Twoja odpowiedź jest poprawna. Zrozumienie jak funkcje w języku PHP przetwarzają i manipulują danymi, szczególnie w kontekście tablic, jest absolutnie kluczowe. W podanym fragmencie kodu PHP, funkcja 'echo' jest użyta do wypisania elementu tablicy '$imiona' o indeksie [2]. Elementem tym jest 'Krzysztof', co jest poprawnym rozwiązaniem. PHP, jako język programowania obsługujący tablice indeksowane i asocjacyjne, pozwala na wybieranie konkretnych elementów tablicy poprzez podanie indeksu w kwadratowych nawiasach po nazwie tablicy. Jest to standardowa i często wykorzystywana praktyka w programowaniu, która umożliwia efektywne zarządzanie danymi. Dzięki temu, możemy manipulować danymi z różnych segmentów kodu, co daje nam większą elastyczność i kontrolę nad programem.

Pytanie 24

Jak nazywa się metoda-konstruktor (wywoływana przy tworzeniu obiektu) w PHP?

A.
__create
B.
__new
C.
__construct
D.
__open
Konstruktor w PHP ma jedną, ustaloną nazwę. __new, __open i __create to metody nieistniejące. Metodą wywoływaną przy tworzeniu obiektu jest __construct.

Pytanie 25

Która z funkcji zdefiniowanych w języku PHP zwraca jako wynik połowę kwadratu wartości podanej jako argument?

A. function licz($a) { echo $a/2; }
B. function licz($a) { return $a*$a/2; }
C. function licz($a) { return $a/2; }
D. function licz($a) { echo $a*$a/2; }
Niepoprawne odpowiedzi najczęściej wynikają z nieporozumień dotyczących działania funkcji w PHP. Na przykład, jeśli używasz 'echo' zamiast 'return', to funkcja nie oddaje wartości tam, gdzie jest wywołana. A to może być problematyczne, gdy naprawdę potrzebujemy tej wartości, jak na przykład do przypisania do zmiennej. Funkcje w stylu 'function licz($a) { echo $a/2; }' po prostu dzielą przez 2, a nie obliczają kwadratu, więc to nie spełnia wymagań pytania. Błędem jest mylenie 'echo' z 'return', bo to wprowadza zamieszanie i może prowadzić do trudności w naprawianiu błędów. Zrozumienie tej różnicy jest kluczowe, bo naprawdę pomaga w napisaniu czystego i modularnego kodu, co w programowaniu ma ogromne znaczenie.

Pytanie 26

Które polecenie SQL służy do wstawienia nowego rekordu z danymi?

A.
INSERT INTO
B.
ADD
C.
CREATE
D.
UPDATE
Pozostałe polecenia robią co innego. UPDATE zmienia istniejące dane, CREATE tworzy obiekty (np. tabelę), a ADD występuje jako część ALTER TABLE ... ADD, nie jako samodzielne wstawianie rekordu. Nowy rekord dodaje INSERT INTO.

Pytanie 27

Tabela góry, której fragment został pokazany, obejmuje polskie pasma górskie oraz ich szczyty. Podaj kwerendę obliczającą dla każdego pasma górskiego średnią wysokość szczytów.

A. SELECT pasmo, COUNT(wysokosc) FROM gory ORDER BY pasmo
B. SELECT pasmo, AVG(wysokosc) FROM gory GROUP BY pasmo
C. SELECT pasmo, SUM(wysokosc) FROM gory GROUP BY pasmo
D. SELECT pasmo, AVG(wysokosc) FROM gory LIMIT pasmo
Niestety, wybrana przez Ciebie odpowiedź jest błędna. Przyjrzyjmy się bliżej wszystkim niepoprawnym odpowiedziom. W odpowiedzi 'SELECT pasmo, AVG(wysokosc) FROM gory LIMIT pasmo;' użyto niepoprawnie klauzuli LIMIT. Klauzula LIMIT w SQL jest wykorzystywana do ograniczenia liczby zwracanych wierszy, a nie do grupowania wyników. W zapytaniu 'SELECT pasmo, COUNT(wysokosc) FROM gory ORDER BY pasmo;' użyto funkcji COUNT() zamiast AVG(). Funkcja COUNT() zlicza liczbę wartości, a nie oblicza ich średniej. Dodatkowo, zamiast grupowania wyników klauzulą GROUP BY, użyto klauzuli ORDER BY, która służy do sortowania wyników, a nie grupowania. Ostatnia błędna odpowiedź 'SELECT pasmo, SUM(wysokosc) FROM gory GROUP BY pasmo;' używa funkcji SUM() zamiast AVG(). Funkcja SUM() oblicza sumę wartości, a nie ich średnią. Klauzula GROUP BY jest poprawnie użyta do grupowania wyników. Pamiętaj, że wybór odpowiedniej funkcji agregującej i klauzuli jest kluczowy dla uzyskania prawidłowych wyników zapytania SQL.

Pytanie 28

Jakie narzędzie jest używane do organizowania oraz przedstawiania danych z wielu rekordów w celu ich wydruku lub dystrybucji?

A. kwerenda
B. formularz
C. raport
D. makropolecenie
Makropolecenie, formularz oraz kwerenda to narzędzia o różnych zastosowaniach, które często mylnie utożsamiane są z raportem. Makropolecenie to zestaw instrukcji, które automatyzują powtarzalne zadania w programach komputerowych, szczególnie w arkuszach kalkulacyjnych. Chociaż mogą one służyć do generowania raportów, same w sobie nie są narzędziem do grupowania informacji, lecz raczej do automatyzacji procesów. Formularz służy do zbierania danych od użytkowników, ale nie jest przeznaczony do ich analizy ani prezentacji w formie zrozumiałych zestawień. Kwerenda natomiast to zapytanie skierowane do bazy danych, które umożliwia wydobycie specyficznych informacji, ale ponownie, nie jest to narzędzie do ich prezentacji. Użytkownicy mogą mylić te narzędzia z raportem, co prowadzi do nieporozumień w zakresie ich funkcjonalności. Kluczowe jest zrozumienie, że raporty są podsumowaniem danych, które były wcześniej przetworzone, podczas gdy makropolecenia, formularze i kwerendy są narzędziami do działania na danych, ale nie do ich ostatecznego przedstawienia. Ważne jest, aby potrafić rozróżnić te pojęcia i stosować je zgodnie z ich przeznaczeniem w praktyce biznesowej.

Pytanie 29

W CSS zastosowano poniższe formatowanie. Kolorem czerwonym będzie wyświetlony

h1 i {
   color: red;
}
A. tylko tekst italic nagłówka pierwszego stopnia
B. cały tekst nagłówka pierwszego stopnia oraz wszelki tekst italic, niezależnie od lokalizacji na stronie
C. jedynie tekst italic we wszystkich poziomach nagłówków
D. cały tekst nagłówka pierwszego stopnia oraz tekst italic akapitu
Analizując dostępne odpowiedzi, widzimy, że tylko jedna poprawnie interpretuje zastosowanie selektora CSS. Pierwsza odpowiedź sugeruje, że kolor czerwony zostanie zastosowany jedynie do tekstu pochylonego we wszystkich poziomach nagłówków, co jest błędne. Selekcja h1 i odnosi się wyłącznie do pochylonych elementów wewnątrz nagłówka pierwszego poziomu, a nie w innych nagłówkach. Druga odpowiedź zakłada, że cały tekst nagłówka pierwszego poziomu oraz pochylony tekst akapitu będzie czerwony. To nieprawda, ponieważ selektor dotyczy wyłącznie tekstu w tagu <i> wewnątrz <h1>, a nie oddzielnie pochyłych akapitów. Trzecia odpowiedź również źle interpretuje zakres selektora, twierdząc, że każdy pochyły tekst na stronie zostanie sformatowany na czerwono, co jest niezgodne z koncepcją selektorów złożonych, które w tym przypadku działają tylko w kontekście <h1>. Podstawowy błąd we wszystkich niepoprawnych odpowiedziach polega na nieprawidłowym rozumieniu, jak precyzyjnie działają selektory CSS, co jest kluczowe dla efektywnego zarządzania stylami w projektowaniu stron internetowych. Dobra znajomość selektorów pozwala na uniknięcie nadmiernego użycia klas czy identyfikatorów oraz sprzyja tworzeniu bardziej semantycznego kodu CSS, co jest zgodne z najlepszymi praktykami w branży. Precyzyjna wiedza na temat działania selektorów złożonych pozwala na bardziej efektywne stylizowanie stron oraz minimalizowanie niepożądanych konfliktów stylów.

Pytanie 30

W języku SQL, aby dodać atrybut klucza podstawowego do pola id w istniejącej tabeli produkt należy użyć składni

A. ALTER TABLE produkt DROP CONSTRAINT id
B. ALTER TABLE produkt DROP PRIMARY KEY
C. ALTER TABLE produkt ADD PRIMARY KEY (id)
D. ALTER TABLE produkt ALTER COLUMN id INT
Poprawna składnia to ALTER TABLE produkt ADD PRIMARY KEY (id), bo dokładnie to polecenie dodaje do istniejącej tabeli nowy klucz podstawowy oparty na kolumnie id. Instrukcja ALTER TABLE służy do modyfikowania struktury tabeli, a klauzula ADD PRIMARY KEY definiuje ograniczenie (constraint) typu klucz podstawowy dla wskazanej kolumny lub zestawu kolumn. W praktyce oznacza to, że kolumna id musi być unikalna i nie może przyjmować wartości NULL. Silnik bazy danych (np. MySQL, PostgreSQL, SQL Server) zwykle tworzy do tego indeks typu UNIQUE, który przyspiesza wyszukiwanie po kluczu głównym.
Moim zdaniem warto pamiętać, że takie polecenie będzie działać tylko wtedy, gdy dane w kolumnie id już spełniają warunki klucza podstawowego: brak duplikatów i brak wartości pustych. W realnym projekcie często robi się to w dwóch krokach: najpierw uzupełnia się brakujące wartości, usuwa lub poprawia duplikaty, a dopiero potem dodaje PRIMARY KEY. Przykładowo:
ALTER TABLE produkt ADD PRIMARY KEY (id);
W wielu systemach, zwłaszcza w aplikacjach webowych, kolumna id jest też często ustawiana jako AUTO_INCREMENT (MySQL) lub używa sekwencji (PostgreSQL, Oracle). Wtedy definicja tabeli przy tworzeniu może wyglądać np. tak:
CREATE TABLE produkt (id INT PRIMARY KEY AUTO_INCREMENT, nazwa VARCHAR(100));
Jeśli jednak tabela już istnieje i kolumna id była zwykłą kolumną, to właśnie ALTER TABLE ... ADD PRIMARY KEY (id) jest standardowym, poprawnym sposobem nadania jej roli klucza głównego. To rozwiązanie jest zgodne z ogólną składnią SQL i dobrą praktyką modelowania relacyjnych baz danych, gdzie każda tabela powinna mieć jasno zdefiniowany klucz podstawowy, najlepiej prosty, stabilny i jednoznaczny.

Pytanie 31

Poniżej przedstawiono fragment kodu języka HTML. Jest on definicją listy:

<ol>
  <li>punkt 1</li>    <li>punkt 2</li>
  <ul>
    <li>podpunkt1</li>
    <ul>    <li>podpunkt2</li>  <li>podpunkt3</li>  </ul>
  </ul>
  <li>punkt3</li>
</ol>

A.

  1. punkt 1
  2. punkt 2
    • podpunkt1
    • podpunkt2
    • podpunkt3
  3. punkt3

B.

  1. punkt 1
  2. punkt 2
  3. punkt3
    • podpunkt1
    • podpunkt2
    • podpunkt3

C.

  1. punkt 1
  2. punkt 2
    • podpunkt1
      • podpunkt2
      • podpunkt3
  3. punkt3

D.

  • punkt 1
  • punkt 2
    1. podpunkt1
      • podpunkt2
      • podpunkt3
  • punkt3
A. B.
B. D.
C. A.
D. C.
Twoja odpowiedź niestety nie była prawidłowa. Kluczową częścią zadania była interpretacja struktury kodu HTML prezentującej listę numerowaną (<ol>) z trzema elementami listy (<li>). W szczególności, zwróć uwagę na to, że w drugim elemencie listy znajduje się zagnieżdżona lista nieuporządkowana (<ul>) z trzema podpunktami. Fakt, że podpunkty są oznaczone kropkami, jest charakterystyczny dla listy nieuporządkowanej, co sugerowało, że prawidłową odpowiedzią jest C. W przypadku innych odpowiedzi, nie odzwierciedlały one prawidłowo struktury przedstawionego kodu, co mogło wynikać z niezrozumienia znaczenia poszczególnych tagów HTML. Pamiętaj, że w HTML istotne jest zrozumienie, jak tagi są zagnieżdżone w sobie, tworząc strukturę strony. Przy dalszej nauce zwracaj uwagę na to, jak poszczególne elementy HTML są ze sobą powiązane.

Pytanie 32

W tabeli szkola (kolumny: imie, nazwisko, klasa) chcemy usunąć absolwentów - uczniów klasy 6. Które polecenie jest poprawne?

A.
DELETE FROM szkola WHERE klasa = 6
B.
UPDATE szkola SET klasa = 6
C.
DROP FROM szkola WHERE klasa = 6
D.
SELECT * FROM szkola WHERE klasa = 6
Pozostałe zapytania nie usuną tych uczniów lub są błędne. SELECT * FROM szkola WHERE klasa = 6 jedynie wyświetli wiersze - odczyt nie kasuje danych. UPDATE szkola SET klasa = 6 zmieniłoby wszystkim uczniom klasę na 6 zamiast cokolwiek usuwać. DROP działa na całych obiektach (np. DROP TABLE usuwa tabelę) i nie używa się go z WHERE do kasowania pojedynczych wierszy. Usunięcie wybranych rekordów wykonuje DELETE FROM szkola WHERE klasa = 6, dlatego to ono jest poprawne.

Pytanie 33

Do której właściwości CSS można przypisać wartości static, relative, fixed, absolute, sticky?

A.
list-style-type
B.
position
C.
display
D.
text-transform
Wartości static, relative, absolute, fixed i sticky przyjmuje właściwość position - steruje ona sposobem pozycjonowania elementu na stronie (np. fixed przykleja element do okna, sticky „przylepia” go przy przewijaniu). Zapamiętaj: te pięć słów to wartości position.

Pytanie 34

Definicja stylu zaprezentowana w CSS odnosi się do odsyłacza, który

a:visited {color: orange;}
A. wskaźnik myszy znajduje się nad nim
B. jeszcze nie był odwiedzony
C. posiada błędny adres URL
D. został wcześniej odwiedzony
Odpowiedź "został wcześniej odwiedzony" jest prawidłowa, ponieważ definicja stylu CSS `a:visited {color: orange;}` dotyczy odsyłaczy, które zostały już odwiedzone przez użytkownika. W CSS pseudo-klasa `:visited` jest stosowana do stylizacji odsyłaczy, które prowadzą do stron, które użytkownik już otworzył. Dzięki tej możliwości, twórcy stron internetowych mogą wprowadzać różne kolory dla odwiedzonych i nieodwiedzonych linków, co pozwala na szybszą orientację użytkowników w treści strony. Na przykład, jeżeli na stronie znajduje się wiele linków, użytkownik może łatwiej zrozumieć, które z nich już kliknął, a które są nowe. Dobrą praktyką jest stosowanie kontrastowych kolorów dla odsyłaczy, aby zwiększyć ich dostępność i użyteczność. Warto również zauważyć, że przeglądarki mogą mieć różne ograniczenia dotyczące stylizacji odwiedzonych linków, co jest podyktowane względami prywatności użytkowników. Z tego powodu zaleca się, aby nie opierać funkcjonalności strony jedynie na wyglądzie odwiedzonych linków.

Pytanie 35

Która dyrektywa w pliku php.ini decyduje o ZAPISYWANIU błędów PHP do pliku dziennika (logu)?

A.
display_errors
B.
log_errors
C.
max_execution_time
D.
memory_limit
Pozostałe dyrektywy nie odpowiadają za zapis błędów do pliku. display_errors steruje wyświetlaniem komunikatów w wyniku skryptu - to coś przeciwnego do dyskretnego logowania. max_execution_time ogranicza maksymalny czas działania skryptu, chroniąc serwer przed zawieszeniem, ale z błędami nie ma związku. memory_limit ustala, ile pamięci może zużyć skrypt. Zapisywanie błędów do dziennika włącza log_errors (a plik wskazuje error_log), dlatego to ona jest poprawna.

Pytanie 36

Zmienne typu int odnoszą się do liczb całkowitych

A. w notacji stałoprzecinkowej
B. naturalnych
C. w notacji zmiennoprzecinkowej
D. całkowitych
Odpowiedzi, które nie są poprawne, opierają się na mylnym zrozumieniu typów danych w programowaniu. Zmienne odnoszące się do wartości naturalnych to liczby całkowite większe lub równe zeru, co nie obejmuje wszystkich możliwości, które daje typ int, ponieważ może on reprezentować również liczby ujemne. Zatem ograniczenie do liczb naturalnych jest zbyt wąskie i nie oddaje pełni możliwości, jakie oferują zmienne całkowite. Kolejnym błędnym założeniem jest powiązanie typów int z notacją stałoprzecinkową. Chociaż takie notacje są używane w kontekście reprezentacji liczby w pamięci, zmienne int nie są właściwie klasyfikowane jako stałoprzecinkowe, gdyż termin ten odnosi się specyficznie do zapisu wartości liczbowych, które nie zmieniają pozycji przecinka. Tak więc, typ int nie jest związany z tym pojęciem. Ostatnia odpowiedź, która sugeruje, że zmienne int są w notacji zmiennoprzecinkowej, jest również niepoprawna, ponieważ zmiennoprzecinkowe reprezentacje (np. float lub double) są używane do przechowywania liczb, które wymagają dokładności dziesiętnej. Typ int jest z definicji typem całkowitym, co w żaden sposób nie obejmuje liczb zmiennoprzecinkowych. W rzeczywistości zmienne zmiennoprzecinkowe mają całkowicie inną strukturę pod względem przechowywania i reprezentacji, co sprawia, że są one zupełnie odrębnymi typami danych od int.

Pytanie 37

Efekt przedstawiony w filmie powinien być zdefiniowany w selektorze

A. tr { background-color: Pink; }
B. tr:active { background-color: Pink; }
C. tr:hover { background-color: Pink; }
D. td, th { 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 38

W języku C++ funkcja, która zwraca rezultat potęgowania i operuje na dwóch argumentach: liczbie x oraz wykładniku w, powinna mieć taką deklarację

A. void potega(int x, int w);
B. int potega(int x, int w);
C. void potega(int x, int w, int wynik);
D. int potega(int x);
Zgadzasz się, że 'int potega(int x, int w);' to trafna odpowiedź. Funkcja do potęgowania faktycznie potrzebuje dwóch rzeczy: podstawy x i wykładnika w, a na końcu powinna zwrócić liczbę całkowitą, która jest wynikiem potęgowania. Jakby to wyglądało w praktyce? Można by to napisać jako 'int potega(int x, int w) { return pow(x, w); }'. Przy czym 'pow' pochodzi z biblioteki cmath i robi te wszystkie magiczne obliczenia. Ważne jest, by przy projektowaniu funkcji myśleć o ich użyteczności, czyli żeby miały jasno określone wejście i wyjście. A jak już mówimy o potęgowaniu, to musimy też pamiętać o specjalnych przypadkach, jak potęgowanie zera do zera, które w matematyce jest równe 1. Dlatego dobrze zrobiona funkcja powinna to uwzględniać. W programowaniu kluczowe jest, by obliczenia były efektywne i poprawne, zwłaszcza w naukowych i inżynieryjnych projektach, gdzie precyzja jest bardzo istotna.

Pytanie 39

Zapis CSS w postaci:

ul{ list-style-image:url('rys.gif');}
spowoduje, że na stronie internetowej
A. rys.gif będzie służyć jako tło dla nienumerowanej listy
B. rysunek rys.gif zostanie wyświetlony jako punkt listy nienumerowanej
C. punktorem nienumerowanej listy stanie się rys.gif
D. każdy element listy zyska indywidualne tło pochodzące z grafiki rys.gif
Podane odpowiedzi, które sugerują alternatywne interpretacje, nie są zgodne z rzeczywistością techniczną CSS. Przede wszystkim, twierdzenie, że rys.gif będzie stanowił ramkę dla listy nienumerowanej, jest błędne, ponieważ właściwość 'list-style-image' nie ma wpływu na obramowanie listy, a jedynie na sposób, w jaki są wyświetlane punkty listy. CSS do definiowania obramowań używa innych właściwości, takich jak 'border'. Z kolei stwierdzenie o wyświetlaniu rysunku rys.gif jako tł listy nienumerowanej jest mylące; to nie jest tło całej listy, ale pojedyncze punkty, które zastępują tradycyjne znaczniki. Ostatnia niepoprawna odpowiedź sugeruje, że każdy punkt listy miałby osobne tło pobrane z grafiki rys.gif. Jest to błędne, ponieważ definicja tła w CSS dotyczy całego elementu, a nie poszczególnych znaczników. Aby uzyskać różne tła dla elementów listy, należałoby użyć oddzielnych właściwości CSS dla każdego z nich zamiast 'list-style-image'. Dlatego wszystkie te odpowiedzi nie uwzględniają zasadniczej funkcji właściwości CSS, jaką jest kontrolowanie wizualnych markerów listy.

Pytanie 40

Baza danych księgarni ma tabelę ksiazki z polami: id, idAutor, tytul, ileSprzedanych oraz tabelę autorzy z polami: id, imie, nazwisko. Jak utworzyć raport dotyczący sprzedanych książek, który zawiera tytuły oraz nazwiska autorów?

A. Ustalić relację 1..1 pomiędzy tabelami ksiazki i autorzy, a następnie stworzyć kwerendę łączącą obie tabele
B. Zdefiniować relację 1..n między tabelami ksiazki i autorzy, a następnie stworzyć kwerendę łączącą obie tabele
C. utworzyć dwie oddzielne kwerendy: pierwszą, która wyszuka tytuły książek, a drugą, która pobierze nazwiska autorów
D. stworzyć kwerendę, która wyszukuje tytuły książek
Podejścia polegające na tworzeniu dwóch osobnych kwerend lub definiowaniu relacji 1..1 są błędne z kilku powodów. Rekomendacja dotycząca tworzenia dwóch osobnych kwerend, z jedną dla tytułów książek i drugą dla nazwisk autorów, prowadzi do nieefektywności. Umożliwia to jedynie pobranie fragmentarycznych danych, które następnie trzeba łączyć w aplikacji lub manualnie, co zwiększa ryzyko błędów i wymaga dodatkowego wysiłku. Kwerendy są wydajniejsze w połączeniu, a ich wykonanie jest szybsze i bardziej zorganizowane. Z kolei definicja relacji 1..1 pomija fakt, że jeden autor może napisać wiele książek, co nie oddaje rzeczywistej struktury danych. Takie podejście prowadzi do niepoprawnego modelowania danych, które uniemożliwia efektywne zarządzanie informacjami o książkach i ich autorach. W praktyce, prawidłowe zdefiniowanie relacji w bazie danych jest kluczowe dla integracji danych oraz ich przyszłego wykorzystania, a także dla zapewnienia integralności referencyjnej. Dlatego też, ważne jest, aby zrozumieć zasady rządzące relacjami między tabelami oraz umiejętnie stosować złączenia w kwerendach.