JavaRush /Blog Java /Random-PL /Pytania do rozmowy kwalifikacyjnej w trybie Hibernate
Dr-JohnZoidberg
Poziom 41
Киев

Pytania do rozmowy kwalifikacyjnej w trybie Hibernate

Opublikowano w grupie Random-PL
Artykuł ten jest tłumaczeniem i ulepszeniem artykułów zagranicznych (lista zasobów znajduje się na końcu artykułu). Odpowiedzi na niektóre pytania są rozwinięte, podano linki do zasobów stron trzecich, które zawierają odpowiedzi, które mogą pojawić się w trakcie czytania. 1) Co to jest hibernacja? Jest to platforma do obiektowo-relacyjnego mapowania jednostek w tradycyjnych relacyjnych bazach danych. Główne cechy frameworka: 1) Automatyczne generowanie i aktualizacja tabel w bazach danych; 2) Ponieważ główne zapytania do bazy danych (zapisywanie, aktualizacja, usuwanie i wyszukiwanie) są prezentowane jako metody frameworka, kod pisany przez programistę jest znacznie skrócony; 3) Zapewnia użycie języka podobnego do SQL (HQL - język zapytań hibernacji). Zapytania HQL można pisać obok obiektów danych (klasy POJO przygotowane do pracy z bazą danych). 2) Jak zahibernowaćpomaga w programowaniu? Hibernate zaimplementowano szereg funkcji, które znacznie ułatwiają pracę programisty. — Jedną z tych funkcji jest to, że hibernacja pozwala programiście uniknąć pisania większości zapytań SQL (są już zaimplementowane, wystarczy skorzystać z metod udostępnianych przez framework). — Pod maską Hibernate kryje się szereg przydatnych narzędzi, które znacznie przyspieszają działanie aplikacji, z których najbardziej godne uwagi to dwupoziomowe buforowanie oraz dostrajanie opóźnionych i pobieranych wypłat. — Generuje tabele do samej bazy danych. 3) Metody konfiguracji pracy z Hibernacją. Istnieją cztery sposoby konfiguracji pracy z Hibernacją: - za pomocą adnotacji; - hibernacja.cfg.xml; - hibernacja.właściwości; - trwałość.xml. Najczęstszy sposób konfiguracji: poprzez adnotacje i plik generate.xml, podobnie jak w przypadku plików hibernate.properties i hibernate.cfg.xml, ważniejszy jest hibernate.cfg.xml (jeśli aplikacja ma obydwa pliki, to ustawienia z akceptowany jest plik hibernate.cfg.xml). Konfiguracja z adnotacjami, choć wygodna, nie zawsze jest możliwa; przykładowo, jeśli chcesz mieć różne konfiguracje encji dla różnych baz danych lub dla różnych sytuacji, powinieneś skorzystać z plików konfiguracyjnych xml. 4) Z jakich kluczowych interfejsów korzysta Hibernacja? Istnieje pięć kluczowych interfejsów używanych w każdej aplikacji związanej z Hibernacją: - Interfejs sesji; - Interfejs SessionFactory; — Interfejs konfiguracyjny; — Interfejs transakcyjny; — Interfejsy zapytań i kryteriów. 5) Jaka jest rola interfejsu sesji w Hibernacji? Sesja to główny interfejs odpowiedzialny za komunikację z bazą danych. Pomaga także tworzyć obiekty żądań w celu uzyskania trwałych obiektów. (obiekt trwały – obiekt, który już znajduje się w bazie; obiekt żądania – obiekt, który jest uzyskiwany w momencie otrzymania wyniku zapytania w bazie, z tym właśnie współpracuje aplikacja). Obiekt Session można uzyskać z SessionFactory: Session session = sessionFactory.openSession(); Rola interfejsu sesji: jest opakowaniem dla połączenia jdbc z bazą danych; (https://ru.wikipedia.org/wiki/Java_Database_Connectiv..) - jest fabryką transakcji (zgodnie z oficjalną dokumentacją transakcja - pozwala aplikacji na zdefiniowanie jednostek pracy, co w istocie oznacza, że ​​transakcja definiuje granice operacji związanych z bazą danych). — jest opiekunem obowiązkowej pamięci podręcznej pierwszego poziomu. 6) Jaka jest rola interfejsu SessionFactory w Hibernacji? To właśnie z obiektu SessionFactory pozyskujemy obiekty typu Session. Dla całej aplikacji istnieje tylko jedna fabryka SessionFactory, która jest inicjowana podczas uruchamiania aplikacji. SessionFactory buforuje metadane i zapytania SQL, które są często używane przez aplikację podczas działania. Buforuje również informacje otrzymane w jednej z transakcji i można je wykorzystać w innych transakcjach. Obiekt SessionFactory można uzyskać za pomocą następującego wywołania: SessionFactory sessionFactory = konfiguracja.buildSessionFactory(); 7) Jakie typy kolekcji są dostępne w Hibernate? Torba, zestaw, lista, mapa, tablica. 8) Co to jest kolekcja typu Bag i dlaczego się ją stosuje? W swojej implementacji typ kolekcji Bag jest bardzo podobny do Set, z tą różnicą, że Bag może przechowywać zduplikowane wartości. Torba przechowuje niezindeksowaną listę elementów. Większość tabel w bazie danych ma indeksy, które wyświetlają położenie elementu danych względem siebie; indeksy te są reprezentowane w tabeli jako osobna kolumna. W przypadku mapowania obiektowo-relacyjnego wartości kolumny indeksu są mapowane na indeks w tablicy, indeks na liście lub klucz na mapie. Jeśli potrzebujesz uzyskać kolekcję obiektów, które nie zawierają danych indeksowych, możesz skorzystać z kolekcji typu Bag lub Set (zbiory zawierają dane w formie nieposortowanej, ale można je posortować zgodnie z żądaniem). 9) Jaka jest różnica w działaniu metod Load();? i dostać();? metoda ładowania(); zwykle używane, gdy nie masz pewności, czy żądany obiekt znajduje się już w bazie danych. Jeżeli obiekt nie zostanie odnaleziony, to metoda zgłasza wyjątek.W przypadku odnalezienia obiektu metoda zwraca obiekt proxy, będący odnośnikiem do obiektu znajdującego się w bazie danych (żądanie do bazy nie zostało jeszcze wykonane, swego rodzaju leniwego pobierania), bezpośrednie żądanie do bazy danych, gdy uzyskujemy bezpośredni dostęp do wymaganego obiektu poprzez obiekt proxy. metoda get(); wówczas nie masz 100% pewności, czy żądany obiekt znajduje się w bazie danych. W przypadku dostępu do nieistniejącego obiektu metoda get(); zwróci wartość null. Jeżeli obiekt zostanie znaleziony, metoda get(); zwróci sam obiekt i zapytanie do bazy danych zostanie wykonane natychmiast. 10) Co pobiera Lazy w trybie hibernacji? Typ Lazy checkout w Hibernacji jest powiązany z elementami liścia (podrzędnymi) i definiuje wspólną politykę checkout, jeśli pojawi się żądanie pobrania encji nadrzędnej. Prosty przykład: Istnieje jednostka Dom. Przechowuje informacje o jego numerze, ulicy, liczbie mieszkań oraz informacje o rodzinach zamieszkujących mieszkania; rodziny te tworzą jednostkę podrzędną w stosunku do jednostki Dom. Kiedy prosimy o informacje na temat Domu, wiedza o rodzinach w nim mieszkających może być dla nas zupełnie zbędna, z pomocą przychodzi nam leniwe pobieranie, które pozwala nam skonfigurować encję Dom tak, aby informacje o rodzinach podawane były tylko na żądanie, jest to znaczące, zakłóca żądanie i przyspiesza aplikację. ©dev-bay Większość tabel w bazie danych ma indeksy, które wyświetlają położenie elementu danych względem siebie; indeksy te są reprezentowane w tabeli jako osobna kolumna. W przypadku mapowania obiektowo-relacyjnego wartości kolumny indeksu są mapowane na indeks w tablicy, indeks na liście lub klucz na mapie. Jeśli potrzebujesz uzyskać kolekcję obiektów, które nie zawierają danych indeksowych, możesz skorzystać z kolekcji typu Bag lub Set (zbiory zawierają dane w formie nieposortowanej, ale można je posortować zgodnie z żądaniem). 9) Jaka jest różnica w działaniu metod Load();? i dostać();? metoda ładowania(); zwykle używane, gdy nie masz pewności, czy żądany obiekt znajduje się już w bazie danych. Jeżeli obiekt nie zostanie odnaleziony, to metoda zgłasza wyjątek.W przypadku odnalezienia obiektu metoda zwraca obiekt proxy, będący odnośnikiem do obiektu znajdującego się w bazie danych (żądanie do bazy nie zostało jeszcze wykonane, swego rodzaju leniwego pobierania), bezpośrednie żądanie do bazy danych, gdy uzyskujemy bezpośredni dostęp do wymaganego obiektu poprzez obiekt proxy. metoda get(); wówczas nie masz 100% pewności, czy żądany obiekt znajduje się w bazie danych. W przypadku dostępu do nieistniejącego obiektu metoda get(); zwróci wartość null. Jeżeli obiekt zostanie znaleziony, metoda get(); zwróci sam obiekt i zapytanie do bazy danych zostanie wykonane natychmiast. 10) Co pobiera Lazy w trybie hibernacji? Typ Lazy checkout w Hibernacji jest powiązany z elementami liścia (podrzędnymi) i definiuje wspólną politykę checkout, jeśli pojawi się żądanie pobrania encji nadrzędnej. Prosty przykład: Istnieje jednostka Dom. Przechowuje informacje o jego numerze, ulicy, liczbie mieszkań oraz informacje o rodzinach zamieszkujących mieszkania; rodziny te tworzą jednostkę podrzędną w stosunku do jednostki Dom. Kiedy prosimy o informacje na temat Domu, wiedza o rodzinach w nim mieszkających może być dla nas zupełnie zbędna, z pomocą przychodzi nam leniwe pobieranie, które pozwala nam skonfigurować encję Dom tak, aby informacje o rodzinach podawane były tylko na żądanie, jest to znaczące, zakłóca żądanie i przyspiesza aplikację. ©dev-bay Większość tabel w bazie danych ma indeksy, które wyświetlają położenie elementu danych względem siebie; indeksy te są reprezentowane w tabeli jako osobna kolumna. W przypadku mapowania obiektowo-relacyjnego wartości kolumny indeksu są mapowane na indeks w tablicy, indeks na liście lub klucz na mapie. Jeśli potrzebujesz uzyskać kolekcję obiektów, które nie zawierają danych indeksowych, możesz skorzystać z kolekcji typu Bag lub Set (zbiory zawierają dane w formie nieposortowanej, ale można je posortować zgodnie z żądaniem). 9) Jaka jest różnica w działaniu metod Load();? i dostać();? metoda ładowania(); zwykle używane, gdy nie masz pewności, czy żądany obiekt znajduje się już w bazie danych. Jeżeli obiekt nie zostanie odnaleziony, to metoda zgłasza wyjątek.W przypadku odnalezienia obiektu metoda zwraca obiekt proxy, będący odnośnikiem do obiektu znajdującego się w bazie danych (żądanie do bazy nie zostało jeszcze wykonane, swego rodzaju leniwego pobierania), bezpośrednie żądanie do bazy danych, gdy uzyskujemy bezpośredni dostęp do wymaganego obiektu poprzez obiekt proxy. metoda get(); wówczas nie masz 100% pewności, czy żądany obiekt znajduje się w bazie danych. W przypadku dostępu do nieistniejącego obiektu metoda get(); zwróci wartość null. Jeżeli obiekt zostanie znaleziony, metoda get(); zwróci sam obiekt i zapytanie do bazy danych zostanie wykonane natychmiast. 10) Co pobiera Lazy w trybie hibernacji? Typ Lazy checkout w Hibernacji jest powiązany z elementami liścia (podrzędnymi) i definiuje wspólną politykę checkout, jeśli pojawi się żądanie pobrania encji nadrzędnej. Prosty przykład: Istnieje jednostka Dom. Przechowuje informacje o jego numerze, ulicy, liczbie mieszkań oraz informacje o rodzinach zamieszkujących mieszkania; rodziny te tworzą jednostkę podrzędną w stosunku do jednostki Dom. Kiedy prosimy o informacje na temat Domu, wiedza o rodzinach w nim mieszkających może być dla nas zupełnie zbędna, z pomocą przychodzi nam leniwe pobieranie, które pozwala nam skonfigurować encję Dom tak, aby informacje o rodzinach podawane były tylko na żądanie, jest to znaczące, zakłóca żądanie i przyspiesza aplikację. ©dev-bay bezpośrednie zapytanie do bazy danych, gdy uzyskujemy bezpośredni dostęp do wymaganego obiektu poprzez obiekt proxy. metoda get(); wówczas nie masz 100% pewności, czy żądany obiekt znajduje się w bazie danych. W przypadku dostępu do nieistniejącego obiektu metoda get(); zwróci wartość null. Jeżeli obiekt zostanie znaleziony, metoda get(); zwróci sam obiekt i zapytanie do bazy danych zostanie wykonane natychmiast. 10) Co pobiera Lazy w trybie hibernacji? Typ Lazy checkout w Hibernacji jest powiązany z elementami liścia (podrzędnymi) i definiuje wspólną politykę checkout, jeśli pojawi się żądanie pobrania encji nadrzędnej. Prosty przykład: Istnieje jednostka Dom. Przechowuje informacje o jego numerze, ulicy, liczbie mieszkań oraz informacje o rodzinach zamieszkujących mieszkania; rodziny te tworzą jednostkę podrzędną w stosunku do jednostki Dom. Kiedy prosimy o informacje na temat Domu, wiedza o rodzinach w nim mieszkających może być dla nas zupełnie zbędna, z pomocą przychodzi nam leniwe pobieranie, które pozwala nam skonfigurować encję Dom tak, aby informacje o rodzinach podawane były tylko na żądanie, jest to znaczące, zakłóca żądanie i przyspiesza aplikację. ©dev-bay bezpośrednie zapytanie do bazy danych, gdy uzyskujemy bezpośredni dostęp do wymaganego obiektu poprzez obiekt proxy. metoda get(); wówczas nie masz 100% pewności, czy żądany obiekt znajduje się w bazie danych. W przypadku dostępu do nieistniejącego obiektu metoda get(); zwróci wartość null. Jeżeli obiekt zostanie znaleziony, metoda get(); zwróci sam obiekt i zapytanie do bazy danych zostanie wykonane natychmiast. 10) Co pobiera Lazy w trybie hibernacji? Typ Lazy checkout w Hibernacji jest powiązany z elementami liścia (podrzędnymi) i definiuje wspólną politykę checkout, jeśli pojawi się żądanie pobrania encji nadrzędnej. Prosty przykład: Istnieje jednostka Dom. Przechowuje informacje o jego numerze, ulicy, liczbie mieszkań oraz informacje o rodzinach zamieszkujących mieszkania; rodziny te tworzą jednostkę podrzędną w stosunku do jednostki Dom. Kiedy prosimy o informacje na temat Domu, wiedza o rodzinach w nim mieszkających może być dla nas zupełnie zbędna, z pomocą przychodzi nam leniwe pobieranie, które pozwala nam skonfigurować encję Dom tak, aby informacje o rodzinach podawane były tylko na żądanie, jest to znaczące, zakłóca żądanie i przyspiesza aplikację. ©dev-bay
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION