Эта статья в основном организует общие вопросы интервью Java для вашей ссылки. Конкретный контент заключается в следующем
1. разница между соном и ожиданием на Java
① Эти два метода поступают из разных классов, сон происходит из класса потоков, а ожидание происходит из класса объекта.
Сон - это статический метод потока. Тот, кто называет это ложится спать. Даже если в потоке A вызывается метод сна, он на самом деле все еще ложится спать. Чтобы сделать спет за ветку B, вы должны копаться в коде B.
② Замок: самое главное, что метод сна не высвобождает блокировку, в то время как метод ожидания выпускает блокировку, чтобы другие потоки могли использовать синхронные управляющие блоки или методы.
Сон не передает системные ресурсы; Подождите, чтобы войти в пул ожидания потока, чтобы подождать, передавать ресурсы системы, а другие потоки могут занимать процессор. Как правило, подождите, не добавит ограничение по времени, потому что, если поток ожидания работает в недостаточных ресурсах, будет бесполезно выйти снова. Вы должны ждать, пока другие потоки вызовут уведомление/уведомление, чтобы разбудить все потоки в бассейне ожидания, прежде чем ввести в очередь готовой очередь и ждать, пока ОС распределяет системные ресурсы. Сон (миллисекунд) может быть указан, чтобы автоматически разбудить его. Если время меньше времени, вы можете вызвать только Enterrupt (), чтобы заставить прерываться.
Функция Thread.sleep (0) состоит в том, чтобы «запустить операционную систему для повторной конкуренции ЦП еще раз».
③ Область использования: ждать, уведомлять и уведомлять и уведомлять можно использовать только в методах управления синхронизацией или блоками управления синхронизацией, в то время как сон можно использовать в любом месте.
синхронизированный (x) {x.notify () // wait ()}2. Разница между Hashmap и Hashtable на Java
① Исторические причины: хэштата дается старому диктонарному классу. HashMap - это реализация интерфейса карты, представленной Java 1.2.
② Hashmap позволяет пустые пары клавишных значений, в то время как хэштат не
③ Hashtable Synchronization, в то время как Hashmap Asynchronous более эффективна, чем хэштата
3. Пожалуйста, кратко опишите разницу между бросками и бросками в исключениях
① брось представляет собой действие, что означает, что исключение брошено; Выбросы представляют состояние, которое означает, что метод может иметь исключение, которое бросается ② бросок используется в реализации метода, в то время как броски используются в объявлении метода ③ бросок можно использовать только для выброса одного исключения, в то время как броски могут бросить несколько исключений
4. Разница между переполнением памяти и утечкой памяти
Переполнение памяти из памяти относится к тому факту, что когда программа применяется к памяти, нет достаточного пространства памяти, чтобы ее использовать, и из памяти появляется; Например, если применяется целое число, но оно может сохранить длинные, это переполнение памяти.
Утечка памяти памяти относится к неспособности программы освободить пространство памяти, которое было применено после подачи заявки на память. Вред утечки памяти можно игнорировать, но последствия накопления утечки памяти очень серьезны. Независимо от того, сколько памяти, она будет занята рано или поздно.
Утечка памяти в конечном итоге приведет к выходу из памяти!
Переполнение памяти означает, что память, необходимая для распределения, превышает то, что система может дать вам, и система не может удовлетворить потребности, поэтому происходит переполнение.
Утечки памяти, когда вы применяете систему, чтобы выделить память для использования (новое), но после использования она не возвращается (удалить). В результате вы больше не можете получить доступ к памяти, к которой вы подали заявку (возможно, вы потеряли его адрес), и система не может снова выделить ее на требуемую программу. Если вы используете все методы для заполнения тарелки, вы можете держать только 4 фрукта. Если вы заполните 5, вы упадете на землю и не сможете съесть его. Это переполнен! Например, если стек заполнен, он неизбежно приведет к переполнению места, когда стек заполнен, что называется переполнением. Если стек пуст, он также приведет к переполнению места, когда стек пуст, что называется нижним потоком. Это означает, что выделенной памяти недостаточно, чтобы поставить последовательность элементов данных, которая называется переполнением памяти.
Классификация. В том, что происходит, утечки памяти можно разделить на 4 категории:
① Частые утечки памяти. Код, который происходит с утечкой памяти, будет выполнен несколько раз, и каждый раз, когда он выполняется, он вызовет утечку памяти.
② Случайная утечка памяти. Код, который происходит с утечками памяти, будет происходить только в определенных конкретных средах или операциях. Регулярные и случайные являются относительными. Для конкретной среды случайность может стать частой. Следовательно, тестовая среда и методы тестирования имеют решающее значение для обнаружения утечек памяти.
③ Единственная утечка памяти. Код, который происходит с утечкой памяти, будет выполняться только один раз или из -за алгоритмических дефектов, всегда будет только один кусок утечки памяти. Например, память выделяется в конструкторе класса, но память не выпускается в деструкторе, поэтому утечки памяти происходят только один раз.
④ Неявная утечка памяти. Программа непрерывно выделяет память во время работы, но не выпускает память, пока она не будет закончена. Строго говоря, здесь нет утечки памяти, потому что программа в конечном итоге освобождает всю запрашиваемую память. Но для серверной программы требуется несколько дней, недель или даже месяцев, и не освобождение памяти во времени также может привести к окончанию исчерпания всей памяти в системе. Итак, мы называем этот тип утечки памяти неявной утечкой памяти.
С точки зрения пользователей, использующих программы, сами утечки памяти не причинят никакого вреда. Как обычный пользователь, вы вообще не можете почувствовать существование утечек памяти. Что действительно вредно, так это накопление утечек памяти, которое в конечном итоге потребляет всю память в системе. С этой точки зрения одноразовые утечки памяти не вредны, потому что они не накапливаются, в то время как неявные утечки памяти очень вредны, потому что их сложнее обнаружить, чем частые и случайные утечки памяти.
5. Разница между String, StringBuffer и StringBuilder
① Предоставление и неизменное
String Class использует массив символов для сохранения строк, следующим образом: Поскольку существует «окончательный» модификатор, вы можете знать, что строковые объекты неизменны.
Частная конечная стоимость символа [];
Как StringBuilder, так и StringBuffer унаследованы от класса AbstractStringBuilder. В AbstractStringBuilder массивы персонажей используются для сохранения струн. Следующим образом видно, что оба объекта изменяются.
char [] значение;
② Это многопоточное и безопасное
Объекты в строке неизменны, поэтому их можно понимать как константы, которые, очевидно, являются защищенными потоком.
AbstractStringBuilder - это общественный родительский класс StringBuilder и StringBuffer, который определяет некоторые основные операции строк, такие как ExpandCape, добавление, вставка, индекс и другие публичные методы.
StringBuffer имеет блокировку синхронизации на методе или блокировку синхронизации на вызываемом методе, поэтому он безопасен для потока. См. Следующий исходный код:
public Synchronized Stringbuffer reverse () {super.reverse (); вернуть это; } public int indexof (string str) {return indexof (str, 0); // Существует публичный синхронизированный метод int indexof (String Str, int fromindex)} StringBuilder не добавляет блокировки синхронизации в метод, поэтому он не является безопасным.
③StringBuilder и StringBuffer в общем
StringBuilder и StringBuffer имеют публичные родительские классы AbstractStringBuilder (Abstract Class).
Одним из различий между абстрактными классами и интерфейсами является то, что некоторые публичные методы подклассов могут быть определены в абстрактных классах. Подклассы должны только добавлять новые функции и не нужно повторять существующие методы; В то время как интерфейсы определяют только методы и константы.
Методы StringBuilder и StringBuffer будут называть публичные методы в AbstractStringBuilder, таких как Super.Append (...). Просто StringBuffer добавит в метод синхронизированный ключевой слов и выполнит синхронизацию.
Наконец, если программа не является многопоточной, то использование StringBuilder более эффективно, чем StringBuffer.
6. Разница между массивами и связанными списками
Оба принадлежат структуре данных
Из логической структуры:
① Массив должен заранее определять фиксированную длину (количество элементов) и не может адаптироваться к динамическому увеличению и уменьшению данных. Когда данные увеличиваются, количество элементов может превышать первоначально определенные; Когда данные уменьшаются, будут вызваны отходы памяти; Массив может быть доступен непосредственно в соответствии с инспектом.
② Связанный список динамически хранится и выделяется, что может адаптироваться к динамическому увеличению и уменьшению данных и может легко вставлять и удалять элементы данных. (При вставке и удалении элементов данных в массив вам необходимо переместить другие элементы данных, что очень громоздко), связанный список должен найти следующий элемент в соответствии со следующим указателем.
Из хранилища памяти:
① (статические) массивы выделяют пространство из стека, которое удобно и быстро для программистов, но имеет небольшую свободу.
② Связанный список выделяет пространство из кучи, которая имеет большую свободу, но применить к управлению.
Из приведенного выше сравнения мы видим, что если вам нужно быстро получить доступ к данным и редко или не вставлять и удалять элементы, вы должны использовать массив; Напротив, если вам нужно часто вставлять и удалять элементы, вам необходимо использовать связанную структуру данных списка.
7. Разница между ArrayList и LinkedList
①ArrayList реализует структуру данных на основе динамических массивов, а LinkedList основан на структуре данных, основанной на связанном списке.
② Для случайного доступа к получению и установке ArrayList чувствует себя лучше, чем LinkedList, потому что LinkedList должен переместить указатель.
③ Для операций с добавлением и удалением добавляют и удаляют, LinedList имеет относительно преимущество, поскольку ArrayList должен перемещать данные.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.