Сборник вопросов и ответов для интервью по Java (постоянно обновляется в 2023 г.)
Сборник вопросов и ответов для интервью по Java (постоянно обновляется в 2023 г.)
Данная статья разделена на девятнадцать модулей соответственно: «Основы Java、контейнер、многопоточность、отражение、копия объекта、Java Web 、аномальный、сеть、шаблон проектирования、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 , как показано на рисунке ниже:
Всего он содержит 208 вопросов для интервью. Цель этой статьи — составить подробный и авторитетный список интервью для читателей. Давайте вместе углубимся в эту тему.
Конкретно JDK Фактически, оно включает в себя JRE, которая также включает в себя компиляцию Java Компилятор исходного кода Javac, который также содержит множество Java Инструменты отладки и анализа программ. Простыми словами: если вам нужен проект Java программа, просто установите JRE Это нормально, если вам нужно написать Java программа, необходимо установить JDK。
2. В чем разница между == и равно?
"== Интерпретация"
вернок основным типамиссылочный тип == Эффекты разные, как показано ниже:
Базовый тип: С выравнивание такое же, как изда, и значение да такое же;
Тип ссылки: Сравнивать то же самое, что и изда цитирования да;
Пример кода:
Язык кода:javascript
копировать
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true
Интерпретация кода: потому что x и y указывает на ту же ссылку, поэтому == Слишком правда, пока new Метод String() переписан, чтобы освободить место в памяти, поэтому == Результат ложь, в то время как equals Сравнение всегда касается значений, поэтому результаты всегда true。
«равнозначно интерпретации»
equals По сути ==, но String и Integer Ждем перезаписи equals метод, превращая его в сравнение значений. Просто посмотрите на код ниже, чтобы понять.
Во-первых, давайте посмотрим на равенства по умолчанию, чтобы сравнить объекты с одинаковым значением. Код выглядит следующим образом:
Выходной результат превосходит наши ожидания, это ложь? Что происходит? Вы узнаете, посмотрев исходный код равных. Исходный код выглядит следующим образом:
Итак, возникает вопрос: почему два объекта String с одинаковым значением возвращают true? Код выглядит следующим образом:
Язык кода:javascript
копировать
String s1 = new String("Язык");
String s2 = new String("Язык");
System.out.println(s1.equals(s2)); // true
Аналогично, когда мы вводим метод равенства строки, мы находим ответ. Код выглядит следующим образом:
Язык кода:javascript
копировать
publicbooleanequals(Object anObject){
if (this == anObject) {
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
оказатьсяда String переписан Object из equals Метод: изменить сравнение ссылок на сравнение значений.
«Подвести итоги» :== верно для базовых типов, значение С выравнивать лучше, верно для ссылочных типов, да С выравнивание лучше, чем изда ссылки и; equals По умолчанию используется сравнение ссылок, но многие классы были переработаны. equals методы, такие как String、Integer и т. д. превращает это в сравнение значений,так что в целом equals Сравниватьсравниватьиздаценитьданегативная ситуацияждать.
3. Если hashCode() двух объектов один и тот же, метод Equals() также должен быть истинным, верно?
Нетверно,Два верных слона из hashCode() То же, равно() неопределенный true。
Интерпретация кода: Очевидно «звонок» и «важное место» и з hashCode() То же самое, однако equals() Тогда это false,потому чтосуществоватьхеш-таблицасередина,hashCode() равен, то есть хеш-значения двух значений ключа верноиз равны,Однако хеши равны,И неопределенный ключ может получить значение верной фазы ожидания.
4. Какова роль финала в Java?
Последний измененный класс называется финальным классом.,Этот класс нельзя наследовать.
final Изменить методне могуодеялопереписать。
final Изменитьиз Изменять Количественный вызовпостоянный,Константы должны быть инициализированы,Значение не может быть изменено после инициализации.
5. Чему равно Math. round(-1,5) в Java?
равный -1,потому При принятии значений на числовой оси чтосуществовать значение середина (0,5) округляется вправо, поэтому 0.5 Оно округлено в большую сторону, отрицательное. 0.5 Просто откажись от этого.
6. Является ли String базовым типом данных?
Строка не является базовым типом. Существует 8 основных типов: byte, boolean, char, short, int, float, long, double. String — это объект.
7. Какие классы для работы со строками существуют в Java? Какая разница между ними?
Манипулировать строками имеют классы: String, StringBuffer, StringBuilder.
String и StringBuffer、StringBuilder изразницасуществовать В String Утверждение изда не является Изменятьизверно, и каждая операция будет генерировать новое изда. String верно слон, тогда указатель Воля указывает на новый из String объект, в то время как StringBuffer、StringBuilder Может существовать оригинал, как из База, при руководящей операции, поэтому часто изменять содержимое строки Изменять, если лучше не использовать String。
StringBuffer и StringBuilder Самая большая разница в том, что StringBuffer безопасность потоков, в то время как StringBuilder да Не потокобезопасно, но StringBuilder производительность выше, чем StringBuffer, поэтому существование рекомендуется в однопоточной среде. StringBuilder,многопоточностьРекомендуется в соответствии с окружающей средойиспользовать StringBuffer。
8. Является ли String str="i" тем же, что и String str=new String("i")?
Разные, потому что чтометод выделения памяти другой. Нить str="i"из режима, Java виртуальная машина будет воля в своем выделении прибывать в постоянный пул середина; String str=new String("i") Она будет разделена на кучи памяти середина.
9. Как перевернуть строку?
использовать StringBuilder или stringBuffer из reverse() метод.
В приведенном выше коде абстрактный класс не имеет абстрактных методов, но может работать нормально.
12. В чем разница между обычными классами и абстрактными классами?
Обычный классне могу Содержит прокачкуслонметод,Абстрактные классы могут содержать абстрактные классы.
Абстрактные классы не могут быть созданы напрямую, но обычные классы могут быть созданы напрямую.
13. Можно ли модифицировать абстрактные классы с помощью Final?
не могу,Определениеслондобрый Да Пусть другие классынаследоватьиз,если определенодля final Этот класс не может быть унаследован, что будет конфликтовать друг с другом, поэтому final Абстрактные классы не могут быть изменены, как показано на рисунке ниже, и редактор также выдаст сообщение об ошибке:
14. В чем разница между интерфейсом и абстрактным классом?
выполнить:куритьслондобрыйиз Подклассиспользовать extends Приходитьнаследовать;Интерфейс должениспользовать implements для реализации интерфейса.
Конструктор: абстрактные классы могут иметь конструкторы; интерфейсы — нет.
Выбор числа: классов может быть много, но можно настраивать только один абстрактный класс.
доступ Изменитьсимвол:интерфейссерединаизметодпо умолчаниюиспользовать public Изменить;куритьслондобрыйсерединаизметод Можетдапроизвольныйдоступ Изменитьсимвол。
15. Сколько типов потоков ввода-вывода существует в Java?
Разделяется по функциям: входной поток (вход), выходной поток (выход).
Разделяется по типу: поток байтов и поток символов.
поток байтовипоток символовизразницада:поток байтовв соответствии с 8 Побитовая передача вводит и выводит данные в байтах, а потоки символов 16 Побитовая передача вводит и выводит данные в символьных единицах.
16. В чем разница между BIO, NIO и AIO?
BIO:Block IO синхронная блокировка IO, просто да, обычноиспользуемиз традиции IO,Эта модель проста в использовании и удобна в использовании.,одновременно низкая вычислительная мощность.
NIO:Non IO Синхронный неблокирующий ИО, датрадиция IO изUpgrade, клиентская и серверная часть Канальная связь реализует мультиплексирование.
AIO:Asynchronous IO да NIO изupgrade, также называемый NIO2, реализующий асинхронную неблокировку IO ,асинхронный IO издействоватьна на основе событий и механизма обратного вызова.
17. Каковы распространенные методы работы с файлами?
Files.exists(): проверьте, существует ли путь к файлу.
Файлы. createFile(): Создать файл.
Файлы. createDirectory(): создать папку.
Files.delete(): Удалить файл или каталог.
Files. copy():копироватьдокумент。
Files.move(): Переместить файлы.
Files.size(): количество файлов.
Files.read(): чтение файлов.
Files.write(): Запись файлов.
контейнер
18. Java контейнер Всеиметь Который?
Java контейнерточкадля Collection и Map Существует две основные категории, а также множество подкатегорий, как показано ниже:
Collection
List
ArrayList
LinkedList
Vector
Stack
Set
HashSet
LinkedHashSet
TreeSet
Map
HashMap
LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable
19. В чем разница между Collection и Collections?
Collection Даа собирает интерфейс, он обеспечивает правильное разделение, например, управление базовыми операциями из общих методов интерфейса, все которые можно собирать из подклассов, например, List、Set ждать.
Collections да Класс-оболочка, который содержит множество статических методов, экземпляры которых не могут быть созданы, например, служебный класс. Сравнивать, например, с помощью методов сортировки: Collections. sort(list)。
20. В чем разница между списком, набором и картой?
List、Set、Карта из Разница в основном отражает два аспекта существования: элемент имеет порядок.、да Разрешить ли дублирование элементов.
Различия между этими тремя заключаются в следующем:
21. В чем разница между HashMap и Hashtable?
хранилище:HashMap бегать key и value для ноль, в то время как Hashtable Не разрешено.
Потокобезопасность: Hashtable безопасность потоков, в то время как HashMap да непотокобезопасный из.
рекомендоватьиспользовать:существовать Hashtable Аннотации из классов см. в разделе «Приехать», Hashtable. да зарезервированные классы не рекомендуются, но рекомендуются в однопоточных средахиспользовать HashMap Заменитель, если нужна многопоточностьиспользуйте ConcurrentHashMap заменять.
22. Как решить, использовать ли HashMap или TreeMap?
верно Всуществовать Map середина операций, таких как вставка, удаление и поиск элемента, HashMap лучшее из выбора, потому что что Взаимноверно С точки зрения HashMap вставка будет быстрее, но если хочешь, то верный key собиратьруководитьиметьпоследовательностьизтраверс,Что TreeMap да лучше выбор.
23. Расскажите о принципе реализации HashMap?
HashMap на основе Hash алгоритмвыполнитьиз,наспроходить put(ключ,значение) для сохранения, get(ключ) для получения. когда вошел key Когда, HashMap будет основано на key. hashCode() Рассчитать hash ценность,по мнению hash значение будет value держатьсуществовать bucket внутри。когда Рассчитатьиз hash Когда значения одинаковы, мы называем это hash Конфликт, HashMap из Как использовать связанный список и хранилище красно-черного дерева одинаково hash ценитьиз ценить. когда hash Когда количество конфликтов невелико, связанный список представляет собой красно-черное дерево.
24. Расскажите о принципе реализации HashSet?
HashSet дана основе HashMap выполнитьиз,HashSet Первый этажиспользовать HashMap чтобы сохранить все элементы, поэтому HashSet выполнить Сравнивать более простое, связанное HashSet Операции в основном вызывают нижний уровень напрямую. HashMap из связанных методов завершения HashSet Дублирование значений не допускается.
25. В чем разница между ArrayList и LinkedList?
структура данныхвыполнить:ArrayList дадинамический массивизструктура данныхвыполнить,и LinkedList да Двойной связанный списокизструктура данныхвыполнить。
Эффективность произвольного доступа: ArrayList Сравнивать LinkedList Существующий произвольный доступ должен быть более эффективным, потому что что LinkedList да линейный путь из хранилища данных, поэтому вам нужно переместить указатель вперед, а затем выйти.
Увеличиватьиудалитьэффективность:существовать Не первый и последнийиз Увеличиватьиудалитьдействовать,LinkedList хотеть Сравнивать ArrayList Будьте эффективны, потому что что ArrayList Операции добавления и удаления повлияют на другие данные и индексы в массиве.
Взятые вместе,существуют, когда вам нужно часто читать элементы сборасерединаиз,Более рекомендуется использовать ArrayList. и существование более рекомендуются при наличии большого количества операций вставки и удаления. LinkedList。
List Преобразовать массив:использовать List Принесите свой собственный toArray() метод.
Пример кода:
Язык кода:javascript
копировать
List<String> list = new ArrayList<String>();
String[] array = new String[]{"Ван Лэй","изблог"};
27. В чем разница между ArrayList и Vector?
Потокобезопасность: вектор использовать Понятно Synchronized Приходитьвыполнить Синхронизация потоков,безопасность потоков, в то время как ArrayList да непотокобезопасный из.
Производительность: ArrayList существуют производительность лучше, чем Vector。
Расширение: ArrayList и Vector Всебудет основано на самом деле требует динамической регулировки мощности, но существует Vector Каждое расширение будет увеличиваться 1 раз, в то время как ArrayList будет только увеличиваться 50%。
28. В чем разница между Array и ArrayList?
Array Может хранить базовый тип данных иверно image, ArrayList — это просто объект хранения.
Array да указывает фиксированный размер, в то время как ArrayList Размер да автоматически увеличивается.
Array Нет встроенного метода ArrayList много,Сравниватьнравиться addAll、removeAll、iteration Единственными другими методами являются ArrayList иметь.
29. В чем разница между poll() и Remove() в Queue?
Сходства: первый элемент обоих давозвращаться,исуществоватьочередьсерединаудалитьвозвращатьсяизобъект.
Разница: если нет элемента опрос() вернет ноль, в то время как Remove() напрямую выдаст NoSuchElementException аномальный。
30. Какие классы коллекций являются потокобезопасными?
Vector、Hashtable、Stack Всебезопасность потоков, в то время каккартина HashMap Тогда да не является потокобезопасным, но существует JDK 1.5 с последующим Java. util. concurrent Одновременно с появлением они также имеют свои собственные потокобезопасные классы, такие как HashMap конечно, следует использовать потокобезопасные классы, просто да ConcurrentHashMap。
31. Что такое Итератор?
Iterator Интерфейс обеспечивает обход любых Collection изинтерьера.Можем от одного Collection используется в Итератор для получения экземпляра Итератора. Итератор заменен Java собиратьрамкасерединаиз Перечисление, Итератор позволяет вызывающей стороне существовать итеративный процесс середина для удаления элементов.
32. Как использовать Итератор? Каковы характеристики?
Iterator использоватькодследующее:
Язык кода:javascript
копировать
List<String> list = new ArrayList<>();
Iterator<String> it = list. iterator();
String obj = it. next();
System. out. println(obj);
Iterator из функций да безопаснее, потому что что он может гарантировать, что при изменении текущего пройденного элемента-изобрать он будет выброшен ConcurrentModificationException аномальный。
33. В чем разница между Iterator и ListIterator?
Iterator Может пересекать Set и List собирать,и ListIterator Можно только пройти List。
Итератор может перемещаться только в одном направлении, а ListIterator может перемещаться в обоих направлениях (вперед/назад).
ListIterator от Iterator интерфейснаследовать,Затем добавил некоторые дополнительные функции,Сравнить например добавить элемент, заменить элемент、Получите индексную позицию элемента спереди или сзади.
34. Как гарантировать, что коллекцию нельзя будет изменить?
Можетиспользовать Collections. unmodifiableCollection(Collection c) Метод для создания сбора данных, доступного только для чтения, чтобы любая операция по изменению Изменятьсобратьиз выдавала ошибку. Java. lang. UnsupportedOperationException аномальный。
Пример кода выглядит следующим образом:
Язык кода:javascript
копировать
List<String> list = new ArrayList<>();
Collection<String> clist = Collections. unmodifiableCollection(list);
clist. add("y"); // Эта строка сообщает об ошибке при запуске
System. out. println(list. size());
многопоточность
35. В чем разница между параллелизмом и параллелизмом?
параллельный: Несколько процессоров Многоядерный процессор обрабатывает несколько задач одновременно.
одновременно: несколько задач существуют одинаково CPU надъядерный,Выполнять по очереди (поочередно) в соответствии с разделенными интервалами времени.,Логично говоря, эти задачи да выполняются одновременно.
Как показано ниже:
одновременно = две очереди и одна кофемашина.
параллельный = две очереди и две кофемашины.
36. В чем разница между потоком и процессом?
В программе есть хотя бы один процесс,В процессе должен быть хотя бы один поток,Вы также можете использовать несколько потоков в одном процессе, чтобы увеличить скорость выполнения программы.
37. Что такое демон-поток?
Демон-поток пропроектировать фон из специального процесса. Он независим от терминала управления и периодически выполняет определенные задачи и ожидает возникновения определенных событий. существовать Java серединаветка по сбору мусора Даособенныйиздемонический поток。
38. Какие есть способы создания темы?
Существует три способа создания тредов:
Наследовать поток и переопределить метод запуска;
Реализовать интерфейс Runnable;
Реализовать интерфейс Callable.
39. В чем разница между runnable и callable?
runnable Нет возвращаемого значения, можно вызвать Вы можете получить возвращаемое значение, вызываемое можно рассматривать как runnable из Пополнить。
40. Каковы состояния потоков?
Тема из статуса:
НОВОЕ еще не началось
RUNNABLE толькосуществоватьосуществлятьсередина
BLOCKED заблокировано (заблокировано блокировкой синхронизации и блокировкой ввода-вывода)
ОЖИДАНИЕ постоянное состояние ожидания
TIMED_WAITING Ожидает повторного пробуждения в течение указанного времени.
TERMINATED выполнение завершено
41. В чем разница между спящим() и ожиданием()?
Различные классы: сон() от Thread,wait() от Object。
Снимите блокировку: Sleep() Не отпускайте блокировку wait(); Отпустите замок.
Другое использование: сон() Время прибытия будет автоматически восстановлено wait(). Можетиспользовать notify()/notifyAll() просыпается напрямую.
42. В чем разница между notify() и notifyAll()?
notifyAll() разбудит все потоки и разбудит поток после notify(). уведомить Все() После вызова все потоки будут перемещены из пула ожидания в пул блокировок, а затем будут участвовать в соревновании по блокировкам. Если соревнование будет успешным, выполнение продолжится. Если соревнование неуспешное, потоки останутся в пуле блокировок. и дождитесь снятия блокировки, чтобы снова соревноваться. и notify() пробуждает только один поток, а какой поток пробуждается, контролируется виртуальной машиной.
43. В чем разница между потоками run() и start()?
start() Метод используется для запуска потока, run() Метод используется для выполнения кода, когда поток посещает. бегать() можно вызывать неоднократно, и start() Можно позвонить только один раз.
44. Каковы способы создания пула потоков?
Семь способов создать пул потоков,Ядроизданаконец Что-то вроде:
newSingleThreadExecutor(): Его особенность в том, что количество рабочих потоков ограничено. 1,Управляйте неограниченной рабочей очередью,Таким образом, это гарантирует, что все задачи выполняются последовательно.,Не более одной задачи будет активной,И не разрешайте использовать модификацию экземпляра пула потоков.,Следовательно, можно избежать изменения количества потоков;
newCachedThreadPool(): это пул потоков, используемый для обработки большого количества краткосрочных рабочих задач.,У него есть несколько отличительных особенностей: он будет пытаться кэшировать потоки и повторно использовать их.,Когда поток кэша недоступен,создаст новыйиз Рабочий поток;Если поток простаиваетизвремя превышает 60 секунд, он будет завершен и удален из кеша, если он простаивает в течение длительного времени, этот тип пула потоков не будет потреблять никаких ресурсов; его интерьериспользовать SynchronousQueue Сделать очередь на работу;
newFixedThreadPool(int nThreads): повторно использовать указанное количество (nThreads) потоков, за которыми находится неограниченная рабочая очередь, максимум в любое время. nThreads Рабочий поток да активность из. Это означает, что если количество задач превышает количество активных очередей, рабочая очередь середина «Волясуществовать» ожидает появления простаивающих потоков; если рабочий поток завершается, будут созданы новые рабочие потоки для восполнения указанного количества; из nThreads;
newSingleThreadScheduledExecutor(): создать однопоточный пул и вернуть ScheduledExecutorService,Может руководить таймингом или периодическим планированием работы;
newScheduledThreadPool(int corePoolSize): и newSingleThreadScheduledExecutor() аналогично, создавая изда ScheduledExecutorService,Может руководить таймингом или периодическим планированием работы,Разница между одним рабочим потоком и несколькими рабочими потоками;
newWorkStealingPool(int параллелизм): это часто упускаемый из виду пул потоков, Этот метод создания был добавлен только в Java 8.,ForkJoinPool будет построен внутри компании.,Использование алгоритма кражи работы,С легкостью справляйтесь с задачами,Порядок обработки не гарантируется;
ThreadPoolExecutor(): Самый примитивный способ создания пула потоков.,Все вышеперечисленные методы создания 1–3 инкапсулированы ThreadPoolExecutorиз.
45. Каковы состояния пула потоков?
БЕГ: Это самое нормальное состояние.,Принимайте новые задачи,Обработка очереди ожидания серединаиз задач.
SHUTDOWN:Нет Принимайте новые задачипредставлять на рассмотрение,Но да продолжу Обработку очереди ожидания серединаиз задач.
STOP:Нет Принимайте новые задачипредставлять на рассмотрение,Задачи очереди ожидания серединаиз больше не обрабатываются,середина прерывает существование задачи выполнения из потока.
УБОРКА: Все задачи уничтожены, workCount для 0, пул потоков существует для преобразования статуса TIDYING Когда состояние будет достигнуто, метод ловушки будет выполнен. terminated()。
TERMINATED:terminated()метод После окончания,Статус пула потоков станет таким.
46. В чем разница между методами submit() и Execute() в пуле потоков?
выполнить(): может выполняться только Runnable Введите «Задача».
submit(): может быть выполнено Runnable и Callable Введите «Задача».
Callable Тип задач может получить извозвращающееся значение выполнения, пока Runnable Выполнение не имеет возвращаемого значения.
47. существовать Java степеньпоследовательностьсередина Как гарантироватьмногопоточностьизбегать Безопасность?
метододин:использовать Безопасностьдобрый,Сравниватьнравиться Java. util. concurrent Ниже из категории.
методдва:использоватьавтоматический замок synchronized。
методтри:использоватьручной замок Lock。
ручной замок Java Пример кода выглядит следующим образом:
48. многопоточностьсередина synchronized В чем принцип модернизации замка?
synchronized Принцип обновления замка: замок существует верно, слон и зверо внутри головы слона и меть. threadid Поле, существующее при первом посещении threadid длянулевой,jvm Пусть он удерживает смещенную блокировку и помещает threadid установить в свою ветку id, он будет оцениваться в первую очередь при повторном входе. threadid Будь со своей нитью id Согласовано, если согласованно, вы можете напрямую обратиться к этому верному объекту, если противоречиво, обновите смещенную блокировку до облегченной блокировки, выполните цикл вращения определенное количество раз, чтобы получить блокировку, выполните определенное количество раз. Если через несколько секунд изображение прибытия не было получено должным образом, замок Пучок будет повышен до замка для тяжелых условий. Этот процесс представляет собой процесс. synchronized Блокировка обновления.
Обновление замка: Обновление замка снижает потребление производительности замка. существовать Java 6 Оптимизировать позже synchronized извыполнить Способ,использовать Модернизация смещения замка до облегченного замка, а затем обновление метода тяжелого замка,от И уменьшить потребление производительности, вызванное блокировкой.
49. Что такое тупик?
когда поток A Удерживайте эксклюзивную блокировку a и попытайтесь получить эксклюзивную блокировку. b в то же время, нить B Удерживает эксклюзивный замок b и попытайтесь получить эксклюзивную блокировку a в крайнем случае, это произойдет AB два线степень由Ввзаимный Взаимнодержатьиметьвернопартийные нуждыиз Замок,И происходит явление блокировки,Мы называем это тупиком.
50. Как предотвратить тупик?
старайся изо всех силиспользовать tryLock(long timeout, TimeUnit unit)изметод(ReentrantLock、ReentrantReadWriteLock),настройка таймаута,Тайм-аут можно выйти, чтобы предотвратить взаимоблокировку.
старайся изо всех силиспользовать Java. util. concurrent одновременнокласс вместо этогопочерк Замок。
Постарайтесь максимально уменьшить степень детализации блокировки и старайтесь не использовать одну и ту же блокировку для нескольких функций.
Минимизируйте синхронизированные блоки кода.
51. Что такое ThreadLocal? Каковы сценарии использования?
ThreadLocal для Eachuse Изменить из потока, чтобы создать независимую копию и изменить копию,Таким образом, каждый поток может независимо изменять свою копию.,Это не повлияет на соответствующие копии других потоков.
ThreadLocal из Classicиспользуйте сцену для подключения к базе данных и session Управление и т. д.
52. Расскажите мне о лежащем в основе реализации принципе синхронизации?
synchronized парой monitorenter/monitorexit инструкциявыполнитьиз,monitor вернослондасинхронныйиз Базовыйвыполнитьединица。существовать Java 6 раньше, мониторить полное выполнение зависит от внутренней блокировки мьютекса операционной системы, потому что что требует управления пользовательским режимом для перехода в режим ядра из переключения, поэтому операция синхронизации является неотличимой от тяжеловесной операции, и производительность также очень низкая. Но существовать Java 6 время, Ява виртуальная машина верно, это руководство было значительно улучшено, и было сделано три разных представления. monitor выбирать, то есть, как часто говорят, из трех разных блокировок: смещенная блокировка (Biased lock). Locking), легкие замки и тяжелые замки, что значительно повышает его производительность.
53. В чем разница между синхронизированным и изменчивым?
volatile модификатор количества да Изменять синхронизировано; да Изменитьдобрый、метод、фрагмент кода.
volatile только Может быть реализовано Изменить изменяет видимость и не гарантирует атомарность; synchronized Тогда можно гарантировать видимость и атомарность модификации.
volatile Не приведет к блокировке потоков; Может привести к блокировке потока.
54. В чем разница между синхронизированным и заблокированным?
синхронизированный может блокировать классы, методы и блоки кода; блокировка может блокировать только блоки кода;
synchronized Нет необходимости вручную получать и снимать блокировку, это просто, и блокировка будет снята автоматически при возникновении события, не вызывая взаимоблокировки и; lock Запирать и снимать замок нужно самостоятельно, если это сделать неправильно, то он не будет работать должным образом. Использование unLock() для снятия блокировки приведет к взаимоблокировке.
проходить Lock Вы можете узнать, была ли блокировка успешно получена, и synchronized Но не могу этого сделать.
55. В чем разница между синхронизированным и ReentrantLock?
synchronized Первые дниизвыполнить Сравниватьсравнивать Низкийэффект,верно Сравнивать ReentrantLock, производительность в большинстве сценариев сильно различается, но дасуществовать Java 6 серединаверно synchronized руководить имеет много улучшений.
Основные различия заключаются в следующем:
ReentrantLockиспользуется более гибко, но для взаимодействия с действием необходимо снять блокировку;
ReentrantLock Блокировки необходимо захватывать и снимать вручную, в то время как synchronized Нетнуждатьсяхотетьручной выпускивключать Замок;
ReentrantLock Применяется только к замкам с кодовым блоком, а synchronized Доступный ВИзменитьметод、Кодовый блок ожидания.
56. Расскажите мне о принципе атомарности?
atomic В основном используется CAS (Compare And Wwap) и volatile и native метод, гарантирующий атомарные операции и, таким образом, избегающий synchronized из Высокие накладные расходы,осуществлятьэффективностьбольшойдляпродвигать。
отражение
57. Какое даотражение?
отражениедасуществоватьбегатьсостояниесередина,верно для любого класса,Каждый может знать, что атрибуты этого класса относятся к любому объекту.,Всеможетвызовэтоизпроизвольныйодининдивидуальныйметодисвойство;Это динамичное приобретениеизинформационные и динамические звонкивернослонизметодизимя функциидля Java Механизм изотфракции языка.
58. Что такое сериализация Java? Когда требуется сериализация?
Java сериализует дадля сохранения различных состояний, которые действительно существуют в памяти слона, и может Пучок сохранять изверно состояния объекта, а затем считывать их.
Следующие ситуации требуютиспользовать Java Сериализация:
думать Пучокиз Памятьсерединаизвернослонсостояниедержатьприезжатьодининдивидуальныйдокументсерединаили База данных серединакогда;
Если вы хотите использовать сокет существуть для передачи сообщения;
59. Что такое динамический прокси? Какие приложения?
Динамический прокси — это прокси-класс, который динамически генерируется во время выполнения.
Динамический прокси из приложения spring aop、hibernate Запрос данных, тестирование кадровиз бэкенда макет, RPC, получение объектов аннотаций Java и т. д.
60. Как реализовать динамический прокси?
JDK Родной динамический прокси и cglib Динамический прокси. ЯДК Родной динамический прокси дана основеинтерфейсвыполнитьиз,И cglib данна основе выполняет текущий класс из подкласса адаптивности.
копия объекта
61. Зачем использовать клонирование?
Клонированный изверно объект может содержать некоторые измененные атрибуты.,И когда появляется новый, те же атрибуты, что и при его инициализации, все еще имеют свои значения.,Местоккогдануждатьсяхотетьодининдивидуальный新извернослон Приходитьдержатькогдавпередвернослониз“состояние”Просто положитесь на клонированиеметод Понятно。
62. Как реализовать клонирование объектов?
выполнить Cloneable Интерфейс и переписывание Object добрыйсерединаиз clone() метод.
выполнить Serializable интерфейс,проводиться точно так же, как сериализация и десериализация выбирают клон,Действительно может восстановиться из глубокого клонирования.
63. В чем разница между глубоким и поверхностным копированием?
Поверхностное клонирование: когда правильный объект копируется только сам, а его середина содержит из типа значения и из члена. Изменить сумму.,Тип ссылки из объекта-члена действительно не имеет возможности копировать.
Глубокий клон: разве что верный слон сам копировать,верно состоит из ииметь членов Изменить, а также Волякопировать.
Java Web
64. В чем разница между JSP и сервлетом?
JSP да servlet Технология расширения, По сути servlet из Простой способ. сервлет и JSP Основное отличие состоит в том, что сервлет из ПРИЛОЖЕННОЙ ЛОГИКИдасуществовать Java Файл середина, и полностью из уровня представления серединаиз html разделены, и JSP из Состояниеда Java и html можно объединить в расширение под названием JSP из файла. ДСП Сосредоточьтесь на представлениях, сервлетах В основном используется для логики управления.
65. Какие встроенные объекты есть в JSP? Каковы функции?
JSP имеет 9 встроенных объектов:
запрос: инкапсулирует запрос клиента, середина которого содержит от get или post Запрос параметров;
ответ: инкапсулирует ответ клиента сервера;
pageContext: применить Этот верный значок может получить другие верные значки;
сеанс: инкапсулирует объект сеанса пользователя;
Приложение: инкапсулирует серверную среду разработки изверно образа;
out: ответ сервера вывода из выходного потока верное изображение;
config:Web Приложение Конфигурациявернослон;
page:JSP Сама страница (Эквивалентно Java степеньпоследовательностьсерединаиз this);
страница: представляет атрибут изображения «изверно», связанный со страницей.
запрос: представляет атрибут, связанный с запросом, выданным клиентом. Запрос может охватывать несколько страниц и включать в себя несколько веб-компонентов; в эту область можно поместить временные данные, которые необходимо отобразить на странице.
сеанс: представляет атрибуты объекта, связанные с установлением сеанса между пользователем и сервером. Данные, относящиеся к определенному пользователю, должны размещаться в собственной сессии середина пользователя.
приложение: представляет весь Web Извержение и атрибут, связанный с приложением, который, по сути, охватывает всю Web Приложение состоит из нескольких страниц, запросов, сеансов и глобальной области видимости.
67. В чем разница между сеансом и файлом cookie?
хранить разные позиции: сессия хранилищесуществоватьсерверная часть;cookie хранилищесуществовать Сторона браузера。
Другая опасность: безопасность файлов cookie средняя, хранилище браузера может быть подделано и изменено.
Ограничение емкости и количества: cookie иметь ограничение мощности, на сайт из cookie Также существует ограничение по количеству.
хранилищеизразнообразия: сессия Можетхранилищесуществовать Redis середина, середина базы данных, середина приложения и; cookie может толькохранилищесуществовать Браузерсередина。
68. Расскажите, как работает сессия?
session Как это работает: После завершения входа клиента сервер создаст приложение. session,session После создания, session из id Отправлено клиенту, клиент затем хранилищеприезжать браузер середина. Таким образом, каждый раз, когда клиент обращается к серверу, он будет приносить идентификатор сеанса, сервер получает его sessionid После этого существующая память ищет место, с которым, верно, можно будет изжить. session Это должно работать нормально.
69. Если клиент отключит файлы cookie, можно ли продолжать использовать сеансы?
Доступно, сеанс Зависит только от cookie хранилище идентификатор сеанса, если cookie отключен, можно использовать url серединадобавить в sessionid ИЗПУТЬ ГАРАНТИРОВАНО session способныйтолькочастоиспользовать。
70. Чем пружины мвк отличаются от стоек?
Уровень перехвата: struts2 да уровень класса из перехвата; mvc даметодуровеньизперехватывать。
Независимость данных: весна mvc из Методы в основном независимы и исключительны request и response Данные, данные запроса, получение параметров, результаты обработки. ModelMap При возврате в рамку количество Изменить не распределяется между методами и; struts2 Хотя методы независимы друг от друга, их цель action Изменятьколичестводаобщийиз,Это не повлияет на работу программы.,Но это доставляет нам некоторые трудности при кодировании и чтении программы.
Механизм перехвата: struts2 взять себя из interceptor механизм, пружина mvc Используйте изда независимо от aop кстати, это приводит к struts2 из Конфигурациядокументколичество Сравнивать spring mvc большой.
верно ajax изподдерживать:spring mvc Интегрированный ajax, все ajax использовать очень удобно и требует только аннотации @ResponseBody Просто; восстановить и struts2 Как правило, вам необходимо установить плагин и написать код самостоятельно.
сипользовать регулярное выражение для фильтрации символов серединаиз специальных символов.
72. Что такое XSS-атака и как ее избежать?
XSS Атака: атака с использованием межсайтовых сценариев. Web В программе середина распространены уязвимости. Принцип Да Злоумышленник идет к Web Вставьте код вредоносного скрипта (css) на страницу Код, Javascript код и т. д.), когда пользователь просматривает страницу, встроенный в нее код сценария будет выполнен, и пользователь подвергнется злонамеренной атаке, например, с целью кражи пользователя. Файлы cookie, нарушение структуры страниц, перенаправление на другие веб-сайты и т. д.
профилактика XSS из ядра да должна обязательно вводить данные для обработки фильтрации.
73. Что такое CSRF-атака и как ее избежать?
CSRF: подделка межсайтового запроса (серединаискусство: подделка межсайтового запроса),Понятно, что злоумышленник украл вашу личность.,Отправлять вредоносные запросы от вашего имени,Сравнивать Например: отправка электронных писем, отправка сообщений и покупка товаров на ваше имя.,Ожидание перевода виртуальной валюты.
Защита означает:
Проверьте адрес источника запроса;
Добавьте код подтверждения для ключевых операций;
существоватьпроситьадресдобавить в token и проверьте.
аномальный
74. Чем отличается бросок от бросков?
throw: да действительно выкидывает аномальный.
выдает: оператор да может выдать аномальный результат.
75. В чем разница между Final, Final и Finalize?
финал: да модификатор,Если измененный класс,Этот класс не может быть изменен путем наблюдения, если метод модификации и Изменить.,Это означает, что этот метод и эту сумму нельзя изменить.,может толькоиспользовать。
finally:да try{} catch{} finally{} Последняя часть означает, что она будет выполнена независимо от того, что произойдет, наконец. часть можно опустить, но если finally Если часть сохранится, она обязательно будет исполнена. finally Внутри из кода.
finalize:да Object добрыйизодининдивидуальныйметод,Когда сборщик мусора будет запущен, он будет называться сборщиком мусора.
76. Какую часть try-catch-finally можно опустить?
try-catch-finally Чтосередина catch и finally Оба можно опустить, но да нельзя опустить одновременно, т. е. да означает иметь try из-за этого должно следовать catch или finally。
77. В try-catch-finally, если в catch есть return, будет ли наконец выполнено?
finally Оно обязательно будет исполнено, даже если да catch середина return Да, лови серединаиз return Подожду finally Он не будет выполнен до тех пор, пока не будет выполнен код серединаиз.
78. Каковы распространенные виды изаномального хата?
NullPointerException нулевойобратитесь к Иголкааномальный
ClassNotFoundException Указанный класс не существует.
NumberFormatException Преобразование строк для аномального числа
Индекс массива IndexOutOfBoundsException выходит за пределы аномального
Преобразование типа данных ClassCastException аномальное
Обмен данными: вперед Можно поделиться request изданных, перенаправление нельзя разделить;
Эффективность: вперед Сравнивать redirect Высокая эффективность.
81. Кратко опишите разницу между TCP и UDP?
tcp и udp да OSI Модель серединаиз транспортного уровня протокол серединаиз. TCP обеспечивает надежную передачу связи и udp 则частоодеялоиспользовать Впусть транслируети Детальный контроль передается Приложениекоммуникацияпередача инфекции。
Разница между ними примерно следующая:
TCP ориентирован на соединение, а UDP не ориентирован на соединение, то есть нет необходимости устанавливать соединение перед отправкой данных;
tcp обеспечивает надежный сервис (передача данных), udp Не гарантировано;
TCP ориентирован на поток байтов, udp ориентирован на пакеты;
Передача данных TCP медленная, передача данных udp быстрая;
82. Почему TCP нужно пожать руку три раза, а не два? Почему?
Если используются два рукопожатия,Пока сервер отправляет пакет подтверждения, соединение будет установлено, но поскольку клиент в это время не отвечает на запрос сервера,Чтоэтотчассерверная часть Сразувстречаодинпрямойсуществовать Ожидание клиента,Таким образом, определенное количество ресурсов на стороне сервера тратится впустую. Если используется трехстороннее рукопожатие,Сервер не получил сообщение. Клиент подтвердит еще раз.,Тогда вы будете знать, что клиент не просил установить запрос,Не будет никакой траты ресурсов сервера.
83. Расскажите, как генерируются липкие пакеты TCP?
Прикрепленные TCP-пакеты могут возникать на отправляющей и принимающей стороне. Давайте рассмотрим различные причины липких пакетов на обоих концах.
Застревание пакета на отправляющей стороне: перед отправкой отправляющему концу необходимо дождаться заполнения буфера, что приводит к зависанию пакета;
Получатель придерживается пакета: получатель не получает буферный пакет вовремя,Вызывает получение нескольких пакетов.
84. Каковы семиуровневые модели OSI?
Физический уровень: физическое соединение с использованием среды передачи для уровня канала передачи данных, что обеспечивает,выполнить Сравнивать Специальный потокизпрозрачныйпередача инфекции。
Уровень канала передачи данных: отвечает за установление и управление связями между узлами.
Сетевой уровень: применяет алгоритм маршрутизации, для сообщения или группировки используется коммуникационная подсеть, выбирающая наиболее подходящий путь.
Транспортный уровень: Обеспечьте пользователям надежный и безошибочный контроль потока для обеспечения правильной передачи сообщений.
Сеансовый уровень: установка соединения с двумя объектами на уровне представления.
Уровень представления: решает проблемы представления пользовательской информации, такие как кодирование, преобразование формата данных, шифрование и дешифрование.
Прикладной уровень: обслуживание непосредственно пользователям по предоставлению,Выполняйте различные задания, которые хотят выполнить пользователи на существованиясеть.
85. В чем разница между запросами на получение и отправку?
Запросы Get будут активно кэшироваться браузером, а запросы Post — нет.
get Существует ограничение на размер передачи параметров, в то время как post безиметь.
post Передача параметров безопаснее, получите Параметр из будет явно ограничивать существование url давай, опубликуй Не будет.
86. Как добиться междоменности?
Существует несколько вариантов реализации междоменной реализации:
Междоменный запуск на стороне сервера настраивать CORS равный *;
jsonp:JSON with Заполнение, оно использует теги сценария src Соединения могут получать доступ к различным источникам функций, загружать удаленные файлы из JS. функция" для выполнения из.
шаблон проектирования
88. Скажите что-то, что вам знакомо проектирования?
Режим Singleton: гарантированно создается один раз, что позволяет экономить системные ресурсы.
Шаблон фабрики (простая фабрика, абстрактная фабрика): код разделения.
Шаблон наблюдателя: определяет зависимости между объектами.,Таким образом,Когда настоящий слон меняется на Изменить,Все его зависимости будут уведомлены и обновлены автоматически.
Режим внешнего вида: обеспечивает унифицированный интерфейс.,Группа интерфейсов, используемых для доступа к подсистемам.,Фасад определяет интерфейс высокого уровня,Сделайте подсистемы более простыми в использовании.
трафаретметодмодель:определение Понятноодининдивидуальныйалгоритмизскелет,И Воля на несколько шагов задержал приезд подкласса середина.,Метод шаблона позволяет подклассам использовать этот метод без изменения структуры алгоритма.,Переопределите шаги алгоритма.
Режим статуса: позволяет верно существующему внутреннему статусу изменяться. Изменить при его изменении. Изменить его из строки на.,верно Слон выглядит так, как будто он изменил свой класс.
89. В чем разница между простой фабрикой и абстрактной фабрикой?
Простая фабрика: используется для производства любого продукта одного уровня структуры.,верно Добавить новые товары,Некомпетентен для власти.
фабрикаметод:использовать Приходить То же производствоодинждатьструктура уровнейсерединаизфиксированные продукты,Поддержка Добавьте любой товар.
Абстрактная фабрика: используется для производства всех продуктов разных семейств продуктов.,верно Добавить новые товары,Некомпетентность к власти; расширение семейства продуктов.
Spring/Spring MVC
90. Зачем использовать пружину?
spring поставлять ioc технология,контейнер поможет вам управлять зависимостями извне,от Больше нет необходимости самостоятельно создавать и управлять зависимостями верные объекты,Легче извыполнить программу развязки.
spring поставлять Понятноделаподдерживать,делатьделадействовать Изменятьизудобнее。
В Spring реализовано слайс-ориентированное программирование, которое упрощает решение определенных типов проблем.
Более удобная интеграция израмки, пружина Очень удобно интегрировать другие рамки, например, MyBatis、hibernate ждать.
91. Объясните, что такое аоп?
aop дааспектно-ориентированное программирование, применение предварительно скомпилированного метода и запуск динамического агента периода запуска функции программы из унифицированного обслуживания технологии.
Проще говоря Дасистемаодиниметь дело сопределенныйодин“раздел”(добрый)извопросиз编степень思думать,Сравниватьнравитьсясистемаодиниметь дело сбревно、аномальныйждать.
92. Объясните, что такое ioc?
ioc:Inversionof Control (серединаискусство: инверсия управления) да spring изкор, верно Ю spring Для рамки, что касается да spring Отвечает за контроль жизненного цикла слона и взаимоотношений между слонами.
Проще говоря,Контроль относится к контролю над текущим верным, поскольку внутренние члены инверсии контроля относятся к изда;,Этот элемент управления больше не управляется текущим верным слоном.,Другим (классом, сторонним контейнером) управлять.
93. Каковы основные модули пружины?
Пружинная сердцевина: самая базовая часть рамкииз,поставлять ioc ивнедрение зависимостейхарактеристика.
spring контекст: построен на core Пакетный пакет context Пакет-пакет, обеспечивающий стиль рамки, подобный методу доступа.
Spring dao: объект доступа к данным, обеспечивающий уровень абстракции JDBC.
Spring aop: по обеспечивает реализацию аспектно-ориентированного программирования калибровки, позволяющую настраивать перехватчики и точки ожидания.
spring Web:поставлять Понятно Иголкаверно Web Разработайте функции интеграции, такие как загрузка файлов, используя servlet listeners руководить ioc контейнеринициализацияи Иголкаверно Web из ApplicationContext。
spring Web mvc:spring серединаиз mvc Пакет услуг Web Приложение Model-View-Controller(MVC)извыполнить。
94. Какие методы инъекций обычно применяют весной?
Внедрение свойств сеттера
Инъекция конструктора
Внедрение режима аннотаций
95. Являются ли бобы весной потокобезопасными?
spring серединаиз bean По умолчанию одноэлементный режим, весна Фреймворк не поддерживает синглтоны bean руководитьмногопоточностьиз Обработка инкапсуляции。
На самом деле большую часть времени spring bean Безгражданство из (Сравнивать, например, dao класс), все в какой-то степени bean Слишком Безопасностьиз, но если bean иметьсостояниеизразговаривать(Сравниватьнравиться view model верно (типа), разработчики должны обеспечить потокобезопасность. Самый простой способ — изменить да на Изменить. bean изскоп, Пучок "singleton" Изменить больше на "прототип", так просили bean Эквивалентно new Bean(), поэтому можно гарантировать потокобезопасность.
иметьсостояние Даиметьданныехранилище Функция。
никтосостояние Да Нетвстречадержатьданные。
96. Сколько областей bean-компонентов поддерживает Spring?
Spring поддерживает 5 областей, а именно:
Singleton: внутри контейнера Spring ioc существует один экземпляр bean-компонента, например bean-компонент,да системное значение по умолчанию;
прототип: каждый раз при вызове отконтейнера bean Каждый раз будет создаваться новый пример, то есть каждый раз getBean()Эквивалентноосуществлять new Операция Бин();
Область применения в веб-среде:
запрос: для каждого http-запроса будет создан компонент;
сеанс: один и тот же сеанс HTTP использует экземпляр компонента;
глобальная сессия: используется для portlet контейнер,потому чтокаждый portlet иметьодиниз session,globalsession чтобы создать глобальный из http session。
"Уведомление:" использовать prototype Область применения требует тщательного обдумывания, потому что что частое создание и разрушение bean Это приведет к большим затратам на производительность.
97. Какими способами Spring может автоматически собирать бобы?
no: значение по умолчанию, указывающее отсутствие автоматической сборка,На сборку компонента следует ссылаться явно.
byName: основано на внедрении bean-компонента изName, это действительно похоже на зависимость.
byType: Он вводит, как и зависимости, основанные на типе.
Конструктор: конструктор используется для внедрения зависимостей и требует большого количества параметров.
autodetect:контейнерпервыйпроходить Конструкториспользовать autowire Сборка, если нет возможности, то провести byType автоматическая сборка。
98. Каковы способы реализации весенних транзакций?
декларативныйдела:декларативныйделатакжеиметь Два видавыполнить Способ,на основе xml Файл конфигурации и з режим и режим аннотации (добавлен класс существовать @Transaction аннотация).
весна Существует пять основных уровней запуска, значение по умолчанию: ISOLATION_DEFAULT (использовать настройку базы данных), остальные четыре уровня изоляции и уровни изоляции базы данных согласованы:
ISOLATION_DEFAULT: используйте уровень изоляции базовой настройки базы данных, и я буду использовать любую настройку базы данных;
ISOLATIONREADUNCOMMITTED: незафиксированное чтение, самый низкий уровень изоляции, может быть прочитано другими транзакциями до того, как транзакция будет зафиксирована (будут происходить фантомные чтения, грязные чтения и неповторяемые чтения);
ISOLATIONREADCOMMITTED: зафиксированное чтение, транзакция может быть прочитана другими транзакциями только после ее отправки (вызывает фантомное чтение, неповторяемое чтение), SQL server из Уровень по умолчанию;
ISOLATIONREPEATABLEREAD: повторяемое чтение.,Убедитесь, что при чтении одних и тех же данных несколько раз,Их значения соответствуют содержимому в начале транзакции.,Запрещено чтение незафиксированных данных других транзакций (вызовет фантомное чтение),MySQL из Уровень по умолчанию;
ISOLATION_SERIALIZABLE: сериализация,Самый дорогой и самый надежный уровень изоляции.,Долженизоляцияуровеньспособный防止脏读、неповторяющееся чтение、Фантомное чтение.
«Грязное чтение» : указывает, что одна транзакция может читать незафиксированные данные другой транзакции. Сравнение Например, транзакция пытается вставить запись А, транзакция в данный момент не была зафиксирована, а затем другая транзакция пытается прочитать запись A。
«Неповторяющееся чтение» :даобратитесь ксуществоватьодининдивидуальныйдела Внутри,Прочитайте одни и те же данные несколько раз.
«Фантомное чтение» : Относится к разным наборам результатов нескольких запросов в одной транзакции. Сравнивать как транзакцию A При первом запросе было n записей, но запрос завершился неудачно во второй раз при тех же условиях. n+1 записи,Это похоже на галлюцинации. Причина фантомного чтения заключается в том, что другая транзакция добавила и удалила данные в наборе результатов первой транзакции.,Содержимое данных той же записи было изменено.,Все строки и записи данных больше и меньше.
100. Расскажите мне о процессе запуска Spring MVC?
spring mvc Первый запрос Воля отправляется на DispatcherServlet。
DispatcherServlet Запрос один или несколько HandlerMapping, найдите место для обработки запроса. Controller。
DispatcherServlet Подача заявления о приезде Пучок должна быть из Controller。
После того, как контроллер, руководящий бизнес-логикой, будет обработан, появится ModelAndView.
Dispathcher Запрос один или несколько ViewResolver просмотреть преобразователь,попытаться найтиприезжать ModelAndView верно, как обозначение объекта просмотра.
@Autowired Он может верно менять члены класса, менять переменные, методы и конструкторы, руководить аннотациями, полную автоматическую сборкаиз Работа,проходить@Autowired изиспользовать, чтобы устранить set/get метод.
Spring Boot/Spring Cloud
104. Что такое пружинный ботинок?
spring boot дадля spring Сервисы из,да используются для упрощения новых spring Приложение Начальная настройка и процесс разработкииз。
105. Зачем использовать пружинную загрузку?
Простая конфигурация
независимыйбегать
автоматическая сборка
Без генерации кода и XML-конфигурации
обеспечивает мониторинг приложений
Простота в использовании
Повышение эффективности разработки
106. Что такое основной файл конфигурации Spring Boot?
Ядро Spring boot из двух файлов конфигурации:
bootstrap (. yml или . properties):boostrap от отца ApplicationContext нагрузкаиз,Сравнивать applicaton Сначала загрузите и boostrap внутрилапшаизсвойствоне могуодеялокрышка;
application (. yml или . свойства): используется для spring boot Проект автоматизации Конфигурация.
В файле конфигурации есть . properties Формат . yml По формату они в основном отличаются разными стилями каллиграфии.
Конфигурация свойств следующая:
Язык кода:javascript
копировать
spring.RabbitMQ.port=5672
Конфигурация .yml следующая:
Формат yml не поддерживает импорт аннотаций @PropertySource.
108. Каковы способы реализации горячего развертывания при весенней загрузке?
использовать devtools Запустите горячее развертывание и добавьте devtools Библиотека,существовать Конфигурациядокументсередина Пучок spring. devtools. restart. enabled установлен на true;
использовать Intellij Idea В редакторе проверьте автоматическую компиляцию или перекомпилируйте вручную.
109. В чем разница между jpa и спящим режимом?
jpa полное имя Java Persistence API,да Java Спецификация интерфейса сохраняемости, спящий режим принадлежать jpa изспецифическийвыполнить。
110. Что такое весеннее облако?
spring cloud даасерия кадризиметь последовательность сбора. он использует spring boot Удобство разработки разумно упрощает разработку средств распределенной системы, таких как регистрация обнаружения служб, концентратор гурациисередина, шина сообщений, балансировка нагрузки, автоматический выключатель, мониторинг данных и т. д., и все это можно использовать. spring boot Стиль разработки позволяет запускать и развертывать одним щелчком мыши.
111. Какова функция автоматического выключателя Spring Cloud?
существоватьточка Распределенная архитектурасередина,Режим автоматического выключателя из функций Слишком похож на из,При выходе из строя сервисного блока (аналогично короткому замыканию в электроприборе),использовать автоматический выключатель для контроля неисправностей (аналогично перегоранию предохранителей),Отправить ответ об ошибке вызывающему абоненту,и Неамного времениизждать。этот Образец Сразу Нетвстречаделать线степень因вызов Вина Служитьодеяломного временизаниматьиспользовать Нетвыпускать,Предотвращено распространение ошибок в распределенных системах.
112. Каковы основные компоненты весенних облаков?
Эврика: Служба зарегистрирована при обнаружении.
Feign:на на основе механизма динамического прокси, выберите машину в соответствии с аннотацией и склейте запрос url адрес для инициации запроса.
Ribbon:выполнитьбалансировка нагрузки,из одного сервиса из нескольких машин середина выбирает один.
Hystrix:поставлятьпул потоков,Разные сервисы используют разные пулы потоков,Восстановление Изоляция различных сервисных вызовов из,Проблема лавинного обслуживания исключена.
Zuul: управление шлюзом на базе Zuul Шлюз перенаправляет запрос в службу достоверного ответа.
Hibernate
113. Зачем использовать спящий режим?
hibernate даверно jdbc с инкапсуляцией значительно упрощает уровень доступа к данным из-за утомительного повторяющегося кода.
hibernate даан отличноиз ORM восстанавливать, значительно упрощает DAO Слой функции кодирования.
Может быть очень удобно изруководить базу данных трансплантационных работ.
обеспечивает механизм кэширования,да Программа эффективно выполняет изменения.
114. Что такое структура ORM?
ORM (Сопоставление отношений объектов) верно Реляционное сопоставление объектов,да Пучок База данных серединаизсвязьданныесопоставлено сдлястепеньпоследовательностьсерединаизобъект.
использовать ORM из Преимущества: Повышение эффективности разработки и снижение затрат на разработку.、Разработка проще и интуитивно понятнее、Более портативный.
Конфигурация внутри спящего режима show_SQL установлена на true. Но включать его не рекомендуется. Включение снизит эффективность работы программы.
116. Сколько методов запроса есть в спящем режиме?
Три типа: hql, собственный SQL и критерии условного запроса.
117. Могут ли классы сущностей спящего режима быть определены как окончательные?
Классы сущностей могут быть определены как final категорию, но в этом случае нельзя использовать hibernate В режиме прокси задержка, связанная с низкой производительностью, поэтому не рекомендуется определять классы сущностей для final。
118. существовать hibernate используется в Integer и int В чем разница в картографировании?
Integer Введите значок открытия, это значение позволяет ноль, в то время как int тип данных частнойь База, значение не может быть для null。
119. Как работает спящий режим?
Чтение и анализ файлов конфигурации.
Прочитайте и проанализируйте файл сопоставления, чтобы создать SessionFactory.
Открытая сессия.
Создайте транзакцию.
руководить настойчивостью операций.
Зафиксируйте транзакцию.
Закройте сеанс.
Закройте SessionFactory.
120. get()и В чем разница между load()?
При запросе данных нет OID Укажите изверно объект, get() возвращаться null;load() возвращатьсяодининдивидуальныйактерское мастерствообъект.
load() поддерживает отложенную загрузку; get() не поддерживает отложенную загрузку.
121. Расскажите мне о механизме кэширования Hibernate?
hibernate Common из кеша иметь Кэш Кэш L1и уровня 2:
Кэш уровня 1: также называется Session кэш,Толькосуществовать Session Оно действительно в рамках действия и не требует вмешательства пользователя. hibernate Самообслуживание, можно очистить с помощью: evict(object) object изcache;clear() очищает Кэш; L1серединаизиметь кеш; флеш() очищает кеш;
Кэш второго уровня: кеш уровня приложения, существующий. Session середина Всеиметьэффект,поддерживать Конфигурация Нет.тринаправлениеизкэш,Такие как: EhCache.
122. Каковы состояния спящих объектов?
Временное/переходное состояние: прямое new Изверно объект не был сохранен (не сохранена база данных существования середина) и на него не влияет Session управлять.
Постоянное состояние: при вызове Session из save/saveOrupdate/get/load/list ждатьметодизкогда,вернослон Да Выносливостьсостояние。
123. существовать hibernate середина getCurrentSession и openSession Какая разница?
getCurrentSession свяжет текущий поток, и openSession Тогда Не будет.
getCurrentSession Транзакции Spring Контроль из и отсутствие необходимости ручного закрытия во время openSession Нам нужно вручную включить его самостоятельно. транзакцию.
124. Должен ли класс сущности hibernate иметь конструктор без параметров? Почему?
hibernate середина Каждый класс сущности должен предоставлять конструктор без аргументов, потому что что hibernate рамкахотетьиспользовать reflection API, позвонив ClassnewInstance() Чтобы создать экземпляр класса сущности, если нет конструктора без параметров, он выдаст аномальный объект.
MyBatis
125. MyBatis середина #{}и ${}Какая разница?
\#{}да Прекомпиляционная обработка,${}да Замена персонажа。существоватьиспользовать #{}час,MyBatis встреча Воля SQL серединаиз #{}Заменить на“?”,Сотрудничать PreparedStatement из set Назначение метода, это может эффективно предотвратить SQL Инъекция для обеспечения безопасности программы.
126. Сколько методов подкачки есть в MyBatis?
Режим пейджинга: логический пейджинг и физический пейджинг.
«Логический пейджинг:» использовать MyBatis Принесите свой собственный RowBounds руководитьточка Страница,Он запрашивает много данных одновременно,Затемсуществоватьданныесередина Сноваруководить Поиск。
«Физический пейджинг:» почерк SQL Плагин нумерации страниц илииспользовать плагин пагинации PageHelper, перейдите в базу данных, чтобы запросить указанное количество данных с разбивкой на страницы и формат.
127. Запрашивает ли RowBounds все результаты одновременно? Почему?
RowBounds На первый взгляд, «да существовать «все имеют» данные» середина извлекает данные, но на самом деле это не одноразовый запрос «все имеют данные», потому что что MyBatis даверно jdbc из Инкапсуляция,существовать jdbc Поездка серединиметь а Fetch Size Из конфигурации указывается, сколько фрагментов данных можно запросить в базе данных одновременно. Если вы хотите запросить больше данных, это будет постоянно выполняться. Next() из времени, чтобы запросить больше данных. Просто подойдите к банкомату и получите его. 10000 юаней, но банкомат может снять до 2500 Юань, так что тебе придется взять 4 Только это время понадобится, чтобы вывести все деньги. Только даверно jdbc Например, когда вы звоните next() автоматически поможет вам завершить запрос. Преимущество этого подхода в том, что он может эффективно предотвратить переполнение памяти.
128. MyBatis Логический пейджинг и физический пейджинг Какая разница?
Логическое подкачивание данных позволяет запрашивать много данных одновременно,Затем Сновасуществоватьрезультатсередина Поискточка Страницаизданные。Недостатки этого способадануждатьсяхотеть消耗большойколичествоиз Память、иметь переполнение памяти из-за риска、верно, давление базы данных выше большого.
Физическая пейджинговая передача запроса к базе данных указанного количества данных из,Это компенсирует различные недостатки одновременного обнаружения всех данных.,Сравнение Если вам нужно много памяти,верно Проблемы, такие как высокая нагрузка на запросы к базе данных.
129. Поддерживает ли MyBatis отложенную загрузку? В чем заключается принцип ленивой загрузки?
MyBatis поддерживает отложенную загрузку, просто установите lazyLoadingEnabled=true.
Принцип отложенной загрузки заключается в том, что загрузка срабатывает, когда изда звонит из,и Неасуществоватьинициализацияизкогда Сразунагрузкаинформация。Сравниватьнравитьсявызов a. getB(). getName(), найденный в настоящее время a. getB() изценитьдля null, в это время заранее сохраненная ассоциация будет активирована отдельно. B вернослониз SQL, сначала запросите его Б, а потом позвони a. setB(b) и вызовите его снова в это время a. getB(). getName() Сразуиметьценить Понятно,этот Да Задерживатьнагрузкаиз Базовыйпринцип。
130. Расскажите мне что-нибудь о MyBatis izCache L1 и кеше двасорт?
Кэш L1:на основе PerpetualCache из HashMap Локальный кеш, он истекает из жизненного цикла SQLSession последовательный из, иметь несколько SQLSession или Распространенные из среды середина операций с базой данных, могут появиться грязные данные. когда Session flush или close После этого Session серединаиз Местоиметь Cache Сразу Воля Прозрачность, defaultCache L1да находится на из.
Кэш второго уровня: Слишкомна основе PerpetualCache из HashMap Локальный кеш, отличный от области хранилища для Mapper Уровень из: если вам нужно разделить кеш между несколькими SQLSession, вам нужно использоватьприезжать кеш второго уровня, а кеш второго уровня может настроить источник, например Экаче. Кэш второго уровня по умолчанию не включен. Чтобы включить кеш второго уровня, класс атрибута кэша второго уровня требует выбор. Serializable Интерфейс сериализации (может использоваться для сохранения состояния объекта).
Включите процесс запроса данных кэша второго уровня: кэш второго уровня -> Кэш L1 -> база данных.
кэшвозобновлятьмеханизм:когдаопределенныйодининдивидуальныйделатьиспользовать域(Кэш L1 Кэш сеанса/второго уровня Mapper) выполнил C/U/D После операции по умолчанию все файлы в этой области select серединаизкэш Воляодеяло clear。
131. MyBatis и hibernate В чем различия?
Гибкость: MyBatis Более гибкий, вы можете написать это самостоятельно SQL заявление,использоватьрост Приходить Сравниватьсравниватьнаправление便。
Мобильность: MyBatis есть многие пишут сами из SQL,потому чтокаждыйданные Библиотекаиз SQL Может быть разным, поэтому переносимость С сравнения плохая.
Порог обучения ииспользовать: Начать работу с MyBatis С сравнением относительно просто, а порог использования также ниже.
Кэш второго уровня: спящий режим Лучше иметь кеш второго уровня, который сможет сам заменить сторонний кеш второго уровня.
132. Какие исполнители (Исполнители) есть у MyBatis?
MyBatis имеет три основных исполнителя Executor:
SimpleExecutor: выполняется один раз update или select Просто открой один Statement верный слон, немедленно используй его закрытие Statement вернослон;
ReuseExecutor: выполнить update или выберите с помощью SQL делатьдля key Находить Statement вернослон,житьсуществовать Сразуиспользовать,Создавать без существования,использовать完后Нетзакрытие Statement объект, в то время какда помещается в Map Внутренний запас в следующий раз воспользуюсь. Короче говоря, просто дадублироватьиспользовать Statement вернослон;
BatchExecutor: выполнить обновление (нет select,jdbc Пакетная обработка не поддерживается. select),Воля Местоиметь SQL Все добавляются для пакетной обработки середина (addBatch()), ожидающего унифицированного выполнения (executeBatch()), который кэширует несколько Statement верно слон, друг Statement вернослон Вседа После завершения addBatch() дождитесь выполнения по одному. пакетная обработка ExecuteBatch() с jdbc То же самое для пакетной обработки.
133. Каков принцип реализации плагина пейджинга MyBatis?
Основные принципы работы плагина пейджинга даиспользовать MyBatis Чтобы обеспечить интерфейс плагина, настроить пользовательский плагин, создать плагин из перехвата в рамках метода перехвата, который будет выполнен из SQL, а затем переписать SQL, согласно dialect Диалект, добавьте, конечно, следует из оператора физического подкачки и параметров физического подкачки.
134. Как написать собственный плагин для MyBatis?
«Принцип реализации собственного плагина»
Пользовательский плагин MyBatis перехватывает четыре основных объекта MyBatis (Executor, StatementHandler, ParameterHandler, ResultSetHandler):
Исполнитель: перехватывает внутреннего исполнителя, который отвечает за вызов StatementHandler Манипулируйте базами данных и устанавливайте результаты ResultSetHandler руководит автоматическим сопоставлением, кроме того, он также обрабатывает работу кэша второго уровня;
StatementHandler: перехват SQL Построение синтаксиса из обработки, это да MyBatis Непосредственно и выполнение базы данных SQL Скрипт изверно понравился, кроме того он еще и калибровал MyBatis из Кэш L1;
setProperties методдасуществовать MyBatis руководить плагином Конфигурации из Конфигурации можно настроить связанные атрибуты, а именно: интерфейс автоматически выборочно из параметра Конфигурация;
plugin Метод плагина используется для инкапсуляции целевого слона из, прохождения. С помощью этого метода мы можем получить самого целевого слона, или мы можем получить его и з прокси может решить, следует ли перехватывать да, а затем решить, какой тип цели вернее, изображение должно появиться, чиновник приводит пример: return Plugin. wrap(target, this);
intercept метод Дахотетьруководитьперехватыватьизкогдахотетьосуществлятьизметод.
«Пример реализации собственного плагина»
Официальная реализация плагина:
Язык кода:javascript
копировать
@Intercepts({@Signature(type = Executor. class, method= "query",
args = {MappedStatement. class, Object. class, RowBounds. class, ResultHandler. class})})
publicclassTestInterceptorimplementsInterceptor{
public Object intercept(Invocation invocation)throws Throwable {
Object target = invocation. getTarget(); //Делегировано, да, слон
Method method = invocation. getMethod(); //Метод агента
Object[] args = invocation. getArgs(); //параметры метода
// do something . . . . . . Выполнить блок кода перед перехватом метода
Object result = invocation. proceed();
// do something . . . . . . . Выполнить блок кода после перехвата метода
public Object plugin(Object target){
return Plugin. wrap(target, this);
RabbitMQ
135. Каковы сценарии использования RabbitMQ?
Паническая покупательская активность сокращает пики и заполняет спады, чтобы предотвратить коллапс системы.
Задержка обработки информации, например отправка напоминания по электронной почте пользователям, разместившим неоплаченные заказы через 10 минут.
Разделенная система,верно Новую функцию можно расширить, написав отдельный модуль,Сравнивать Если пользователь подтверждает оценку,Добавлена функция возврата баллов пользователям,В это Время не требует добавления новых точек из функции в бизнес-код. Вам нужно только добавить новые точки из интерфейса, чтобы подписаться на оценку подтверждения и очередь сообщений. Чтобы добавить какие-либо функции позже, вам нужно только подписаться на них. верно из очереди сообщений и все.
136. Какова важная роль RabbitMQ?
RabbitMQ середина Важная изроли: производитель, потребитель и Агент:
Продюсер: создатель сообщения,Отвечает за создание и передачу данных на сервер сообщений о прибытии;
Потребитель: сообщение получателя, используемое для обработки данных и подтверждения сообщения;
актерское мастерство:Да RabbitMQ сам,Используется для выполнения роли «экспресс-доставки».,Не генерирует сообщения сам,Только да играет роль «экспресс-доставки» из.
137. Каковы важные компоненты RabbitMQ?
ConnectionFactory (Менеджер соединений): Устанавливает соединение между приложением и Rabbit изManager, используется программный код. в。
Канал: канал отправки сообщений.
Exchange: используется для приема и распространения сообщений.
Queue (очередь): используется для хранилища сообщений.
RoutingKey (ключ маршрутизации): используется на генераторе Пучок из коммутатора распределения данных.
BindingKey (ключ привязки): используется для Пучок обменника из привязки сообщений приехать в очередь.
138. RabbitMQ середина vhost Какова функция?
vhost: каждый RabbitMQ может создать множество vhost, мы называем это виртуальным хостом. Каждый виртуальный хост на самом деле является виртуальным хостом. mini Издание из RabbitMQ,Там своя очередь,переключатель и привязка,Имейте свой собственный механизм разрешений.
139. Как отправляются сообщения RabbitMQ?
Сначала клиент должен подключиться к RabbitMQ Сервер может публиковать и потреблять сообщения, а клиент rabbit server создаст tcp подключен один раз tcp Открыть и проводить сертифицировано (сертификат будет выслан Вам rabbit Сервер (имя пользователя и пароль), вы и клиент и RabbitMQ Только что создал amqp канал, канал для создания существования «настоящего» tcp В виртуальном соединении amqp Команды отправляются по каналам дапроходить, и каждый канал будет иметь уникальный id,Независимо от того, публикует новости,Все очереди подписки заполняются этим каналом.
140. Как RabbitMQ обеспечивает стабильность сообщений?
поставлять Понятноделаиз Функция。
проходить Воля channel установлен на подтвердить режим.
141. Как RabbitMQ позволяет избежать потери сообщений?
Диск сохранения сообщений Пучок,Убедитесь, что сообщение о перезапуске сервера не появляется.
Каждый кластер середина имеет как минимум один физический диск.,Гарантированные сообщения попадают на диск.
142. Каковы условия обеспечения успешного сохранения сообщений?
Объявите, что очередь должна быть постоянной durable установлен на true.
Режим push-доставки сообщений должен быть постоянным, для параметра DeliveryMode установлено значение 2 (долговечный).
Сообщение достигло постоянного обменника.
Сообщение достигло постоянной очереди.
Вышеупомянутые четыре условия должны быть выполнены для обеспечения успешного сохранения сообщения.
143. Каковы недостатки постоянства RabbitMQ?
Выносливостьиз Недостаток земли Да降Низкий Понятно Служитьустройствоиз Колебаниеколичество,потому чтоиспользоватьизда диска вместо памяти хранилища, от чего снижается пропускная способность. Вы можете попробовать использовать ssd Жесткий диск для облегчения проблем с пропускной способностью.
144. Сколько типов вещания имеет RabbitMQ?
прямой (режим по умолчанию): самый простой режим,Отправитель передает сообщение подписчику,Если у вас есть несколько подписчиков,По умолчанию сообщения отправляются в режиме опроса.
заголовки: с direct добрыйпохожий,Только исполнение очень плохое,Этот тип практически не используется.
fanout: режим раздачи, распределяем потребление по всем абонентам.
тема: Соответствие шаблону подписки,использовать регулярное совпадение приехать в очередь сообщений,Любой, кто может соответствовать требованиям проживания, может получить жилье.
145. Как RabbitMQ реализует очередь отложенных сообщений?
Очередь задержки извыполнить двумя способами:
передать сообщение попадает в обмен недоставленными письмами после истечения срока действия,Затем биржа пересылает очередь отложенного потребления.,функция восстановления задержки;
использовать RabbitMQ-delayed-message-exchange Плагин позволяет активировать функцию задержки.
146. Для чего используется кластер RabbitMQ?
Кластеры в основном преследуют две цели:
Высокая доступность: если на каком-то сервере возникает проблема, весь RabbitMQ возвращаться Можетпродолжатьиспользовать;
Высокая емкость: кластер может переносить больше сообщений.
147. Каковы типы узлов RabbitMQ?
Дисковый узел: сообщения будут отправляться на диск.
Узел памяти: все сообщения являются хранилищесуществовать памяти середина.,Сообщение о перезагрузке сервера потеряно,Производительность выше, чем у дискового типа.
148. На какие вопросы необходимо обратить внимание при построении кластера RabbitMQ?
использовать соединение «--link» между узлами,этотсвойствоне могупренебрегать。
Значение каждого файла cookie nodeuseiz erlang должно быть одинаковым.,Это значение Эквивалентно "секретному ключу" из функции.,Используется для аутентификации каждого узла.
Весь кластер середина должен содержать один дисковый узел.
149. Является ли каждый узел в RabbitMQ полной копией других узлов? Почему?
Неа,Причины следующие две:
Решение StorageSpace: если каждый узел имеет полную копию всех очередей,Таким образом, добавление новых узлов не только не увеличивает пространство в хранилище, но,Вместо этого добавляется больше избыточных данных;
Вопросы производительности: если каждое сообщение необходимо полностью скопировать на каждый узел кластера,Добавление новых узлов не улучшает возможности обработки сообщений. В большинстве случаев производительность одного узла остается такой же или даже хуже.
150. Что произойдет, если выйдет из строя единственный дисковый узел середина кластера RabbitMQ?
Если вышел из строя единственный диск из дисковых узлов,не могуруководитьк下действовать:
Невозможно создать очередь
Не могу создать обмен
Невозможно создать привязку
Не могу добавить пользователя
Не могу изменить разрешения
не могудобавить виудалитьузел кластера
Единственный дисковый узел вышел из строя,Кластер да может продолжать проектировать,нотыне могуизменить что-нибудь。
151. Есть ли у RabbitMQ какие-либо требования к порядку остановки узлов кластера?
RabbitMQ действительно кластер из остановки из заказа даиметь запрос из,Вам следует сначала закрыть узел памяти,Наконец, закрытие дискового узла. Если порядок прямо противоположный, то,Может вызвать новость изпотерянный.
Kafka
152. Можно ли использовать Kafka отдельно от Zookeeper? Почему?
kafka Не могу оторваться zookeeper одиниспользовать,потому что kafka использовать zookeeper Управление и координация kafka изNode-сервер.
153. Сколько стратегий хранения данных есть в Kafka?
Kafka имеет две стратегии хранения данных: сохранение в соответствии со временем истечения срока действия и сохранение в соответствии с размером сообщения в хранилище.
154. kafka Установите одновременно 7 день 10G Очистите данные, и сообщение пришло на пятый день. 10G, в это время kafka Как это будет решено?
В это время Кафка выполнит работу по очистке данных.,Независимо от времени и размера, в зависимости от того, что соответствует условиям,Всевстреча Прозрачныйданные。
155. В каких ситуациях kafka будет работать медленно?
узкое место в производительности процессора
Узкое место чтения и записи диска
сетьузкое место
156. На что следует обратить внимание при использовании кластера Kafka?
кластеризчислоколичество Неакрестмногокрест好,Желательно не более 7.,потому что节点крестмного,Чем дольше копируется сообщение,,Пропускная способность всей группы будет ниже.
Число кластеров желательно быть единственным, потому что что Если более половины неисправного кластера приходит в негодность, устанавливается на Сингулярные числа имеют более высокую отказоустойчивость.
Zookeeper
157. Что такое смотритель зоопарка?
zookeeper даа распределенная, служба координации распределенных приложений с открытым исходным кодом, да google chubby из Открытый исходный кодвыполнить,dahadoop и hbase — важные компоненты. Это распределенное приложение, обеспечивающее согласованность программного обеспечения.,поставлятьиз Функциявключать:Конфигурацияподдерживать、служба доменных имен、Распределенная синхронизация、Групповое обслуживание ожидания.
158. Какие функции есть у зоокипера?
Управление кластером: мониторинг состояния выживания узла、бегатьпроситьждать.
Выборы главного узла: после смерти главного узла резервный узел может начать новый раунд выборов главного узла.,Теория выборов главного узлаиз Даэтотиндивидуальный选举изпроцесс,использовать zookeeper может помочь в этом процессе.
Распределенная блокировка: Zookeeper предоставляет два типа блокировок: эксклюзивные блокировки и общие блокировки. Эксклюзивная блокировка означает, что только один поток может использовать ресурс одновременно.,общая блокировка дачтение блокировки общая,Чтение и запись взаимоисключающие,То есть несколько потоков могут одновременно читать один и тот же ресурс.,Если вы хотите записать блокировку, вы можете использовать только один поток. Zookeeper может действительно управлять распределенной блокировкой.
Служба имен: существование распределенных систем середина,проходитьиспользоватьслужба имен,Клиентское приложение может получить адрес ресурса и службы в соответствии с указанным именем.,поделки и другая информация.
159. Сколько режимов развертывания имеет Zookeeper?
Zookeeper имеет три режима развертывания:
Развертывание на одной машине: работайте на одном кластере;
Развертывание кластера: несколько кластеров;
Развертывание псевдокластера: один кластер запускает несколько zookeeper Реальностьпримербегать。
160. Как Zookeeper обеспечивает синхронизацию статуса главных и подчиненных узлов?
zookeeper атомного вещания, этот механизм гарантирует, что каждый server из синхронизации между ними. Этот механизм выборки протокола называется zab протокол. заб Протокол имеет два режима: режим восстановления (выбор мастера) и режим широковещания (синхронизация). заб при запуске службы или существовать лидер вылетает режим восстановления вводится, когда лидер избран и большинство server Завершенный leader После синхронизации статуса режим восстановления завершается. Государственная синхронизация обеспечивает leader и server Иметь такой же статус системы.
161. Что такое главный узел кластера?
существоватьточкараспределенная средасередина,Некоторая бизнес-логика должна выполняться только на определенной машине в кластере.,Другое из машины Можно поделиться этим результатом,Это может значительно сократить двойной учет.,Улучшите производительность,Поэтому необходим главный узел.
162. кластерсерединаиметь 3 сервер, один из его узлов не работает, В это время zookeeper Можно ли его еще использовать?
Вы можете продолжать использоватьUse. Пока более половины нечетных серверов не работают, вы можете продолжать играть вUse.
163. Скажите что-то zookeeper Механизм уведомления?
Клиент будет реагировать на определенные znode создать watcher событие, оно должно быть znode Когда происходят изменения, эти клиенты получают zookeeper из уведомления, клиент может затем znode Изменить, чтобы внести изменения в бизнес Изменить.
MySQL
164. Каковы три нормальные формы баз данных?
Первая нормальная форма: подчеркивание атомарности столбца изда,То есть каждый столбец таблицы базы данных представляет собой неделимый атомарный элемент данных.
Третья нормальная форма: любой неосновной атрибут не зависит от других неосновных атрибутов.
165. Всего в таблице автоинкремента 7 фрагментов данных. Последние 2 фрагмента данных удаляются, база данных MySQL перезапускается и вставляется еще один фрагмент данных. Какой идентификатор в этот момент?
Тип таблицы, если да MyISAM ,Что id Да 8。
Тип таблицы, если да InnoDB,Что id Да 6。
InnoDB Таблица будет автоматически увеличивать только первичный ключ и максимальное значение. id Запись в памяти существует середина, поэтому после перезагрузки она вызовет максимальную id потерянный.
166. Как получить текущую версию базы данных?
использовать select version() Будьте в курсе MySQL Версия базы данных.
167. Скажите что-то ACID Что это такое?
Atomicity(атомарность):одининдивидуальныйдела(transaction)серединаиз Местоиметьдействовать,или Все завершено,или Не все завершено,Это не положит конец определенной связи существования между середина. Произошла ошибка при выполнении транзакции существования середина.,Будет восстановлено (откат) к состоянию до начала транзакции.,Как будто эта транзакция никогда не выполнялась. Прямо сейчас,дела Нет Можетточка Скидка、Нередуцируемый.
Isolation(Изоляция):данные Библиотекапозволятьмногоиндивидуальныйодновременноделатакой жечасверно Чтоданныеруководить Читай и пишии Исправлятьизспособность,Изоляция может предотвратить несогласованность данных из-за перекрестного выполнения при выполнении нескольких транзакций. Изоляция транзакций разделена на разные уровни,включать读еще нетпредставлять на рассмотрение(Read незафиксированный), прочитать фиксацию (прочитать зафиксировано), повторяемое чтение (повторяемое чтение) и сериализация (Serializable).
Durability(упорство):делаиметь дело с После окончания,верноданныеиз Исправлять Дапостоянныйиз,Даже если система выйдет из строя, она не будет потерянной.
168. char и varchar Какая разница?
「char(n)」 : Тип фиксированной длины, сравнение, например, подписка. char(10), когда вы вводите три символа «abc», они занимают пространство и да 10 байты,другие 7 индивидуальныйданулевойбайт.
chat Достоинства: Высокая эффективность. Недостатки: Занимает место. Применимые сценарии: хранение пароля; md5 значение, фиксированная длина из,использовать char Очень подходит.
"varchar(n)": может быть длиной, значением хранилища для каждого значения, занимающего байты плюс один для записи его длины из байтов из длины.
Поэтому, учитывая пространство varcahr Более целесообразно с учетом эффективности; char Сравниватьсравниватьподходящий,два ВОЗиспользоватьнуждатьсяхотетькомпромисс。
169. float и double Какая разница?
float До хранилища 8 Бит из десятичного числа существует и занимает память середина 4 байт.
double Большая часть хранилища какао 16 Бит из десятичного числа существует и занимает память середина 8 байт.
170. Каковы различия между внутренним соединением MySQL, левым соединением и правым соединением?
Ключевое слово внутреннего соединения: внутреннее соединение; левое соединение: левое соединение; правое соединение: правое соединение.
Отображается внутреннее соединение да Пучок сопоставления связанных данных; левое соединение всей таблицы отображается целиком, а правое соединение отображает данные, соответствующие условиям правого соединения;
171. Как реализованы индексы MySQL?
Индекс да удовлетворяет определенному алгоритму Нахождения из структуры. данных,И эта структура данных каким-то образом будет указывать на данные,отивыполнитьвысокийэффект Находитьданные。
Конкретно MySQL серединаиз индекса, разные механизмы обработки данных различаются, но все текущие основные механизмы баз данных из индексов да B+ Деревовыполнитьиз,B+ Эффективность поиска по дереву может достигать эффективности дихотомии проживания. После нахождения области данных о посещении вы можете найти полную структуру. данных, поэтому иметь индекс производительности Слишком лучше.
172. Как проверить, соответствует ли индекс MySQL требованиям?
использовать объяснение Проверить SQL да Как выполнить оператор запроса из, от и проанализировать, соответствует ли ваш индекс да потребностям.
объясните грамматика: объясните, выберите * из таблицы, где тип = 1。
READ-UNCOMMITTED: незафиксированное чтение, самый низкий уровень изоляции, может быть прочитано другими транзакциями до того, как транзакция будет зафиксирована (будут происходить фантомные чтения, грязные чтения и неповторяемые чтения).
READ-COMMITTED: совершить чтение,одининдивидуальныйделапредставлять на рассмотрение后才способныйодеяло Чтоонделачитатьприезжать(Вызовет фантомное чтение、неповторяющееся чтение)。
REPEATABLE-READ: повторяемое чтение.,Уровень по умолчанию,Убедитесь, что при чтении одних и тех же данных несколько раз,Их значения соответствуют содержимому в начале транзакции.,Запрещено чтение незафиксированных данных других транзакций (вызовет фантомное чтение)。
СЕРИАЛИЗУЕМЫЙ: сериализация,Самый дорогой и самый надежный уровень изоляции.,Долженизоляцияуровеньспособный防止脏读、неповторяющееся чтение、Фантомное чтение.
«Грязное чтение» : указывает, что одна транзакция может читать незафиксированные данные другой транзакции. Сравнение Например, транзакция пытается вставить запись А, транзакция в данный момент не была зафиксирована, а затем другая транзакция пытается прочитать запись A。
«Неповторяющееся чтение» :даобратитесь ксуществоватьодининдивидуальныйдела Внутри,Прочитайте одни и те же данные несколько раз.
«Фантомное чтение» : Относится к разным наборам результатов нескольких запросов в одной транзакции. Сравнивать как транзакцию A При первом запросе было n записей, но запрос завершился неудачно во второй раз при тех же условиях. n+1 записи,Это похоже на галлюцинации. Причина фантомного чтения заключается в том, что другая транзакция добавила и удалила данные в наборе результатов первой транзакции.,Содержимое данных той же записи было изменено.,Все строки и записи данных больше и меньше.
174. Скажите что-то MySQL Часто используемые двигатели?
InnoDB Движок: MySQL 5.1 После того, как механизм базы данных по умолчанию обеспечивает правильную базу данных acid делаизподдерживать,А также обеспечивает блокировки на уровне строк и ограничения внешнего ключа.,этоиздизайниз Цель Даиметь дело сбольшие емкость данных из системы базы данных.MySQL бегатьизкогда,InnoDB Будет ли существовать память середина, создающая буферный пул для буферизации данных и индексов. Но движок не поддерживает полнотекстовый поиск, при этом запуск тоже происходит медленнее, чем из-за, он не сохраняет количество строк в таблице, поэтому при руководстве select count(*) from table инструкцияизкогда,руководить требуется просканировать всю таблицу. Из-за небольшой детализации замка,Писатьдействоватьда Нетвстреча Замок Полная таблицаиз,Следовательно, эффективность будет повышена в сценариях с более высоким существуодновременно.
MyIASM Механизм: не поддерживает транзакции и поддержку, а также не поддерживает блокировки на уровне строк и внешние ключи. Следовательно, при выполнении оператора вставки и обновления, то есть при выполнении операции записи, таблицу необходимо заблокировать, поэтому эффективность будет снижена. Но я InnoDB Разное изда, MyIASM Движок сохраняет количество строк в таблице когда руководить select count(*) from table оператор, вы можете напрямую прочитать сохраненное значение, не сканируя всю таблицу. Поэтому, если операций чтения в таблице гораздо больше, чем операций записи и транзакции не нужны, можно Воля MyIASM Первый выбор для ядра базы данных.
175. Скажите что-то MySQL из ХОРОШОЗамокиповерхность Замок?
MyISAM Поддерживает только блокировки таблиц, InnoDB поддерживатьповерхность Замоки ХОРОШОЗамок,по умолчаниюдля ХОРОШОЗамок。
Блокировки на уровне таблицы: низкие накладные расходы,Быстрая блокировка,Никаких тупиков не произойдет. Большая степень детализации блокировки,Самая высокая вероятность возникновения конфликта блокировок,одновременноколичество最Низкий。
Блокировки на уровне строк: дорого,Блокировка происходит медленно,Возникнет тупик. Сила замка небольшая,Вероятность конфликта блокировок мала,одновременновысшая степень。
176. Скажите что-тооптимистический замок и пессимистический замок?
Оптимистическая блокировка: каждый раз, когда вы идете за данными, вы уверены, что другие не изменят их.,Так что он не будет заблокирован,Однако, когда дасуществовать отправит обновление, будет считаться, что никто больше не обновлял эти данные в течение этого периода.
Пессимистическая блокировка: каждый раз, когда вы идете за данными, вы уверены, что кто-то другой их изменит.,Таким образом, каждый раз, когда существование принимает данные, они будут заблокированы.,Это предотвратит получение данных другими лицами.,До тех пор, пока не приедете, этот замок не будет снят.
Изоптимистическая блокировка базы данных требует собственной настройки, добавьте ее в существующую таблицу. version Поле, каждый раз, когда модификация успешна, значение будет добавлено. 1. Таким образом, каждый раз, когда вы меняете из, сначала правильно Сравняйте, и у вас будет возможность version и база данных присутствует version данетодин К,если противоречиво Сразу Нет Исправлять,Это приводит к оптимистической блокировке.
177. Каковы методы устранения проблем MySQL?
использовать команду showprocesslist Проверять текущую информацию о соединении.
использовать explain Командный запрос SQL План выполнения заявления.
Включить журнал медленных запросов,Проверять медленные запросы из SQL.
178. Как оптимизировать производительность MySQL?
для Индекс создания поля поиска.
Избегайте использования выберите * и перечислите поля, которые необходимо запросить.
Разделите таблицу по вертикали.
Выбирайте подходящее изхранилище двигателя.
Redis
179. Redis Что это такое?Всеиметь Которыйиспользоватьсцена?
Redis даодининдивидуальныйиспользовать C Разработка языка на базе кэша данных.
Redis использоватьсцена:
Записывайте количество лайков, кликов и комментариев к публикациям;
Кэшируйте последние горячие публикации;
Кэшировать информацию о статье;
Запишите информацию о сеансе пользователя.
180. Какие функции есть у Redis?
Функция кэширования данных
Распределенная функция блокировки
Поддержка постоянства данных
поддержка вопросов
Поддержка очереди сообщений
181. Redis и memcache Какая разница?
хранилище другим способом: memcache Все данные Пучка хранятся в существующей памяти. После отключения электроэнергии данные не могут превысить размер памяти Redis; Часть хранится на жестком диске, что обеспечивает долговечность данных.
Тип поддержки данных: memcache верный тип данных — относительно простой Redis; иметь комплекс из типа данных.
Базовые модели различны: базовые модели между ними различны,И протокол связи приложения с клиентом другой.,Redis Построил сам vm механизм,потому что Общие из Системные вызовы системной функции изWord,Перемещение запроса займет определенное количество времени.
value Размеры значений разные: Redis Максимальный размер может достигать проживания 512mb;memcache только 1mb。
182. Почему Redis однопоточный?
потому что cpu Неа Redis из «Узкого места», Redis Узким местом, скорее всего, является машинная память или пропускная способность. Поскольку однопоточную обработку легко выполнить, и cpu Он не станет узким местом, поэтому логично принять однопоточное решение.
о Redis из Performance,Официальный сайт также имеет,Обычные ноутбуки легко справляются с сотнями тысяч запросов в секунду.
И то, что он однопоточный, не означает, что он медленный. nginx и nodejs также являются примерами высокопроизводительных однопоточных серверов.
183. Что такое проникновение кэша? Как это решить?
Проникновение в кэш: относится к запросу данных, которые не должны храниться.,Из-за сбоя кэша при запросе к базе данных требуется середина.,Если данные невозможно проверить, они не будут записаны в кэш.,Эта воля приводит к тому, что существующие данные запрашиваются в базе данных приезжающих каждый раз, когда делается запрос.,Вызывает проникновение в кэш.
решение:Самый простой и грубыйизметоднравитьсяфруктыодининдивидуальный查询возвращатьсяизданныедлянулевой(Нет Трубкададанные Нетжитьсуществовать,Также да системный сбой),Мы кэшируем этот пустой результат,Но срок его годности будет очень коротким.,Не более пяти минут максимум.
184. Какие типы данных поддерживает Redis?
Redis поддерживает тип данных: string (строка)、список、хэш (словарь)、set(собирать)、zset(иметьпоследовательностьсобирать)。
185. Какие клиенты Java поддерживаются Redis?
поддерживатьиз Java У клиента есть Redisson、jedis、lettuce ждать.
Redisson: распределенная и масштабируемая оптимизация Java структура данных,и jedis Взаимно Сравнивать Redisson Функции относительно просты, включая сортировку, транзакции, конвейеры, разделы и т. д. Redis характеристика.
187. Как обеспечить согласованность данных кэша и базы данных?
Разумные настройки кэша по сроку действия.
Синхронное обновление при добавлении, изменении или удалении операций базы данных. Redis может использовать механизм транзакций для обеспечения согласованности данных.
188. Сколько существует методов сохранения Redis?
Redis имеет два метода сохранения и две стратегии:
RDB (база данных Redis): укажите интервал времени для создания моментального снимка ваших данных.
AOF(Append Only Файл): каждая команда записи прибытия добавляет файл середина к функции прохождения записи.
189. Как Redis реализует распределенные блокировки?
Redis точкастиль ткани Замок Что Реальность Дасуществовать系системавнутрилапшазаниматьодининдивидуальный“яма”,Другие программы также отнимают «питательное» время.,Как только оккупация пройдет успешно, можно продолжить выполнение.,Если вы потерпите неудачу, вы можете только сдаться и попробовать еще раз позже.
заниматьямаодин Общийиспользовать setnx(set if not существует) инструкция, которая может быть занята только одной программой и вызывается после завершения del Отпустите замок.
Redis точкастиль ткани Замокне могурешатьдогонятьчасизвопрос,Распределенная блокировкаимеет период ожидания,Проблемы возникнут, если выполнение программы превысит тайм-аут блокировки.
191. Как Redis выполняет оптимизацию памяти?
Попробуйте использовать хеш-таблицу Redis.,Пучок, связанный с информацией, помещается в хранилище хеш-таблицы прибытия.,и Неа Пучок每индивидуальный字段одинхранилище,этот Образец Можетиметьэффектизуменьшать Памятьиспользовать。Сравниватьнравиться Воля Web Изображение пользователя системы действительно должно быть помещено в хеш-таблицу приезжать, а затем интегрировано в хранилищеприезжать. Redis,и Неа Пучокпользовательиз Имя、возраст、пароль、Электронная почта и другие поля соответственно являются ключевыми для настройки хранилища.
192. Каковы стратегии устранения Redis?
Летучие-lru: от настройки срок действия набора данных (server. db[i]. истекает) середина выбирает самые последние данные об использовании, которые необходимо удалить.
Летучие-ttl: от настройки истечения срока действия из набора данных (server. db[i]. expires) середина выбирает Волю, срок действия которой истекает из данных, удаленных.
Летучий-случайный: от настройки времени истечения срока действия из набора данных (server. db[i]. expires) середина произвольно выбранных данных, подлежащих удалению.
allkeys-lru: из набора данных (server.db[i].dict) середина выбирает самые последние используемые данные для удаления.
allkeys-random: из набора данных (server.db[i].dict) середина произвольно выбирает данные для исключения.
no-enviction (выселение): отключить удаление данных.
193. Каковы распространенные проблемы с производительностью Redis? Как это решить?
Снимок памяти записи главного сервера,Заблокирует основной поток и будет работать,Когда выравнивание моментального снимка большое, влияние на производительность очень велико.,Обслуживание будет периодически приостанавливаться,Поэтому лучше не записывать снимки памяти на главном сервере.
Redis главный откопировать проблемы с производительностью,для основного откопирования скорости и стабильности соединения,Основная библиотека лучше всего существует в пределах одной локальной сети.
JVM
194. Скажите что-то JVM Основные компоненты? и его функция?
Класс Загрузчик
skОбласть данных времени выполнения
Механизм выполнения
Родной интерфейс
"Компонент из функции:" Во-первых, загрузчик классов (ClassLoader) будет Java Код преобразуется в байт-код, и область данных времени выполнения (Runtime Data Область), а затем байт-код Пучок загружается в память середина, в то время как файл байт-кода загружается только JVM Набор спецификаций набора команд не может быть напрямую передан базовой операционной системе для выполнения, поэтому требуется специальный механизм синтаксического анализа команд. При выполнении байт-код Воля транслируется в базовые системные инструкции и затем передается CPU Для выполнения этого процесса середина необходимо вызвать другие языки из Родной интерфейс для настройки функциональности всей программы.
195. Скажите что-то JVM Область данных времени выполнения?
Неттакой жевиртуальная машинаизпроект Область данных может немного отличаться, но все они будут соответствовать требованиям. Java виртуальная машина норм, Java виртуальная Спецификация машины предусматривает, что область разделена на следующие части: 5 части:
Программный счетчик (Programma Counter Register): индикатор байт-кода и номера строки, выполняемой текущим потоком.,Парсер байт-кода не работает дапроходить изменение Изменить этот счетчик по значению,Чтобы выбрать следующую инструкцию байт-кода, которую необходимо выполнить,Ветвление, цикл, переход, аномальная обработка, восстановление потока и другие функции базы.,Все должны полагаться на этот счетчик для завершения;
Собственный стек методов (Native Method Stack):ивиртуальная МашинаStackиз имеет тот же эффект, что и да, но только виртуальную МашинаStackдаService Java метод из, а родной стек методов дадлявиртуальная машинавызов Native метод Служитьиз;
Java Куча (Ява Heap):Java виртуальная машинасередина Память最большойизодинкусок,да поделился(а) иметь тему из,Почти все экземпляры выделяют здесь память;
Область метода (Метод Area):использовать Вхранилищеужеодеяловиртуальная машинанагрузкаиздобрыйинформация、постоянный、Статическое количество Изменить、Мгновенно компилируйте код и другие данные.
196. Скажите что-токучакучаизразница?
Функциональный аспект: куча да используется для хранения верных слонов.,Стек используется для выполнения программ.
Совместное использование: потоки кучи являются общими, потоки стека являются частными.
Размер пространства: Размер кучи намного больше, чем стек.
197. очередь и стек это такое?Какая разница?
Очереди и стеки используются для подготовки данных.
Очередь позволяет извлекать элементы в порядке очереди.,Но есть исключения,Deque Интерфейс позволяет извлекать элементы с обоих концов.
Stack и Queue очень похожи, но они извлекают элементы по принципу «последним пришел — первым вышел».
198. Что такое модель родительского делегирования?
существовать介绍双亲委派模型之вперед先说下добрыйнагрузкаустройство。верно для любого класса,Все это должно быть загружено загрузчиком классов и самим классом, чтобы установить уникальность JVM-серединаиз.,Каждый загрузчик классов,Всеиметьодининдивидуальныйнезависимыйиздобрыйимянулевоймежду。добрыйнагрузкаустройство Дав соответствии собратитесь к Конечно全限Конечноимя Воля class Файл загружен в JVM памяти, а затем конвертируется в class объект.
Классификация загрузчиков классов:
Запустите загрузчик классов (Bootstrap ClassLoader),давиртуальная Часть самой машины используется для загрузки каталога Java_HOME/lib/ серединаиз, или -Xbootclasspath Параметр указывает путь середина и является виртуальной. библиотека классов машинной идентификации;
Другие загрузчики классов:
Загрузчик классов расширений (Extension ClassLoader):Ответственныйнагрузка<java_home style="box-sizing: border-box; outline: 0px !important;">libextОглавлениеилиJava. ext. Количество Изменить в системе dirs указывает путь к библиотеке классов серединаизиметь;
Загрузчик классов приложений (Application ClassLoader). Отвечает за загрузку указанной библиотеки классов по пользовательскому пути к классам (classpath).,Мы можем напрямую использовать этот загрузчик классов. Общая ситуация,нравитьсяфруктынасбезиметь自определениедобрыйнагрузкаустройствопо умолчанию Даиспользоватьэтотиндивидуальныйнагрузкаустройство。
Модель родительского делегирования: если загрузчик классов получает запрос на загрузку классов.,Сначала он не будет загружать этот класс сам по себе.,Запрос на да Пучок делегируется для выполнения загрузчику родительского класса.,Каждый уровень загрузчика классов такой,Таким образом, все запросы на загрузку будут отправляться загрузчику классов запуска верхнего уровня середина.,только когда родительский загрузчик не может выполнить запрос на загрузку (он из области поиска середина не нашел требуемого класса для прибытия),Дочерний загрузчик попытается загрузить класс.
199. Скажите что-то загрузка класса из процесса выполнения?
Загрузка классов разделена на следующие 5 этапов:
Загрузка: Найдите соответствующее жилье по пути Нахождения. class Затем файл импортируется;
Подготовить:Даватьдобрыйсерединаиз Статическое количество Изменитьточкасоответствовать Памятьнулевоймежду;
анализировать:виртуальная машина Воляпостоянныйбассейнсерединаизсимвол号Цитировать Заменить напрямой接Цитироватьизпроцесс。символ号Цитировать Сразупониматьдляодининдивидуальный标示,А существование напрямую относится к адресу памяти серединаиз;
инициализация:верно Статическое количество Изменитьистатическийкодкусокосуществлятьинициализация Работа。
200. Как определить, подлежит ли предмет вторичной переработке?
Обычно есть два способа судить:
Счетчик ссылок: для каждого верного изображения создается счетчик ссылок, который имеет значение для изображения, когда на него ссылаются. +1, засчитывается при выпуске ссылки -1, когда счетчик для 0 час Сразу Можетодеялопереработка。этоиметьодининдивидуальный缺点не могурешатьцикл Цитироватьизвопрос;
Анализ доступности: от GC Roots Начните поиск вниз, и путь, пройденный поиском, называется цепочкой для ссылок. Когда истинное напоминает приезжать GC Roots Когда нет подключенной цепочки ссылок, это доказывает, что этот объект можно переработать.
201. Какие ссылочные типы существуют в Java?
Сильная ссылка: происходящее из gc не будет переработано.
мягкий Цитировать:иметьиспользоватьно Неадолженизвернослон,существующие будут переработаны до того, как произойдет переполнение памяти.
слабый Цитировать:иметьиспользоватьно Неадолженизвернослон,существующие будут переработаны во время следующего GC.
Фантомная ссылка (фантомная ссылка/фантомная ссылка): невозможно получить правильный объект с помощью виртуальной ссылки.,Используйте PhantomReference для восстановления виртуальной ссылки,пустой Цитироватьизиспользоватьдасуществовать gc Когда придет уведомление.
202. Скажите что-то JVM Какие алгоритмы сборки мусора существуют?
Алгоритм маркировки-сопоставления: маркировка бесполезных объектов,Пусть все живые животные движутся в один конец,Затем напрямую очистите память за конечной границей.
копировать алгоритм: разделить две области памяти одинакового размера в зависимости от емкости,Когда один кусок израсходован, Воля жив изверно, как копировать приезжать на другой кусок,Затем сразу очистите пространство памяти. Недостатки: эффективность памяти невысокая.,только оказалось один Половина。
Алгоритм генерации: разделить память на несколько блоков в зависимости от разных периодов выживания объектов.,В общем да новое поколение и старое поколение,Новое поколение в основном использует алгоритм копировать.,Старое поколение использует алгоритм сортировки по меткам.
203. Скажите что-то JVM Какие сборщики мусора существуют?
Сериал: Самый ранний однопоточный сериал Сборщик мусора.
Serial Old:Serial Сборщик мусора из старой версии, а также слишком однопоточный, можно использовать как для CMS Альтернативный план сборщика мусора.
ParNew:да Serial измногопоточностьверсиякнига。
Parallel и ParNew Коллектор похож на дамногопоточность, но Parallel Коллектор, ориентированный на пропускную способность, может пожертвовать временем ожидания ради пропускной способности системы.
Parallel Old да Parallel Версия старого поколения, параллельная Алгоритм переработки памяти, Параллельный Old отметка использованияизда - Сопоставление по алгоритму перезапуска памяти.
CMS: Сборщик для получения минимального времени паузы для цели, очень подходит для системы B/S.
G1: метод, учитывающий как пропускную способность, так и время паузы. GC выполнить,да JDK 9 Отныне это будет значение по умолчанию GC параметры.
204. Расскажите подробнее о сборщике мусора CMS?
CMS да Британияискусство Concurrent Mark-Sweep изаббревиатура да получает кратчайшее время паузы восстановления за счет пропускной способности для из Сборщик мусора.верно Этот сборщик мусора очень подходит для приложений, которым требуется скорость ответа сервера. начало существования JVM из параметра плюс «-XX:+UseConcMarkSweepGC», чтобы указать использование CMS Сборщик мусора.
CMSиспользует пометку-очистка из алгоритма калибровки.,Местоксуществовать gc Иногда будет генерироваться большое количество фрагментов памяти. Когда оставшаяся память не сможет удовлетворить требования программы, появится система. Concurrent Mode Неудача, временная CMS примет Serial Old Переработчик руководил вывозом мусора, в это время производительность Воли будет снижена.
205. Что такое сборщики мусора нового поколения и сборщики мусора старого поколения? Какая разница?
Коллектор нового поколения: Serial, ParNew, Parallel Scavenge.
Сборщик старого поколения: Serial Old, Parallel Old, CMS
Сборщик всего стека: G1
Сборщик мусора нового поколения обычно использует алгоритм издакопирования.,копировать алгоритмиз Преимуществада Высокая эффективность,Недостатки: низкое использование памяти; сборщики старого поколения обычно используют алгоритм сортировки по меткам, руководящий сборкой мусора.
206. Кратко опишите, как работает поколенческий сборщик мусора?
Коллектор поколений имеет два раздела: старое поколение и новое поколение.,Пространство по умолчанию нового поколения занимает 1/3 от общего пространства нового поколения., старое поколение по умолчанию равно Сравнению 2/3。
новое поколениеиспользоватьиздакопироватьалгоритм,новое поколениевнутрииметь 3 Разделы: Эдем, То Survivor、From Выживший, они по умолчанию занимают Сравнение 8:1:1,этоизосуществлять流степеньследующее:
Пучок Eden + From Survivor выживание изверно слона вставили To Survivor округ;
Прозрачный Eden и From Survivor точкаокруг;
From Survivor и To Survivor Замена раздела, Откуда Survivor Изменять To Survivor,To Survivor Изменять From Survivor。
каждый разсуществовать From Survivor приезжать To Survivor Слон выживает при движении, а возраст +1, когда достигнет возраста приезжать 15 (в конфигурации по умолчанию 15), он модернизирован до старого поколения. Крупные объекты также напрямую войдут в старое поколение.
Когда пространство, занимаемое старым поколением, достигнет определенного значения, будет запущена глобальная сборка мусора.,один Общийиспользовать Сортировка теговизосуществлятьалгоритм。кначальствоэтотнекоторыйциклвзад и вперед Сразусоставляют Понятно整индивидуальныйточка代垃圾переработкаизобщийосуществлять流степень。
207. Скажите что-то JVM Инструменты настройки?
JDK Он поставляется со многими инструментами мониторинга, все они расположены в JDK из bin каталог, наиболее часто используемый серединаизда jconsole и jvisualvm Эти два инструмента мониторинга просмотра.
jconsole: для верной JVM серединаизпамяти、Темы и классы и т.д. руководить мониторингом;
jvisualvm:JDK Принесите свой собственный全способныйточкаинструменты анализа,Можетточкаанализировать:Память Снимок、снимок потока、программный тупик、Память монитора из Изменить、gc Изменятьизменятьждать.
208. Каковы обычно используемые параметры настройки JVM?
-Xms2g: начальный размер отправки для 2g;
-Xmx2g: максимальная куча памяти для 2 г;
-XX:NewRatio=4:настраиватьмолодойизистаростьиз Память Сравниватьпримердля 1:4;
-XX:SurvivorRatio=8:настраиватьновое поколение Eden и Survivor Сравниватьпримердля 8:2;
–XX:+UseParNewGC:обратитесь к Конечноиспользовать ParNew + Serial Old Комбинация сборщика мусора;
-XX:+UseParallelOldGC:обратитесь к Конечноиспользовать ParNew + ParNew Old Комбинация сборщика мусора;
-XX:+UseConcMarkSweepGC:обратитесь к Конечноиспользовать CMS + Serial Old Комбинация сборщика мусора;
-XX:+PrintGC: включить печать информации о сборщике мусора;
-XX:+PrintGCDetails: распечатать детали gc.
окончание
Это больше, чем просто контрольный список для собеседования,Скорее «ожидаемая ответственность»,потому чтоиметь Бесчисленное количество людей ждут интервью,Надежда из этой статьисередина,Узнайте «ключ» к желаемой компании,Поэтому каждый выбор тем выше основан на моем собственном опыте.,После двух недель напряженной работы с тысячами вопросов на собеседовании,,Просматривайте вопросы один за другим, а затем исправляйте их, чтобы получить хорошие ответы и формат.,Интервью изответов Слишком много раз думать,Боюсь ввести детей в заблуждение.,Влиять на «официальную карьеру» других – большая ошибка,Так что если иметь неправильно,Читатели, пожалуйста, укажите это в комментариях.
Я также надеюсь, что вы поделитесь этой статьей с большим количеством друзей, чтобы она могла помочь большему количеству людей.
помогать другим,счастлив сам,наконец,Спасибо за чтение!