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 zwracaboolean, 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
Supplierto dostawca danych, przeciwieństwoConsumera, 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>toFunction, 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
Iteratornależy dojava.utili 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()czyBinaryOperator.minBy()są z kolei metodami statycznymi.
Sekcja 2 - Kolekcje i Stream API
Section titled “Sekcja 2 - Kolekcje i Stream API”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
Vectorjest synchronizowany (jeden wątek),ArrayListnie. Przy rozszerzaniuVectorpodwaja pamięć,ArrayListzwiększa o 50%.
3. Które stwierdzenia o HashSet i HashMap są prawdziwe? (możliwych wiele poprawnych odpowiedzi)
- A)
HashSetnie dopuszcza duplikatów - B)
HashMapumoż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;
HashSetszybko sprawdza istnienie elementu,HashMapszybko 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,sortedto 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;
mapifiltersą 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 podstawieequals()), 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 jakolong.
11. Co zwraca findFirst()?
- A) pierwszy element jako
T - B)
Optional<T> - C)
boolean - D)
long
findFirst()zwracaOptional<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;partitioningBydzieli 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życiuForkJoinPool.
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
DriverManagerto 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
PreparedStatementoddziela 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()zwracaResultSet;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;PreparedStatementoddziela 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 zwracafalsena końcu - C) jak mapa klucz-wartość
- D) jak strumień jednorazowy bez kursora
ResultSetto 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, arollback()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
SQLExceptiondziedziczą pozostałe wyjątki JDBC, więc można je obsłużyć w jednym blokucatch.
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 jestTableView.
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
TableViewpowiązany zObservableListautomatycznie odświeża widok przy zmianie danych; kolumny mapujePropertyValueFactory.
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.
Sekcja 4 - ORM, JPA i Hibernate
Section titled “Sekcja 4 - ORM, JPA i Hibernate”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
ResultSetna 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,@Idoraz konstruktora bezargumentowego (wymaganego przez Hibernate).
5. Które komponenty są głównymi elementami JPA?
- A)
SessionFactoryiSession - B)
EntityManageriEntityManagerFactory - C)
DriverManageriConnection - D)
JpaRepositoryiCrudRepository
JPA operuje na
EntityManageriEntityManagerFactory;Session/SessionFactoryto 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 niejtrue.
8. Która adnotacja odpowiada relacji “wiele do wielu”?
- A)
@OneToMany - B)
@ManyToOne - C)
@OneToOne - D)
@ManyToMany
@ManyToManywymaga 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
mappedBywskazuje, która strona jest właścicielem relacji;@JoinColumndefiniuje 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
updatezachowuje dane;createtworzy schemat od nowa i usuwa poprzednie dane,validatetylko 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
REMOVEpropaguje 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
JpaRepositoryto poziom high-level, korzystający wewnętrznie zEntityManager(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 mapowanieResultSetto cecha czystego JDBC.