JavaRush /Blog Java /Random-VI /Câu hỏi phỏng vấn ngủ đông
Dr-JohnZoidberg
Mức độ
Киев

Câu hỏi phỏng vấn ngủ đông

Xuất bản trong nhóm
Bài viết này là bản dịch và cải tiến của các bài viết nước ngoài (danh sách nguồn được liệt kê ở cuối bài viết). Câu trả lời cho một số câu hỏi được mở rộng, các liên kết đến tài nguyên của bên thứ ba được cung cấp chứa các câu trả lời có thể phát sinh trong quá trình đọc. 1) Ngủ đông là gì? Nó là một khung để ánh xạ quan hệ đối tượng của các thực thể vào cơ sở dữ liệu quan hệ truyền thống. Các tính năng chính của khung: 1) Tự động tạo và cập nhật bảng trong cơ sở dữ liệu; 2) Vì các truy vấn chính tới cơ sở dữ liệu (lưu, cập nhật, xóa và tìm kiếm) được trình bày dưới dạng các phương thức của khung, mã mà nhà phát triển viết sẽ giảm đáng kể; 3) Cung cấp việc sử dụng ngôn ngữ giống SQL (HQL - ngôn ngữ truy vấn ngủ đông). Các truy vấn HQL có thể được viết cùng với các đối tượng dữ liệu (các lớp POJO được chuẩn bị để làm việc với cơ sở dữ liệu). 2) Cách ngủ đông помогает в программировании? Hibernate реализует ряд фичь которые значительно упрощают работу разработчика. — Одной из таких фичь является то, что hibernate позволяет разработчику избежать написания большинства SQL requestов (они уже реализованы , вам надо просто использовать методы которые предоставляет фреймворк). — Под бортом у Hibernate есть куча полезных инструментов которые значительно ускоряют работу applications, самыми примечательными из них являются двухуровневое кэширования и тонкие настройки lazy и fetch изъятия. — Сам генерирует таблицы в базу данных. 3) Способы конфигурации работы с Hibernate. Существует четыре способа конфигурации работы с Hibernate : — используя аннотации; — hibernate.cfg.xml; — hibernate.properties; — persistence.xml. Самый частый способ конфигурации : через аннотации и файл persistence.xml, что касается файлов hibernate.properties и hibernate.cfg.xml, то hibernate.cfg.xml главнее (если в приложение есть оба file, то принимаются настройки из file hibernate.cfg.xml). Конфигурация annotationми, хоть и удобна, но не всегда возможна, к примеру, если для разных баз данных or для разных ситуаций вы хотите иметь разные конфигурацию сущностей, то следует использовать xml файлы конфигураций. 4) Какие ключевые интерфейсы использует Hibernate? Существует пять ключевых интерфейсов которые используются в каждом приложении связанном с Hibernate: — Session interface; — SessionFactory interface; — Configuration interface; — Transaction interface; — Query and Criteria interfaces. 5) Какая роль интерфейса Session в Hibernate? Session — это основной интерфейс, который отвечает за связь с базой данных. Так же, он помогает создавать an objectы requestов для получение персистентных an objectов. (персистентный an object — an object который уже находится в базе данных; an object requestа — an object который получается когда мы получаем результат requestа в базу данных, именно с ним работает приложение). Обьект Session можно получить из SessionFactory : Session session = sessionFactory.openSession(); Роль интерфейса Session: — является оберткой для jdbc подключения к базе данных; (https://ru.wikipedia.org/wiki/Java_Database_Connectiv..) — является фабрикой для транзакций (согласно официальной documentации transaction — аllows the application to define units of work, что , по сути, означает что транзакция определяет границы операций связанных с базой данных). — является хранителем обязательного кэша первого уровня. 6) Какая роль интерфейса SessionFactory в Hibernate? Именно из an object SessionFactory мы получаем an objectы типа Session. На все приложение существует только одна SessionFactory и она инициализируеться вместе со стартом applications. SessionFactory кэширует мета-date и SQL requestы которые часто используются приложением во время работы. Так же оно кэширует информацию которая была получена в одной из транзакций и может быть использована и в других транзакциях. Обьект SessionFactory можно получить следующим обращением: SessionFactory sessionFactory = configuration.buildSessionFactory(); 7) Какие типы коллекций представлены в Hibernate? Bag, Set, List, Map, Array. 8) What собой являет коллекция типа Bag и зачем она используется? Своей реализации тип коллекции Bag очень напоминает Set, разница состоит в том, что Bag может хранить повторяющиеся значения. Bag хранит непроиндексированный список элементов. Большинство таблиц в базе данных имеют индексы отображающие положение element данных один относительно другого, данные индексы имеют представление в таблице в виде отдельной columns. При an objectно-реляционном маппинге, значения columns индексов мапится на индекс в Array, на индекс в List or на key в Map. Если вам надо получить коллекцию an objectов не содержащих данные индексы, то вы можете воспользоваться коллекциями типа Bag or Set (коллекции содержат данные в неотсортированном виде, но могут быть отсортированы согласно requestу). 9) Какая разница в работе методов load(); и get();? Метод load(); обычно используется когда в не уверен что запрашиваемый an object уже находится в базе данных. Если an object не найден, то метод кидает исключение Если an object найден — метод возвращает прокси an object, который является ссылкой на an object находящийся в базе данных (request в базу данных еще не был осуществлен, своего рода lazy изъятие), непосредственный request к базе данных когда мы непосредственно обращаемся к необходимому an objectу через прокси an object. Метод get(); используется тогда, вы на 100 процентов не уверены есть ли запрашиваемый an object в базе данных. В случае обращение к несуществующему an objectу, метод get(); вернет null. В случае нахождения an object, метод get(); вернет сам an object и request в базу данных будет произведен немедленно. 10) What такое Lazy fetching(изъятие) в Hibernate? Тип изьятия Lazy, в Hibernate, связан с листовыми(дочерними) сущностями и определяют политику совместного изъятия, если идет request на изъятие сущности родителя. Простой пример: Есть сущность Дом. Он хранит информацию о своем номере, улице, количество квартир и информацию о семьях которые живут в квартирах, эти семьи формируют дочернюю сущность относительно сущности Дом. Когда мы запрашиваем информацию о Доме, нам может быть совершенно ненужным знать информацию семьях которые в нем проживают, тут нам на помощь приходит lazy(ленивое) изъятие(fetching) которая позволяет сконфигурировать сущность Дом, чтобы информацию о семьях подавалась только по востребованию, это значительно облачает request и ускоряет работу applications. ©dev-bay
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION