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: 15 kwietnia 2026 12:00
  • Data zakończenia: 15 kwietnia 2026 12:11

Egzamin zdany!

Wynik: 21/40 punktów (52,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

Instrukcję for można zastąpić inną instrukcją

A. switch
B. while
C. case
D. continue
Instrukcja `while` jest poprawnym zamiennikiem dla instrukcji `for` w kontekście iteracji, ponieważ obie służą do powtarzania bloków kodu, dopóki spełniony jest określony warunek. Główna różnica polega na sposobie deklaracji warunków iteracji. W instrukcji `for` często używamy jej do iteracji po znanym zakresie, np. od 0 do n, co jest typowe w wielu zastosowaniach, takich jak przetwarzanie elementów tablicy. Natomiast `while` idealnie nadaje się do sytuacji, gdzie liczba iteracji jest nieznana na początku i zależy od dynamicznie ocenianych warunków. Przykładem może być przetwarzanie danych, gdzie pętla `while` kontynuuje działanie, aż do momentu, gdy nie napotka na wartość końcową, co jest szczególnie przydatne w algorytmach przetwarzania strumieni danych. Ponadto, od strony wydajnościowej, wybór między `for` a `while` powinien być uzależniony od contextu, w jakim są używane. Dobrą praktyką jest dopasowanie rodzaju pętli do specyfiki problemu, co zwiększa czytelność i efektywność kodu.

Pytanie 2

W aplikacji internetowej komunikat powinien pojawiać się tylko wtedy, gdy dany użytkownik jest na stronie po raz pierwszy. Którą funkcję PHP należy w tym celu zastosować?

A. setcookie
B. session_destroy
C. mysqli_change_user
D. define
Prawidłowo – w tym zadaniu kluczowa jest funkcja setcookie(), bo to właśnie ciasteczka są standardowym mechanizmem do rozpoznawania, czy użytkownik był już wcześniej na danej stronie. W praktyce robi się to tak: przy pierwszym wejściu na stronę sprawdzasz, czy istnieje określone cookie, np. $_COOKIE['first_visit']. Jeśli go nie ma, wyświetlasz komunikat powitalny i ustawiasz ciasteczko za pomocą setcookie('first_visit', '1', time()+3600*24*365). Przy kolejnych wejściach cookie już będzie istniało, więc komunikat się nie pojawi. To jest bardzo typowy wzorzec np. dla banerów informujących o ciasteczkach, komunikatów onboardingowych czy jednorazowych podpowiedzi dla nowych użytkowników. Z mojego doświadczenia w webdevie to najprostsze i najbardziej przenośne rozwiązanie, bo działa niezależnie od sesji i logowania użytkownika – wystarczy przeglądarka z włączonymi cookies. Ważne jest też, żeby pamiętać o tym, że setcookie() musi być wywołane przed wysłaniem jakiegokolwiek outputu (czyli przed jakimkolwiek HTML, echo, BOM itd.), bo ciasteczka są wysyłane w nagłówkach HTTP. W bardziej rozbudowanych projektach często łączy się cookies z innymi mechanizmami (np. sesją czy bazą danych), ale do prostego sprawdzenia „czy użytkownik jest tu pierwszy raz” ciasteczko ustawiane setcookie() to według dobrych praktyk w zupełności wystarcza. Warto też dbać o parametry bezpieczeństwa ciastek (secure, httponly, samesite), szczególnie gdy później używamy tego mechanizmu do czegoś ważniejszego niż zwykły komunikat informacyjny.

Pytanie 3

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 Zamówienia, a wiele po stronie Klienta
B. 1:n, gdzie 1 jest po stronie Klienta, a wiele po stronie Zamówienia
C. 1:1
D. n:n
W tym zadaniu pułapka polega głównie na poprawnym zrozumieniu biznesowego sensu relacji. Opis mówi jasno, że mamy tabelę Klient i tabelę Zamówienie w sklepie internetowym oraz że każdy klient złoży co najmniej dwa zamówienia. To automatycznie sugeruje relację, w której pojedynczy klient jest powiązany z wieloma zamówieniami, ale każde konkretne zamówienie należy tylko do jednego klienta. Relacja 1:1 między Klientem a Zamówieniem byłaby sensowna wtedy, gdyby na jednego klienta przypadało dokładnie jedno zamówienie. W praktyce systemów sprzedażowych to bardzo rzadki przypadek i raczej zły model. Prowadziłby do sytuacji, że dla kolejnego zamówienia tego samego klienta trzeba by tworzyć nowy rekord klienta, czyli duplikować dane osobowe, adres, NIP itd. To łamie podstawowe zasady normalizacji (szczególnie pierwszą i trzecią postać normalną) i bardzo utrudnia późniejsze raportowanie. Relacja n:n sugeruje, że jedno zamówienie mogłoby należeć do wielu klientów, a jeden klient do wielu zamówień jednocześnie, przy czym do poprawnego odwzorowania takiej relacji trzeba by wprowadzić tabelę pośredniczącą, np. Klient_Zamówienie. W kontekście sklepu internetowego takie założenie jest nielogiczne: jedno zamówienie ma jednego właściciela, nie ma sensu aby ten sam koszyk zakupowy był przypisany do kilku różnych klientów. Relacja n:n jest typowa raczej dla powiązań typu Produkt–Zamówienie (wiele produktów w wielu zamówieniach), a nie Klient–Zamówienie. Z kolei relacja 1:n odwrócona, gdzie „1” jest po stronie Zamówienia, a „n” po stronie Klienta, oznaczałaby, że jedno zamówienie może być przypisane do wielu klientów. To dokładnie odwrócenie poprawnego modelu i w praktyce niewykonalne biznesowo – kto byłby płatnikiem, kto odbiorcą, jak liczyć historię zakupów? Taki projekt łamie też zasadę jednoznacznej odpowiedzialności rekordu: zamówienie powinno mieć jednego, jasno określonego właściciela. Typowym błędem myślowym przy takich pytaniach jest mylenie relacji Klient–Zamówienie z relacją Zamówienie–Produkt. Tam rzeczywiście często stosuje się n:n z tabelą pośrednią (pozycje zamówienia). Warto zawsze zatrzymać się i odpowiedzieć sobie na proste pytanie: czy ten obiekt może realnie „należeć” do więcej niż jednego innego obiektu? W przypadku zamówienia odpowiedź brzmi: nie, dlatego poprawnym podejściem jest właśnie relacja 1:n z jednym klientem i wieloma jego zamówieniami.

Pytanie 4

Do uruchomienia systemu CMS Joomla!, dla domyślnej konfiguracji, wymagane jest środowisko

A. Apache, PHP i MySQL
B. Python i MySQL
C. C++ i MySQL
D. IIS, PERL i MySQL
W tym pytaniu łatwo wpaść w pułapkę skojarzeń z innymi technologiami programistycznymi i zapomnieć, że Joomla! to konkretny system CMS napisany w określonym języku i zaprojektowany pod typowe środowisko serwerowe. Niektóre odpowiedzi wyglądają sensownie na pierwszy rzut oka, bo łączą język programowania z bazą danych, ale kompletnie mijają się z rzeczywistością techniczną Joomla!. Joomla! nie jest napisana w C++, więc środowisko C++ i MySQL w ogóle nie ma tutaj zastosowania. C++ oczywiście może być używany do tworzenia wysokowydajnych serwerów, silników gier czy komponentów systemowych, ale nie jest standardem w typowych CMS-ach webowych. Podobnie Python – bardzo popularny w aplikacjach webowych (Django, Flask), ale Joomla! nie korzysta z Pythona, więc nawet jeśli Python dobrze współpracuje z MySQL, to nie ma to znaczenia przy uruchamianiu tego konkretnego CMS. Kolejny trop to IIS, PERL i MySQL. IIS to serwer WWW od Microsoftu, PERL to stary, ale nadal używany język skryptowy. Da się na IIS uruchamiać różne technologie, ale Joomla! została zbudowana z myślą o PHP i serwerach zgodnych z typowym środowiskiem LAMP. PERL nie jest językiem, w którym powstała Joomla!, więc taki zestaw jest po prostu niekompatybilny z jej kodem. Typowy błąd myślowy przy tego typu pytaniach polega na tym, że ktoś patrzy: „jest język + jest baza danych, to pewnie zadziała”. Niestety tak to nie działa. Każdy CMS ma jasno określone wymagania środowiskowe, opisane w dokumentacji: wersja PHP, typ i wersja bazy danych, zalecany serwer HTTP, czasami konkretne rozszerzenia PHP. Dobre praktyki w administracji serwerami mówią, żeby zawsze sprawdzać oficjalne wymagania systemu, zamiast zgadywać na podstawie ogólnej wiedzy o programowaniu. W przypadku Joomla! takim wymaganiem jest właśnie PHP jako język, MySQL jako baza oraz typowe serwery WWW jak Apache (ewentualnie Nginx), a nie C++, Python czy PERL.

Pytanie 5

Projektant stworzył logo dla witryny internetowej. Jest to czarny symbol na przezroczystym tle. Aby zachować wszystkie cechy obrazu i umieścić go na stronie, projektant powinien zapisać obraz w formacie

A. JPEG
B. BMP
C. PNG
D. CDR
Format JPG (Joint Photographic Experts Group) jest powszechnie stosowany do zdjęć i grafik z dużą ilością kolorów, ale nie obsługuje przezroczystości. Z tego powodu nie sprawdzi się w przypadku logo, które wymaga przezroczystego tła. JPG jest formatem kompresji stratnej, co oznacza, że z każdym zapisaniem obrazu, jakość ulega pogorszeniu, co jest nieakceptowalne w kontekście profesjonalnego logo. BMP (Bitmap) to format, który oferuje bardzo wysoką jakość obrazu, ale jego pliki są znacznie większe, co może wpływać na czas ładowania strony internetowej. BMP nie obsługuje przezroczystości tła, co również czyni go niewłaściwym wyborem dla logo, które ma być umieszczone na różnych kolorowych tłach. CDR (CorelDRAW) to natomiast format plików wektorowych używany przede wszystkim w aplikacji CorelDRAW. Chociaż grafika wektorowa jest doskonała do tworzenia logo, format CDR nie jest standardem w sieci i nie może być bezpośrednio użyty na stronach internetowych bez konwersji do odpowiednich formatów rastrowych, jak PNG czy JPG. Dla powyższych powodów, wybór formatu PNG jest najbardziej logiczny i praktyczny w kontekście umieszczania logo na stronie internetowej.

Pytanie 6

Które z poleceń przyznaje użytkownikowi uczen najniższe uprawnienia w kontekście modyfikacji danych oraz struktury tabeli?

A. GRANT INSERT, DROP ON szkola.przedmioty TO uczen;
B. GRANT SELECT ON szkola.przedmioty TO uczen;
C. GRANT DROP ON szkola.przedmioty TO uczen;
D. GRANT ALTER, SELECT ON szkola.przedmioty TO uczen;
Patrząc na błędne odpowiedzi, można zauważyć, że większość z nich przyznaje użytkownikowi 'uczen' zbyt wiele uprawnień, które mogą prowadzić do niebezpiecznych sytuacji. Na przykład, opcja GRANT DROP ON szkola.przedmioty TO uczen pozwala na usunięcie całej tabeli 'przedmioty', co, moim zdaniem, jest zdecydowanie przesadą dla ucznia. Podobnie, jeśli dajemy GRANT ALTER, SELECT ON szkola.przedmioty TO uczen, to on może zmieniać strukturę tabeli, co dla kogoś, kto dopiero się uczy, nie jest dobrym pomysłem, bo mogą się pojawić błędy i problemy z danymi. Uprawnienia GRANT INSERT, DROP ON szkola.przedmioty TO uczen także są kiepskim pomysłem, bo taki użytkownik mógłby dodawać nowe wiersze czy usuwać istniejące, co znowu zagraża integralności danych. Często myślimy, że im więcej uprawnień damy, tym lepiej, ale w praktyce taka szeroka swoboda może przynieść więcej szkody niż pożytku. Dlatego ważne jest, żeby stosować zasadę minimalnych uprawnień i dokładnie przemyśleć, co naprawdę potrzebne, żeby uczeń mógł spokojnie uczyć się przedmiotów.

Pytanie 7

Aby uzyskać dane z tabeli pracownicy dotyczące jedynie osób, które ukończyły 26 lat, należy zastosować zapytanie

A. SELECT * FROM wiek WHERE pracownicy > 25
B. SELECT * FROM pracownicy AND wiek > 25
C. SELECT * FROM pracownicy WHERE wiek > 25
D. SELECT * FROM pracownicy OR wiek > 25
Aby wyświetlić rekordy z tabeli pracownicy, które dotyczą pracowników powyżej 26 roku życia, należy zastosować odpowiednie zapytanie SQL. Poprawne zapytanie to 'SELECT * FROM pracownicy WHERE wiek > 25;'. W tym przypadku, klauzula WHERE filtruje wyniki, zapewniając, że tylko ci pracownicy, którzy mają więcej niż 25 lat, zostaną zwróceni. Warto zauważyć, że w SQL operator '>' oznacza, że zwracane będą tylko rekordy, dla których warunek jest spełniony. Ponadto, wybranie wszystkich kolumn poprzez SELECT * jest powszechną praktyką, gdyż pozwala na uzyskanie pełnych informacji o pracownikach, bez konieczności wskazywania poszczególnych kolumn. Jest to zgodne z zasadami użycia SQL, gdzie operacje na danych są wykonywane poprzez polecenia definiujące wybrane tabele i warunki. Przykład zastosowania tego zapytania może być użyty w aplikacjach biznesowych, gdzie analiza wieku pracowników jest niezbędna do podejmowania decyzji kadrowych, a także w raportach dotyczących zatrudnienia. Takie zapytanie jest fundamentalne dla zarządzania danymi w relacyjnych bazach danych.

Pytanie 8

W pokazanym fragmencie zapytania w języku SQL, polecenie SELECT ma na celu uzyskanie wyników z komendy SELECT COUNT(wartosc) FROM....?

A. średnią wartości w kolumnie wartosc
B. sumę wartości w kolumnie wartosc
C. liczbę rekordów
D. średnią wartości w tabeli
W kontekście zapytania SQL, komenda SELECT COUNT(wartosc) ma na celu zwrócenie liczby wierszy w danej tabeli, które spełniają określone kryteria. Funkcja COUNT jest jedną z agregujących funkcji zapytań SQL, która zlicza liczbę niepustych wartości w kolumnie. Jeżeli argumentem funkcji jest konkretna kolumna, to zostaną zliczone tylko te wiersze, w których ta kolumna zawiera wartości, natomiast jeżeli użyjemy COUNT(*) bez podawania kolumny, zliczymy wszystkie wiersze tabeli, niezależnie od tego, czy kolumny zawierają wartości. Przykład praktyczny: jeśli mamy tabelę 'Zamówienia' i chcemy zliczyć liczbę dokonanych zamówień, można użyć zapytania SELECT COUNT(*) FROM Zamówienia; co zwróci całkowitą liczbę zamówień w tabeli. Istotne jest, aby zrozumieć, że COUNT zwraca liczbę wierszy, a nie sumę, średnią lub inne statystyki. W standardzie SQL nie ma specyfikacji, która by zmieniała tę funkcjonalność, co czyni ją uniwersalną w różnych bazach danych, takich jak MySQL, PostgreSQL, czy SQL Server.

Pytanie 9

Zawarte polecenie SQL wykonuje

UPDATE Uczen SET id_klasy = id_klasy + 1;
A. powiększyć wartość pola Uczen o jeden
B. ustalić wartość pola Uczen na 1
C. zwiększyć o jeden wartość w kolumnie id_klasy dla wszystkich rekordów tabeli Uczen
D. ustalić wartość kolumny id_klasy na 1 dla wszystkich rekordów w tabeli Uczen
Polecenie SQL, które analizujemy, to: `UPDATE Uczen SET id_klasy = id_klasy + 1;`. Jego celem jest zwiększenie wartości w kolumnie `id_klasy` o jeden dla wszystkich rekordów w tabeli `Uczen`. Wykorzystanie operacji `SET` w poleceniu `UPDATE` umożliwia modyfikację istniejących danych w bazie. W tym przypadku każda wartość w kolumnie `id_klasy` zostaje powiększona o jeden. To technika często stosowana przy aktualizacjach, gdzie potrzebujemy inkrementować wartości, np. w przypadku liczników, numeracji czy przesuwania pozycji. Stosowanie `UPDATE` zgodnie z dobrymi praktykami wymaga ostrożności, zwłaszcza przy operacjach masowych, aby unikać niezamierzonych zmian w danych. Ważne jest, aby przed wykonaniem takich operacji upewnić się, że kopia zapasowa danych jest dostępna, a operacja została przetestowana w środowisku testowym, aby uniknąć potencjalnych problemów w środowisku produkcyjnym.

Pytanie 10

Tabele: Studenci, Zapisy, Zajecia są powiązane relacją. Aby wybrać jedynie nazwiska studentów oraz odpowiadające im idZajecia dla studentów z grupy 15, należy wydać kwerendę

Ilustracja do pytania
A. SELECT nazwisko, idZajecia FROM Studenci INNER JOIN Zapisy WHERE grupa= 15;
B. SELECT nazwisko, idZajecia FROM Studenci JOIN Zapisy ON Studenci.id = Zapisy.idZajecia WHERE grupa = 15;
C. SELECT nazwisko, idZajecia FROM Studenci INNER JOIN Zapisy ON Studenci.id = Zapisy.idStudenta;
D. SELECT nazwisko, idZajecia FROM Studenci JOIN Zapisy ON Studenci.id = Zapisy.idStudenta WHERE grupa = 15;
W tej odpowiedzi zostało wszystko zrobione zgodnie z zasadami projektowania relacyjnych baz danych oraz praktyk SQL. Użycie JOIN zamiast starego stylu łączenia tabel przez przecinek i warunek WHERE to nie tylko kwestia czytelności, ale już od dawna standard branżowy. JOIN jasno pokazuje, na jakiej zasadzie łączą się tabele, w tym wypadku Studenci i Zapisy – łączymy po id studenta, bo tylko w taki sposób faktycznie powiążemy konkretne osoby z ich zapisami na zajęcia. WHERE grupa = 15 dodatkowo ogranicza wynik do tej konkretnej grupy studentów, co jest bardzo powszechną praktyką filtrowania wyników w zapytaniach. Przy bardziej złożonych systemach, gdzie mamy dużo relacji, taki zapis jest czytelny i łatwy do modyfikacji. Z mojego doświadczenia, jeżeli ktoś pracuje z większą ilością danych, czy nawet pisze bardziej skomplikowane raporty, to dokładnie taki zapis – z wyraźnie określonym JOIN-em i selekcją kolumn – bardzo ułatwia życie. Warto też pamiętać, że w praktyce biznesowej często chcemy wyciągnąć konkretną informację o użytkownikach lub powiązanych encjach, a nie wszystko naraz. W tym zadaniu to właśnie połączenie po idStudenta i selekcja po grupie daje najprecyzyjniejszy i najczystszy rezultat, zgodny i z logiką, i praktyką codziennej pracy z bazami danych.

Pytanie 11

.format1 {
    …
}
W CSS określono wspólne style dla pewnej grupy elementów. Użycie takich stylów w kodzie HTML odbywa się za pomocą atrybutu:
A. div = "format1"
B. id = "format1"
C. class = "format1"
D. style = "format1"
Użycie atrybutu class w języku HTML do formatowania grupy znaczników jest zgodne z najlepszymi praktykami web developmentu. Atrybut class pozwala na zastosowanie tej samej definicji stylu CSS do wielu elementów, co jest efektywne i utrzymuje porządek w kodzie. Umożliwia to również łatwą zmianę wyglądu strony poprzez modyfikację tylko jednej definicji CSS zamiast ręcznego edytowania stylów każdego z elementów z osobna. Dzięki takiemu podejściu, programista może szybko aktualizować wygląd całej strony lub jej części bez ryzyka, że pominięte zostaną pojedyncze elementy. Ponadto użycie klas jest zgodne ze standardami W3C, co zapewnia kompatybilność i poprawne renderowanie w różnych przeglądarkach. Praktycznym przykładem zastosowania jest stronie, gdzie wszystkie elementy z klasą .format1 będą miały jednolity wygląd, na przykład wszystkie przyciski na stronie mogą mieć jednakowy kolor i styl. Pozwala to na tworzenie spójnych interakcji użytkownika i ułatwia przyszłą rozbudowę strony o dodatkowe funkcje.

Pytanie 12

Używa się zapytania z klauzulą JOIN, aby

A. określić klucz obcy dla tabeli
B. uzyskać dane z dwóch tabel, które są ze sobą powiązane
C. otrzymać wynik tylko z jednej tabeli
D. wykonać funkcję agregującą
Zapytanie z klauzulą JOIN jest kluczowym narzędziem w języku SQL, które umożliwia łączenie danych z dwóch lub więcej tabel na podstawie relacji między nimi. Używając JOIN, możemy uzyskać bardziej złożone i użyteczne zestawienia danych, które nie byłyby możliwe do uzyskania, gdybyśmy korzystali tylko z pojedynczej tabeli. Na przykład, jeśli mamy tabelę klientów oraz tabelę zamówień, możemy z łatwością połączyć je, aby uzyskać informacje o tym, jakie zamówienia złożył dany klient. Przykładowe zapytanie może wyglądać tak: "SELECT klienci.imie, zamowienia.data FROM klienci JOIN zamowienia ON klienci.id = zamowienia.klient_id;" W takim przypadku wykorzystanie JOIN pozwala na integrowanie danych z obu tabel w jedną spójną odpowiedź. Takie podejście jest szeroko stosowane w branży, ponieważ standardy relacyjnych baz danych wymagają efektywnej organizacji i analizy danych, a JOIN jest jednym z podstawowych mechanizmów umożliwiających realizację takich zadań.

Pytanie 13

Który z elementów relacyjnej bazy danych, będący kodem w języku SQL, może być użyty w zapytaniach zmieniających kolumny danych przedstawiane w formie tabeli, niezależnie od tego, czy jest tworzony ręcznie, czy też dynamicznie?

A. Procedura składowa
B. Reguła
C. Funkcja zdefiniowana
D. Wyzwalacz
Reguła, wyzwalacz oraz procedura składowa to inne obiekty, które jednak nie spełniają wymogów opisanych w pytaniu. Reguły, które są defektem w SQL, pozwalają na określenie, jak dane powinny być modyfikowane, ale są mniej elastyczne i nie pozwalają na dynamiczne przetwarzanie. Nie są one już powszechnie używane w nowoczesnych systemach zarządzania bazami danych (DBMS), ze względu na problemy z wydajnością i zrozumiałością kodu. Wyzwalacze to mechanizmy uruchamiane automatycznie w odpowiedzi na określone operacje na danych, takie jak INSERT, UPDATE lub DELETE. Chociaż wyzwalacze mogą być przydatne do automatycznego przetwarzania danych, nie mogą być wywoływane bezpośrednio w zapytaniach SQL, co ogranicza ich zastosowanie w przypadku złożonych logik. Procedura składowa natomiast, choć może zawierać logikę modyfikacji danych i być wywoływana w odpowiedzi na określone zdarzenia, jest zdefiniowana jako zestaw instrukcji, który nie zwraca wartości ani nie może być używana bezpośrednio w zapytaniach modyfikujących kolumny danych. Procedury składowe są bardziej złożone, a ich wywołanie często wymaga dodatkowych parametrów oraz kontekstu, co czyni je mniej odpowiednimi w sytuacjach, w których potrzebna jest prostota i elastyczność.

Pytanie 14

Efekt przedstawiony w filmie powinien być zdefiniowany w selektorze

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

Pytanie 15

Z którego z pól klasy

class Dane {
    public $a;
    private $b;
    protected $c;
}
będzie można uzyskać dostęp z zewnątrz przy użyciu obiektu stworzonego jako instancja tej klasy?
A. Do pola $c.
B. Do wszystkich pól.
C. Do pola $b.
D. Do pola $a.
Odpowiedzi wskazujące na dostęp do wszystkich pól, pola $b oraz pola $c są wynikiem nieporozumienia dotyczącego zasad działania modyfikatorów dostępu w programowaniu obiektowym. Modyfikator public oznacza, że pole jest dostępne z każdego miejsca w kodzie, co jest prawdziwe tylko w przypadku pola $a. Natomiast pole $b, będące prywatnym, jest dostępne wyłącznie wewnątrz klasy Dane, co uniemożliwia dostęp z zewnątrz, co często prowadzi do błędnych wniosków, że wszystkie pola powinny być dostępne. W przypadku pola $c, które jest chronione, dostęp do niego mają tylko samodzielne instancje klasy oraz klasy pochodne, co również nie pozwala na dostęp z zewnątrz. W praktyce, wiele osób, które uczą się programowania obiektowego, może mylić te dwa poziomy dostępu i w konsekwencji przyjmować, że pola chronione mogą być używane w podobny sposób jak publiczne. Z tego powodu ważne jest zrozumienie podstawowych zasad modyfikatorów dostępu oraz ich wpływu na bezpieczeństwo i organizację kodu, co jest kluczowe w dobrych praktykach programowania.

Pytanie 16

Która z wymienionych funkcji sortowania w języku PHP służy do sortowania tablicy asocjacyjnej według kluczy?

A. sort()
B. rsort()
C. ksort()
D. asort()
Funkcja ksort() w języku PHP jest dedykowana do sortowania tablic asocjacyjnych według ich kluczy. Dzięki zastosowaniu tej funkcji, tablica zostaje uporządkowana w sposób rosnący, co jest szczególnie przydatne, gdy potrzebujemy danych w zorganizowanej formie lub gdy chcemy prezentować je użytkownikowi w logicznej kolejności. Przykładowo, jeśli mamy tablicę asocjacyjną, gdzie klucze reprezentują nazwy produktów, a wartości to ich ceny, użycie ksort() pozwoli nam posortować produkty alfabetycznie. Dobrą praktyką jest stosowanie ksort() w projektach, gdzie istotna jest czytelność i przejrzystość danych, co może mieć wpływ na UX (User Experience) aplikacji. Warto również pamiętać, że jeśli tablica zawiera różne typy kluczy, to sortowanie może prowadzić do nieoczekiwanych wyników. Z tego względu, ksort() jest najlepszym wyborem, gdyż spełnia wymagania standardów sortowania oraz zapewnia zgodność z dobrymi praktykami programistycznymi.

Pytanie 17

W SQL, aby uniemożliwić stworzenie konta przy wykonywaniu kwerendy CREATE USER, gdy konto już istnieje, można zastosować następującą składnię

A. CREATE USER OR DROP 'anna'@'localhost' IDENTIFIED BY 'yu&T%';
B. CREATE USER IF NOT EXISTS 'anna'@'localhost' IDENTIFIED BY 'yu&T%';
C. CREATE USER 'anna'@'localhost' IDENTIFIED BY 'yu&T%';
D. CREATE OR REPLACE USER 'anna'@'localhost' IDENTIFIED BY 'yu&T%';
Odpowiedź 'CREATE USER IF NOT EXISTS 'anna'@'localhost' IDENTIFIED BY 'yu&T%';' jest poprawna, ponieważ użycie klauzuli 'IF NOT EXISTS' pozwala na uniknięcie błędów w sytuacji, gdy konto użytkownika już istnieje w bazie danych. W praktyce oznacza to, że wykonanie tego polecenia nie spowoduje żadnej zmiany ani błędu, jeśli konto 'anna' jest już zdefiniowane, co jest szczególnie przydatne w skryptach automatyzujących tworzenie użytkowników. Dzięki temu można uniknąć powtarzania kodu sprawdzającego istnienie użytkownika przed jego utworzeniem. Zaleca się stosowanie tej formy w celu uproszczenia procesu zarządzania użytkownikami i zapewnienia, że skrypty wykonują się bez zakłóceń. W kontekście bezpieczeństwa, ważne jest używanie silnych haseł, jak w tym przykładzie, aby zabezpieczyć konta przed nieautoryzowanym dostępem. Warto także pamiętać o dobrych praktykach w zakresie nadawania uprawnień oraz regularnego przeglądania kont użytkowników, aby zapewnić, że wszystkie konta są wykorzystywane i zarządzane odpowiednio.

Pytanie 18

W bazie danych sklepu internetowego, w tabeli klienci znajdują się m.in. pola całkowite: punkty, liczbaZakupow oraz pole ostatnieZakupy o typie DATE. Klauzula WHERE dla zapytania wybierającego klientów, którzy mają ponad 3000 punktów lub dokonali zakupów więcej niż 100 razy, a ich ostatnie zakupy miały miejsce co najmniej w roku 2022, przyjmuje postać

A. WHERE punkty > 3000 OR liczbaZakupow > 100 OR ostatnieZakupy >= '2022-01-01'
B. WHERE punkty > 3000 AND liczbaZakupow > 100 OR ostatnieZakupy >= '2022-01-01'
C. WHERE (punkty > 3000 OR liczbaZakupow > 100) AND ostatnieZakupy >= '2022-01'
D. WHERE punkty > 3000 AND liczbaZakupow > 100 AND ostatnieZakupy >= '2022-01-01'
W przypadku pozostałych odpowiedzi pojawiają się istotne błędy związane z logiką stosowania operatorów w klauzuli WHERE. W pierwszej z niepoprawnych opcji zastosowano operator OR w połączeniu z operatorami AND, co prowadzi do niejednoznaczności w logice kwerendy. Taki zapis sugeruje, że każdy klient, który spełnia tylko jeden z podanych warunków, zostanie wybrany, co nie jest zgodne z wymaganiami zadania. W drugim przypadku, zastosowanie operatora AND dla wszystkich warunków implikuje, że klient musi jednocześnie spełniać wszystkie trzy warunki, co znacząco zawęża grupę wyników i może prowadzić do pominięcia klientów, którzy są wartościowi z punktu widzenia transakcji, ale nie spełniają wszystkich kryteriów jednocześnie. W ostatniej opcji również zastosowano operator AND we wszystkich warunkach, co jest niezgodne z zamysłem zapytania. Ważne jest, aby w takich sytuacjach dobrze rozumieć logikę operacji logicznych oraz ich konsekwencje w praktyce. Kluczowym błędem jest nieodpowiednie zrozumienie relacji między warunkami oraz ich wzajemnego wpływu na ostateczny wynik zapytania. W SQL istotne jest precyzyjne formułowanie zapytań, aby uniknąć niezamierzonych wyników, dlatego warto na etapie pisania schematów myśleć o logice, która będzie spełniać założone cele analizy danych.

Pytanie 19

W zaprezentowanym fragmencie dokumentu HTML ustalono stylowanie CSS dla selektora klasy "menu", aby kolor tła tego elementu był zielony. Które z poniższych określeń stylu CSS odpowiada temu stylowaniu?

<div class="menu"></div>
A. #menu { background-color: rgb(0,255,0); }
B. div:menu { color: green; }
C. menu { background-color: rgb(0,255,0); }
D. div.menu { background-color: green; }
Błędne odpowiedzi wynikają z niewłaściwego zastosowania selektorów w języku CSS. Selektor #menu sugeruje użycie ID, jednak w HTML identyfikator musi być unikalny, a zadanie dotyczy klasy, co implikuje użycie selektora klasy poprzedzonego kropką. Takie błędne użycie prowadzi do niezrozumienia podstawowej różnicy między klasami a identyfikatorami w CSS, co jest kluczowe w projektowaniu stron internetowych. Z kolei selektor menu { background-color: rgb(0,255,0); } jest niepoprawny, ponieważ nie odnosi się do konkretnego elementu. Chociaż specyfikacja CSS pozwala na selektory nazwane, najczęściej stosuje się je w kontekście semantycznym dla elementów HTML, a nie tych określonych przez klasy. Wreszcie, definicja div:menu { color: green; } używa błędnej składni, ponieważ pseudo-klasy w CSS są używane do stylizacji specyficznych stanów elementów, takich jak hover, active czy focus, a nie do stylizacji klas. Istotne jest zrozumienie, że użycie pseudo-klas wymaga odpowiedniego kontekstu, który w tym przypadku jest niepoprawnie użyty. Kluczem do poprawnego stosowania CSS jest zrozumienie specyfiki selektorów i ich właściwe wykorzystanie, co pozwala na efektywne zarządzanie stylem w projekcie webowym. Podstawową zasadą powinno być projektowanie stylów z myślą o ich wielokrotnym wykorzystaniu i utrzymaniu czystości kodu.

Pytanie 20

Przed przystąpieniem do tworzenia kopii zapasowej bazy danych, aby była ona poprawna i zdatna do późniejszego przywrócenia, konieczne jest sprawdzenie

A. opcji udostępnienia bazy danych
B. poprawności składni zapytań
C. uprawnień dostępu do serwera bazy danych
D. spójności bazy danych
Prawa dostępu do serwera bazy danych, możliwość udostępnienia bazy danych oraz poprawność składni zapytań to aspekty, które są istotne w kontekście zarządzania bazami danych, jednak nie mają one bezpośredniego wpływu na możliwość wykonania poprawnej kopii bezpieczeństwa. Sprawdzanie praw dostępu jest kluczowe z punktu widzenia bezpieczeństwa, ale nawet przy odpowiednich uprawnieniach, kopia zapasowa będzie bezwartościowa, jeśli dane są niezgodne lub uszkodzone. Możliwość udostępnienia bazy danych odnosi się do tego, czy inni użytkownicy mogą z niej korzystać, co również nie ma wpływu na integralność danych, które kopiujemy. Z kolei poprawność składni zapytań dotyczy aspektu komunikacji z bazą danych, a nie stanu samych danych. Właściwie skonstruowane zapytania mogą z powodzeniem zwrócić wynik, ale nie gwarantują, że dane, które chcemy zarchiwizować, są zgodne i spójne. Często w praktyce pomija się te elementy, koncentrując się na bezpośrednich aspektach zarządzania danymi, co może prowadzić do poważnych problemów po przywróceniu bazy z kopii zapasowej. Najważniejsze jest, aby przed wykonaniem kopiowania danych, zapewnić ich spójność, co jest fundamentem operacji backupu.

Pytanie 21

Czym jest relacja w bazach danych?

A. połączeniem dwóch pól jednej tabeli
B. algebraicznym powiązaniem tabel
C. kluczem podstawowym w relacji tabel
D. logicznym powiązaniem tabel
Niektóre odpowiedzi wskazujące, że relacja w bazach danych jest algebraicznym połączeniem tabel albo chodzi o klucz główny w relacji tabel, są trudne do przyjęcia. Bo relacje w bazach danych to nie tylko techniczne sprawy, ale przede wszystkim sposób łączenia różnych tabel. Używanie terminu 'algebraiczne połączenie' trochę mija się z celem, bo te relacje są bardziej związane z logiką niż z matematyką. Klucz główny jest ważny do identyfikacji rekordów, ale to nie jest to samo co relacja. To się przypina z założeniem, że relacja to połączenie pól w jednej tabeli, co całkowicie nie zgadza się z tym jak działają relacyjne bazy danych. Takie błędne myślenie może namieszać w projektowaniu baz danych i potem ciężko będzie robić złożone zapytania. Dlatego dobrze jest mieć jasność co do relacji, bo to klucz do skutecznego zarządzania danymi.

Pytanie 22

Jakie mechanizmy są kluczowe dla Systemu Zarządzania Bazą Danych?

A. Moduł do wizualizacji diagramów encji
B. Narzędzia do generowania statystyk
C. Wielodostępność do danych
D. System do zarządzania wersjami bazy danych
Wielodostępność danych jest kluczowym mechanizmem dla systemów zarządzania bazami danych (DBMS), ponieważ umożliwia równoczesny dostęp wielu użytkowników do tych samych danych bez konfliktów. W praktyce oznacza to, że wiele aplikacji lub użytkowników może korzystać z bazy danych w tym samym czasie, co jest niezbędne w wielu złożonych środowiskach, takich jak systemy bankowe, platformy e-commerce czy aplikacje społecznościowe. Mechanizm wielodostępności zapewnia integralność danych oraz ich spójność, co jest osiągane poprzez zastosowanie technik takich jak blokowanie, transakcje i izolacja. Przykładem praktycznym może być system zarządzania rezerwacjami hoteli, w którym wiele osób próbuje zarezerwować ten sam pokój w tym samym czasie. DBMS musi zastosować odpowiednie mechanizmy, aby zrealizować tylko jedną z tych rezerwacji, jednocześnie informując pozostałych użytkowników o braku dostępności. Dobrą praktyką w projektowaniu baz danych jest także przemyślane stosowanie poziomów izolacji transakcji, co pozwala na dostosowanie wydajności i spójności w zależności od potrzeb aplikacji.

Pytanie 23

Na ilustracji pokazano relację jeden do wielu. Łączy ona

Ilustracja do pytania
A. klucz obcy rezyserzy_id tabeli filmy z kluczem podstawowym id tabeli rezyserzy
B. klucz obcy rezyserzy_id tabeli filmy z kluczem obcym id tabeli rezyserzy
C. klucz podstawowy id tabeli filmy z kluczem podstawowym id tabeli rezyserzy
D. klucz podstawowy id tabeli filmy z kluczem obcym rezyserzy_id tabeli rezyserzy
Relacja jeden do wielu w bazach danych często wiąże się z sytuacją, gdzie jeden rekord w tabeli nadrzędnej może być powiązany z wieloma rekordami w tabeli podrzędnej. W tym kontekście tabela nadrzędna to rezyserzy posiadająca klucz podstawowy id, natomiast tabela podrzędna to filmy która odnosi się do tej wartości poprzez klucz obcy rezyserzy_id. Klucz podstawowy to unikalny identyfikator rekordu w tabeli, który pozwala na jednoznaczne rozróżnienie każdego rekordu. Klucz obcy natomiast jest atrybutem w tabeli podrzędnej, który odnosi się do klucza podstawowego w tabeli nadrzędnej. Jest to zgodne z teorią normalizacji baz danych, gdzie relacje jeden do wielu są standardowym podejściem do projektowania struktur danych. Użycie klucza obcego pozwala na utrzymanie integralności referencyjnej, co oznacza że każda wartość klucza obcego musi odpowiadać wartości klucza podstawowego w powiązanej tabeli lub być null, jeśli taka relacja jest dozwolona. Praktyczne zastosowanie tej relacji można zaobserwować w systemach zarządzania treścią, gdzie jeden autor (reżyser) może mieć przypisanych wiele artykułów (filmów), jednak każdy artykuł jest przypisany do jednego autora, co umożliwia na przykład efektywne zarządzanie danymi i generowanie raportów o twórczości danego autora.

Pytanie 24

Aby przedstawić dane w bazach danych, które spełniają określone kryteria, należy stworzyć

A. raport
B. formularz
C. makropolecenie
D. relację
Wybór relacji, formularza lub makropolecenia jako odpowiedzi na pytanie o prezentację danych spełniających określone warunki jest nieprawidłowy z kilku powodów. Relacja w bazach danych odnosi się do struktury danych, która opisuje związki między tabelami, a nie do sposobu ich prezentacji. Choć relacje są fundamentem, na którym opiera się przechowywanie i organizowanie danych, same w sobie nie oferują narzędzia do wyodrębniania czy przedstawiania informacji w przystępny sposób. Formularze z kolei są wykorzystywane głównie do wprowadzania danych do systemu, pozwalając użytkownikom na interakcję z bazą, jednak nie służą one do analizy ani prezentacji danych w formie zrozumiałej dla odbiorcy. Makropolecenia, choć mogą automatyzować pewne procesy związane z przetwarzaniem danych, również nie spełniają funkcji raportowania, ponieważ są narzędziem do wykonywania powtarzalnych operacji. Wybierając te odpowiedzi, można wpaść w pułapkę myślową, w której myli się funkcje narzędzi bazodanowych, co może prowadzić do błędnych decyzji w zakresie projektowania systemów informatycznych. Każde z tych narzędzi pełni swoją specyficzną rolę w ekosystemie baz danych, lecz tylko raporty są zaprojektowane z myślą o efektywnej prezentacji danych zgodnie z określonymi kryteriami.

Pytanie 25

W języku PHP do zmiennej a przypisano tekst, w którym wielokrotnie występuje słowo Kowalski. W celu zamiany wszystkich wystąpień słowa Kowalski na słowo Nowak w zmiennej a, należy użyć polecenia

A. $a = str_replace('Nowak', 'Kowalski');
B. $a = str_replace('Nowak', 'Kowalski', $a);
C. $a = str_replace('Kowalski', 'Nowak', $a);
D. $a = str_rep('Kowalski', 'Nowak', $a);
Inne odpowiedzi nie są do końca dobre, bo nie spełniają warunków dla str_replace. Z $a = str_replace('Nowak', 'Kowalski'); brakuje trzeciego argumentu, więc funkcja nie wie, na czym ma działać. Może się wydawać, że nazwa zmiennej nie ma znaczenia, ale w PHP, jak nie podasz zmiennej, to str_replace nie ma sensu. Ważne jest, żeby rozumieć, jak działa ta funkcja. W drugiej odpowiedzi $a = str_replace('Nowak', 'Kowalski', $a); znów źle zamieniasz, bo najpierw powinno być to, co chcesz zastąpić, a potem to nowe. Z kolei w $a = str_rep('Kowalski', 'Nowak', $a); masz literówkę w nazwie funkcji, co oczywiście powoduje błąd. Takie pomyłki się zdarzają, bo człowiek czasem nie zwraca uwagi na szczegóły. Dlatego warto korzystać z dokumentacji i mieć na oku detale, takie jak pisownia funkcji czy kolejność argumentów. W programowaniu detale są naprawdę ważne, bo ich zignorowanie często prowadzi do nieprzewidzianych efektów.

Pytanie 26

W bazie danych księgarni znajduje się tabela ksiazki, która zawiera pola: id, idAutor, tytul, ileSprzedanych, oraz tabela autorzy z polami: id, imie, nazwisko. Jak można utworzyć raport sprzedanych książek zawierający tytuły oraz nazwiska autorów?

A. konieczne jest stworzenie kwerendy, która wyszukuje tytuły książek
B. należy zdefiniować relację l..n pomiędzy tabelami ksiazki a autorzy, a następnie stworzyć kwerendę łączącą obie tabele
C. należy zdefiniować relację 1..1 pomiędzy tabelami ksiazki a autorzy, a następnie stworzyć kwerendę łączącą obie tabele
D. trzeba utworzyć dwie oddzielne kwerendy: pierwsza do wyszukiwania tytułów książek, druga do wyszukiwania nazwisk autorów
Relacja l..n między tabelami 'ksiazki' i 'autorzy' jest naprawdę ważna. To oznacza, że jeden autor może napisać kilka książek, co jest całkiem normalne w świecie księgarni. Dzięki tej relacji, dla każdego 'idAutor' w tabeli 'ksiazki' możemy mieć wiele wpisów, co super ułatwia powiązanie tytułów z autorami. Jakbyś stworzył kwerendę, która łączy te obie tabele, to bez problemu uzyskasz dane, które jasno pokazują te relacje. Na przykład, taka kwerenda SQL mogłaby wyglądać tak: SELECT ksiazki.tytul, autorzy.nazwisko FROM ksiazki JOIN autorzy ON ksiazki.idAutor = autorzy.id; Taki sposób działania jest zgodny z normalizacją danych, co sprawia, że nasze bazy danych będą efektywne i dobrze zorganizowane.

Pytanie 27

W języku CSS wprowadzono poniższe formatowanie:

p > i { color: blue; }
Oznacza to, że tekst w kolorze niebieskim będzie zapisany:
A. pogrubiony tekst akapitu
B. cały tekst nagłówków, bez względu na ich formatowanie
C. pochylony tekst akapitu
D. cały tekst akapitu, bez względu na jego formatowanie
W przypadku zrozumienia reguł CSS ważne jest, aby wiedzieć, jak różne selektory wpływają na wygląd elementów na stronie internetowej. Selekcja całego tekstu paragrafu niezależnie od jego formatowania wymagałaby użycia selektora p bezpośrednio, nie uwzględniając specyficznych potomków takich jak i. Pogrubiony tekst paragrafu jest zazwyczaj implementowany za pomocą tagu b lub strong, a nie i, który zgodnie z HTML jest przeznaczony dla tekstu pochyłego. Dlatego, aby stylizować pogrubiony tekst na niebiesko, należałoby użyć selektora p > b lub p > strong w zależności od użytego tagu. Jeśli chodzi o nagłówki, czyli elementy h1 h2 itd. ich stylizacja wymagałaby użycia selektorów odnoszących się bezpośrednio do tych elementów np. h1 {color: blue;} jeśli chcielibyśmy zmienić kolor całego nagłówka niezależnie od formatowania. Zrozumienie tych zasad pozwala tworzyć bardziej precyzyjne i czytelne style CSS. Typowym błędem jest mylenie selektorów kontekstowych z innymi typami selektorów co prowadzi do nieoczekiwanych wyników w wyglądzie strony. Taka wiedza jest fundamentalna w profesjonalnym projektowaniu stron internetowych i pozwala na lepszą kontrolę wizualną oraz semantyczną nad wybranymi elementami w strukturze dokumentu HTML co jest kluczowe w nowoczesnym web designie.

Pytanie 28

Który z poniższych sposobów na komentarz jednoliniowy jest akceptowany w języku JavaScript?

A. #
B. !
C. //
D. <!
W JavaScript, jeśli chcesz dodać komentarz jednoliniowy, musisz użyć podwójnych ukośników, czyli '//' na początku linii. Te komentarze są naprawdę przydatne, bo pozwalają ci opisać, co robi dany kawałek kodu, albo czasami wyłączyć fragmenty podczas testowania. Co fajne, to że wszystko, co napiszesz za '//' zostanie zignorowane przez interpreter, więc nie będzie miało wpływu na działanie skryptu. Przykład: masz linijkę 'let x = 5; // Ustawia wartość x na 5', i wszystko po '//' nie będzie brane pod uwagę przez JavaScript. Komentarze są zgodne z ECMAScript, który jest takim standardem dla tego języka. Szczerze mówiąc, dobrze jest używać komentarzy do dokumentacji, bo to ułatwia czytanie kodu i pracę z innymi programistami. Pamiętaj, żeby robić je zwięzłe, ale muszą też dobrze tłumaczyć, co miał na myśli autor kodu.

Pytanie 29

Przy założeniu, że użytkownik nie miał wcześniej żadnych uprawnień, polecenie SQL

GRANT SELECT, INSERT, UPDATE ON klienci TO anna;
nada użytkownikowi anna uprawnienia wyłącznie do
A. wybierania, wstawiania oraz aktualizacji danych we wszystkich tabelach w bazie o nazwie klienci
B. wybierania, wstawiania oraz aktualizacji danych w tabeli o nazwie klienci
C. wybierania, dodawania kolumn oraz zmiany struktury wszystkich tabel w bazie o nazwie klienci
D. wybierania, dodawania kolumn oraz zmiany struktury tabeli o nazwie klienci
Zrozumienie praw dostępu w bazach danych jest kluczowe dla bezpieczeństwa oraz efektywnego zarządzania danymi. Niepoprawne odpowiedzi często wynikają z mylącego interpretowania pojęć związanych z uprawnieniami. Na przykład, odpowiedź sugerująca, że użytkownik 'anna' ma możliwość dodawania pól w tabeli, jest błędna, ponieważ polecenie GRANT nie obejmuje uprawnień do modyfikacji struktury tabeli. Uprawnienia do dodawania kolumn (ALTER) są odrębną kategorią praw i muszą być przyznane w osobnym poleceniu. Kolejna nieprawidłowa koncepcja dotyczy rozumienia zakresu uprawnień. Odpowiedzi, które sugerują, że prawa te dotyczą wszystkich tabel w bazie danych, mylą pojęcie 'ON klienci' z szerszymi uprawnieniami, co mogłoby prowadzić do nadużyć. GRANT SELECT, INSERT, UPDATE na konkretnej tabeli 'klienci' dotyczy tylko tej tabeli, co jest zgodne z zasadą ograniczonego dostępu. Należy również pamiętać, że udzielanie zbyt szerokich uprawnień może narazić bazę danych na nieautoryzowane manipulacje, co jest sprzeczne z najlepszymi praktykami zarządzania bezpieczeństwem. W kontekście projektowania systemów bazodanowych, kluczowe jest zrozumienie oraz umiejętne zarządzanie uprawnieniami w celu zapewnienia odpowiedniego poziomu ochrony danych.

Pytanie 30

Ograniczanie dostępu do niektórych pól lub metod obiektów danej klasy, tak aby mogły być one wykorzystywane wyłącznie przez wewnętrzne metody tej klasy lub funkcje zaprzyjaźnione, to

A. konkatenacja
B. polimorfizm
C. dziedziczenie
D. hermetyzacja
Dziedziczenie to mechanizm, który pozwala na tworzenie nowych klas na podstawie już istniejących, co umożliwia ponowne wykorzystanie kodu i wprowadzanie hierarchii w projektach, jednak nie ma nic wspólnego z ukrywaniem pól i metod. W dziedziczeniu, klasy pochodne dziedziczą właściwości i metody klas bazowych, co sprawia, że możliwe jest ich wykorzystanie, a nie ukrycie. Kolejną koncepcją jest konkatenacja, która w kontekście programowania nie odnosi się do hermetyzacji, lecz do łączenia ciągów tekstowych, co nie ma zastosowania przy ukrywaniu danych w klasach. Polimorfizm natomiast to zdolność obiektów do przyjmowania wielu form, co jest związane z interfejsami i dziedziczeniem, ale również nie dotyczy hermetyzacji. Typowym błędem myślowym jest mylenie tych pojęć z hermetyzacją, ponieważ wszystkie one są fundamentami programowania obiektowego, lecz służą różnym celom. Zrozumienie tego rozróżnienia jest istotne dla prawidłowego stosowania technik programistycznych i wdrażania efektywnych rozwiązań w praktyce.

Pytanie 31

W formularzu dokumentu PHP znajduje się pole <input name="im">. Po tym, jak użytkownik wprowadzi ciąg znaków "Janek", aby dodać zawartość tego pola do bazy danych, w tablicy $_POST obecny jest element

A. im z następnym numerem indeksu
B. Janek z następnym numerem indeksu
C. im z indeksem Janek
D. Janek o indeksie im
W analizowanym pytaniu niepoprawne odpowiedzi wskazują różne błędne koncepcje dotyczące działania PHP i struktury tablicy $_POST. Przede wszystkim, w systemach opartych na PHP, po przesłaniu formularza, wartości pól formularza są przekazywane do tablicy $_POST, gdzie klucze odpowiadają nazwom pól w formularzu, a ich wartości odpowiadają użytkownikowi wprowadzonym danym. Odpowiedzi sugerujące, że "im" może mieć inny typ indeksu, jak "Janek" lub numer indeksu, są nieprecyzyjne i mylące. Klucz w tablicy $_POST to nazwa pola, co oznacza, że jest stały i niezmienny, niezależnie od wartości, którą użytkownik wprowadza. Ponadto, odpowiedzi, które sugerują istnienie "kolejnego numeru indeksu", mogą prowadzić do błędnego rozumienia konceptu tablic asocjacyjnych w PHP. Tablice asocjacyjne działają na zasadzie klucz-wartość, co oznacza, że klucz (w tym wypadku "im") jest zawsze powiązany z jedną wartością (tu: "Janek"). Błędne myślenie może również wynikać z nieznajomości podstaw PHP, gdzie wiele osób myli pojęcia klucza i wartości lub nie rozumie, że klucz jest stały i determinowany przez atrybut "name" w formularzu, a nie przez wartość wprowadzoną przez użytkownika. Zrozumienie tej zasadniczej różnicy jest kluczowe dla prawidłowego przetwarzania danych w formularzach oraz budowy bezpiecznych aplikacji webowych.

Pytanie 32

Jakie jest zastosowanie programu debugger?

A. badania kodu źródłowego w celu znalezienia błędów składniowych
B. interpretacji kodu w wirtualnej maszynie Java
C. tłumaczenia kodu napisanego w języku wyższego poziomu na język maszynowy
D. analizy wykonywanego programu w celu lokalizacji błędów
Program debugger to narzędzie, które umożliwia programistom analizę wykonywanego programu w celu lokalizacji błędów, co jest kluczowym elementem procesu tworzenia oprogramowania. Debuggery pozwalają na zatrzymywanie wykonania programu w określonych momentach, co pozwala na inspekcję stanu zmiennych oraz wywołań funkcji w danym momencie. Dodatkowo, wiele debuggerów oferuje możliwość krokowego przechodzenia przez kod, co ułatwia zrozumienie logiki programu i identyfikację błędów. Przykładem może być użycie debuggera w IDE, takich jak Visual Studio czy Eclipse, gdzie można ustawić punkty przerwania i obserwować zmiany w czasie rzeczywistym. Zastosowanie debuggera jest zgodne z najlepszymi praktykami branżowymi, które zalecają regularne testowanie i debugowanie kodu w trakcie jego pisania, co znacząco zwiększa jakość oprogramowania oraz przyspiesza proces developmentu. Warto również zaznaczyć, że dobra znajomość narzędzi debugujących jest niezbędna dla każdego programisty, aby efektywnie rozwiązywać problemy i dostarczać stabilne aplikacje.

Pytanie 33

Przedstawiony blok reprezentuje czynność

Ilustracja do pytania
A. wyświetlenia danych.
B. podjęcia decyzji.
C. zastosowania gotowej procedury lub funkcji.
D. wczytania danych.
Przedstawiony na rysunku blok w kształcie rombu nie służy ani do wczytywania danych, ani do ich wyświetlania, ani też do reprezentowania gotowej procedury lub funkcji. W klasycznej notacji schematów blokowych, stosowanej w podręcznikach, dokumentacji technicznej i w większości narzędzi CASE, romb jest jednoznacznie zarezerwowany dla operacji decyzyjnych, czyli sprawdzania warunku logicznego i rozgałęzienia przepływu sterowania. Wczytywanie danych z klawiatury, pliku czy formularza jest zwykle oznaczane blokiem równoległoboku. Taki blok opisuje operacje wejścia/wyjścia, czyli pobranie informacji z zewnątrz albo wypisanie jej na ekran, do pliku, do logów. Z mojego doświadczenia częsty błąd polega na tym, że ktoś widzi „coś się dzieje z danymi” i od razu kojarzy to z wejściem/wyjściem, a pomija aspekt logiki sterującej. Jednak w symbolice schematów blokowych kształt ma znaczenie ważniejsze niż skojarzenie słowne. Podobnie jest z wyświetlaniem danych. To też jest operacja wejścia/wyjścia, więc również powinna być przedstawiona jako równoległobok, a nie romb. Wyświetlanie niczego nie „decyduje”, ono jedynie prezentuje wynik, komunikat błędu, informacje dla użytkownika. Decyzja to zawsze sprawdzenie warunku: czy coś jest większe od czegoś, równe, czy jest puste, czy użytkownik ma uprawnienia, i na tej podstawie wybór dalszej ścieżki działania. Gotowa procedura lub funkcja też ma swój własny symbol – najczęściej prostokąt (czasem z podwójną krawędzią) oznaczający blok wykonawczy. Taki blok mówi: „tu wykonaj zdefiniowaną gdzieś indziej czynność”. Nie ma on jednak wbudowanego mechanizmu wyboru ścieżki. To tylko kolejny krok w sekwencji instrukcji. Typowym błędem myślowym jest utożsamianie „czegoś bardziej złożonego” z decyzją, ale z punktu widzenia schematu liczy się to, czy pojawia się warunek i rozgałęzienie. Romb na diagramie zawsze oznacza, że w tym miejscu algorytm zadaje pytanie typu TAK/NIE i w zależności od odpowiedzi kieruje przepływ dalej różnymi drogami. To jest sedno sterowania warunkowego, które później w kodzie przekłada się na instrukcje if, else, switch i podobne konstrukcje logiczne. Dlatego odpowiedzi sugerujące wczytywanie, wyświetlanie albo zastosowanie procedury nie pasują do tego symbolu – opisują inne klasy operacji w algorytmie, które mają inne, ściśle określone kształty na schemacie blokowym.

Pytanie 34

W języku PHP symbol "//" oznacza

A. początek komentarza jednoliniowego
B. operator alternatywy.
C. początek programu.
D. operator dzielenia całkowitego.
Znak "//" w PHP to początek komentarza jednoliniowego. Komentarze to naprawdę ważna część kodowania, bo dzięki nim można dodawać notatki, które wyjaśniają, co się dzieje w kodzie. Ułatwia to późniejsze zrozumienie przy pracy nad projektem. Kiedy programista wpisuje "//", mówi interpreterowi PHP, żeby zignorował wszystko, co znajduje się w tej linii po tym znaku. Dzięki temu można opisywać funkcje czy klasy albo tymczasowo wyłączać część kodu, gdy testujemy różne rzeczy. To dobra praktyka, bo czytelność i dokumentacja kodu są kluczowe, szczególnie w większych projektach. Przykładowo, można zobaczyć taki komentarz: // Funkcja oblicza sumę dwóch liczb function suma($a, $b) { return $a + $b; } Dzięki takiemu komentarzowi inny programista szybko zrozumie, co ta funkcja robi, co jest super ważne w sytuacjach, gdy w zespole jest więcej osób.

Pytanie 35

Jakie jest odstępstwo pomiędzy poleceniem DROP TABLE a TRUNCATE TABLE?

A. DROP TABLE usuwa tabelę, a TRUNCATE TABLE eliminuje wszystkie dane, zostawiając pustą tabelę
B. DROP TABLE usuwa tabelę, natomiast TRUNCATE TABLE modyfikuje dane w niej spełniające określony warunek
C. Obydwa polecenia usuwają tylko zawartość tabeli, ale tylko DROP TABLE może być przywrócone
D. Obydwa polecenia usuwają tabelę wraz z jej zawartością, jednak tylko TRUNCATE TABLE można cofnąć
Odpowiedź jest prawidłowa, ponieważ polecenie DROP TABLE całkowicie usuwa tabelę z bazy danych, łącznie z jej strukturą i danymi. Nie można jej później przywrócić, co oznacza, że wszelkie dane w niej zawarte zostaną na stałe utracone. Z kolei TRUNCATE TABLE jest poleceniem, które usuwa jedynie dane wewnątrz tabeli, ale sama tabela i jej struktura pozostają nienaruszone. Po wykonaniu TRUNCATE TABLE tabela staje się pusta, a jej definicja oraz wszystkie indeksy pozostają w bazie danych. Przykładowo, jeśli mamy tabelę 'Klienci' z danymi klientów, wykonanie TRUNCATE TABLE Klienci spowoduje, że tabela pozostanie, ale wszystkie rekordy zostaną usunięte. Wywołanie tych poleceń ma różne zastosowanie w praktyce; DROP TABLE można wykorzystać, gdy nie potrzebujemy tabeli, natomiast TRUNCATE TABLE jest przydatne, gdy chcemy szybko usunąć wszystkie dane z tabeli, zachowując jej strukturę dla przyszłych operacji.

Pytanie 36

Jaką klauzulę należy wykorzystać w instrukcji CREATE TABLE w SQL, by dane pole rekordu pozostawało wypełnione?

A. NOT NULL
B. NULL
C. CHECK
D. DEFAULT
Odpowiedź 'NOT NULL' jest poprawna, ponieważ klauzula ta jest używana w SQL do definiowania, że dane pole w tabeli nie może przyjmować wartości NULL, co oznacza, że musi zawierać jakąś wartość. Użycie klauzuli NOT NULL jest kluczowe w zapewnieniu integralności danych, szczególnie w sytuacjach, gdy brak wartości w danym polu może prowadzić do błędów w logice aplikacji lub nieprawidłowych wyników zapytań. Na przykład, w przypadku tworzenia tabeli dla użytkowników w systemie, pole 'email' powinno być oznaczone jako NOT NULL, aby zapobiec sytuacji, w której użytkownik mógłby zostać dodany bez podania adresu e-mail, co uniemożliwiłoby kontaktowanie się z nim. Dobrą praktyką jest również stosowanie klauzuli NOT NULL tam, gdzie dane są wymagane do poprawnego działania aplikacji. Użycie tej klauzuli jest zgodne z zasadami normalizacji baz danych, które z kolei mają na celu redukcję redundancji i poprawę integralności danych.

Pytanie 37

Aby przeanalizować rozkład ilościowy różnych kolorów na zdjęciu, jaka metoda powinna być zastosowana?

A. desaturacji
B. balansu kolorów
C. histogramu
D. rozmycia Gaussa
Desaturacja odnosi się do procesu usuwania nasycenia kolorów w obrazie, co prowadzi do uzyskania odcieni szarości. Chociaż desaturacja może być użyteczna w kontekście konwersji kolorowych zdjęć do czarno-białych, nie dostarcza informacji o rozkładzie ilościowym poszczególnych kolorów. Balans kolorów to technika, która pozwala na korekcję kolorów w obrazie, aby uzyskać bardziej naturalne odcienie. Proces ten polega na dostosowaniu proporcji kolorów podstawowych w zdjęciu, ale również nie umożliwia analizy jego rozkładu kolorów, co czyni go nieodpowiednim narzędziem w tym kontekście. Rozmycie Gaussa jest techniką stosowaną w obróbce obrazów do wygładzania i redukcji szumów, jednak w żaden sposób nie analizuje rozkładu kolorów w obrazie. Zamiast tego, rozmycie zmienia strukturę obrazu poprzez ułatwienie mieszania kolorów, co utrudnia, a nawet uniemożliwia uzyskanie informacji o ilości poszczególnych kolorów. Wszystkie te techniki, chociaż użyteczne w innych aspektach edycji zdjęć, nie są odpowiednie do oceny rozkładu kolorów, co czyni histogram jedynym właściwym wyborem w tym przypadku.

Pytanie 38

W MS SQL Server predefiniowana rola o nazwie dbcreator umożliwia użytkownikowi

A. zarządzanie zabezpieczeniami systemu
B. wykonywanie wszelkich operacji na serwerze oraz posiadanie praw do każdej bazy
C. tworzenie, aktualizowanie, usuwanie oraz przywracanie bazy danych
D. zarządzanie plikami na nośniku
Wszystkie pozostałe odpowiedzi są niepoprawne z punktu widzenia funkcji przypisanych do roli dbcreator w MS SQL Server. Stwierdzenie, że rola ta pozwala na wykonywanie każdej operacji na serwerze i posiadanie prawa własności każdej bazy, jest błędne, ponieważ taka funkcjonalność jest zarezerwowana dla roli sysadmin, która ma pełne uprawnienia serwera. Użytkownicy z rolą sysadmin mogą wykonywać jakiekolwiek operacje, co stawia ich w pozycji pełnej kontroli, w przeciwieństwie do roli dbcreator, która jest ograniczona do zarządzania bazami danych. Odnośnie zarządzania bezpieczeństwem systemu, to również nie jest odpowiednia funkcja dla dbcreator, ponieważ zarządzanie bezpieczeństwem wymaga bardziej zaawansowanych uprawnień, które są przydzielane innym rolom, takim jak securityadmin. W końcu, zarządzanie plikami na dysku nie wchodzi w zakres kompetencji dbcreator, ponieważ ta rola skupia się na operacjach związanych z bazami danych, a nie na zarządzaniu systemem plików czy innymi zasobami systemowymi. Te nieprawidłowe wnioski mogą wynikać z nieporozumienia dotyczącego funkcji ról w SQL Server, a także z braku znajomości hierarchii uprawnień oraz ich zastosowania w praktyce. Zrozumienie różnic między rolami jest kluczowe w kontekście efektywnego zarządzania bezpieczeństwem i dostępem w środowisku baz danych.

Pytanie 39

Podczas przechowywania hasła użytkownika serwisu internetowego (np. bankowości online), aby chronić je przed ujawnieniem, zazwyczaj stosuje się funkcję

A. cyklometrycznych.
B. mieszających.
C. klucza.
D. abstrakcyjnych.
Użycie klucza do zabezpieczenia haseł użytkowników w systemach takich jak bankowość internetowa jest kluczowym elementem zapewnienia prywatności i bezpieczeństwa danych. Funkcje klucza, takie jak szyfrowanie, pozwalają na przekształcenie haseł w nieczytelne ciągi znaków, które są niemożliwe do odtworzenia bez odpowiedniego klucza. Przykładem jest zastosowanie algorytmów takich jak AES (Advanced Encryption Standard), które są szeroko uznawane i stosowane w branży. Dobre praktyki w zakresie zabezpieczania danych sugerują używanie silnych, losowych kluczy oraz regularne ich aktualizowanie. Ponadto, najnowsze standardy, takie jak NIST (National Institute of Standards and Technology), rekomendują stosowanie dodatkowych technik, takich jak solenie haseł, co zwiększa ich odporność na ataki. Dzięki temu, nawet w przypadku wycieku bazy danych, potencjalny atakujący napotyka na trudności w odzyskaniu oryginalnych haseł. Zrozumienie i wdrożenie funkcji klucza jest niezbędne dla każdej organizacji, która pragnie skutecznie chronić wrażliwe dane swoich użytkowników.

Pytanie 40

idnazwiskoimiedata_urubezpieczony
✏️ Edytuj📋 Kopiuj⛔ Usuń1KowalskiJan2005-12-181
✏️ Edytuj📋 Kopiuj⛔ Usuń2NowakAdam2005-10-101
✏️ Edytuj📋 Kopiuj⛔ Usuń3WisniewskiAntoni2005-06-140
✏️ Edytuj📋 Kopiuj⛔ Usuń4LipskaAnna2006-04-121
✏️ Edytuj📋 Kopiuj⛔ Usuń5TomaszewskiPawel2006-07-110
✏️ Edytuj📋 Kopiuj⛔ Usuń6KostarzJulia2006-03-201
✏️ Edytuj📋 Kopiuj⛔ Usuń7BorewiczPatryk2007-06-211
✏️ Edytuj📋 Kopiuj⛔ Usuń8KoperskiBartlomiej2001-09-100
Które zapytanie w języku MySQL usunie z tabeli uczniowie uczniów urodzonych w czerwcu?
A. DELETE FROM `uczniowie` WHERE data_ur LIKE "%-06-%"
B. DROP FROM `uczniowie` WHERE data_ur == #-06-#
C. DELETE FROM `uczniowie` WHERE data_ur LIKE "?-06-?"
D. DROP FROM `uczniowie` WHERE data_ur LIKE "06"
Poprawnie wskazane zapytanie korzysta z instrukcji DELETE oraz operatora LIKE z odpowiednim wzorcem: "%-06-%". W kolumnie data_ur mamy daty zapisane w standardowym formacie ISO: RRRR-MM-DD, np. 2005-06-14. W takim formacie miesiąc zawsze znajduje się na pozycjach 6–7 i jest zapisany jako dwucyfrowa liczba z wiodącym zerem. Wzorzec "%-06-%" oznacza: dowolny ciąg znaków przed, dokładnie „-06-” w środku, oraz dowolny ciąg znaków po. Dzięki temu trafiamy w wszystkie daty, gdzie miesiąc to 06, czyli czerwiec, niezależnie od roku i dnia. To jest bardzo praktyczne podejście, gdy przechowujemy datę w typie DATE i chcemy filtrować po miesiącu bez dodatkowych funkcji. W MySQL operator LIKE działa na wartościach tekstowych, ale typ DATE jest w takim kontekście automatycznie konwertowany do postaci tekstowej w formacie 'YYYY-MM-DD', więc wzorzec z myślnikami jest jak najbardziej poprawny. W realnych projektach częściej stosuje się funkcje DATE_FORMAT albo MONTH(data_ur) = 6, bo to jest czytelniejsze i mniej podatne na pomyłki w zapisie wzorca. Jednak w tym zadaniu celem jest zrozumienie, jak działa LIKE, wildcard „%” oraz jak wygląda rzeczywisty format przechowywania daty. Dobrą praktyką jest też zawsze używanie pojedynczych cudzysłowów w SQL (np. '%-06-%'), choć MySQL akceptuje też podwójne w pewnych konfiguracjach. Moim zdaniem warto zapamiętać ten sposób myślenia: patrzysz na rzeczywisty zapis danych w kolumnie i dopasowujesz wzorzec tak, żeby trafić dokładnie ten fragment, który Cię interesuje (tu: '-06-').