Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 13 maja 2026 20:53
  • Data zakończenia: 13 maja 2026 21:12

Egzamin zdany!

Wynik: 29/40 punktów (72,5%)

Wymagane minimum: 20 punktów (50%)

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

Które z zapytań SQL wybiera nazwiska z tabeli klient, które mają co najmniej jedną literę i zaczynają się od litery Z?

A. SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z_%';
B. SELECT nazwisko FROM klient WHERE nazwisko='Z?';
C. SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z%';
D. SELECT nazwisko FROM klient WHERE nazwisko='Z_?';
Twoje zapytanie SQL wygląda świetnie: 'SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z%';'. Używając operatora LIKE razem z symbolem '%', dajesz znać, że po literze 'Z' mogą się pojawić różne znaki. Dzięki temu dostaniesz wszystkie nazwiska zaczynające się na 'Z', niezależnie od tego, ile liter potem występuje. Moim zdaniem to dobry sposób na wyszukiwanie, bo w praktyce może zwrócić takie nazwiska jak 'Zawadzki', 'Zielinski' czy 'Zachariasz'. W SQL operator LIKE jest naprawdę przydatny, bo pozwala na elastyczne porównywanie wartości tekstowych. Symbol '%' oznacza dowolny ciąg znaków (nawet pusty), a '_' to dokładnie jeden znak. Wiem, że to podejście jest zgodne z normami SQL, co sprawia, że działa w różnych systemach baz danych, co jest świetne, bo można to łatwo przenieść z jednego miejsca do drugiego.

Pytanie 2

W kolumnie, która pełni funkcję klucza głównego w tabeli, powinny się znajdować

A. inny typ niż inne kolumny.
B. wartości unikalne.
C. ciągłe numery.
D. liczby.
Wybór odpowiedzi, że klucz główny musi mieć ciągłą numerację, jest nie do końca poprawny. To nie spełnia podstawowych zasad w projektowaniu baz danych. Jasne, że ciągła numeracja może pomóc w zapewnieniu unikalności, ale to nie jest absolutnie wymagane. Klucz główny może mieć różne typy danych, na przykład tekstowe identyfikatory, jak kody czy UUID, które nie są numerowane w zwykły sposób, ale są nadal unikalne. Wiele systemów baz danych pozwala na tworzenie kluczy głównych na podstawie naturalnych danych, takich jak adresy e-mail czy numery identyfikacyjne. Inna niepoprawna kwestia to myślenie, że klucz główny zawsze musi być liczbą. Tak, liczby są często używane jako identyfikatory, ale to nie jedyna opcja. Czasem używa się wartości tekstowych albo kombinacji różnych typów danych. To też mylące, że klucz główny powinien mieć inny typ niż inne kolumny. Klucz główny nie musi być innym typem, jego głównym celem jest unikalność, a nie zgodność typów. Rozumienie, co właściwie oznacza klucz główny i jakie ma funkcje, jest kluczowe dla skutecznego projektowania baz danych, żeby uniknąć błędów, które mogą później prowadzić do problemów z danymi.

Pytanie 3

Określ właściwą hierarchię stylów CSS biorąc pod uwagę ich priorytet w stylizacji elementów strony WWW?

A. Lokalny, Wewnętrzny, Zewnętrzny
B. Wewnętrzny, Zewnętrzny, Rozciąganie stylu
C. Zewnętrzny, Wydzielone bloki, Lokalny
D. Rozciąganie stylu, Zewnętrzny, Lokalny
Odpowiedź "Lokalny, Wewnętrzny, Zewnętrzny" jest poprawna, ponieważ ilustruje hierarchię stylów CSS, która określa, jak różne źródła stylów wpływają na wygląd elementów na stronie internetowej. Lokalne style, czyli te umieszczone bezpośrednio w atrybucie 'style' danego elementu HTML, mają najwyższy priorytet. Oznacza to, że jeśli zastosujemy zarówno lokalny styl, jak i styl zewnętrzny, to lokalny styl będzie miał pierwszeństwo i nadpisze ustawienia zewnętrznego arkusza stylów. Następnie mamy style wewnętrzne, umieszczone w sekcji 'head' dokumentu HTML, definiujące style dla całej strony, ale mające niższy priorytet niż style lokalne. Na końcu są style zewnętrzne, które są ładowane z zewnętrznych plików CSS. Przykładem zastosowania tej zasady może być sytuacja, gdy chcemy, aby dany przycisk miał określony kolor tła; możemy go ustawić lokalnie, aby był inny w danym kontekście, mimo że w zewnętrznym arkuszu stylów jest zdefiniowany inny kolor.

Pytanie 4

Jaki wynik daje poniższy kod PHP?

$dane = array ('imie' => 'Anna', 'nazwisko' => 'Nowak', 'wiek' => 21);
A. jest błędny, ponieważ indeksami tablicy mogą być wyłącznie liczby całkowite
B. określa tablicę zawierającą sześć wartości
C. definiuje tablicę z trzema wartościami
D. jest niepoprawny, nieznany operator =>
Ten kod w PHP pokazuje, jak zdefiniować tablicę asocjacyjną z trzema elementami. To fajna sprawa, bo tablice asocjacyjne pozwalają na użycie kluczy, które nie muszą być tylko liczbami, a mogą być także opisowe, jak w tym przypadku. Klucze to 'imie', 'nazwisko' oraz 'wiek', a ich wartości to odpowiednio 'Anna', 'Nowak' i 21. Operator '=>' służy do przypisywania wartości do klucza - to dość typowa konstrukcja, bo ułatwia organizację danych. Podoba mi się, że tablice asocjacyjne w PHP są przydatne w różnych sytuacjach, na przykład do przechowywania danych użytkowników czy różnych ustawień. W sumie, ważne, żeby dbać o typy danych przypisywanych do kluczy, bo dzięki temu później łatwiej będzie się z nimi pracować. PHP ma dużo funkcji do pracy z tablicami, jak sortowanie czy iteracja, więc na pewno warto to znać.

Pytanie 5

Rezultatem działania zamieszczonej pętli napisanej w języku PHP jest wypisanie następujących liczb

Ilustracja do pytania
A. od 10 do 1
B. od 2 do 10
C. od 1 do 10
D. od 10 do 2
Pętla for w języku PHP przedstawiona w pytaniu zaczyna od wartości początkowej 10 dla zmiennej iteracyjnej $i. Warunek zakończenia pętli to $i >= 1, co oznacza że pętla będzie działać dopóki wartość $i jest większa lub równa 1. W każdym kroku iteracji następuje dekrementacja zmiennej $i o 1 dzięki operatorowi $i--. W praktyce oznacza to że pętla wypisuje wartości od 10 do 1 w kolejnych liniach. Dekrementacja w pętlach jest często stosowana, kiedy chcemy przechodzić przez elementy w odwrotnej kolejności, co jest przydatne w algorytmach sortowania bądź odwracania danych. Dzięki jasnemu określeniu warunków początkowych, końcowych oraz kroku iteracji pętla for jest jednym z bardziej przejrzystych i zrozumiałych narzędzi w programowaniu. Warto pamiętać o optymalizacji kodu i unikanie nadmiernych iteracji, co jest dobrym standardem w praktykach programistycznych, zwłaszcza w projektach o dużej skali. Pisząc bardziej złożone skrypty, należy pamiętać także o możliwości wystąpienia błędów związanych z nieskończonymi pętlami jeśli warunek zakończenia nie jest poprawnie zdefiniowany.

Pytanie 6

Można wydać instrukcję transakcyjną ROLLBACK, aby

A. zatwierdzić jedynie wybrane modyfikacje transakcji
B. cofnąć działanie transakcji
C. cofnąć transakcję po zastosowaniu instrukcji COMMIT
D. zatwierdzić transakcję
Każda odpowiedź, która nie odnosi się do właściwego działania instrukcji ROLLBACK, wykazuje istotne nieporozumienia dotyczące transakcji w bazach danych. Na przykład, stwierdzenie, że ROLLBACK jest używane do zatwierdzania transakcji, jest fundamentalnie błędne. Zatwierdzanie transakcji, zazwyczaj realizowane za pomocą instrukcji COMMIT, polega na zapisaniu wszystkich zmian dokonanych w ramach transakcji w bazie danych. W przeciwieństwie do tego, ROLLBACK jest środkiem ochrony, pozwalającym na cofnięcie wszelkich zmian, które mogły zostać wykonane przed jego wywołaniem. Do tego dochodzi błędne uznanie, że ROLLBACK może cofnąć tylko wybrane modyfikacje transakcji, co jest niezgodne z jego zasadniczą funkcją. ROLLBACK działa na całej transakcji, a nie na jej poszczególnych elementach, co jest kluczowe dla zapewnienia spójności stanu bazy danych. Warto również zauważyć, że instrukcja ROLLBACK nie może być używana po zastosowaniu instrukcji COMMIT, ponieważ COMMIT ostatecznie kończy transakcję i zapisuje wszystkie zmiany, co czyni je nieodwracalnymi. Te błędne koncepcje mogą prowadzić do poważnych problemów w aplikacjach bazodanowych, takich jak utrata danych, niespójności czy awarie systemów, dlatego kluczowe jest zrozumienie właściwego działania mechanizmów transakcyjnych i ich zastosowania w praktyce.

Pytanie 7

Jakie polecenie HTML poprawnie odwzorowuje przedstawioną hierarchiczną strukturę tekstu, która została wyświetlona przez przeglądarkę w następujący sposób: Rozdział 1 tekst Podrozdział 1.1 tekst Podrozdział 1.2?

A. <h1>Rozdział 1</h1><p>tekst</p><h2>Podrozdział 1.1</h2><p>tekst</p><h2>Podrozdział 1.2</h2>
B. <ul><li>Rozdział 1<li>tekst<li>Podrozdział 1.1<li>tekst<li>Podrozdział 1.2</ul>
C. <big>Rozdział 1</big>tekst<big>Podrozdział 1.1</big>tekst<big>Podrozdział 1.2</big>
D. <h1>Rozdział 1<p>tekst<h2>Podrozdział 1.1<p>tekst<h2>Podrozdział 1.2
Poprawny kod HTML do definiowania hierarchicznej struktury tekstu oparty jest na semantycznym znaczeniu tagów. W tym przypadku, użycie <h1> dla 'Rozdział 1' jako głównego nagłówka jest zgodne z zasadami projektowania stron internetowych, gdyż <h1> powinien być używany dla najważniejszego nagłówka na stronie. Następnie zastosowanie <h2> dla 'Podrozdział 1.1' i 'Podrozdział 1.2' wskazuje na hierarchię, gdzie te podrozdziały są podkategoriami głównego rozdziału. Tag <p> jest użyty do definiowania paragrafów tekstowych, co zapewnia odpowiednie formatowanie i czytelność. Taki układ jest zgodny z wytycznymi W3C, które rekomendują używanie nagłówków w strukturze dokumentu HTML, co ułatwia zarówno przeglądarkom, jak i użytkownikom zrozumienie hierarchii treści. Przykładowo, strona internetowa z taką strukturą będzie lepiej indeksowana przez wyszukiwarki, co przyczyni się do poprawy SEO.

Pytanie 8

W stylu CSS zdefiniowano klasę uzytkownik:

p.uzytkownik {
    color: blue;
}
Na stronie będą wyświetlane czcionką w kolorze niebieskim:
A. wszystkim elementom w sekcji <body> z przypisaną klasą uzytkownik.
B. wszystkie akapity.
C. tylko elementy tekstowe typu <p>, <h1>.
D. paragrafy, do których została przypisana klasa uzytkownik.
Deklaracja selektora p.uzytkownik oznacza w CSS połączenie selektora typu z selektorem klasy. Innymi słowy: przeglądarka wybierze tylko te elementy <p>, które mają w atrybucie class wpisaną klasę uzytkownik, np. <p class="uzytkownik">Treść</p>. Sama kropka przed nazwą klasy definiuje selektor klasy, a litera p przed kropką zawęża go wyłącznie do paragrafów. Gdyby w stylu było samo .uzytkownik { color: blue; }, wtedy reguła objęłaby wszystkie elementy z tą klasą, niezależnie czy to <p>, <div>, <h1> czy cokolwiek innego. Moim zdaniem to jedno z podstawowych, ale bardzo ważnych rozróżnień w CSS: kombinacja selektorów pozwala dokładnie kontrolować, które elementy są stylowane. Dzięki temu nie trzeba nadawać unikalnych klas dla każdego typu elementu, tylko łączyć selektor typu (np. p, h1, li) z klasą, gdy jest to potrzebne. W praktyce w projektach spotyka się dużo takich zapisów: np. li.active, a.button-primary, input.error. To pomaga utrzymać porządek w arkuszu stylów i unikać niepotrzebnie szerokiego działania reguł. Warto też zwrócić uwagę na specyficzność: p.uzytkownik ma większą specyficzność niż samo p, ale mniejszą niż np. #idElementu. Przy konfliktach stylów przeglądarka bierze to pod uwagę. Dobra praktyka jest taka, żeby nie pisać zbyt ogólnych selektorów, które kolorują „pół strony” przypadkiem. Taki selektor jak w pytaniu jest bezpieczny i precyzyjny – wiadomo dokładnie, że kolor niebieski trafi tylko do tych paragrafów, którym świadomie przypiszemy klasę uzytkownik w HTML.

Pytanie 9

W której notacji diagramów ER został zapisany model związków encji przedstawiony na ilustracji?

Ilustracja do pytania
A. Martina.
B. Chena.
C. Min-Max.
D. Bachmana.
Na diagramie przedstawiono model w notacji Martina, a nie w żadnej z pozostałych wymienionych. Warto zrozumieć, czym ta notacja różni się od innych, bo w praktyce projektowania baz danych bardzo łatwo je ze sobą pomylić. Notacja Chena to bardziej „akademickie” podejście do ERD. Encje są zwykle rysowane jako prostokąty, ale atrybuty pojawiają się w osobnych elipsach, połączonych liniami z encją. Klucz główny bywa podkreślony, a związki są reprezentowane przez romby z nazwą relacji. Na naszym diagramie nic takiego nie ma – atrybuty są w środku prostokąta, w formie listy, a nie jako osobne kształty, więc to już mocny sygnał, że to nie jest Chen. Z kolei notacja Bachmana historycznie kojarzy się z modelami sieciowymi i specyficznym sposobem prezentowania struktur danych, często z łamanymi liniami i strzałkami, raczej nie przypomina tabel z nagłówkiem i listą pól. W typowych podręcznikach do systemów baz danych Bachman jest pokazywany jako dość stary styl, dziś mało używany przy klasycznym relacyjnym ERD, więc mało prawdopodobne, by tak wyglądał nowoczesny diagram klient–zakup–towar. Odpowiedź Min-Max jest też myląca, bo Min-Max nie jest nazwiskiem autora notacji, tylko sposobem zapisu krotności relacji, np. (0,1), (1,n). Można taki zapis wykorzystać zarówno z notacją Chena, jak i z innymi, ale sam diagram z obrazka nie używa jawnego oznaczenia min/max przy relacjach – widzimy crow’s foot, czyli styl typowy dla Martina. Typowy błąd w tego typu pytaniach polega na tym, że ktoś kojarzy jeden detal, np. gdzieś widział oznaczenia min-max, i automatycznie zakłada, że każda notacja z relacjami i krotnościami to „Min-Max”. Tutaj jednak kluczowe są kształty encji i sposób zapisu atrybutów: prostokąt z nagłówkiem i lista pól jak w tabeli, bez elips i rombów, bez dodatkowych znaczników kluczy – to bardzo klasyczny, praktyczny styl używany przy projektowaniu relacyjnych baz danych, właśnie w notacji Martina. Dobrze jest więc patrzeć na diagram całościowo, a nie tylko na pojedynczy symbol, bo wtedy łatwiej uniknąć takich pomyłek.

Pytanie 10

Wskaż poprawne stwierdzenie dotyczące przedstawionego kodu HTML.
<video width="640" height="480" controls>
<source src="animacja.mp4" type="video/mp4">
</video>

A. Kod może nie działać w przeglądarkach, które nie obsługują HTML5.
B. Lokalizacja pliku jest nieprawidłowa, brak w niej ścieżki bezwzględnej.
C. Użytkownik nie będzie miał możliwości kontrolowania odtwarzania wideo.
D. Plik animacja.mp4 powinien mieć rozdzielczość 640x480 pikseli, aby był odtwarzany.
Kod HTML przedstawiony w pytaniu wykorzystuje znacznik &lt;video&gt;, który jest elementem HTML5 pozwalającym na osadzanie filmów w dokumentach internetowych. W kontekście poprawnej odpowiedzi, kluczowym jest zrozumienie, że przeglądarki muszą obsługiwać HTML5, aby mogły w pełni funkcjonować z tym kodem. W przypadku starszych przeglądarek, które nie wspierają HTML5, element &lt;video&gt; może nie być wyświetlany lub nie będzie działał prawidłowo. Dlatego istotne jest, aby deweloperzy testowali swoje aplikacje w różnych środowiskach oraz aby korzystali z odpowiednich polyfilli dla starszych przeglądarek, które mogą poprawić ich funkcjonalność. Przykładowo, użycie biblioteki JavaScript takiej jak Video.js może pomóc w zapewnieniu wsparcia dla elementów wideo w szerszym zakresie przeglądarek. Dbałość o kompatybilność z różnymi wersjami przeglądarek to nie tylko kwestia estetyki, ale również użyteczności i dostępności aplikacji internetowych.

Pytanie 11

Zdefiniowano funkcję w języku PHP:

function policz($Z) { 
while($Z < 5) {
$Z += 2 * $Z + 1;
}
return $Z;
}
Funkcja policz została wywołana z parametrem $Z = 1. Jaki rezultat zostanie zwrócony?
A. 13
B. 7
C. 1
D. 4
Funkcja policz w języku PHP działa na zmiennej $Z, która jest inicjowana wartością 1. W pętli while sprawdzany jest warunek, czy $Z jest mniejsze niż 5. W przypadku, gdy $Z wynosi 1, warunek jest spełniony, a funkcja przechodzi do ciała pętli. Wewnątrz pętli $Z jest aktualizowane poprzez wyrażenie $Z += 2 * $Z + 1. Oznacza to, że do $Z dodawana jest wartość 2 * $Z + 1, co dla $Z = 1 daje 2 * 1 + 1 = 3. Po pierwszym kroku $Z osiąga wartość 4. Pętla while sprawdza ponownie warunek: 4 < 5, co również jest prawdą. W drugim kroku $Z = 4, więc $Z zostaje zaktualizowane do 4 + 2 * 4 + 1, co daje 4 + 8 + 1 = 13. Po tym kroku $Z staje się 13 i pętla while zakończy działanie, ponieważ 13 nie jest już mniejsze niż 5. Funkcja zwraca wartość 13, co czyni tę odpowiedź poprawną. Tego typu operacje są typowe w sytuacjach, gdzie potrzeba wielokrotnego aktualizowania wartości na podstawie obliczeń matematycznych, a ich zrozumienie jest kluczowe w programowaniu.

Pytanie 12

Jaką maksymalną ilość znaczników <td> można zastosować w tabeli składającej się z trzech kolumn i trzech wierszy, w której nie ma złączeń komórek ani wiersza nagłówkowego?

A. 3
B. 12
C. 6
D. 9
Tabela o trzech kolumnach i trzech wierszach składa się z 9 komórek, co oznacza, że maksymalna liczba znaczników <td>, które można zastosować w takiej tabeli, wynosi 9. Każda komórka tabeli jest reprezentowana przez znacznik <td>, dlatego musisz pomnożyć liczbę kolumn (3) przez liczbę wierszy (3), co daje 3 * 3 = 9. To podejście odzwierciedla najlepsze praktyki w tworzeniu tabel HTML, które zakładają, że każda komórka powinna być jednoznacznie określona. Warto pamiętać, że unikanie złączeń komórek upraszcza strukturę tabeli, co ułatwia przetwarzanie przez różne systemy oraz poprawia dostępność strony. Przykład zastosowania to np. wyświetlanie danych o produktach w sklepie internetowym, gdzie każda informacja o produkcie, taka jak nazwa, cena i opis, znajduje się w osobnej komórce. Zgodnie z wytycznymi W3C, stosowanie semantycznych znaczników poprawia SEO i ułatwia nawigację.

Pytanie 13

Dokument HTML określa akapit oraz grafikę. Aby grafika była umieszczona przez przeglądarkę w tej samej linii co akapit po jego lewej stronie, w stylu CSS grafiki należy ustawić właściwość

A. align:left;
B. float:left;
C. alt:left;
D. style:left;
Właściwości 'style:left;' oraz 'align:left;' są przykładami powszechnych nieporozumień dotyczących stylizacji elementów w CSS. 'Style:left;' nie istnieje jako właściwość CSS, co prowadzi do błędów w interpretacji przez przeglądarki. Z kolei 'align:left;' stosowano w przeszłości w kontekście HTML, ale obecnie jest przestarzałą metodą, nie zalecaną w nowoczesnym kodowaniu. Współczesne standardy zalecają korzystanie z CSS do zarządzania układem i pozycjonowaniem elementów, co czyni 'align:left;' niewłaściwym wyborem w kontekście współczesnego web designu. Zastosowanie nieodpowiednich właściwości CSS może prowadzić do problemów z responsywnością, a także do trudności w utrzymaniu i rozwoju kodu. Warto zwrócić uwagę, że właściwości CSS powinny być używane zgodnie z ich przeznaczeniem, dlatego kluczowe jest zrozumienie, jak działają różne techniki pozycjonowania, aby skutecznie projektować strony internetowe. Zamiast polegać na przestarzałych metodach, nowoczesne podejście do stylizacji stron powinno opierać się na elastycznych układach opartych na Flexbox lub CSS Grid.

Pytanie 14

Komunikat błędu generowany przez walidator HTML może wskazywać na

A. niezgodną ilość znaczników <p> otwartych i zamkniętych
B. brak zamknięcia znaczników zagnieżdżonych wewnątrz znacznika <p> przed jego zakończeniem
C. zamknięciu znacznika <p>, mimo że wcześniej nie był on otwarty
D. brak zamknięcia znacznika <p>
Błąd mówi, że zamknąłeś znacznik <p>, ale niektóre znaczniki wewnętrzne, jak <a>, pozostają otwarte. To nie chodzi o to, żeby zamknąć <p> bez wcześniejszego otwarcia, ale o to, że musisz zamknąć wszystkie zagnieżdżone znaczniki przed zamykaniem nadrzędnego. Jeśli to zrobisz, to wszystko powinno działać lepiej i strona powinna się wyświetlać tak, jak chcesz.

Pytanie 15

W języku PHP funkcja trim ma za zadanie

A. porównywać dwa napisy i wypisywać część wspólną.
B. z obu końców napisu usuwać białe znaki lub inne znaki podane w parametrze.
C. zmniejszać napis o wskazaną w parametrze liczbę znaków.
D. wyznaczyć długość napisu.
Poprawnie – funkcja trim() w PHP służy do usuwania z obu końców napisu tzw. znaków niechcianych, domyślnie białych znaków, czyli spacji, tabulatorów, znaków nowej linii, powrotu karetki itp. Kluczowe jest tu słowo „z końców” – trim nie rusza środka łańcucha, modyfikuje tylko początek i koniec. Składnia jest prosta: trim(string $string, string $characters = " \n\r\t\0\x0B"). Drugi parametr jest opcjonalny i pozwala samodzielnie określić zestaw znaków, które mają być usunięte. Przykład z praktyki: bardzo często po odebraniu danych z formularza stosuje się $name = trim($_POST['name']); żeby usunąć przypadkowe spacje przed i po imieniu użytkownika. Dzięki temu porównywanie napisów, walidacja czy zapisywanie do bazy danych jest bardziej przewidywalne i zgodne z dobrymi praktykami. Moim zdaniem trim to jedna z takich małych funkcji, które powinny wejść w nawyk – szczególnie przy obsłudze inputów użytkownika, importu danych z plików CSV, parsowaniu logów czy przygotowywaniu danych do serializacji. Warto też znać powiązane funkcje: ltrim() usuwa znaki tylko z lewej strony, a rtrim() (alias chop()) tylko z prawej. Dobrą praktyką jest stosowanie trim bezpośrednio po pobraniu danych z zewnętrznych źródeł, zanim zaczniemy robić jakiekolwiek porównania, zapisy do bazy czy generowanie kluczy. Pozwala to uniknąć bardzo irytujących błędów typu „ten sam użytkownik, ale inne spacje”, które potem trudno debugować. W profesjonalnych aplikacjach webowych obróbka łańcuchów, w tym właśnie trim, jest standardowym elementem warstwy walidacji i normalizacji danych wejściowych.

Pytanie 16

W SQL wykonano poniższe instrukcje GRANT. Kto będzie miał prawa do przeglądania oraz modyfikacji danych?

GRANT ALL ON firmy TO 'admin'@'localhost';
GRANT ALTER, CREATE, DROP ON firmy TO 'anna'@'localhost';
GRANT SELECT, INSERT, UPDATE ON firmy TO 'tomasz'@'localhost';
A. Adam i Anna
B. Tomasz i Adam
C. Tylko Tomasz
D. Tomasz i Anna
Nieprawidłowe rozumienie problemu wynika z błędnej interpretacji przyznanych uprawnień SQL. Anna choć posiada uprawnienia ALTER CREATE i DROP które odnoszą się do zarządzania strukturą bazy danych takie jak dodawanie czy usuwanie tabel lub zmiana ich struktury nie ma uprawnień do przeglądania czy modyfikowania zawartości tabel. To oznacza że nie może przeglądać ani modyfikować danych co wyklucza ją jako osobę mającą prawo do przeglądania i zmiany danych w kontekście tego pytania. Adam w przesłanych komendach nie jest wymieniony co jasno wskazuje że żadne uprawnienia nie zostały mu przyznane. Często popełnianym błędem jest założenie że posiadanie uprawnień do zmiany struktury bazy danych automatycznie pozwala na przeglądanie danych jednak w rzeczywistości uprawnienia te są rozdzielone co jest kluczowe dla zapewnienia bezpieczeństwa danych. Rozróżnienie między uprawnieniami do zarządzania danymi a ich strukturyzowania jest fundamentalne w pracy z bazami danych i niezbędne do skutecznego administrowania dostępem użytkowników. Tomasz jako jedyny uzyskał odpowiednie uprawnienia do przeglądania i modyfikacji danych co jasno wynika z przyznanych mu uprawnień SQL.

Pytanie 17

Jednym z typów testów jednostkowych jest analiza tras, która polega na

A. testowaniu obiektów pod kątem inicjalizacji oraz zwolnienia zarezerwowanej pamięci
B. określeniu punktu startowego i końcowego oraz badaniu dostępnych ścieżek pomiędzy tymi punktami
C. testowaniu wartości granicznych zestawu danych
D. utworzeniu kilku zbiorów danych o zbliżonym sposobie przetwarzania i wykorzystaniu ich do przeprowadzenia testu
Rozumienie błędów w odpowiedziach może pomóc lepiej ogarnąć, o co chodzi z analizą ścieżek w testach jednostkowych. Testowanie wartości brzegowych, chociaż bardzo ważne dla jakości oprogramowania, skupia się tylko na granicach danych wejściowych i nie pokazuje pełnego obrazu możliwych ścieżek w kodzie. Z kolei sprawdzanie obiektów pod kątem pamięci to temat na inną rozmowę i niekoniecznie ma coś wspólnego z analizą ścieżek; chodzi o to, że to podejście nie dotyka, jak kontrola przepływu działa w kodzie. Robienie kilku zbiorów danych, które się powtarzają w przetwarzaniu, też nie jest tym samym, co badanie ścieżek, a raczej dotyczy testowania z użyciem takich danych. Dużym błędem jest to, że myślimy, iż analiza ścieżek to tylko spojrzenie na dane czy pamięć. W rzeczywistości trzeba patrzeć na całość programu, zarówno na dane, jak i logikę działania, co pokazuje, jak ważna jest analiza ścieżek w znajdowaniu problemów w kodzie.

Pytanie 18

Jakie zapytanie pozwoli Administratorowi cofnąć uprawnienia do przeglądania oraz modyfikacji danych w bazie gazeta dla użytkownika redaktor?

A. REVOKE SELECT, ALTER ON gazeta.* FROM 'redaktor'@'localhost';
B. GRANT SELECT, UPDATE ON gazeta.* TO 'redaktor'@'localhost';
C. REVOKE SELECT, UPDATE ON gazeta.* FROM 'redaktor'@'localhost';
D. GRANT SELECT, ALTER ON gazeta.* TO 'redaktor'@'localhost';
Wybrana odpowiedź jest poprawna, ponieważ polecenie REVOKE służy do odbierania wcześniej przyznanych uprawnień użytkownikowi w systemie zarządzania bazą danych. W tym przypadku, REVOKE SELECT, UPDATE ON gazeta.* FROM 'redaktor'@'localhost'; skutecznie odbiera prawo do przeglądania (SELECT) oraz aktualizacji (UPDATE) danych w bazie danych 'gazeta' dla użytkownika 'redaktor'. Przykładowe zastosowanie tego zapytania może mieć miejsce w sytuacji, gdy redaktor przestaje pełnić swoją funkcję i nie powinien już mieć dostępu do tych informacji. Standardową praktyką w zarządzaniu dostępem do baz danych jest stosowanie zasady najmniejszych uprawnień, co oznacza, że użytkownik powinien mieć tylko te uprawnienia, które są mu niezbędne do wykonywania swoich obowiązków. W przypadku, gdy konieczne jest zmodyfikowanie uprawnień, zamiast usuwania użytkownika, łatwiej jest po prostu odebrać mu konkretne prawa, co jest dokładnie tym, co robi to polecenie.

Pytanie 19

Zapytanie MySQL przedstawione poniżej ma na celu

ALTER TABLE ksiazki MODIFY tytul VARCHAR(100) NOT NULL;
A. usunąć kolumnę tytul z tabeli ksiazki
B. dodać kolumnę tytul do tabeli ksiazki
C. zmienić typ kolumny tytul w tabeli ksiazki
D. zmienić nazwę kolumny w tabeli ksiazki
Polecenie 'ALTER TABLE ksiazki MODIFY tytul VARCHAR(100) NOT NULL;' służy do zmiany typu danych lub ograniczeń kolumny w istniejącej tabeli. W tym przypadku modyfikujemy kolumnę 'tytul' w tabeli 'ksiazki', zmieniając jej typ danych na VARCHAR(100) oraz ustawiając ograniczenie NOT NULL. Polecenie MODIFY jest używane w SQL do zmiany struktury kolumny, takiej jak typ danych, długość, czy też dodawanie ograniczeń. Praktyczne zastosowanie tego polecenia można znaleźć w sytuacjach, gdy oryginalna definicja kolumny jest niewystarczająca, np. zwiększenie długości pola tekstowego, aby pomieścić dłuższe wartości. Dobre praktyki przy modyfikacji kolumn obejmują dokładne zrozumienie zmian, które wprowadzasz, oraz testowanie ich w środowisku deweloperskim przed wdrożeniem na żywo. Ważne jest także rozważenie wpływu na istniejące dane oraz wydajność zapytań. Zmiana typu kolumny na VARCHAR z określoną długością jest szczególnie przydatna, gdy chcemy zminimalizować wykorzystanie pamięci w bazie danych.

Pytanie 20

Którą relację w projekcie bazy danych należy ustalić między tabelami widocznymi na ilustracji zakładając, że każdy klient sklepu internetowego dokona przynajmniej dwóch zamówień?

