Skip to content

Pytania egzaminacyjne (wykłady 1-4)

Sekcja 1 - Wyrażenia Lambda i interfejsy funkcyjne

Section titled “Sekcja 1 - Wyrażenia Lambda i interfejsy funkcyjne”

1. Czym jest wyrażenie lambda w Javie?

  • A) nową klasą bazową dziedziczoną przez wszystkie obiekty
  • B) instancją interfejsu funkcyjnego
  • C) słowem kluczowym języka Java
  • D) typem prymitywnym

Lambda to skrócona forma klasy anonimowej implementującej jedyną metodę abstrakcyjną interfejsu funkcyjnego.

2. Ile metod abstrakcyjnych musi mieć interfejs funkcyjny (SAM)?

  • A) dokładnie jedną
  • B) co najmniej dwie
  • C) zero
  • D) dowolną liczbę

SAM = Single Abstract Method. Interfejs może dodatkowo zawierać metody domyślne i statyczne.

3. Do czego służy adnotacja @FunctionalInterface?

  • A) tworzy lambdę automatycznie
  • B) pozwala kompilatorowi sprawdzić, że interfejs ma dokładnie jedną metodę abstrakcyjną
  • C) jest wymagana, aby interfejs był funkcyjny
  • D) włącza pełne programowanie funkcyjne w Javie

Interfejs z jedną metodą abstrakcyjną jest funkcyjny nawet bez adnotacji; adnotacja to tylko zabezpieczenie na poziomie kompilacji.

4. Które stwierdzenia o wyrażeniach lambda są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) są lukrem składniowym dla klas anonimowych
  • B) kompilator wyznacza typy argumentów z kontekstu (target typing)
  • C) wprowadzają do Javy pełny paradygmat funkcyjny zamiast obiektowego
  • D) redukują boilerplate code

Lambda realizuje koncept funkcyjny w sposób obiektowy (nadal jest instancją interfejsu), nie zastępuje paradygmatu obiektowego.

5. Który interfejs funkcyjny ma metodę boolean test(T t)?

  • A) Function
  • B) Consumer
  • C) Predicate
  • D) Supplier

Predicate<T> przyjmuje argument i zwraca boolean, stosowany do filtrowania i walidacji.

6. Interfejs, który nic nie przyjmuje, a zwraca wartość (T get()), to:

  • A) Consumer
  • B) Supplier
  • C) Function
  • D) Predicate

Supplier to dostawca danych, przeciwieństwo Consumera, który bierze argument i nic nie zwraca.

7. Który interfejs reprezentuje transformację T -> R metodą R apply(T t)?

  • A) Function<T,R>
  • B) BiFunction<T,U,R>
  • C) UnaryOperator<T>
  • D) Predicate<T>

Function<T,R> przekształca argument typu T na wynik typu R (często innego typu).

8. Czym jest UnaryOperator<T>?

  • A) interfejsem o dwóch argumentach
  • B) szczególnym przypadkiem Function<T,T> (wejście i wyjście tego samego typu)
  • C) interfejsem zwracającym boolean
  • D) interfejsem bez argumentów

UnaryOperator<T> to Function, w której typ wejścia i wyjścia jest taki sam.

9. BinaryOperator<T> to:

  • A) interfejs zwracający void
  • B) szczególny przypadek BiFunction<T,T,T> (dwa argumenty i wynik tego samego typu)
  • C) interfejs o jednym argumencie
  • D) interfejs przyjmujący Predicate

BinaryOperator<T> przyjmuje dwa argumenty typu T i zwraca wynik typu T, np. (a,b) -> a + b.

10. Zmienna lokalna użyta wewnątrz lambdy musi być:

  • A) statyczna
  • B) publiczna
  • C) final lub efektywnie final (effectively final)
  • D) typu prymitywnego

Lambda może korzystać tylko ze zmiennych lokalnych, które nie są modyfikowane po inicjalizacji.

11. Które z poniższych są wbudowanymi interfejsami funkcyjnymi z pakietu java.util.function? (możliwych wiele poprawnych odpowiedzi)

  • A) Predicate
  • B) Consumer
  • C) Iterator
  • D) Supplier

Iterator należy do java.util i nie jest interfejsem funkcyjnym w tym zestawieniu; pozostałe trzy są.

12. Czym jest “boilerplate code”?

  • A) kodem, który zwiększa wydajność programu
  • B) kodem powtarzalnym, wymaganym do działania, ale niewnoszącym wartości
  • C) kodem maszynowym generowanym przez JVM
  • D) komentarzem dokumentującym klasę

