1. Вопрос: Если объекты A и B упоминаются в циркулярно, могут ли они быть GC?
Ответ: Да, виртуальные машины сегодня в основном используют алгоритмы анализа доступности, чтобы определить, выживает ли объект, а не просто ссылается на подсчет объекта. Алгоритм анализа доступности использует серию объектов «корней GC» (объекты, упомянутые в стеке виртуальных машин, статические ссылки на атрибут) в качестве отправной точки. Пути, которые эти узлы ищут вниз, называются эталонными цепочками. Когда объект не имеет какого -либо подключения к эталонной цепочке с корнями GC, объект доказал, что объект недоступен.
2. Как вызвано переполнение памяти в Java?
OutofmemoryError:
(1) Пространственная программа Pergern использует большое количество банок или классов, что делает виртуальную машину Java не загружать пространство класса недостаточным.
Решение: Регулируйте параметры xx: permsize и xx: maxpermsize, уменьшить пакеты JAR и уменьшить дублиручную загрузку классов.
(2) Виртуальная машина Java Heap Space Virtual Machine создает слишком много объектов.
Решение: Настройка параметров XMS (начальный размер кучи) XMX (максимальный размер кучи), проверьте на наличие мертвых петлей или ненужных дубликатов объектов
(3) Невозможно создать новый нативный поток, JVM занимает слишком много пространства памяти, и создание потоков в JVM также требует создания потоков в операционной системе.
Решение: измените размер потоков в JVM.
3. string s = "123"; Сколько объектов генерируется в этом утверждении?
Если в пуле струн нет «123», объект генерируется и помещается в постоянный бассейн. Если есть «123», генерируются 0 объектов.
Если String s = new String("123") , если в постоянном пуле нет, создайте одну в постоянном пуле, а затем создайте один в памяти кучи.
4. В чем разница между ошибкой, исключением и Runtimeexception?
Ошибка и исключение являются подклассы броски, а Runtimeexception - это подкласс исключения.
Ошибка используется, чтобы указать, что разумное приложение не должно пытаться поймать ошибки.
Исключение указывает на условия, которые нужно разумное приложение для захвата. Он разделен на проверенные исключения и неконтролируемые исключения.
Runtimeexception - это исключение, которое не проверяется, не требует попытки подхватить или объявлено на методе. Основные подклассы: Nullpointer, Arithmatic, ArrayIndexoutofBounds, Classcast.
5. В чем разница между читателем и Inputstream?
Все они являются абстрактными классами, читатель используется для чтения потоков символов (char или string), а inputstream используется для чтения байтовых потоков (байтовые массивы).
6. Какова роль хэшкода?
HashCode в основном используется для быстрых поисков, например, в структуре HashMap, которая используется для определения местоположения пар клавишных значений. Если два объекта одинаковы, хэшкод должен быть одинаковым, в то время как объекты HashCode с одним и тем же хэшкодом могут не совпадать, что эквивалентно размещению их в одном и том же поле.
7. В чем разница между Hashmap и Hashtable?
Безопасность потока, ключ значения нулевого значения, эффективность, хэшмап (итератор быстрого отказа), хэштаб (итератор перечислителя) и позиция элемента HashMap будет изменяться со временем
8. Можно ли использовать какой -либо объект в Hashmap в качестве ключа? Существуют ли какие-либо требования к определенным пользователям объектам в качестве ключа?
Да, но ключевой объект должен быть неизменным объектом. В противном случае, после того, как запись вставлена в карту, изменение значения ключа приведет к непоследовательному значению текущего ключа со значением хэша, то есть оно не соответствует индексу массива и не будет найдена.
9. Должен ли я использовать run () или start () для запуска потока?
Как решить проблему синхронизации и параллелизма в многопользовании? Что такое ветка демон? Что такое ветка демон? Какой метод для реализации потока демона (значение Thread.SetDeamon ()) Как остановить поток? Объясните, что такое безопасность потоков? Приведите пример небезопасности потока. Объясните роль синхронизированных ключевых слов. Когда поток входит в синхронизированный метод объекта, могут ли другие потоки ввести другие методы этого объекта?
(1) Начните
(2) Унаследовать класс потоков, реализуйте запускаемый интерфейс и используйте Exectuorservice, Future и Callable, чтобы реализовать поток, который возвращает значение.
(3) Метод синхронизации, блок кода синхронизации, блокировка
(4) Потоки Дэймона предоставляют услуги для работы других потоков, таких как GC и поток. SetDeamon (True).
(5) Thread.stop () не рекомендуется (ресурсы не будут правильно выпущены), а прерывания используются для остановки потоков.
(6) Когда несколько потоков получают доступ к объекту, если планирование и чередующее выполнение этих потоков в среде времени выполнения не требуются, в абоненте не требуется дополнительная синхронизация, или любые другие операции координации выполняются на вызывающем абоненте, и правильный результат может быть получен путем вызова этого объекта, тогда объект является потоковым.
(7) Билеты продаются неоднократно.
(8) Синхронизировать ключевые слова. При изменении статических методов класс используется в качестве объекта блокировки, и только один поток может получить доступ к следующим методам синхронизации; При изменении обычных методов объект используется в качестве объекта блокировки, и только один поток может получить доступ к такому виду синхронизации обычных методов; Вы также можете настроить блок кода синхронизации объекта блокировки.
(9) Синхронизированный метод не может быть введен, а не синхронизированный может быть введен.
10. Какие новые особенности JDK8 вы узнали о соответствующих функциях с примерами?
(1) Lambda Expression: функциональное программирование, ссылка на метод
(2) Поток API
(3) Метод интерфейса по умолчанию
(4) Улучшение API даты и времени, добавив метод DateTimeFormatter
11. Каковы принципы оптимизации SQL?
Для получения подробной информации, пожалуйста, смотрите блог в моей классификации базы данных
12. В чем разница между Серлветом и CGI в жизненном цикле сервлета?
Жизненный цикл: загрузка класса, экземпляра (построение объектов), инициализация (init), сервис (сервис) и уничтожение.
CGI: общий интерфейс шлюза, общий интерфейс шлюза, написанный на языке Perl, создает объект CGI для каждого запроса.
Сервлет: только экземпляр и инициализация требуются один раз и многопоточное.
13. Каковы преимущества Stringbuffer? Почему быстро?
Потому что StringBuffer не требует повторного создания строковых объектов, но это не так.
Например, строка S = "a" + "B" + "C" Компилятор операции оптимизирует и станет String S = "ABC"
Компилятор строки S = S1 + S2 + S3 также будет оптимизирован и станет операцией приложения StringBuilder. Однако, если он не будет сплайсирован за один раз + операция, объект String и объект StringBuilder будет генерироваться неоднократно, что будет очень низким.
14. Вы понимаете алгоритм шифрования и дешифрования?
Абстрактные алгоритмы: MD5 (128-бит), SHA1 (160-бит), является необратимым процессом. Независимо от того, насколько велики данные, данные одной и той же длины будут генерироваться после алгоритма дигеста. Это может быть взломан только через словаря.
Симметричные алгоритмы шифрования: DES, AES, тот же секретный ключ используется при шифровании и дешифровании.
Алгоритм асимметричного шифрования: RSA, используйте разные секретные ключи при шифровании и дешифровании, и используйте RSA2 при подключении к Alipay.
15. Решить высокую параллелизму и высокую нагрузку?
(1) Потребление статической страницы является минимальным, HTML как можно больше, а система публикации информации CMS используется для автоматического генерации статических страниц при вводе информации и динамических данных кэша, которые не часто изменяются на передней части.
(2) CDN, распределять ресурсы, такие как CSS/JS на разных серверах.
(3) Балансировка нагрузки (nginx).
(4) Данные кэша, которые не часто изменяются (Redis, Memcache).
(5) Сервер изображений отделен от сервера приложений.
(6) кластер.
16. Целое число внутреннего кеша?
Внутри целочисленного класса есть статический целочисленный массив, в котором хранятся некоторые целочисленные объекты, которые были инициализированы. Общее значение составляет (-128 ~ 127). Если вы используете == сравнение, иногда FALSE будет возвращено, потому что значение нет в кэше, поэтому вы должны использовать равные для сравнения.
17. Каков принцип ArrayList?
(1) ArrayList-это невыполнение потока. Если вы хотите безопасность потока, используйте CopeonWritelist.
(2) Нижний слой - это массив объекта [], и существует ссылка на элементы, указывающая на массив внутри. В начале он указывает на кэшированный пустой массив (переход) по умолчанию. Когда вы захотите расширить, новый массив с размером 1,5 раза (x + (x >> 1)) будет повторно новым, а затем старый элемент будет скопирован в новый массив через систему.
(3) Сложность алгоритма метода случайного чтения и записи (get, set) составляет O (1).
(4) Существует два типа с добавленными операциями. Сложность алгоритма добавления (индекс, значение) составляет O (n), потому что его необходимо перемещать через копирование элемента; в то время как сложность алгоритма операции add (значение) является O (1) (если расширение не происходит).
(5) Временная сложность операции делеции составляет O (n), потому что независимо от того, удаляется ли она в соответствии с индексом или объектом, необходимо реализовать операцию движения посредством копирования. После удаления размер массива не изменится, а длина поддерживается атрибутом размера. При удалении объектов объектом вы не можете использовать новые объекты. Вы должны удалить их посредством ссылок на объекты в ArrayList.
18. Каков принцип LinkedList?
(1) Базовый слой является двунаправленным связанным списком, поддерживая первый указатель и последний указатель.
(2) Временная сложность случайного чтения и записи (get, set) составляет O (n).
(3) временная сложность операции вставки добавить (объект) составляет O (1); Временная сложность добавления (индекс, объект) составляет O (n).
(4) Временная сложность операции удаления удаляет (объект) o (1); Временная сложность удаления (индекс) составляет O (n).
19. Что следует отметить при использовании пулов потоков?
(1) Предотвратить тупики. Все потоки в пуле потоков ждут события A, и никаких свободных потоков для выполнения A.
(2) Предотвратить недостаточные системные ресурсы. Контролировать количество потоков.
(3) Предотвратить параллельные ошибки.
(4) Предотвратить утечку резьбы. Поток заканчивается ненормально из -за Runtimeexception или ошибки, которые не попадают нормально, а пул потоков теряет поток.
(5) Избегайте перегрузки задач.
20. В чем разница между @autowire и @Resource весной?
@Autowire собирается по умолчанию по умолчанию. По умолчанию требуется, чтобы объект зависимости должен существовать. Если NULL разрешено, он может быть установлен на false. Если мы хотим использовать сборку по имени, мы можем использовать его в сочетании с аннотацией @qualifier;
@Resource собирается по имени по умолчанию. Когда фасоль, соответствующий имени, не может быть найдена, оно будет собрано в соответствии с типом. Это может быть указано через атрибут имени. Если атрибут имени не указан, когда аннотация аннотируется на поле, имя поля принимается по умолчанию в качестве имени боба, чтобы найти объект зависимости. Когда аннотация отмечена на методе сеттера атрибута, имя атрибута принимается по умолчанию в качестве имени боба, чтобы найти объект зависимости.
21. Диаграмма передачи состояния резьбы.
22. Методы объектного класса?
(1) равны: определить, равна ли это.
(2) Hashcode: найдите хеш -значение. Если значения хэш двух объектов равны, это может быть не равно; Если равны, значения хэш двух объектов должны быть равны.
(3) ToString: получить форму выражения строки объекта, которая обычно переписывается.
(4) GetClass: метод отражения, чтобы получить класс, к которому принадлежит объект.
(5) Подождите: его можно использовать только в синхронизированных сегментах кода. Если параметр времени не включен, выполняющий поток приведет к тому, что блокировка будет заброшена и введет состояние ожидания (бассейн ожидания).
(6) Уведомление: его можно использовать только в синхронизированных сегментах кода, вытащите поток из бассейна ожидания и поместите его в пул флага блокировки.
(7) Уведомление: может использоваться только в синхронизированных сегментах кода, и все потоки вытасываются из бассейна ожидания и помещены в пул флага блокировки.
23. Основной принцип сериализации Java?
Преобразовать информацию объекта в информацию об байт -коде.
(1) сохранить описание сериализации. (2) Информация о описании текущего класса. (3) Описание текущих атрибутов класса. (4) Описание Superclass (5) Описание атрибута Superclass (6) Значение атрибута Superclass Описание (7) Значение атрибута подкласса