Ilustracja do pytania
A. 1:n, gdzie 1 jest po stronie Klienta, a wiele po stronie Zamówienia
B. 1:n, gdzie 1 jest po stronie Zamówienia, a wiele po stronie Klienta
C. 1:1
D. n:n
Poprawnie wskazana relacja 1:n (jeden do wielu), gdzie „1” jest po stronie tabeli Klient, a „n” po stronie tabeli Zamówienie, dokładnie odzwierciedla opisany przypadek biznesowy: jeden klient sklepu internetowego może złożyć wiele zamówień, a każde zamówienie należy do jednego, konkretnego klienta. W praktyce projektowania relacyjnych baz danych oznacza to, że w tabeli Zamówienie umieszczamy klucz obcy (np. kolumnę id_klienta), który wskazuje na klucz główny w tabeli Klient (np. id_klienta jako PRIMARY KEY). To jest klasyczny przykład relacji nadrzędny–podrzędny (parent–child). Z mojego doświadczenia w systemach e‑commerce taka struktura jest standardem, bo pozwala łatwo wykonywać typowe kwerendy: wyszukiwanie wszystkich zamówień danego klienta, liczenie wartości zamówień na klienta, analizę historii zakupów. Dodatkowo założenie, że każdy klient dokona co najmniej dwóch zamówień, wpływa na tzw. krotność minimalną po stronie Zamówienia (min 2), ale nie zmienia samego typu relacji – nadal jest to 1:n. W modelu logicznym i fizycznym realizujemy to przez odpowiednie więzy integralności: klucz główny w tabeli Klient i klucz obcy w tabeli Zamówienie z ON DELETE RESTRICT lub CASCADE (w zależności od polityki biznesowej). Taka relacja ułatwia normalizację danych: dane klienta trzymamy w jednym miejscu, unikamy duplikacji w wielu zamówieniach, a w razie zmiany np. adresu e‑mail aktualizujemy tylko jeden rekord. W dobrze zaprojektowanych schematach (np. zgodnych z 3NF) dokładnie tak modeluje się powiązanie Klient–Zamówienie.

Pytanie 21

Wskaż zdanie, które jest nieprawdziwe w odniesieniu do poniższej definicji funkcji w języku C++? void zamien(float &x, float &y){ float tmp; tmp=x; x=y; y=tmp; }

A. Funkcja zwraca jakąś wartość
B. Funkcja nie zwraca żadnej wartości
C. Funkcja korzysta z parametrów przez referencję
D. Funkcja ma dwa argumenty
Funkcja zamien jest przykładem funkcji w języku C++, która nie zwraca wartości. Zdefiniowana jako 'void', co oznacza, że nie ma zwracanej wartości. W C++ typ zwracany przez funkcję jest kluczowym elementem definicji funkcji. W przypadku, gdy funkcja jest określona jako 'void', użytkownik nie powinien oczekiwać, że funkcja przekaże jakąkolwiek wartość po jej zakończeniu. Funkcja ta przyjmuje dwa argumenty typu 'float' przekazywane przez referencję, co pozwala na modyfikację ich wartości bezpośrednio w miejscu ich wywołania. Przykładowo, jeżeli zmienne 'x' i 'y' mają przypisane wartości 5.0 i 10.0 przed wywołaniem funkcji, po jej wykonaniu ich wartości zmienią się na odpowiednio 10.0 i 5.0. Oznacza to, że modyfikacja wartości zmiennych zewnętrznych jest możliwa dzięki użyciu referencji. W praktyce oznacza to także, że nie ma potrzeby korzystania z dodatkowych zmiennych do przechowywania wyników, co może być wydajniejsze. Funkcje 'void' są często stosowane w przypadkach, gdy operacje nie wymagają zwracania wyników, a jedynie modyfikacji przekazanych argumentów.

Pytanie 22

Efekt przedstawiony w filmie powinien być zdefiniowany w selektorze

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

Jak można w języku CSS ustawić kolor czerwony dla tekstu?