Boilerplate to kod, który “puchnie” i jest wielokrotnie powtarzany; lambdy go redukują.

13. Który interfejs ma metodę void accept(T t) i służy do efektów ubocznych (np. logowanie)?

  • A) Supplier
  • B) Function
  • C) Consumer
  • D) Predicate

Consumer<T> bierze argument i nic nie zwraca, typowo wykonuje akcję (wyświetlanie, zapis, log).

14. Które stwierdzenia o programowaniu funkcyjnym są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) funkcje mogą przyjmować i zwracać inne funkcje
  • B) styl jest deklaratywny (“co zrobić, a nie jak”)
  • C) opiera się głównie na mutowalnym stanie i pętlach
  • D) funkcje są najważniejszym narzędziem paradygmatu

Programowanie funkcyjne preferuje niemutowalność i rekurencję; styl imperatywny z pętlami jest cechą programowania obiektowego.

15. Metody and(), or(), negate() w interfejsie Predicate to metody:

  • A) abstrakcyjne
  • B) domyślne (default)
  • C) prywatne
  • D) konstruktory

Są to metody domyślne należące do interfejsu; Function.identity() czy BinaryOperator.minBy() są z kolei metodami statycznymi.

1. Czym różnią się kolekcje od tablic?

  • A) kolekcje przechowują tylko typy prymitywne
  • B) kolekcje nie mają stałego rozmiaru (rosną i maleją dynamicznie)
  • C) tablice nie mogą przechowywać obiektów
  • D) kolekcje są zawsze synchronizowane

Kolekcje dynamicznie zmieniają rozmiar i przechowują wyłącznie typy referencyjne (przez generyki).

2. Która kolekcja jest synchronizowana?

  • A) ArrayList
  • B) Vector
  • C) HashSet
  • D) LinkedList

Vector jest synchronizowany (jeden wątek), ArrayList nie. Przy rozszerzaniu Vector podwaja pamięć, ArrayList zwiększa o 50%.

3. Które stwierdzenia o HashSet i HashMap są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) HashSet nie dopuszcza duplikatów
  • B) HashMap umożliwia szybkie wyszukiwanie wartości po kluczu
  • C) gwarantują kolejność elementów wg dodania
  • D) dają bardzo szybki dostęp do elementów

Tablice haszujące nie gwarantują kolejności; HashSet szybko sprawdza istnienie elementu, HashMap szybko wyszukuje po kluczu.

4. Kiedy Stream API zostało dodane do Javy?

  • A) w Javie 6
  • B) w Javie 8
  • C) w Javie 11
  • D) od początku istnienia języka

Stream API (podobnie jak lambdy) pojawiło się w Javie 8.

5. Z ilu elementów składa się pipeline strumienia?

  • A) z dwóch: źródło i wynik
  • B) z trzech: źródło, operacje pośrednie, operacja końcowa
  • C) z czterech: źródło, filtr, mapowanie, zapis
  • D) z jednego: kolekcji

Pipeline: źródło -> operacje pośrednie (transformacje) -> operacja końcowa (wynik).

6. Które operacje są operacjami pośrednimi (zwracają nowy strumień)? (możliwych wiele poprawnych odpowiedzi)

  • A) filter()
  • B) map()
  • C) collect()
  • D) sorted()

collect() jest operacją końcową; filter, map, sorted to operacje pośrednie.

7. Które operacje są stateful (stanowe)? (możliwych wiele poprawnych odpowiedzi)

  • A) sorted()
  • B) map()
  • C) distinct()
  • D) limit()

Operacje stateful zależą od innych elementów lub przechowują stan; map i filter są stateless.

8. Co robi operacja distinct()?

  • A) sortuje elementy rosnąco
  • B) usuwa duplikaty, porównując elementy przez equals()
  • C) ogranicza liczbę elementów do n
  • D) pomija pierwsze n elementów

distinct() usuwa powtórzenia (na podstawie equals()), jest operacją stateful i zachowuje kolejność.

9. Która operacja jest operacją końcową (terminalną)?

  • A) filter()
  • B) map()
  • C) collect()
  • D) skip()

collect() kończy strumień i zbiera wynik do kolekcji lub innej struktury danych.

10. Co zwraca metoda count()?

  • A) int
  • B) long
  • C) Optional<Long>
  • D) boolean

count() zwraca liczbę elementów strumienia jako long.

11. Co zwraca findFirst()?

  • A) pierwszy element jako T
  • B) Optional<T>
  • C) boolean
  • D) long

findFirst() zwraca Optional<T>, bo strumień może być pusty.

12. Które stwierdzenia o strumieniu są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) strumień nie przechowuje danych, operuje na źródle
  • B) strumień nie modyfikuje źródła
  • C) strumień można przetwarzać wielokrotnie bez ponownego tworzenia
  • D) strumień jest jednorazowy

Strumień jest jednorazowy: aby użyć go ponownie, trzeba utworzyć go od nowa.

13. Do czego służy Collectors.groupingBy()?

  • A) dzieli elementy na dwie grupy true/false
  • B) grupuje elementy według klucza, zwracając Map<K, List<T>>
  • C) usuwa duplikaty
  • D) sortuje elementy

groupingBy(klasyfikator) tworzy mapę kluczy do list elementów; partitioningBy dzieli na true/false.

14. Jaki mechanizm wykorzystuje parallelStream()?

  • A) ThreadPoolExecutor
  • B) ForkJoinPool
  • C) ScheduledExecutorService
  • D) jeden wątek główny

parallelStream() dzieli dane na zadania i przetwarza je równolegle przy użyciu ForkJoinPool.

15. Kiedy NIE zaleca się używania parallelStream()? (możliwych wiele poprawnych odpowiedzi)

  • A) dla małych kolekcji
  • B) dla operacji zależnych od kolejności
  • C) dla dużych, niezależnych zbiorów danych z operacjami stateless
  • D) dla operacji z efektami ubocznymi lub blokujących

Równoległe przetwarzanie opłaca się dla dużych, niezależnych zbiorów; w pozostałych przypadkach bywa nieefektywne lub niebezpieczne.

Sekcja 3 - Aplikacje bazodanowe (JDBC) i GUI

Section titled “Sekcja 3 - Aplikacje bazodanowe (JDBC) i GUI”

1. Czym jest JDBC?

  • A) silnikiem bazy danych
  • B) standardowym API Javy do komunikacji z relacyjnymi bazami danych, niezależnym od silnika
  • C) językiem zapytań zastępującym SQL
  • D) frameworkiem ORM

JDBC (Java Database Connectivity) to warstwa pośrednicząca między JDK a DBMS.

2. Który element pakietu java.sql zarządza sterownikami i nawiązuje połączenia?

  • A) Connection
  • B) DriverManager
  • C) Statement
  • D) ResultSet

DriverManager to centralny punkt zarządzania sterownikami JDBC i nawiązywania połączeń.

3. Który typ sterownika JDBC jest najczęściej stosowany?

  • A) JDBC-ODBC bridge
  • B) Native API
  • C) Network protocol
  • D) Thin driver

Thin driver jest napisany w całości w Javie i łączy się bezpośrednio przez protokół sieciowy (np. jdbc:mysql://...).

4. Sterownik JDBC-ODBC bridge:

  • A) jest zalecany w nowych projektach
  • B) jest przestarzały i został usunięty w Javie 8
  • C) jest napisany w całości w Javie
  • D) łączy się bezpośrednio z bazą przez sieć

Most JDBC-ODBC tłumaczył wywołania JDBC na ODBC i został usunięty w Javie 8.

5. Które stwierdzenia o PreparedStatement są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) używa placeholderów ? (parametryzacja)
  • B) jest bezpieczny przed SQL Injection
  • C) nie może być użyty wielokrotnie
  • D) może być wielokrotnie wykonywany z różnymi wartościami

PreparedStatement oddziela kod SQL od danych, dzięki czemu chroni przed wstrzyknięciem SQL.

6. Która metoda służy do wykonywania zapytań SELECT?

  • A) executeUpdate(sql)
  • B) executeQuery(sql)
  • C) execute(sql) zawsze i wyłącznie
  • D) createStatement(sql)

executeQuery() zwraca ResultSet; executeUpdate() służy do INSERT/UPDATE/DELETE i zwraca liczbę wierszy.

7. Co zwraca metoda executeUpdate()?

  • A) ResultSet
  • B) boolean
  • C) liczbę zmodyfikowanych wierszy (int)
  • D) Connection

executeUpdate() dla INSERT/UPDATE/DELETE zwraca liczbę zmodyfikowanych wierszy.

8. Czym jest atak SQL Injection i jak się przed nim bronić?

  • A) atakiem na sieć, broni się go firewallem
  • B) wstrzyknięciem fragmentu SQL przez dane wejściowe; obroną jest PreparedStatement
  • C) błędem składni naprawianym przez try-catch
  • D) przepełnieniem bufora, broni się go zmianą typu kolumny

Klasyczny przykład to login ' OR '1'='1; PreparedStatement oddziela kod SQL od danych i neutralizuje atak.

9. Jak działa ResultSet?

  • A) jak lista, do której dodajemy elementy
  • B) jak iterator po wierszach; next() przesuwa kursor i zwraca false na końcu
  • C) jak mapa klucz-wartość
  • D) jak strumień jednorazowy bez kursora

ResultSet to wynik SELECT; kolumny odczytujemy po nazwie lub indeksie, a indeksy liczone są od 1.

10. Które stwierdzenia o transakcjach w Connection są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) setAutoCommit(false) wyłącza automatyczne zatwierdzanie
  • B) commit() zatwierdza transakcję
  • C) rollback() zatwierdza transakcję
  • D) rollback() wycofuje transakcję

commit() zatwierdza, a rollback() wycofuje zmiany; sterowanie transakcją wymaga wyłączenia autocommit.

11. Bazowym wyjątkiem dla błędów JDBC jest:

  • A) IOException
  • B) SQLException
  • C) RuntimeException
  • D) SQLTimeoutException

Po SQLException dziedziczą pozostałe wyjątki JDBC, więc można je obsłużyć w jednym bloku catch.

12. Który komponent Swing służy do wyświetlania danych w tabeli?

  • A) TableView
  • B) JTable
  • C) ObservableList
  • D) JScrollPane

W Swing dane tabelaryczne wyświetla JTable; w JavaFX odpowiednikiem jest TableView.

13. Z czym powiązany jest TableView w JavaFX, co daje automatyczne odświeżanie widoku?

  • A) z TableModel
  • B) z ObservableList
  • C) z ResultSet
  • D) z DefaultTableModel

TableView powiązany z ObservableList automatycznie odświeża widok przy zmianie danych; kolumny mapuje PropertyValueFactory.

14. Jakie są zalety wzorca DAO (Data Access Object)? (możliwych wiele poprawnych odpowiedzi)

  • A) separacja logiki biznesowej od operacji na bazie
  • B) łatwiejsze testowanie (możliwość podmiany na mock)
  • C) wymusza użycie tylko jednej konkretnej bazy danych
  • D) wymienność bazy danych (zmiany tylko w DAO)

DAO centralizuje operacje CRUD jednej encji w jednej klasie i realizuje architekturę warstwową GUI -> Service -> DAO -> Database.

15. Czym jest baza H2?

  • A) bazą NoSQL działającą tylko w chmurze
  • B) lekką relacyjną bazą napisaną w Javie, działającą w pamięci lub jako plik
  • C) narzędziem do budowania projektów Java
  • D) sterownikiem JDBC typu native

H2 jest szybka, nie wymaga instalacji i nadaje się do nauki oraz testów; Maven (z plikiem pom.xml) to z kolei narzędzie do zarządzania projektem.

1. Czym jest ORM (Object-Relational Mapping)?

  • A) silnikiem bazy danych
  • B) techniką mapowania obiektów Java na struktury relacyjnej bazy (encja - tabela, pole - kolumna)
  • C) językiem zapytań zastępującym SQL
  • D) sterownikiem JDBC

ORM automatyzuje CRUD przez metody (persist, merge, remove) i generuje SQL przez framework.

2. Jaka jest relacja między JPA a Hibernate?

  • A) Hibernate to standard, JPA to jego implementacja
  • B) JPA to specyfikacja (standard), Hibernate to jej implementacja
  • C) to dwa niezależne, niepowiązane frameworki
  • D) JPA i Hibernate to to samo

JPA definiuje kontrakt (interfejsy i adnotacje), Hibernate dostarcza konkretną realizację; implementacją JPA jest też EclipseLink.

3. Co jest wadą JDBC, którą rozwiązuje ORM? (możliwych wiele poprawnych odpowiedzi)

  • A) dużo kodu (boilerplate) i ręczne zamykanie zasobów
  • B) ręczne mapowanie ResultSet na obiekty Java
  • C) pełna kontrola nad zapytaniami SQL
  • D) silne powiązanie z konkretną bazą i słaba przenośność

Pełna kontrola nad SQL to zaleta JDBC, a nie wada; pozostałe punkty to wady, które ogranicza ORM.

4. Które elementy są wymagane, aby klasa była encją JPA? (możliwych wiele poprawnych odpowiedzi)

  • A) adnotacja @Entity
  • B) klucz główny oznaczony @Id
  • C) dziedziczenie po klasie Entity
  • D) konstruktor bezargumentowy

