1. Расскажите о своем понимании MyBatis?
1. Mybatis — это полу-ORM (Object Relational Mapping) фреймворк, который внутри инкапсулирует JDBC.При разработке вам нужно обращать внимание только на сам оператор SQL, и вам не нужно тратить энергию на сложные процессы, такие как загрузка драйверы, создание соединений и создание операторов. Программисты напрямую пишут собственный SQL, который может строго контролировать производительность выполнения SQL и является очень гибким.
2. MyBatis может использовать XML или аннотации для настройки и сопоставления собственной информации, сопоставления POJO с записями в базе данных, исключения почти всего кода JDBC и ручной установки параметров и получения наборов результатов.
3. Настройте различные операторы для выполнения с помощью XML-файлов или аннотаций и сгенерируйте окончательный оператор SQL, сопоставив объект Java и динамические параметры SQL в операторе Наконец, среда MyBatis выполняет SQL и отображает результат в объект Java и вернуться. (Процесс от выполнения SQL до возврата результата).
2. Каковы преимущества и недостатки MyBaits?
§ преимущество:
1. Основанный на программировании операторов SQL, он достаточно гибкий и не окажет никакого влияния на существующую структуру приложения или базы данных.SQL написан в формате XML, что отделяет SQL от программного кода и упрощает унифицированное управление.Предоставляет теги XML для поддержки. динамическое написание операторов SQL и возможность их повторного использования;
2. По сравнению с JDBC уменьшает объем кода, устраняет много избыточного кода в JDBC и не требует ручного переключения соединений;
3. Он очень совместим с различными базами данных (поскольку MyBatis использует JDBC для подключения к базе данных, поэтому база данных, поддерживаемая JDBC, поддерживается MyBatis);
4. Обеспечьте метки сопоставления для поддержки сопоставления отношений полей ORM между объектами и базами данных, предоставьте метки объектно-реляционного сопоставления для поддержки обслуживания объектно-реляционных компонентов.
§ недостаток:
1. Рабочая нагрузка по написанию SQL-операторов велика, особенно когда много полей и много связанных таблиц, к разработчикам предъявляются определенные требования для написания SQL-операторов;
2. Операторы SQL зависят от базы данных, что приводит к плохой переносимости базы данных, и базу данных нельзя заменить по желанию.
3. В чем разница между MyBatis и Hibernate?
1. MyBatis отличается от Hibernate. Это не полностью структура ORM, поскольку MyBatis требует, чтобы программисты сами писали операторы SQL. Hibernate обладает мощными возможностями объектно-реляционного сопоставления и хорошей независимостью от базы данных. использовать Hibernate для разработки Может сэкономить много кода и повысить эффективность;
2. MyBatis напрямую записывает исходный SQL, который может строго контролировать производительность выполнения SQL и обладает высокой гибкостью.Он очень подходит для разработки программного обеспечения, не требующего высокореляционных моделей данных, поскольку требования к такому программному обеспечению часто меняются, и как только требования меняются, результаты должны быть выведены быстро. Однако предпосылкой гибкости является то, что MyBatis не может достичь независимости от базы данных.Если вам нужно внедрить программное обеспечение, которое поддерживает несколько баз данных, вам нужно настроить несколько наборов файлов сопоставления SQL, что требует большой работы.
4. В чем разница между #{} и ${} в MyBatis?
§ #{} — это предварительно скомпилированная обработка, ${} — замена строки
1. Когда Mybatis обрабатывает #{}, он заменяет #{} в SQL на ? и вызывает метод set в PreparedStatement для присвоения значений Использование #{} может эффективно предотвратить внедрение SQL и повысить безопасность системы;
2. Когда MyBatis обрабатывает ${}, он заменяет ${} значением переменной.
5. Как MyBatis выполняет пейджинг? Каков принцип работы плагина пейджинга?
MyBatis использует объект RowBounds для разбиения по страницам, то есть разбиения по страницам памяти, выполняемого с набором результатов ResultSet, а не физического разбиения по страницам. Вы можете напрямую записать параметры с физическим пейджингом в SQL, чтобы завершить функцию физического пейджинга, или вы можете использовать подключаемый модуль пейджинга для выполнения физического пейджинга.
Основной принцип подключаемого модуля подкачки заключается в использовании интерфейса подключаемого модуля, предоставленного MyBatis, для реализации пользовательского подключаемого модуля, перехвата SQL, который должен быть выполнен в методе перехвата подключаемого модуля, затем перезаписи SQL и добавления соответствующий оператор физического пейджинга и параметры физического пейджинга в соответствии с диалектным диалектом.
6. Сколько методов пейджинга есть в MyBatis?
2. Разбиение на страницы SQL
3. Пейджинговый перехватчик
7. В чем разница между логическим пейджингом MyBatis и физическим пейджингом?
1. Физический пейджинг не обязательно быстрее логического пейджинга, а логический пейджинг не обязательно быстрее физического пейджинга.
2. Физическое пейджинг всегда лучше логического пейджинга: нет необходимости добавлять нагрузку со стороны базы данных на сторону приложения, даже если есть преимущество в скорости, но других преимуществ в производительности достаточно, чтобы компенсировать этот недостаток.
8. Поддерживает ли MyBatis ленивую загрузку? Если поддерживается, каков принцип его реализации?
Mybatis поддерживает только ленивую загрузку объектов ассоциации и объектов коллекции, ассоциация относится к запросу «один к одному», а коллекция относится к запросу «один ко многим». В файле конфигурации MyBatis вы можете указать, следует ли включать отложенную загрузку lazyLoadingEnabled=true|false.
Его принцип заключается в использовании CGLIB для создания прокси-объекта целевого объекта, при вызове целевого метода введите метод перехватчика, например вызов a.getB().getName(), метод перехватчика invoke() находит, что a. getB() is Если значение равно null, предварительно сохраненный SQL-запрос, связанный с объектом B, будет отправлен отдельно, B будет запрошен, а затем будет вызван a.setB(b), поэтому атрибут объекта b объекта a будет иметь значение, а затем завершит a.getB( вызов метода ).getName(). Это основной принцип ленивой загрузки.
9. Расскажите о кеше первого уровня и кеше второго уровня MyBatis?
Кэш уровня 1: локальный кеш HashMap на основе PerpetualCache, его областью хранения является сеанс, когда сеанс сбрасывается или закрывается, все кэши в сеансе будут очищены, а кеш уровня 1 будет открыт по умолчанию;
Кэш второго уровня: Механизм тот же, что и у кеша первого уровня. По умолчанию для хранения используются PerpetualCache и HashMap. Разница в том, что областью хранения является Mapper (пространство имен), а источник хранения можно настроить, например как Эхкей. Кэш второго уровня не открывается по умолчанию.Чтобы включить кеш второго уровня, использование класса атрибута кеша второго уровня должно реализовать интерфейс сериализации Serializable (который можно использовать для сохранения состояния объекта), который можно настроить в его файле сопоставления ;
Для механизма обновления данных кеша, когда операция C/U/D выполняется в области (сеанс кеша первого уровня / пространства имен кеша второго уровня), кеши во всех выборках в этой области будут очищены по умолчанию.
10. Какие исполнители есть у Mybatis?
Mybatis имеет 3 основных исполнителя:
1. SimpleExecutor: каждый раз, когда выполняется обновление или выбор, открывается объект Statement, который закрывается сразу после использования;
2. ReuseExecutor: Выполните обновление или выберите, используйте SQL в качестве ключа для поиска объекта Statement, используйте его, если он существует, и создайте его, если он не существует. помещается на карту для следующего использования. Короче говоря, повторно используйте объекты Statement;
3. BatchExecutor: выполнение обновления (без выбора, пакет JDBC не поддерживает выбор), добавление всего SQL в пакет (addBatch()), ожидание единого выполнения (executeBatch()), он кэширует несколько объектов операторов, каждый объект оператора после завершения addBatch() ожидание выполнения пакетов executeBatch() один за другим. То же, что пакетная обработка JDBC.
11. Что делает динамический SQL MyBatis? Какой динамический SQL существует? Можете ли вы кратко описать, как работает динамический SQL?
1. Динамический SQL MyBatis позволяет нам писать динамический SQL в виде тегов в файле сопоставления XML для выполнения функций логического суждения и динамического сплайсинга SQL;
2. MyBatis предоставляет 9 динамических тегов SQL: обрезка, где, установка, foreach, если, выбор, когда, иначе, привязка;
3. Принцип выполнения: используйте OGNL для вычисления значения выражения из объекта параметра SQL и динамического объединения SQL в соответствии со значением выражения для завершения функции динамического SQL.
вопросы интервью очереди сообщений
1. Какова основная функция очереди сообщений?
2. Каковы преимущества и недостатки очередей сообщений?
3. Как обеспечить высокую доступность очереди сообщений?
4. Как сделать так, чтобы сообщения не потреблялись повторно? Другими словами, как обеспечить идемпотентность потребления сообщений?
5. Как обеспечить надежную передачу сообщений? Или как бороться с проблемой потери сообщений?
6. Как обеспечить порядок сообщений?
7. В MQ давно накопилось большое количество сообщений, как решить?
8. Что делать, если срок действия сообщения в MQ истек?
9. Каковы важные роли RabbitMQ?
10. Каковы важные компоненты RabbitMQ?
11. Сколько типов вещания есть в RabbitMQ?
12. Можно ли использовать Kafka независимо от zookeeper? Зачем?
13. Сколько стратегий хранения данных есть у Kafka?
14. Каковы стратегии разделения Kafka?
Вопросы интервью Redis
1. Расскажите мне о своем понимании Redis?
2. Каковы общие сценарии использования Redis?
3. Каковы общие функции Redis?
4. Какие типы данных поддерживает Redis?
5. Почему Redis является однопоточным?
6. Почему Redis такой быстрый?
7. Что такое проникновение в кеш? Как с этим бороться?
8. Что такое кэш-лавина? Как это решить?
9. Как обеспечить согласованность данных кеша и базы данных?
10. Сколько существует способов сохранения Redis?
11. Как Redis реализует распределенные блокировки?
12. Каковы стратегии устранения Redis?
13. Каковы общие проблемы производительности и решения Redis?
Наконец
Прошу всех обратить внимание на мой паблик [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.