A. text-color: rgb(255,0,0);
B. color: rgb(255,0,0);
C. text-color: rgb(#FF0000);
D. color: rgb(#FF0000);
Odpowiedzi z 'color: rgb(#FF0000);', 'text-color: rgb(255,0,0);' oraz 'text-color: rgb(#FF0000);' są błędne z różnych powodów. W pierwszej odpowiedzi masz problem z tym, że '#' nie powinno być w funkcji rgb(). W RGB nie używamy znaku '#', bo to jest zarezerwowane dla notacji HEX, która nie podaje wartości liczbowych, tylko szesnastkowe znaki, takie jak '#FF0000'. Co do 'text-color', to niestety nie jest to poprawna właściwość CSS do zmiany koloru tekstu. Powinieneś używać 'color', która jest tym, co tak naprawdę definiuje kolor tekstu w CSS. Takie coś jak 'text-color' po prostu nie istnieje w CSS, co powoduje, że przeglądarki mogą mieć problemy z interpretacją stylów. Jeśli nie rozumiesz podstaw składni CSS, może to naprawdę frustrować, gdy pracujesz nad projektami webowymi, bo nieuzasadnione używanie właściwości nie przynosi efektów wizualnych, które chciałbyś uzyskać. Dlatego warto znać te zasady, żeby unikać pułapek w stylizacji stron.

Pytanie 24

Jaki jest cel poniższego fragmentu funkcji w JavaScript?

wynik = 0;
for (i = 0; i < tab.length; i++)
{
    wynik += tab[i];
}
A. wyświetlić wszystkie pozycje w tablicy
B. dodać stałą wartość do każdego elementu tablicy
C. przypisać do każdego elementu tablicy bieżącą wartość zmiennej i
D. obliczyć sumę wszystkich elementów tablicy
Podany fragment kodu w języku JavaScript ma za zadanie zsumować wszystkie elementy tablicy. Widzimy, że zmienna wynik jest inicjalizowana wartością 0 co jest standardową praktyką przy zliczaniu sumy. Następnie pętla for iteruje przez każdy element tablicy używając warunku i < tab.length co zapewnia że przechodzimy przez wszystkie indeksy tablicy od 0 do ostatniego. Wewnątrz pętli mamy instrukcję wynik += tab[i] która dodaje aktualny element tablicy do zmiennej wynik. Jest to typowe podejście do sumowania elementów tablicy i odpowiada standardowym praktykom w programowaniu. Dzięki temu możemy w prosty sposób uzyskać sumę elementów tablicy niezależnie od jej długości. Takie rozwiązanie jest nie tylko przejrzyste ale i efektywne z punktu widzenia złożoności obliczeniowej gdyż operuje w czasie liniowym O(n). Powyższy sposób zliczania jest uniwersalny i można go stosować w różnych językach programowania.

Pytanie 25

Jaką wartość zwróci funkcja napisana w języku C++, gdy jej argumentami są a = 4 i b = 3?

long int fun1(int a, int b) {
    long int wynik = 1;
    for (int i = 0; i < b; i++)
        wynik *= a;
    return wynik;
}
A. 1
B. 64
C. 16
D. 12
Funkcja fun1 jest przykładem implementacji potęgowania w języku C++. Przyjmuje dwa argumenty: a i b, gdzie a to podstawa, a b to wykładnik. W zmiennej wynik początkowo ustalamy wartość 1. W pętli for, która wykonuje się b razy, wartość a jest mnożona przez wynik. W przypadku przekazania a = 4 oraz b = 3, pętla wykonuje się trzy razy. Przy pierwszym przejściu wynik to 1 * 4 = 4, przy drugim 4 * 4 = 16, a przy trzecim 16 * 4 = 64. W rezultacie funkcja zwraca 64, co odpowiada 4^3. Takie podejście jest typowe w programowaniu, gdzie operacje są wykonywane w pętli, co jest zgodne z zasadami efektywności i prostoty kodu. W praktycznych zastosowaniach, takie funkcje są często wykorzystywane w algorytmach matematycznych, w modelowaniu zjawisk fizycznych czy w obliczeniach finansowych, gdzie potęgowanie jest niezbędne. Zrozumienie tego mechanizmu umożliwia kreatywne rozwiązywanie problemów programistycznych oraz pisanie bardziej zaawansowanych aplikacji.

Pytanie 26

W języku JavaScript zdefiniowano obiekt. Aby uzyskać wartość atrybutu, można użyć następującego zapisu:

obiekt = { q: 1, w: 2, e: 3, r:4 };
A. obiekt->w
B. obiekt::w
C. obiekt:w
D. obiekt.w
Odpowiedź 'obiekt.w' jest prawidłowa, ponieważ w JavaScript używamy notacji kropkowej do uzyskiwania dostępu do właściwości obiektów. W tym przypadku mamy obiekt zadeklarowany jako 'obiekt = { q: 1, w: 2, e: 3, r:4 };'. Aby uzyskać wartość przypisaną do właściwości 'w', wystarczy użyć notacji kropkowej i napisać 'obiekt.w', co zwróci wartość '2'. Tego typu dostęp do danych jest standardem w JavaScript i jest szeroko stosowany w projektach, co pozwala na efektywne i czytelne manipulowanie danymi. Przykładowo, możemy użyć tej techniki w funkcjach, które przetwarzają obiekty lub w kodzie, który reaguje na zdarzenia, gdzie często zachodzi potrzeba uzyskania konkretnych wartości z obiektów. Dobrą praktyką jest również używanie notacji kropkowej, gdy właściwości obiektu mają znane i stabilne nazwy, co zwiększa czytelność kodu.

Pytanie 27

Podstawowym celem korzystania z edytora WYSIWYG jest

A. szybka wizualizacja tworzonej strony
B. automatyzacja odtwarzania plików multimedialnych
C. ściąganie z Internetu pełnych portali WWW
D. wykrywanie błędów w bazie danych
Wskazanie innych odpowiedzi jako celów edytorów WYSIWYG sugeruje podstawowe nieporozumienia dotyczące ich funkcji i zastosowania. Wyszukiwanie błędów w bazie danych jest związane z procesami zarządzania danymi i programowaniem, nie zaś z edycją treści wizualnych. Edytory WYSIWYG nie służą do diagnozowania problemów z danymi, ale do tworzenia i edytowania treści, co jest zupełnie innym zadaniem. Pobieranie z Internetu kompletnych portali WWW również nie znajduje się w zakresie ich funkcji. Edytory te nie są narzędziami do pobierania, lecz do tworzenia treści, co oznacza, że ich głównym celem jest umożliwienie użytkownikom generowania zawartości, a nie przenoszenia istniejących portali. Zautomatyzowanie odtwarzania plików multimedialnych to kolejny aspekt, który nie jest bezpośrednio związany z edytorami WYSIWYG. Choć edytory mogą wspierać dodawanie multimediów, nie są one zaprojektowane do automatyzacji ich odtwarzania. Dlatego mylenie tych funkcji z celami edytorów WYSIWYG prowadzi do niewłaściwego zrozumienia ich roli w procesie tworzenia stron internetowych. Kluczowe jest zrozumienie, że WYSIWYG to narzędzia umożliwiające wizualny interfejs, a nie programy do zarządzania danymi czy automatyzacji poszczególnych procesów.

Pytanie 28

Aby wykonać usunięcie wszystkich wpisów z tabeli, należy użyć kwerendy

A. INSERT INTO
B. ALTER COLUMN
C. TRUNCATE TABLE
D. CREATE COLUMN
Odpowiedź 'TRUNCATE TABLE' jest prawidłowa, ponieważ jest to polecenie w języku SQL służące do usuwania wszystkich rekordów z tabeli w sposób efektywny i bezpieczny. W przeciwieństwie do polecenia 'DELETE', które również usuwa rekordy, 'TRUNCATE TABLE' działa znacznie szybciej, ponieważ nie rejestruje każdego usunięcia w dzienniku transakcji, co zmniejsza obciążenie systemu. Przykład zastosowania: jeśli mamy tabelę 'Pracownicy' i chcemy usunąć wszystkie dane przed jej ponownym załadowaniem, możemy użyć kwerendy 'TRUNCATE TABLE Pracownicy;'. Warto zauważyć, że 'TRUNCATE TABLE' nie tylko usuwa dane, ale również resetuje wszelkie automatyczne inkrementacje kluczy podstawowych w tabeli. Stosując to polecenie, zachowujemy integralność danych oraz optymalizujemy czas operacji, co jest zgodne z najlepszymi praktykami w zarządzaniu bazami danych.

Pytanie 29

Reguła CSS, która ustawia tekst paragrafu w pionie na środku, to:

A. vertical-align: middle
B. text-align: center
C. vertical-align: center
D. align: middle
Odpowiedzi, które zostały podane jako alternatywne, są niepoprawne z różnych powodów. 'Vertical-align: center' nie jest uznawane za poprawną regułę CSS, ponieważ nie istnieje właściwość 'center' w kontekście 'vertical-align'. Tylko wartości takie jak 'top', 'middle', 'bottom' oraz 'baseline' są dozwolone. Z kolei 'text-align: center' jest właściwością, która odpowiada za poziome centrowanie tekstu wewnątrz elementu blokowego lub kontenera, a nie za wyśrodkowanie w pionie. Użycie tej reguły sprawi, że tekst będzie wyśrodkowany w poziomie, co jest zupełnie inną operacją niż pionowe centrowanie. Ostatnia propozycja, 'align: middle', jest również niepoprawna, ponieważ nie jest to właściwość CSS. W kontekście wyśrodkowywania elementów w CSS, 'align' nie jest używane, a zamiast tego powinno się stosować 'vertical-align' lub techniki takie jak flexbox, które pozwalają na bardziej elastyczne i nowoczesne podejście do układania elementów. Zrozumienie różnicy między tymi właściwościami jest kluczowe dla efektywnego projektowania stron internetowych, ponieważ stosowanie niewłaściwych reguł może prowadzić do nieoczekiwanych rezultatów w układzie strony.

Pytanie 30

Na przedstawionej tabeli samochody wykonano zapytanie SQL SELECT

SELECT model FROM samochody WHERE rocznik = 2016;
idmarkamodelrocznikkolorstan
1FiatPunto2016czerwonybardzo dobry
2FiatPunto2002czerwonydobry
3FiatPunto2007niebieskibardzo dobry
4OpelCorsa2016grafitowybardzo dobry
5OpelAstra2003niebieskiporysowany lakier
6ToyotaCorolla2016czerwonybardzo dobry
7ToyotaCorolla2014szarydobry
8ToyotaYaris2004granatowydobry
A. Punto, Corsa, Astra, Corolla, Yaris.
B. Czerwony, grafitowy.
C. Punto, Corsa, Corolla.
D. Fiat, Opel, Toyota.
Twoja odpowiedź jest prawidłowa. Zapytanie SQL 'SELECT model FROM samochody WHERE rocznik = 2016' miało na celu wydobycie informacji o modelach samochodów z rocznika 2016 z tabeli 'samochody'. SQL (Structured Query Language) jest standardowym językiem służącym do manipulowania danymi w bazach danych. W tym przypadku, użyliśmy klauzuli WHERE do nakierowania zapytania na konkretne rekordy - te, dla których wartość w kolumnie 'rocznik' to 2016. Dlatego też poprawna odpowiedź to 'Punto, Corsa, Corolla', ponieważ to właśnie te modele samochodów są z rocznika 2016. To jest praktyczne zastosowanie zapytań SQL - pozwalają one na filtrowanie danych na podstawie konkretnych kryteriów. Dobrym zwyczajem jest tworzenie zapytań SQL, które są jak najbardziej precyzyjne, co przekłada się na efektywność i wydajność pracy z bazą danych.

Pytanie 31

W PHP, aby połączyć się z bazą danych MySQL przy użyciu biblioteki mysqli, w zapisie zamieszczonym poniżej, w miejscu litery 'c' powinno się wpisać

Ilustracja do pytania
A. hasło użytkownika
B. nazwę bazy danych
C. lokalizację serwera bazy danych
D. nazwę użytkownika
W języku PHP używając biblioteki mysqli do połączenia z bazą danych MySQL, jako drugi argument funkcji mysqli należy podać nazwę użytkownika. Konstruktor mysqli przyjmuje pięć głównych argumentów: lokalizację serwera, nazwę użytkownika, hasło użytkownika, nazwę bazy danych oraz opcjonalne port i socket. Nazwa użytkownika jest kluczowa, ponieważ określa, który użytkownik bazy danych będzie używany do połączenia. Najczęściej używanym użytkownikiem przy lokalnych połączeniach testowych jest 'root', ale w środowiskach produkcyjnych stosuje się bardziej restrykcyjne podejście, tworząc dedykowane konta z ograniczonymi uprawnieniami dostępowymi. Korzystając z odpowiednich danych uwierzytelniających, można także lepiej logować działania i zarządzać prawami dostępu. Dobra praktyka wymaga, aby hasło było przechowywane bezpiecznie, np. w plikach konfiguracyjnych poza dostępem zewnętrznym, a dane użytkownika zawsze były szyfrowane przy przesyłaniu. Znajomość poprawnej konfiguracji połączenia z bazą danych jest kluczowa dla bezpieczeństwa i wydajności aplikacji.

Pytanie 32

Domyślny użytkownik, który posiada pełne uprawnienia do zarządzania bazą danych w systemie MySQL, to

A. mysqld
B. root
C. sysadmin
D. admin
Poprawna odpowiedź to „root”, ponieważ w domyślnej instalacji MySQL to właśnie użytkownik root ma pełne, administracyjne uprawnienia do całego serwera baz danych. Jest to odpowiednik konta administratora systemu operacyjnego, ale w kontekście samego MySQL. Użytkownik root może tworzyć i usuwać bazy danych, zakładać nowych użytkowników, nadawać i odbierać im uprawnienia, wykonywać kopie zapasowe, przywracać dane, a także zmieniać konfigurację na poziomie serwera SQL. Z mojego doświadczenia wynika, że w środowiskach produkcyjnych raczej unika się codziennej pracy na koncie root, mimo że technicznie jest to możliwe. Zgodnie z dobrymi praktykami bezpieczeństwa tworzy się osobne konta z ograniczonymi uprawnieniami, np. użytkownika, który ma dostęp tylko do jednej konkretnej bazy i tylko do odczytu albo do odczytu i zapisu. Konto root zostawia się wyłącznie do zadań administracyjnych, takich jak migracje, zmiana schematu bazy, naprawa tabel czy zarządzanie użytkownikami. W praktyce, podczas pierwszej instalacji MySQL albo MariaDB, instalator prosi o ustawienie hasła dla użytkownika root – i to hasło powinno być mocne, unikalne i dobrze zabezpieczone. W środowiskach serwerowych często dodatkowo ogranicza się możliwość logowania rootem z zewnątrz, np. tylko z localhost, aby utrudnić ewentualne ataki z sieci. Warto też pamiętać, że w MySQL użytkownik identyfikowany jest nie tylko nazwą, ale też hostem, więc „root@localhost” to inny użytkownik niż „root@%”. W pracy zawodowej spotyka się też sytuację, że root ma wyłączone logowanie hasłem i używa się uwierzytelniania systemowego lub pluginów, ale to już bardziej zaawansowane scenariusze. Kluczowe jest to, że root jest kontem nadrzędnym, z pełnią praw, i trzeba z nim obchodzić się ostrożnie, bo jedno nieuważne polecenie może usunąć całą bazę produkcyjną.

Pytanie 33

Metoda i zmienna są widoczne tylko dla innych metod w obrębie tej samej klasy. Jaki modyfikator odpowiada przedstawionemu opisowi?

A. static
B. public
C. protected
D. private
Modyfikator 'private' w języku programowania Java, a także w innych językach obiektowych, jest kluczowym elementem kontrolowania dostępu do metod i zmiennych. Oznaczenie metody lub zmiennej jako 'private' sprawia, że jest ona dostępna wyłącznie dla wewnętrznych operacji klasy, co zwiększa bezpieczeństwo kodu i chroni przed niezamierzonymi modyfikacjami z zewnątrz. Przykładem zastosowania 'private' może być zmienna, która przechowuje ważne dane, takie jak hasło użytkownika w klasie zarządzającej danymi logowania. Dzięki temu, że jest ona prywatna, inne klasy nie mają możliwości jej odczytu lub zmiany, co ogranicza ryzyko naruszenia bezpieczeństwa. Dobra praktyka programistyczna zaleca stosowanie modyfikatora 'private' tam, gdzie to możliwe, aby implementować kapsułkowanie, co jest jedną z fundamentalnych zasad programowania obiektowego. Standaryzacja praktyk dostępu do danych w ten sposób wspiera łatwe zarządzanie kodem oraz jego przyszłą modyfikowalność.

Pytanie 34

Grafik pragnie zmienić obraz JPG na format PNG bez utraty jakości, tak aby w obszarach, gdzie pierwotnie był kolor biały, w finalnym obrazie występowała przezroczystość. W tym celu powinien

A. zaimportować obraz do edytora grafiki wektorowej
B. przekształcić obraz w odcienie szarości
C. dodać kanał alfa
D. zmniejszyć rozdzielczość obrazu
Dodanie kanału alfa do obrazu JPG, aby uzyskać przezroczystość w kolorze białym, jest najlepszym podejściem. Kanał alfa to dodatkowa warstwa informacji w pliku graficznym, która definiuje przezroczystość każdego piksela. W formacie PNG, kanał alfa umożliwia tworzenie przezroczystych tła, co jest szczególnie przydatne w projektach, gdzie elementy graficzne muszą być nakładane na różne tła. W praktyce, aby uzyskać pożądany efekt, grafik powinien użyć narzędzi do edycji grafiki, takich jak Adobe Photoshop, GIMP lub Inkscape. Po zaimportowaniu obrazu JPG, użytkownik może użyć funkcji selekcji koloru, aby zaznaczyć obszary białe, a następnie usunąć je, co wprowadzi przezroczystość w tych miejscach. Na końcu, obraz można zapisać jako PNG, co zachowa wprowadzone zmiany. Tego typu operacje są standardem w pracy z grafiką komputerową, szczególnie w projektach związanych z web designem i tworzeniem materiałów reklamowych.

Pytanie 35

Aby określić styl czcionki w CSS, należy zastosować właściwość

A. text-family
B. font-family
C. font-style
D. text-style
Stosowanie właściwości 'text-style' jest niepoprawne, ponieważ nie istnieje taka właściwość w standardzie CSS. Zamiast tego, do modyfikacji stylu tekstu służą inne właściwości, takie jak 'font-style' czy 'text-decoration', które pozwalają na zastosowanie kursywy lub podkreślenia, lecz nie definiują kroju czcionki. Z kolei 'font-style' odnosi się do stylizacji czcionki, a nie do jej wyboru. Pozwala on na ustawienie, czy czcionka ma być normalna, pochylona czy pogrubiona, ale nie określa, jakiego kroju czcionki używamy. To prowadzi do powszechnego błędu, kiedy użytkownicy myślą, że 'font-style' określa również krój, co jest nieprawdziwe. Z drugiej strony, 'text-family' nie jest uznawanym terminem w kontekście CSS, co może wprowadzać w błąd początkujących programistów. Ważne jest, aby zrozumieć, że właściwości CSS są ściśle zdefiniowane i korzystanie z nieprawidłowych terminów prowadzi do błędów w kodzie. Aby uniknąć takich nieporozumień, warto zapoznać się z dokumentacją CSS oraz standardami W3C, które dostarczają klarownych informacji na temat dostępnych właściwości i ich zastosowań.

Pytanie 36

Jaką wartość zwróci algorytm? ```Z = 0 N = 1 dopóki Z < 3: N = N * 2 + 1 Z = Z + 1 wypisz N```

A. 3
B. 5
C. 7
D. 15
Algorytm wykonuje pętlę dopóki wartość Z jest mniejsza niż 3. Na początku Z jest równe 0, a N jest równe 1. W każdej iteracji pętli N jest mnożone przez 2, a następnie do wartości N dodawana jest 1. W tym przypadku, po pierwszej iteracji, N = 1 * 2 + 1 = 3 oraz Z = 1. W drugiej iteracji N = 3 * 2 + 1 = 7 oraz Z = 2. W ostatniej iteracji N = 7 * 2 + 1 = 15 oraz Z = 3. Pętla kończy się, gdy Z osiąga wartość równą 3. Zatem ostateczna wartość N, która jest wypisywana, wynosi 15. Taki rodzaj algorytmu jest przykładam pętli iteracyjnej, która jest często stosowana w programowaniu do wykonywania powtarzalnych operacji. Umożliwia to efektywne przetwarzanie danych oraz automatyzację zadań. W praktyce, takie podejście mogą wykorzystywać inżynierowie oprogramowania do obliczeń matematycznych czy przetwarzania dużych zbiorów danych.

Pytanie 37

Aby utworzyć styl strony responsywnej dla ekranów o szerokości od 600 px do 800 px należy zastosować regułę CSS

A. @media screen and (max-width: 800px) and (min-width: 600px){/*style css*/}
B. @media (max-width: 800px) (min-width: 600px){/*style css*/}
C. @media screen (min-width: 800px) and (max-width: 600px){/*style css*/}
D. @media (min-width: 800px){/*style css*/}
Prawidłowa reguła to @media screen and (max-width: 800px) and (min-width: 600px){/*style css*/}, bo dokładnie określa zakres szerokości ekranu od 600 px do 800 px i robi to w sposób zgodny ze składnią CSS. Kluczowe są tu trzy elementy: słowo kluczowe screen, operator and oraz poprawna kolejność i zapis warunków min-width i max-width. Media queries działają tak, że przeglądarka sprawdza, czy wszystkie warunki połączone słowem and są spełnione. W tym przypadku styl zadziała tylko wtedy, gdy typ urządzenia to ekran (screen) i szerokość widoku (viewport) jest jednocześnie nie mniejsza niż 600 px i nie większa niż 800 px. To jest właśnie typowy zapis tzw. przedziału (range) w responsywnym CSS. W praktyce taki zakres wykorzystuje się np. do stylowania widoków tabletów w pozycji pionowej lub poziomej, w zależności od projektu. Możesz tam zmieniać układ kolumn z trzech na dwie, powiększać przyciski, dostosowywać rozmiary czcionek, marginesy, czy ukrywać mniej ważne elementy. Co ważne, użycie screen ogranicza stosowanie tych styli tylko do ekranów, a nie np. do wydruku (print), co jest zgodne z dobrą praktyką opisaną w specyfikacji CSS Media Queries Level 3 i nowszych. Z mojego doświadczenia dobrym nawykiem jest zawsze pilnować spójnych breakpointów, np. 480 px, 600 px, 768 px, 1024 px, i dla każdego z nich pisać media queries w dokładnie takim formacie, jak w tej poprawnej odpowiedzi. Ułatwia to późniejsze utrzymanie kodu i eliminuje dziwne „przeskoki” layoutu między rozdzielczościami. Dodatkowo warto pamiętać, że kolejność min-width i max-width nie ma znaczenia dla działania, ale przyjęcie jednej konwencji w projekcie mocno poprawia czytelność kodu zespołowego.

Pytanie 38

W języku PHP tablice asocjacyjne to tablice, w których

A. elementy tablicy są zawsze indeksowane od liczby równej 0.
B. istnieją przynajmniej dwa wymiary.
C. indeks jest dowolnym napisem.
D. w każdej komórce tablicy przechowywana jest inna tablica.
Prawidłowo – w PHP tablice asocjacyjne to takie, w których indeks (klucz) może być dowolnym napisem, czyli łańcuchem znaków. Z technicznego punktu widzenia PHP w ogóle nie rozróżnia osobnego typu „mapa” czy „słownik” – wszystko jest tablicą, a to, czy używasz indeksów numerycznych czy tekstowych, zależy wyłącznie od ciebie. Przykład: $uzytkownik = ['imie' => 'Jan', 'wiek' => 25, 'miasto' => 'Kraków']; Tutaj 'imie', 'wiek' i 'miasto' to właśnie napisy pełniące rolę kluczy. Dzięki temu kod staje się czytelniejszy, bo zamiast $dane[0], $dane[1] masz jasne $dane['imie'], $dane['wiek']. W praktyce takie tablice asocjacyjne bardzo często wykorzystuje się do przechowywania rekordów z bazy danych (np. wynik fetch_assoc w MySQLi), konfiguracji aplikacji, danych z formularzy ($_POST, $_GET) czy parametrów przekazywanych do funkcji. Co ważne, kluczem może być też liczba całkowita, ale w definicji tablic asocjacyjnych zwykle podkreśla się, że nie jesteśmy ograniczeni do automatycznego indeksowania 0,1,2,..., tylko możemy sami nadawać znaczące klucze tekstowe. W dobrych praktykach programowania webowego w PHP przyjmuje się, że tam, gdzie dane mają strukturę „nazwa pola → wartość”, używamy tablic asocjacyjnych, bo to zmniejsza ryzyko pomyłek i ułatwia późniejsze utrzymanie kodu. Moim zdaniem, im szybciej człowiek przyzwyczai się do świadomego używania kluczy tekstowych, tym łatwiej mu będzie później przeskoczyć na inne języki i struktury danych, jak mapy czy słowniki.

Pytanie 39

Polecenie GRANT w języku SQL służy do

A. umieszczania nowych danych w bazie.
B. odbierania użytkownikom praw do obiektów.
C. aktualizacji istniejących danych w bazie.
D. nadawania użytkownikom praw do obiektów.
Poprawnie – polecenie GRANT w SQL służy właśnie do nadawania użytkownikom praw do obiektów w bazie danych. W praktyce GRANT jest jednym z kluczowych narzędzi mechanizmu kontroli dostępu, czyli tzw. autoryzacji. Najpierw ktoś łączy się z bazą (to jest uwierzytelnianie – login/hasło, certyfikat itd.), a dopiero potem baza sprawdza, jakie uprawnienia ma ten użytkownik. I tu wchodzi GRANT. Administrator lub właściciel obiektu może przyznać użytkownikowi np. prawo SELECT do tabeli `klienci`, prawo INSERT do tabeli `zamowienia`, albo prawo EXECUTE do procedury składowanej. Składnia jest dość prosta, np.: `GRANT SELECT, INSERT ON klienci TO jan;`. W większości systemów (np. PostgreSQL, Oracle, MySQL/MariaDB, SQL Server) idea jest podobna, różnią się tylko szczegóły i nazwy ról czy typów uprawnień. W dobrych praktykach bezpieczeństwa nie daje się użytkownikom uprawnień typu „wszystko na wszystkim”, tylko dokładnie to, czego potrzebują (tzw. zasada najmniejszych uprawnień – least privilege). Moim zdaniem warto już na etapie nauki SQL odróżniać polecenia do pracy na danych (SELECT, INSERT, UPDATE, DELETE) od poleceń do zarządzania uprawnieniami, takich jak GRANT i REVOKE. W codziennej pracy administratora baz, programisty backendu czy nawet osoby od DevOps, GRANT pojawia się bardzo często: przy tworzeniu nowych kont aplikacyjnych, przy separacji środowisk (dev/test/prod), przy ograniczaniu dostępu do wrażliwych tabel, np. z danymi osobowymi. Dobre zrozumienie GRANT pomaga też szybko diagnozować błędy typu „permission denied” i świadomie projektować politykę bezpieczeństwa w systemie.

Pytanie 40

char str1[30] = 'Ala ma kota';
printf("%s", str1);
Wskaż, gdzie tkwi błąd w powyższym kodzie napisanym w języku C++?
A. W funkcji printf nie można używać formatowania %s.
B. Do funkcji printf przekazano za mało argumentów.
C. Tekst powinien być zawarty w cudzysłowie.
D. Tekst powinien mieć dokładnie 30 znaków.
Odpowiedź jest poprawna, ponieważ w języku C i C++, napisy muszą być ujęte w podwójne cudzysłowy, aby kompilator mógł je rozpoznać jako literały znakowe. W kodzie, który przedstawiono, użyto pojedynczych cudzysłowów, co jest niezgodne z regułami składniowymi tych języków. Poprawna definicja napisu powinna wyglądać następująco: char str1[30] = \"Ala ma kota\"; Ujęcie napisu w cudzysłowy pozwala na poprawne zainicjowanie tablicy typu char, co jest standardową praktyką w programowaniu w C/C++. Dzięki temu kompilator wie, że wszystkie znaki zawarte w cudzysłowie stanowią część jednego ciągu. Warto również zauważyć, że przy pracy z napisami w C, często używa się funkcji standardowych, takich jak strlen do obliczania długości napisu czy strcpy do kopiowania ciągów. Te funkcje są szeroko stosowane w praktyce i znajomość ich działania jest kluczowa dla efektywnego programowania. "