Encja wymaga @Entity, @Id oraz konstruktora bezargumentowego (wymaganego przez Hibernate).

5. Które komponenty są głównymi elementami JPA?

  • A) SessionFactory i Session
  • B) EntityManager i EntityManagerFactory
  • C) DriverManager i Connection
  • D) JpaRepository i CrudRepository

JPA operuje na EntityManager i EntityManagerFactory; Session/SessionFactory to API specyficzne dla Hibernate.

6. Ile stanów ma cykl życia encji w JPA?

  • A) dwa
  • B) trzy
  • C) cztery: transient, managed, detached, removed
  • D) pięć

Encja przechodzi przez stany: transient (nowy), managed (zarządzany), detached (odłączony), removed (do usunięcia).

7. W którym stanie zmiany encji są automatycznie synchronizowane z bazą (dirty checking)?

  • A) transient
  • B) managed
  • C) detached
  • D) removed

Encja managed jest śledzona przez persistence context; em.contains(entity) zwraca dla niej true.

8. Która adnotacja odpowiada relacji “wiele do wielu”?

  • A) @OneToMany
  • B) @ManyToOne
  • C) @OneToOne
  • D) @ManyToMany

@ManyToMany wymaga tabeli pośredniej, definiowanej przez @JoinTable (np. Student - Courses).

9. Do czego służy atrybut mappedBy?

  • A) określa nazwę tabeli
  • B) wskazuje właściciela relacji (stronę odwrotną, bez własnej tabeli pośredniej)
  • C) generuje klucz główny
  • D) włącza cache drugiego poziomu

mappedBy wskazuje, która strona jest właścicielem relacji; @JoinColumn definiuje klucz obcy.

10. Co robi wartość update właściwości hibernate.hbm2ddl.auto?

  • A) tworzy schemat od nowa, usuwając dane
  • B) aktualizuje schemat (dodaje kolumny/tabele), zachowując istniejące dane
  • C) tylko sprawdza zgodność schematu bez zmian
  • D) usuwa schemat przy zamknięciu aplikacji

update zachowuje dane; create tworzy schemat od nowa i usuwa poprzednie dane, validate tylko sprawdza zgodność.

11. Które stwierdzenia o cache pierwszego poziomu (L1) są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) jest automatyczny i zawsze włączony
  • B) jego zakresem jest Session / EntityManager
  • C) wymaga konfiguracji np. Ehcache
  • D) ponowne pobranie tej samej encji w sesji nie generuje zapytania SQL

L1 działa automatycznie w obrębie sesji; to L2 (współdzielony między sesjami) wymaga osobnej konfiguracji.

12. Które podejścia do operacji CRUD oferuje ORM? (możliwych wiele poprawnych odpowiedzi)

  • A) API ORM (persist, find, merge, remove)
  • B) JPQL / HQL
  • C) Criteria API i Native SQL
  • D) wyłącznie surowe zapytania ODBC

ORM umożliwia pracę przez API ORM, JPQL/HQL, Criteria API oraz Native SQL.

13. Co robi CascadeType.REMOVE?

  • A) zapisuje powiązane encje przy zapisie nadrzędnej
  • B) usuwa powiązane encje przy usunięciu encji nadrzędnej
  • C) aktualizuje powiązane encje detached
  • D) odświeża stan encji z bazy

REMOVE propaguje usunięcie na encje powiązane; należy go stosować ostrożnie, by uniknąć niezamierzonych usunięć.

14. Czym charakteryzuje się JpaRepository (Spring Boot) w hierarchii poziomów abstrakcji?

  • A) jest niskopoziomowym API Hibernate
  • B) jest wysokopoziomową abstrakcją z automatycznym CRUD i query derivation
  • C) jest standardem JPA niezależnym od implementacji
  • D) generuje bezpośrednio zapytania ODBC

JpaRepository to poziom high-level, korzystający wewnętrznie z EntityManager (Spring Data JPA).

15. Które stwierdzenia o JPQL / HQL są prawdziwe? (możliwych wiele poprawnych odpowiedzi)

  • A) operują na encjach i ich polach, a nie na tabelach
  • B) są niezależne od konkretnej bazy danych
  • C) wymagają ręcznego mapowania ResultSet
  • D) składnia jest zbliżona do SQL

JPQL/HQL piszemy w odniesieniu do encji (np. SELECT u FROM User u); ręczne mapowanie ResultSet to cecha czystego JDBC.