Содержание этой темы ранее было разделено на три части, что привело к относительно разбросанному распространению в Интернете, поэтому в этой статье сделано резюме, и в то же время некоторые материалы и ответы были пересмотрены. и вперед. По причинам длины и времени я не резюмировал некоторые ответы сам. Для получения более интересного контента, пожалуйста, обратите внимание на мой общедоступный аккаунт WeChat: Java Head
1. Разница между объектно-ориентированным и процессно-ориентированным
ориентированный на процесс
Преимущества: более высокая производительность по сравнению с объектно-ориентированным, поскольку вызовы классов должны создавать экземпляры, накладные расходы относительно велики и потребляются ресурсы; например, одночиповая разработка для встраиваемых систем, Linux/Unix и т. д., как правило, используют процессно-ориентированную разработку. , и производительность является наиболее важным фактором.
Недостатки: не объектно-ориентированный, простой в обслуживании, простой в повторном использовании, легко расширяемый.
объектно-ориентированный
Преимущества: простота обслуживания, простота повторного использования, простота расширения, поскольку объектно-ориентированный подход обладает характеристиками инкапсуляции, наследования и полиморфизма, можно разработать систему с низким уровнем связи, что делает систему более гибкой и простой в обслуживании.
Недостаток: более низкая производительность, чем ориентированная на процесс
2. Четыре основных свойства Java (абстрактность, инкапсуляция, наследование, полиморфизм)
Аннотация: это извлечение определенных вещей из реальной жизни и выражение их с помощью программного кода, который мы обычно называем классом или интерфейсом. Абстракция включает в себя два аспекта: один — это абстракция данных, а другой — абстракция процесса. Абстракция данных — это свойство объекта. Процедурная абстракция — это поведенческая характеристика объекта.
Инкапсуляция: инкапсулируйте объективные вещи в абстрактные классы, а классы могут разрешать только доверенным классам или объектам работать со своими собственными данными и методами, а также инкапсулировать и скрывать ненадежные. Инкапсуляция делится на инкапсуляцию свойств и инкапсуляцию методов.
Наследование: это абстракция нескольких типов вещей с общими характеристиками в класс. Этот класс является родительским классом для многих вещей. Смысл родительского класса в том, чтобы извлечь общность многих вещей.
Полиморфизм: позволяет объектам разных классов отвечать на одно и то же сообщение. Перегрузка методов и переопределение классов отражают полиморфизм.
3. Разница между перегрузкой и перезаписью
Перегрузка: происходит в одном классе, имя метода должно быть одинаковым, типы параметров разные, количество другое, порядок другой, возвращаемое значение метода и модификатор доступа могут быть разными, и это происходит во время компиляции. Перезапись: происходит в родительском и дочернем классах, имя метода и список параметров должны быть одинаковыми, возвращаемое значение меньше или равно родительскому классу, выброшенное исключение меньше или равно родительскому классу, а модификатор доступа больше или равен родительскому классу, если модификатор доступа к методу родительского класса является закрытым Подкласс не переопределяется.
4. Можно ли переопределить конструктор
Конструктор нельзя переопределить, конструктор нельзя изменить с помощью static, можно использовать только три модификатора разрешений publicprivate protected, и не может быть инструкции return.
5. Разница между символами управления доступом public, protected, private и default
private доступен только внутри этого класса;
ОБЩЕСТВЕННЫЙ может получить доступ в любом месте;
Можно получить доступ к классам, защищенным в том же пакете, и к подклассам вне пакета;
По умолчанию он не написан в том же пакете и доступен.
6Возможно ли наследовать класс String#
Класс String является окончательным, поэтому он не может быть унаследован, и все, что изменено окончательным, не может быть унаследовано.
7. Разница между String и StringBuffer и StringBuilder#
Изменчивость
Класс String использует массив символов для сохранения строки, частный
final char value[], поэтому строковые объекты неизменяемы. И StringBuilder, и StringBuffer наследуются от класса AbstractStringBuilder.В AbstractStringBuilder массивы символов также используются для сохранения строк, char[]
значение, оба объекта являются изменяемыми.
потокобезопасность
Объекты в String являются неизменяемыми, что можно понимать как константы и потокобезопасные. AbstractStringBuilder является общим родительским классом для StringBuilder и StringBuffer и определяет некоторые базовые операции над строками, такие как expandCapacity, append, insert, indexOf и другие общедоступные методы. StringBuffer добавляет блокировку синхронизации к методу или добавляет блокировку синхронизации к вызываемому методу, поэтому он является потокобезопасным. StringBuilder не синхронизирует метод, поэтому он не является потокобезопасным.
представление
каждый раз в строку
При изменении типа создается новый объект String, а затем указатель указывает на новый объект String. StringBuffer будет исправляться каждый раз
Объект StringBuffer работает сам по себе, а не создает новый объект и не изменяет ссылку на объект. использовать в той же ситуации
StringBuilder по сравнению с использованием
StringBuffer может повысить производительность только на 10–15%, но он рискует небезопасностью многопоточности.
8. Связь между hashCode и методом equals#
Если равные равны, хэш-коды должны быть равны; если хэш-коды равны, равные могут не быть равными.
9. Разница между абстрактным классом и интерфейсом#
грамматический уровень
Абстрактные классы и интерфейсы имеют разные определения синтаксиса.
иерархия дизайна
Уровень абстракции разный, абстрактный класс — это абстракция класса, а интерфейс — это абстракция поведения. Абстрактный класс абстрагирует весь класс, включая атрибуты и поведение, а интерфейс абстрагирует часть класса (поведение). Абстрактные классы абстрагируются снизу вверх, а интерфейсы разрабатываются сверху вниз.
разные в разных доменах
Абстрактный класс воплощает в себе отношения наследования.Чтобы отношения наследования были разумными, между родительским классом и производным классом должно быть «является-а».
Отношения, т. е. родительские и производные классы, должны быть концептуально одинаковыми. Это не относится к интерфейсам.Не требуется, чтобы реализатор интерфейса и определение интерфейса были концептуально одними и теми же, а только реализовывал контракт, определенный интерфейсом, отношение «как-а».
10. Автоматическая упаковка и распаковка #
Упаковка: обертывание примитивных типов соответствующими ссылочными типами;
Распаковка: преобразование типа оболочки в примитивный тип данных;
В Java используется механизм автоматической упаковки и распаковки, который экономит накладные расходы памяти на общие значения и накладные расходы на создание объектов, а также повышает эффективность.
11. Что такое дженерики, зачем их использовать и стирание дженериков#
Обобщения или «параметризованные типы».
При создании коллекции укажите тип элементов коллекции.Коллекция может сохранять элементы только указанного типа, избегая использования принудительного преобразования типов.
Bytecode, сгенерированный Compiler Java, является обширной информацией. Информация об общем типе будет стерта в процессе компиляции, и этот процесс стирается. Стереть Pansess можно легко понять для преобразования универсального кода Java в обычный Java-код, но компилятор более прямой, а общий код Java напрямую преобразуется в обычный Java Bytecode.
Основной процесс стирания типа выглядит следующим образом:
1) Замените все универсальные параметры их крайними левыми ограничивающими (самыми верхними супертипами) типами.
2) Удалить все параметры типа.
12. Классы коллекций и диаграммы отношений в Java#
List и Set наследуются от интерфейса Collection.
Неупорядоченный набор не допускает дублирования элементов. HashSet и TreeSet — два основных класса реализации.
Списки упорядочены и допускают повторение элементов. ArrayList, LinkedList и Vector — это три основных класса реализации.
Карта также относится к системе сбора, но не имеет никакого отношения к интерфейсу коллекции. Карта — это набор сопоставлений ключа со значением, где ключевой столбец — это набор. Ключ нельзя повторить, но значение можно повторить. HashMap, TreeMap и Hashtable — это три основных класса реализации.
Интерфейсы SortedSet и SortedMap сортируют элементы в соответствии с заданными правилами, а SortedMap сортирует ключевой столбец.
13. Принцип реализации HashMap#
Обратитесь к статье для конкретных принципов:
zhangshixi.iteye.com/blog/672697
ву ву ву.admin10000.com/document/33…
14. Принцип реализации HashTable#
Обратитесь к статье для конкретных принципов:
Блог Woohoo.cn на.com/sky.net 1234…
blog.CSDN.net/complete solution/art IC…
15. Разница между HashMap и HashTable#
1) Перед ними синхронизируются методы .HashTable, что является потокобезопасным, без синхронизации HashMap не является потокобезопасным.
2) .HashTable не допускает нулевых значений (ни ключа, ни значения), HashMap допускает нулевые значения (и ключа, и значения).
3).HashTable содержит (объект
значение) и содержит значение (объект
значение) работают одинаково.
4) HashTable использует Enumeration для обхода, HashMap использует Iterator для обхода.
5) Размер хеш-массива по умолчанию в HashTable — 11, способ увеличения — old*2+1; размер хэш-массива по умолчанию в HashMap — 16, и он должен быть индексом 2.
6) Использование хэш-значения отличается, HashTable напрямую использует хэш-код объекта;
HashMap пересчитывает хэш-значение и использует И вместо модуля.
16. Разница между ArrayList и vector#
И ArrayList, и Vector реализуют интерфейс List, оба из которых реализованы через массивы.
Vector является потокобезопасным, в то время как ArrayList не является потокобезопасным.
При первом создании списка он будет иметь первоначальный размер.По мере добавления элементов в список список будет расширяться, когда считает, что емкости недостаточно. Vector автоматически удваивает длину массива по умолчанию, а ArrayList увеличивается на 50%.
17. Различия и сценарии использования между ArrayList и LinkedList#
разница
Нижний слой ArrayList реализован с помощью массивов, которые можно рассматривать как массивы с изменяемым размером. По мере того, как в список ArrayList добавляется все больше и больше элементов, его размер динамически увеличивается.
Нижний слой LinkedList реализован двусвязным списком, по сравнению с ArrayList LinkedList имеет более высокую скорость добавления и удаления. Но запрос и изменение значений происходит медленнее. В то же время LinkedList также реализует интерфейс Queue, поэтому он также предоставляет offer(),
peek(), poll() и другие методы.
сцены, которые будут использоваться
LinkedList больше подходит для вставки или удаления из середины (характеристика связанного списка).
ArrayList лучше подходит для поиска и вставки или удаления в конце (свойство массивов).
18. Разница между коллекциями и коллекциями#
java.util.Collection — это интерфейс коллекции. Он предоставляет общие методы интерфейса для основных операций с объектами коллекции. Интерфейс Collection имеет множество конкретных реализаций в библиотеке классов Java. Значение интерфейса Коллекция заключается в обеспечении максимально унифицированного режима работы для различных конкретных коллекций. java.util.Collections — это класс-оболочка. Он содержит различные статические полиморфные методы для операций с коллекциями. Этот класс не может быть создан, как служебный класс, который обслуживает инфраструктуру коллекции Java.
19. Принцип реализации Concurrenthashmap#
Обратитесь к статье для конкретных принципов:
блог woo woo woo.cn на.com/ITTangtang/…
если eve.com/concurrent H…
20. Разница между ошибкой и исключением#
Родительские классы класса Error и класса Exception являются генерируемыми классами, разница между ними заключается в следующем:
Класс Error обычно относится к проблемам, связанным с виртуальной машиной, таким как сбой системы, ошибка виртуальной машины, нехватка памяти, переполнение стека вызовов методов и т. д. Для прерывания работы приложения, вызванного ошибкой такого рода, сама программа не может восстановить и предотвратить ее.При обнаружении такой ошибки рекомендуется завершить работу программы.
Класс Exception представляет собой исключение, которое программа может обрабатывать, перехватывать и, возможно, восстанавливать. При обнаружении такого исключения его следует максимально обработать, чтобы программа могла возобновить работу, и исключение не должно прерываться произвольно.
21.Unchecked
Exception и Checked Exception, в каждом списке несколько#
Unchecked Exception:
А. Относится к ошибке или логической ошибке в программе, которая не может быть устранена во время выполнения.
б) включая Error и RuntimeException и их подклассы, такие как: OutOfMemoryError,
UndeclaredThrowableException, IllegalArgumentException,
IllegalMonitorStateException,
NullPointerException, IllegalStateException,
IndexOutOfBoundsException и т. д.
в) Нет необходимости объявлять исключение синтаксически.
Checked Exception:
А. Представляет недействительные внешние ситуации, которые программа не может контролировать напрямую (такие как ввод данных пользователем, проблемы с базой данных, сбои в работе сети, потеря файлов и т. д.).
Error и b кроме RuntimeException его подклассов, таких как: ClassNotFoundException,
NamingException, ServletException, SQLException, IOException и т. д.
C. Требовать обработки try catch или оператора throws для создания исключения.
22. Как реализовать механизм прокси в Java (JDK, CGLIB)#
Динамический прокси JDK: класс прокси и целевой класс реализуют общий интерфейс и используют интерфейс InvocationHandler. Динамический прокси CGLIB: класс прокси является подклассом целевого класса и использует интерфейс MethodInterceptor.
23. Реализация многопоточности#
Наследуйте класс Thread, реализуйте интерфейс Runnable и используйте ExecutorService, Callable и Future для реализации многопоточности с возвращаемыми результатами.
24. Переход состояния потока#
20140828202610671.jpg25. Как остановить поток#
Справочная статья:
блог woo woo woo.cn on.com/Greta/afraid/562…
26. Что такое потокобезопасность#
Потокобезопасность — это когда несколько потоков обращаются к одному и тому же коду без получения неопределенных результатов.
27. Как обеспечить потокобезопасность#
Блокировка управления незащищенным кодом;
использовать потокобезопасные классы;
В случае многопоточного параллелизма переменные, совместно используемые потоками, заменяются локальными переменными на уровне метода.
28. Как использовать синхронизированный#
Synchronized — это ключевое слово в Java и своего рода блокировка синхронизации. Объекты, которые он изменяет, следующие:
1) Для модификации блока кода измененный блок кода называется синхронизированным блоком операторов, а областью его действия является код, заключенный в фигурные скобки {}, а объектом действия является объект, вызывающий этот блок кода;
2) для модификации метода модифицированный метод называется методом синхронизации, областью его действия является весь метод, а объектом действия является объект, вызывающий этот метод;
3) Модифицируя статический метод, его областью действия является весь статический метод, а объектом действия являются все объекты этого класса;
4) Для модификации класса его областью действия является часть, заключенная в скобки после синхронизированного, а основным объектом являются все объекты этого класса.
29. Разница между синхронизированным и Lock#
Основные сходства: Lock может выполнять все функции, достигаемые синхронизированным. Основные отличия: Lock имеет более точную семантику потока и лучшую производительность, чем синхронизированный. Блокировка блокировки реализована через код, а синхронизация реализована на уровне JVM, синхронизация автоматически снимает блокировку, в то время как блокировка требует, чтобы программист снял ее вручную, и она должна быть снята в предложении finally. Lock также имеет более мощные функции, например, его метод tryLock может получить блокировку неблокирующим образом. Область блокировки блокировки ограничена, область действия блокировки, а синхронизация может блокировать блоки, объекты и классы.
30. Как многопоточность взаимодействует с информацией#
Void Notify () просыпается на одном потоке, ожидающей на мониторе этого объекта.
void notifyAll() Пробуждает все потоки, ожидающие на мониторе этого объекта.
void wait() заставляет текущий поток ожидать, пока другой поток не вызовет метод notify() или метод notifyAll() этого объекта.
void wait(long timeout) Заставляет текущий поток ожидать, пока другой поток не вызовет метод notify() или метод notifyAll() этого объекта, или в течение указанного периода времени.
пустое ожидание (длительный тайм-аут,
int nanos) заставляет текущий поток ожидать, пока другой поток не вызовет метод notify() или метод notifyAll() этого объекта, или какой-либо другой поток не прервет текущий поток, или пока не истечет некоторое реальное количество времени.
31. Разница между спящим режимом и ожиданием (направление исследования — будет ли снята блокировка)#
Метод SLEEP() — это метод класса Thread, а метод wait() — метод класса объекта. Метод SLEEP() заставляет программу приостанавливать выполнение на указанное время, позволяя ЦП этим другим потокам, но его статус мониторинга сохраняется, когда указанное время автоматически восстанавливает статус выполнения, в процессе вызова метода SLEEP() Поток не снимает блокировку объекта. При вызове метода wait() поток откажется от блокировки объекта, войдет в пул ожидающих блокировок, ожидающих этого объекта, а прием пула блокировок объектов вступит только после вызова метода notify() для этого объекта.
32. Многопоточность и взаимоблокировка#
Тупик относится к явлению, при котором два или более процессов ожидают друг друга из-за конкуренции за ресурсы во время процесса выполнения, и если нет внешней силы, они не смогут продвигаться вперед.
Причина взаимоблокировки:
1. Из-за нехватки системных ресурсов.
2. Порядок, в котором процесс выполняется и продвигается, является неподходящим.
3. Неправильное распределение ресурсов.
33. Как сгенерировать взаимоблокировку#
Для возникновения взаимоблокировки необходимы четыре условия:
1. Условие взаимного исключения. Так называемое взаимное исключение означает, что процесс может монополизировать ресурсы на определенный период времени.
2. Условия запроса и удержания: когда процесс блокируется из-за запроса ресурсов, он будет удерживать полученные ресурсы.
3. Отсутствие условия депривации: процесс получил ресурсы, и его нельзя принудительно лишить, пока они не будут израсходованы.
4. Циклическое состояние ожидания: между несколькими процессами формируется циклическое отношение ресурсов ожидания.
34. Предотвращение взаимоблокировок#
Прервите одно или несколько из четырех необходимых условий взаимоблокировки, чтобы гарантировать, что система не войдет в состояние взаимоблокировки.
1. Нарушить взаимоисключающее условие. То есть процессу разрешен доступ к определенным ресурсам одновременно. Однако доступ к некоторым ресурсам в одно и то же время запрещен, например, к принтерам и т. д., что определяется свойствами самих ресурсов. Поэтому такой подход не имеет практической ценности.
2. Нарушить условие невыгодного использования. То есть процессу разрешено принудительно забирать определенные ресурсы у пользователя. То есть, когда процесс занял некоторые ресурсы и подает заявку на новые ресурсы, но не может быть удовлетворен немедленно, он должен освободить все занятые ресурсы и повторно применить позже. Освобождаемые им ресурсы могут быть выделены другим процессам. Это эквивалентно тому, что ресурсы, занятые процессом, заняты тайно. Этот метод предотвращения взаимоблокировок сложен в реализации и снижает производительность системы.
3. Нарушить условия владения и применения. Может быть реализована стратегия предварительного распределения ресурсов. То есть процесс обращается к системе за всеми необходимыми ресурсами одновременно перед запуском. Если все ресурсы, необходимые для процесса, не могут быть удовлетворены, ресурсы не будут выделены, и процесс временно не будет выполняться. Только когда система сможет удовлетворить все потребности текущего процесса в ресурсах, все запрошенные ресурсы будут выделены процессу одновременно. Поскольку запущенный процесс занял все необходимые ему ресурсы, явление занятия ресурсов и подачи заявок на ресурсы не произойдет, поэтому тупиковая ситуация не возникнет.
4. Прервите циклическое ожидание и реализуйте стратегию упорядоченного распределения ресурсов. Используя эту стратегию, ресурсы классифицируются и нумеруются заранее и распределяются в соответствии с номером, чтобы процесс не образовывал цикл при подаче заявки и занятии ресурсов. Все запросы процессов на ресурсы должны выполняться в строгом порядке возрастания порядковых номеров ресурсов. Процесс может подать заявку на большой ресурс только после того, как он займет небольшой ресурс, и цикл не будет создан, что предотвратит взаимоблокировку.
35. Что такое поток демона и какой метод используется для реализации потока демона#
Поток демона — это поток, который обслуживает выполнение других потоков. Метод setDaemon(boolean on) может легко установить режим Daemon для потока, true — режим опекуна, а false — пользовательский режим.
36. Технология и принцип пула потоков Java#
Справочная статья:
www.importnew.com/19011.html
блог woo woo woo.cn на.com/dolphin0520…
37. Параллельный пакет java, параллельные и часто используемые классы#
Это содержание немного больше, обратитесь к статье:
Обзор параллельных пакетов:www.raychase.net/1912
Пул потоков:блог woo woo woo.cn на.com/dolphin0520…
Замок:блог woo woo woo.cn на.com/dolphin0520…
собирать:Блог Woo Woo.cn на.com/Желтая статуя Будды/AR…
38. ключевое слово volatile#
Для переменных, измененных с помощью volatile, каждый раз, когда поток использует переменную, он будет считывать наиболее измененное значение переменной. volatile можно легко использовать для атомарных операций.
Волатильную переменную в языке Java можно рассматривать как «меньшую переменную».
синхронизировано"; с
Изменчивая переменная требует меньшего количества кода и имеет меньше накладных расходов во время выполнения, чем синхронизированный блок, но это только часть того, что она может делать с синхронизированным. Блокировки обеспечивают две основные функции: взаимное исключение (взаимное исключение).
исключение) и видимость. Взаимное исключение означает, что только один поток может одновременно удерживать конкретную блокировку, поэтому эту функцию можно использовать для реализации протокола координированного доступа к общим данным, чтобы только один поток мог использовать общие данные одновременно. Видимость должна гарантировать, что изменения, внесенные в общие данные до снятия блокировки, видны другому потоку, который впоследствии получает блокировку.Без этой гарантии видимости, обеспечиваемой механизмом синхронизации, общая переменная, видимая потоком, может быть неизмененным значением или несогласованным значением. что вызовет много серьезных проблем. Волатильные переменные имеют синхронизированную видимость, но не атомарные. Это означает, что потоки могут автоматически обнаруживать изменчивые
Последнее значение переменной.
Чтобы изменчивая переменная обеспечивала идеальную потокобезопасность, должны быть выполнены два условия: запись в переменную не зависит от текущего значения и переменная не содержится в инвариантах с другими переменными.
Ограничение первого условия предотвращает использование volatile-переменных в качестве потокобезопасных счетчиков. Хотя операция приращения (x++) выглядит как одна операция, на самом деле это комбинированная операция, состоящая из последовательности операций чтения-изменения-записи, которые должны выполняться атомарно, а volatile не предоставляет необходимых атомарных свойств. Для правильной работы необходимо сделать x
Значение volatile остается неизменным во время операции, в то время как volatile
Переменные не могут этого сделать.
У каждого потока есть стек потока, когда он работает, и стек потока сохраняет информацию о значении переменной, когда поток работает. Когда поток обращается к значению объекта, он сначала находит значение переменной, соответствующей памяти кучи, по ссылке на объект, а затем загружает конкретное значение переменной памяти кучи в локальную память потока для создания копии. переменной, а затем поток не имеет ничего общего со значением переменной объекта в памяти кучи, а напрямую изменяет значение переменной копирования.В определенный момент после модификации (до выхода потока) , значение копии переменной потока автоматически записывается обратно в переменную объекта в куче. Таким образом, значение объекта в куче меняется.
чтение и загрузка копирует переменные из основной памяти в текущую рабочую память
использовать и назначать код выполнения и изменять значения общих переменных
хранить и записывать. Обновлять содержимое, связанное с основной памятью, с данными рабочей памяти.
где использовать и
assign может появляться несколько раз, но эти операции не являются атомарными, то есть после загрузки чтения, если переменная количества основной памяти изменена, значение в рабочей памяти потока не изменится, поскольку оно было загружено, поэтому вычисление Результат будет отличаться от ожидаемого.
39. Что такое NIO, BIO и AIO в Java#
БИО: синхронизация и блокировка, режим реализации сервера - одно соединение и один поток, то есть когда у клиента есть запрос на соединение, серверу нужно запустить поток для обработки.Если соединение ничего не делает, это вызовет ненужные накладные расходы на поток.Улучшен механизм пула потоков. Метод BIO подходит для структуры с относительно небольшим количеством соединений и фиксированным числом соединений.Этот метод имеет относительно высокие требования к ресурсам сервера, а параллелизм ограничен приложениями.Это единственный выбор до JDK1.4, но программа интуитивно понятна и проста в понимании.
NIO: синхронный и неблокирующий, режим реализации сервера — один запрос на поток, то есть запрос на соединение, отправленный клиентом, будет зарегистрирован на мультиплексоре, и мультиплексор запустит только один при опросе для соединения с I/ O request.thread для обработки. Метод NIO подходит для архитектур с большим количеством подключений и относительно короткими подключениями (легкая операция), таких как чат-серверы, где параллелизм ограничен приложениями, а программирование сложнее, JDK1.4 начал его поддерживать.
AIO: асинхронный и неблокирующий режим реализации сервера — один допустимый запрос для одного потока.Запрос ввода-вывода клиента сначала выполняется ОС, а затем уведомляет серверное приложение о запуске потока для обработки.Метод AIO используется, когда количество соединений велико, а соединение относительно длинное Архитектура (тяжелая работа), такая как сервер фотоальбома, полностью требует от ОС участия в параллельных операциях, программирование более сложное, и JDK7 начинает поддержите это.
40. Разница между IO и NIO#
1. IO ориентирован на поток, а NIO — на буфер.
2. Различные потоки IO блокируются, а NIO является неблокирующим режимом.
3. Селектор Java NIO позволяет одному потоку контролировать несколько входных каналов.Вы можете зарегистрировать несколько каналов для использования селектора, а затем использовать отдельный поток для «выбора» канала: эти каналы уже доступны.Введите или выберите канал, который готов писать. Этот механизм выбора позволяет одному потоку легко управлять несколькими каналами.
41. Сериализация и десериализация#
Процесс преобразования объекта в последовательность байтов называется сериализацией объекта.
Процесс восстановления последовательности байтов в объект называется десериализацией объекта.
Существуют две основные цели сериализации объектов:
1. Постоянно сохранять последовательность байтов объекта на жесткий диск, обычно в файл;
2. Последовательность байтов объекта для передачи по сети.
Когда два процесса взаимодействуют удаленно, друг другу могут передаваться различные типы данных. Независимо от типа данных, они передаются по сети в виде двоичной последовательности. Отправитель должен преобразовать объект Java в последовательность байтов, прежде чем его можно будет отправить по сети, а получатель должен восстановить последовательность байтов в объект Java.
42. Каковы общие протоколы сериализации#
Protobuf, Thrift, Hessian, Kryo
43. Разница между переполнением памяти и утечкой памяти#
Переполнение памяти означает, что когда программа запрашивает память, ей не хватает места для использования, и
Память.
Утечка памяти означает, что выделенная память больше не используется, но не может быть освобождена.
44. Модель памяти Java и OOM в каждой области, как воспроизвести OOM#
Эта часть содержания очень важна.Прочитайте подробно «Углубленное понимание виртуальной машины Java», а также вы можете подробно прочитать эту статью.Позже Лу Мэн.group.ITeye.com/group/wiki/…
45. Как решить проблему OOM#
1. Вы можете периодически получать дамп кучи с помощью команды или автоматически получать файл дампа кучи при запуске параметра OOM.
2. Сравнив несколько дампов кучи и содержимое дампов кучи, проанализируйте код, чтобы найти место, которое занимает больше всего памяти.
3. Проанализируйте занятые объекты памяти, не освобождается ли память вовремя из-за ошибок или из-за переполнения памяти из-за слишком большого количества данных.
46. Какой инструмент можно использовать для обнаружения утечек памяти#
1. Память
Analyzer - это программное обеспечение для анализа памяти JAVA с открытым исходным кодом, которое находит утечки памяти, может легко находить большие блоки памяти и проверять, кто все время ее использует, оно основано на Eclipse.
RCP (Rich Client Platform), вы можете загрузить автономную версию RCP или плагин для Eclipse.
2. JProbe-анализ утечек памяти Java.
3. JProfiler — полнофункциональный инструмент анализа Java, предназначенный для анализа приложений J2SE и J2EE. Он сочетает профилирование ЦП, потоков и памяти в одном мощном приложении, а графический интерфейс может находить узкие места в производительности, обнаруживать утечки памяти и устранять проблемы с потоками.
Четыре.
JRockit — используется для диагностики утечек памяти Java и выявления основной причины, специально для платформ Intel и оптимизирован для максимальной производительности на оборудовании Intel.
5. YourKit-.NET и Java Profiling — ведущие в отрасли средства анализа производительности программ на Java и .NET.
6.AutomatedQA — продукт следующего поколения, заменяющий отмеченный наградами набор инструментов AutomatedQA для профилирования производительности и отладки памяти, поддерживает Microsoft, Borland, Intel,
Компиляторы Compaq и GNU. Для программ .NET и Windows можно создавать исчерпывающие и подробные отчеты, которые помогут вам легко изолировать и устранять проблемы с производительностью и утечки памяти/ресурсов, содержащиеся в вашем коде. Поддерживает .Net 1.0, 1.1, 2.0, 3.0 и приложения Windows 32/64 бит.
7. Compuware DevPartner Java Edition — включая обнаружение памяти Java, тест покрытия кода, тест производительности кода, блокировку потоков, распределенное приложение и другие основные функциональные модули.
47. Алгоритм управления и восстановления памяти Java#
Прочтите эту статью:woo woo woo.cn blog on.com/хороший человек любит тебя здесь/AR…
48. Загрузчик классов Java и как загружать классы (родительское делегирование)#
Прочитать статью:
Woohoo. IBM.com/developer Я…(рекомендовать)
blog.CSDN.net/Чжоу Дася/Ах…
49.xml метод разбора#
1. ДОМ (JAXP
Малиновый парсер)
2. САКС
3. ЖДОМ
4. ДОМ4Ж
разница:
1. DOM4J имеет лучшую производительность, и даже Sun JAXM использует DOM4J. В настоящее время DOM4J широко используется во многих проектах с открытым исходным кодом, например, знаменитый hibernate также использует DOM4J для чтения XML-файлов конфигурации. Если переносимость не имеет значения, используйте DOM4J.
2. JDOM и DOM плохо работают при тестировании производительности при тестировании 10M
Недостаточно памяти при документировании. Также стоит рассмотреть возможность использования DOM и JDOM в случае небольших документов. Хотя разработчики JDOM заявили, что они собираются сосредоточиться на проблемах с производительностью до официального выпуска, с точки зрения производительности им действительно нечего рекомендовать. Кроме того, DOM по-прежнему является очень хорошим выбором. Реализации DOM широко используются во многих языках программирования. Он также является основой для многих других стандартов, связанных с XML, поскольку он официально одобрен W3C.
Рекомендуется (в отличие от нестандартной модели Java), поэтому она также может потребоваться в некоторых типах проектов (например, при использовании DOM в JavaScript).
3. SAX работает лучше, что зависит от его конкретного метода синтаксического анализа — управляемого событиями. SAX обнаруживает входящий XML-поток, но не загружает его в память (разумеется, при чтении XML-потока части документа будут временно скрыты в памяти).
50. Разница между оператором и подготовленным оператором#
1. PreparedStatement предварительно скомпилирован, что может значительно повысить эффективность пакетной обработки.Также называется хранимой процедурой JDBC.
2. Используйте
Объект заявления. При выполнении только однократного доступа к базе данных используйте
Объект оператора для обработки. Подготовленное заявление
Объекты дороже, чем операторы, и не несут дополнительных преимуществ для разовых операций.
3. Каждый раз, когда оператор выполняет оператор SQL, соответствующая база данных должна выполнять компиляцию оператора SQL.Подготовленный оператор предварительно компилируется.
подготовленный оператор поддерживает пакетную обработку
Четыре.
Фрагмент кода 1:
String
updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE
COF_NAME LIKE 'Колумбийский'";
stmt.executeUpdate(updateString);
Фрагмент кода 2:
PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET
SALES =
? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
Разница между фрагментом 2 и фрагментом 1 заключается в том, что последний использует объект PreparedStatement, а первый является обычным объектом Statement. Объект PreparedStatement не только содержит оператор SQL, но в большинстве случаев оператор был предварительно скомпилирован, поэтому при его выполнении только СУБД нужно запустить оператор SQL без его предварительной компиляции. Когда вам нужно выполнить объект Statement несколько раз, объект PreparedStatement значительно сократит время выполнения и, конечно же, ускорит доступ к базе данных.
Это преобразование также очень удобно: вам не нужно повторять синтаксис оператора SQL, а нужно только изменить значение переменной для повторного выполнения оператора SQL. Выбран ли объект PreparedStatement или нет, зависит от того, выполняется ли оператор SQL с одним и тем же синтаксисом несколько раз, и разница между этими двумя временами заключается только в разнице в переменных. Если он выполняется только один раз, он не должен отличаться от обычных объектов и не отражает преимуществ его предварительной компиляции.
5. Программы JDBC, выполняющие множество операторов SQL, генерируют большое количество объектов Statement и PreparedStatement. Объекты PreparedStatement обычно считаются более эффективными, чем объекты Statement, особенно если одна и та же инструкция SQL с разными параметрами выполняется несколько раз. Объект PreparedStatement позволяет базе данных предварительно компилировать операторы SQL, что экономит время и повышает читаемость кода при последующих запусках.
Однако в среде Oracle у разработчиков действительно больше гибкости. При использовании объектов Statement или PreparedStatement Oracle Database кэширует операторы SQL для последующего использования. В некоторых случаях выполнение объекта PreparedStatement на самом деле занимает больше времени из-за дополнительной обработки, требуемой самим драйвером, и повышенной сетевой активности между приложением Java и сервером Oracle.
Однако, помимо проблем с буферизацией, есть по крайней мере еще одна причина, по которой мы предпочитаем использовать объекты PreparedStatement в корпоративных приложениях, — это безопасность. Параметры, передаваемые объектам PreparedStatement, могут быть приведены, что позволяет разработчикам гарантировать, что данные вставляются или запрашиваются в соответствии с базовым форматом базы данных.
При работе с данными, передаваемыми пользователями на общедоступных веб-сайтах, вопрос безопасности становится чрезвычайно важным. Строковые аргументы, переданные в PreparedStatement, автоматически игнорируются драйвером. В простейшем случае это означает, что когда ваша программа пытается вставить строку "D'Angelo" в VARCHAR2, оператор не распознает первый символ "," и с треском завершится ошибкой. Редко необходимо создавать собственный код игнорирования строк.
В веб-среде вредоносные пользователи будут использовать плохо разработанные приложения, которые неправильно обрабатывают строки. Особенно на публичных веб-сайтах все пользовательские вход не должны передаваться в операторы SQL, не впервые обрабатываемые через объект Honeystatement. Кроме того, операторы SQL не должны отображаться, где пользователь имеет возможность изменить оператор SQL, например, в скрытой области HTML или на строке запроса.
51. Жизненный цикл сервлета и различные методы#
Справочная статьяблог woo woo woo.cn on.com/subject yo/Arch…
52. Как настроить фильтр в сервлете#
Справочная статьяБлог woohoo.cn на.com/Java Web SOA/…
53. Принцип JSP#
Справочная статьяblog.CSDN.net/Хань Сюэминь 12…
54. Разница между JSP и сервлетом#
(1) После компиляции JSP становится «сервлетом класса».
(2) JSP состоит из кода HTML и тегов JSP и лучше подходит для отображения страницы, а Servlet лучше управляет процессом.
(3) код JAVA встроен в JSP, а код HTML встроен в сервлет.
55. Динамическое включение и статическое включение JSP#
(1) Динамическое включение реализуется с помощью действия jsp:include, такого как
(2) Статическое включение реализовано с псевдокодом включения, который не будет проверять изменения во включаемых файлах и подходит для включения статических страниц, таких как <%@>%@>include file="qq.htm" %>, не будет заранее анализировать включаемые страницы, сначала включит отображаемые страницы, а затем единообразно их скомпилирует, то есть сначала включит, а затем скомпилирует.
56. Обработка запросов в Struts#
Справочная статьяБлог Woohoo.cn на.com/Liu Ling/Afraid/2…
57.mvc Концепция #
Справочная статьяwoo woo woo.cn blog on.com/review Committee/art IC…
58. Разница между Springmvc и Struts#
Справочная статья:
blog.CSDN.net/обычно 918/areti…
blog.CSDN.net/Чен Тип…
Оба 59.Hibernate/Ibatis разница #
Справочная статьяblog.CSDN.net/fire июль/AR…
60. Спящий режим кеша первого и второго уровня#
Справочная статьяblog.CSDN.net/Ветер Руи/art…
61. Кратко опишите общие стратегии оптимизации Hibernate#
Справочная статьяblog.CSDN.net/Смит О/искусство…
62. Процесс загрузки Springbean (рекомендуется посмотреть исходный код Spring)#
Справочная статьяо, о, guest.com/read-spring…
63. Создание экземпляра Springbean (рекомендуется посмотреть исходный код Spring)#
Справочная статьяо, о, guest.com/read-spring…
64. Как Spring реализует АОП и IOC (рекомендуется посмотреть исходный код Spring)#
Справочная статьяWoohoo.360doc.com/content/15/…
65. Метод инъекции спрингбина#
Справочная статьяблагослови HT.ITeye.com/blog/116213…
66. Управление транзакциями Spring#
Справочная статья по этой теме не была найдена особенно хорошей,blog.CSDN.net/comment back/art IC…Этот в порядке.
67. Особенности распространения транзакций Spring#
Справочная статьяblog.CSDN.net/Парикмахерская 802/art…
68. принцип springmvc
Справочная статьяblog.sna.com.talent/is/blog_7EF0…
69. Какие аннотации использует springmvc#
Справочная статьяАй катится. ITeye.com/blog/216014…
70. У Restful есть несколько видов запросов#
справочная статья,woohoo.info Q.com/talent/articles…, статья относительно полная.
71.Успокоительные преимущества#
(1) Клиент-сервер: принцип, лежащий в основе ограничения клиент-сервер, заключается в разделении задач. Благодаря разделению двух аспектов пользовательского интерфейса и хранения данных улучшается переносимость пользовательского интерфейса на несколько платформ, в то же время улучшается масштабируемость системы за счет упрощения серверных компонентов.
(2) Без сохранения состояния: связь по своей природе не имеет состояния, что улучшает видимость, надежность и масштабируемость.
(3) Кэширование. Повышает эффективность сети и уменьшает среднюю задержку серии взаимодействий для повышения эффективности, масштабируемости и производительности, воспринимаемой пользователем.
(4) Унифицированный интерфейс. Основная особенность архитектурного стиля REST, которая отличает его от других сетевых архитектурных стилей, заключается в том, что он подчеркивает необходимость наличия унифицированного интерфейса между компонентами.
72. Разница между Tomcat, Apache и JBoss#
Apache: HTTP-сервер (ВЕБ-сервер), аналогичный IIS, может использоваться для создания виртуальных сайтов, компиляции и обработки статических страниц, может поддерживать технологию SSL, поддерживать несколько виртуальных хостов и другие функции.
Tomcat: Контейнер сервлетов, Контейнер сервлетов для разбора jsp, Servlet — это эффективный и легкий контейнер. Недостатком является то, что он не поддерживает EJB и может использоваться только для java-приложений.
Jboss: сервер приложений, сервер приложений J2EE, работающий с EJB, в соответствии со спецификацией J2EE, может обеспечить большую поддержку платформы и более интегрированные функции, такие как соединение с базой данных, JCA и т. д. Его поддержка сервлетов достигается за счет интеграции других контейнеров сервлетов, таких как кот и пристань.
73. Разница между memcached и redis#
(1) Сравнение производительности: поскольку Redis использует только одно ядро, а Memcached может использовать несколько ядер, в среднем Redis имеет более высокую производительность, чем Memcached, при хранении небольших данных на каждом ядре. Для данных выше 100 КБ производительность Memcached выше, чем у Redis.Хотя Redis недавно оптимизировал производительность хранения больших данных, он все же немного уступает Memcached.
(2) Сравнение эффективности использования памяти: если используется простое хранилище «ключ-значение», использование памяти Memcached выше, а если Redis использует хэш-структуру для хранения «ключ-значение», использование памяти будет уменьшено из-за комбинированного сжатия. Выше, чем Memcached.
(3) Redis поддерживает операции с данными на стороне сервера: по сравнению с Memcached Redis имеет больше структур данных и поддерживает более богатые операции с данными.Обычно в Memcached вам нужно передать данные клиенту, чтобы внести аналогичные изменения.Установите его снова. Это значительно увеличивает количество сетевых операций ввода-вывода и объем данных. В Redis эти сложные операции обычно так же эффективны, как обычные GET/SET. Поэтому, если кеш должен поддерживать более сложные структуры и операции, то Redis будет хорошим выбором.
74. Как понять распределенную блокировку#
Справочная статья:
blog.CSDN.net/正0518/Ах…
blog.CSDN.net/хороший загрязняющий РА….
75. Какие протоколы с открытым исходным кодом вы знаете?#
Общие протоколы с открытым исходным кодом включают GPL, LGPL, BSD, лицензию Apache.
версия 2.0, MIT, подробности см. в статье:
blog.jobbole.com/44175/,Вууху. Руан Ифэн.com/blog/2011/0….
76. Разница между json и xml#
XML:
(1) Он широко используется, обладает высокой масштабируемостью и широко используется в различных случаях;
(2) чтение и синтаксический анализ не такие быстрые, как JSON;
(3) Он легко читается и может описывать сложные структуры.
JSON:
(1) структура проста, все пары ключ-значение;
(2) Высокая скорость чтения и парсинга, поддерживается множество языков;
(3) объем передаваемых данных невелик, а скорость передачи значительно улучшена;
(4) Способность описывать сложные структуры слаба.
77. Шаблоны проектирования#
Справочная статья:woowoowoo.cn blogon.com/Aurora Borealis….
78. Шесть принципов шаблонов проектирования#
Справочная статьяwoohoo.UML.org.capabilities/designpatterns/201211….
79. Напишите фрагмент кода с шаблоном проектирования или нарисуйте UML шаблона проектирования#
Справочная статьяwoowoowoo.cn blogon.com/Aurora Borealis…
80. Высокая сплоченность, понимание низкой связанности#
Справочная статьяNo.OSCHINA.net/Что сломалось/Нет....
81. Алгоритмы поиска в глубину и в ширину#
Рецензия на книгу рекомендуется! Справочные статьи:
blog.163.com/Крик выходного дня_03…
blog.163.com/Крик выходного дня_03…
blog.CSDN.net/Энди Элвис/ Ах…
driftcloudy.iteye.com/blog/782873
82. Алгоритм сортировки и соответствующая временная сложность и пространственная сложность#
Рецензия на книгу рекомендуется! Справочные статьи:
Блог Woohoo.cn на.com/Liu Ling/Afraid/2…
blog.CSDN.net/язык C ummm/…
blog.CSDN.net/Wuhu City Class/art…
83. Реализация кодирования алгоритма сортировки#
Ссылаться наБлог Woohoo.cn на.com/Liu Ling/Afraid/2…
84. Алгоритм поиска#
Ссылаться наПроза 8. Талант/Боюсь/142Вт не 5. Также…
85.B+дерево#
Ссылаться наwoo woo woo.cn blog on.com/Kidney Yang Deficiency Eat That/AR…
86. Алгоритм КМП#
Рекомендуем прочитать обзор данных! Ссылаться наБлог Woohoo.cn на.com/from-cloud/afraid/3…
87. Алгоритм хеширования и широко используемый алгоритм хеширования#
Ссылаться наWoohoo.360doc.com/content/13/…
88. Как определить, есть ли кольцо в односвязном списке#
Справочная статья:
woooooo.brief.com/afraid/0oh28's 3160…
no.OSCHINA.net/U/2391658/no…{{totalPage}}
89. Очередь, стек, связанный список, дерево, куча, граф#
Рекомендуем прочитать обзор данных!
90. Общие команды в linux#
Ссылаться нау-у-у. Краткое описание.com/afraid/03 дует весенний ветерок 1 ах 72…
91. Как проверить использование памяти#
Ссылаться наblog.CSDN.net/Ветер Руи/art…
92. Как планировать процесс под Linux #
Рекомендуемые к прочтению книги для ознакомления, справочные статьи:
Блог woohoo.cn на.com/Zhao Yulan/Arch…
blog.CSDN.net/дождь сильнее/…
93. Необходимые условия взаимоблокировок#
Ссылаться наblog.sna.com.talent/is/blog_5oh36…
94. Предотвращение взаимоблокировок#
Ссылаться наblog.sna.com.talent/is/blog_5oh36…
95. Парадигма базы данных #
Ссылаться наWoohoo.360doc.com/content/12/…
96. Уровень изоляции транзакций базы данных#
Ссылаться наblog.CSDN.net/Франция 2006/Аретти…
97. Принцип пула соединений с базой данных#
Ссылаться наblog.CSDN.net/переверните несколько/искусство…
98. Оптимистичная блокировка и пессимистическая блокировка#
Ссылаться наwoohoo.open-open.com/worship/view/op…
99. Как добиться разных страниц запроса данных базы данных #
Ссылаться наblog.CSDN.net/Специально сделанное/искусство…
100. Принцип SQL инъекции, как предотвратить#
Ссылаться наWoohoo.Aliyun.com/consulting/conte…
101. Реализация индекса базы данных (введение дерева B+, отличие от дерева B и дерева R)#
Справочная статья:
Blog.csdn.net/kenny rose/ах...
у-у-у-у. Учиться не хочется.com/2216918.htm…
102. Оптимизация производительности SQL#
Справочная статья:
база данных.51CTO.com/art/200904/…
Блог Woohoo.cn на.com/before root/arc Привет…
103. Преимущества и недостатки индексов базы данных и когда индексы базы данных терпят неудачу#
Справочная статья:
Блог Woohoo.cn на.com/stars reject/art IC…
Блог woohoo.cn на.com/simple frog/…
woohoo.open-open.com/worship/view/op…
blog.CSDN.net/Colin_Liu20…
Блог Woohoo.cn на.com/Hongfei/arc…
104. Типы данных Redis#
Ссылаться наblog.CSDN.net/Где Руи/AR…
105. Семиуровневая модель OSI и четырехуровневая модель TCP/IP#
Справочная статья:
blog.CSDN.net/make printf с...
Блог Woohoo.cn на .com/commander…
Blog.csdn.net/super junjin ...
106.http и разница https #
Ссылаться на:
blog.CSDN.net/Слава 19861…
Уууу.Мама до сих пор думает об этом.Талант/Интернет/12…
107. Содержание HTTP-сообщения#
Справочная статья:
Особенно.Ali Cloud.com/Статьи/44...
woo woo woo.cn blog on.com/Похоже на свет/испуганный/4…
no.OSCHINA.net/org sky/blog…
108. Разница между получением отправки и отправкой отправки#
Справочная статья:
woo woo woo.cn blog on.com/much more/arc Привет…
woohoo.jelly think.com/archives/80…
109. Есть ли ограничение в байтах для получения отправки, если да, то где ограничение?#
Ссылаться наwoohoo.jelly think.com/archives/80…
110. Трехстороннее рукопожатие TCP и четырехсторонняя волна#
читатьwoo woo Краткое описание.com/afraid/ 1010 снимков из 7…
111. Разница между сеансом и файлом cookie#
Ссылаться наБлог Woohoo.cn на.com/same style/ah…
112. Принцип реализации сессии в HTTP-запросе#
Ссылаться наblog.CSDN.net/До 426/Арити…
113. Разница между редиректом и переадресацией#
Ссылаться наБлог Woohoo.cn на.com/Я веду блог на/afraid/…
114. Разница между TCP и UDP#
Ссылаться наwoo woo woo.cn blog on.com/ must master/arc Привет…
115.DDoS-атаки и предотвращение#
Справочная статья:
blog.CSDN.net/Guardian2003/Ах…
Вуууу. Off iPhone.com/news/201509…