1. Метод равных используется для сравнения, является ли содержимое объекта равным (переопределено позже)
2. Метод хэшкода используется только в коллекциях
3. Когда метод Equals перезаписан, будет ли сравнивать объект сравнения, будет сравниваться с помощью метода перезаписанных равных (оценивая, равно ли содержимое объекта).
4. При вложении объекта в коллекцию сначала определите, является ли значение хэшкода, в которое нужно помещать в объект, равно значению хэшкода любого элемента в коллекции. Если это не равно, поместите объект в коллекцию напрямую. Если значения HashCode равны, то используйте метод Equals, чтобы определить, является ли объект, который должен быть размещен, равным любому объекту в коллекции. Если суждение равняется не равным, поместите элемент непосредственно в коллекцию, в противном случае оно не будет размещено.
5. Метод Equals использует, равны ли адреса памяти объекта, чтобы определить, равны ли объекты.
Поскольку они являются двумя новыми объектами, адреса памяти объектов не равны, поэтому stu1.equals (stu2) неверно.
6. Потоки A и B должны получить блокировку объекта O. При условии, что A приобретает блокировку Object O, B будет ждать, пока A выпустит замок O. Если используется синхронизированный, если A не выпустит, B будет ждать, пока он будет продолжаться и не может быть прерван. Если используется Reentrantlock, если A не выпускается, B может прервать ожидание после ожидания достаточно долгого времени и делать другие вещи.
Reentrantlock приобретает замки тремя способами:
а) lock (), если блокировка получена, возвращайтесь немедленно. Если другой поток удерживает блокировку, текущий поток останется в состоянии покоя до получения блокировки.
b) trylock (), если блокировка будет получена, она немедленно вернет true, и если другой поток удерживает блокировку, он немедленно вернет ложь;
C) Trylock (длительный тайм -аут, единица времени), если замок будет приобретен, он немедленно вернет True. Если другой поток удерживает блокировку, он будет ждать заданного времени параметра.
Во время процесса ожидания, если блокировка получена, он возвращает True, а если время ожидания, он возвращает False;
г) Заблокировано: если блокировка получена, вернитесь немедленно. Если блокировка не получена, текущий поток находится в состоянии покоя до или не заблокированной.
Или текущий поток прерывается другим потоком
Синхронизированный реализован на уровне JVM. Не только синхронизированные блокировки можно контролировать с помощью некоторых инструментов мониторинга, но и исключения также могут происходить во время выполнения кода.
JVM автоматически отпустит блокировку, но невозможно использовать блокировку. Блокировка реализована через код. Чтобы убедиться, что блокировка будет выпущена, Unlock () должен быть установлен в конце концов {}
Когда конкурс ресурсов не очень жесткий, производительность синхронизированного лучше, чем у Reetrantlock. Однако, когда конкуренция за ресурсами очень жесткая, производительность синхронизации уменьшится на десятки раз, но производительность reetrantlock может оставаться нормальной;
В JDK следующие классы используются в основном для реализации механизма отражения Java, который расположен в пакете java.lang.reflect:
Класс: представляет класс.
Полевой класс: переменная -член, представляющая класс (переменные члена также называются атрибутами класса).
Метод класс: метод, представляющий класс.
Класс конструктора: представляет метод конструктора класса.
Класс массива: предоставляет статические методы для динамического создания массивов и доступа к элементам массива.
Вот несколько примеров, чтобы увидеть фактическое применение API отражения:
1. Получить переменные члена, методы членов, интерфейсы, суперклассии, методы конструктора и т. Д.
Метод getClass () определяется в классе java.lang.object, поэтому для любого объекта Java тип объекта может быть получен с помощью этого метода. Класс класс является основным классом в API отражения, и он имеет следующие методы
GetName (): Получите полное имя класса.
getFields (): Получите собственность общественного типа класса.
getDeclaredFields (): получить все свойства класса.
getMethods (): метод получения публичного типа класса.
GetDeclaredMethods (): Получите все методы класса.
getMethod (String name, class [] parametertypes): получает конкретный метод класса, параметр имени Указывает имя метода, параметр ParameterTypes Указывает тип параметра метода.
GetConstructors (): Получите конструктор публичного типа класса.
GetConstructor (Class [] ParameterTypes): получает конкретный конструктор класса. Параметр ParameterTypes указывает тип параметра конструктора.
NewInstance (): создать объект этого класса через конструктор класса без параметров.
Шаги, чтобы написать Java Reflector:
1) Сначала вы должны получить объект класса класса
Например:
Класс C1 = test.class; Класс C2 = class.forname ("com.reflection.test"); Класс C3 = новый тест (). GetClass (); 2) Затем вызовите методы в объекте класса отдельно, чтобы получить свойства/методы/конструкторы класса
ПРИМЕЧАНИЕ. Если вы хотите получить методы/свойства/конструкторы в классе обычно, вы должны сосредоточиться на следующих классах отражения
Поле
Конструктор
Метод
<Servlet-Mapping> <Servlet-name> </servlet-name> <url-pattern> </url-pattern> </servlet-mapping> для (string elementa: str) {System.out.print (elementa + ""); } List <string> list = new ArrayList <string> (); for (int i = 0; i <str.length; i ++) {if (! list.contains (str [i])) {list.add (str [i]); }} Set <string> set = new Hashset <string> (); for (int i = 0; i <str.length; i ++) {set.add (str [i]); }Весна имеет шесть транзакций и пять уровней изоляции
Категория 1: inte short int long
Категория 2: Float Double
Третья категория: логическая логическая
Категория 4: персонаж Чар
Методы окончательного класса модификации
Функция: это может быть унаследовано, но его нельзя переписано после наследства.
Окончательный класс модификации
Функция: классы не могут быть унаследованы.
При окончательном изменении основного типа значение остается неизменным. Тип ссылки указывает, что адрес остается неизменным. То есть, когда новый, адрес не может быть переназначен.
Вы знаете окончательный атрибут модификации
Подготовка предварительно сбита. Сначала отправьте SQL в базу данных для предварительной обработки, а затем поместите его в кэш. В следующий раз, когда вы обнаружите, что это то же самое, вам не нужно собирать его. Эффективность выполнения высока, существуют синтаксические подсказки для облегчения проверки, а параметры являются динамическими, предотвращая инъекцию SQL из -за проверки синтаксиса
Выберите * из tbname = 'zck' и passwd = 'или' 1 '=' 1 ';
Оператор не является предварительным компилированием и требует ручной проверки на синтаксические ошибки, которые жестко кодируются
HashMap позволяет nul
Поместите метод
HashMap выполнит специальную обработку на ключке нулевого значения, всегда помещайте его в позицию таблицы [0]. Поместите процесс, чтобы сначала вычислить хэш, а затем вычислить значение индекса через хэш и таблицу. Когда другие элементы уже существуют в таблице [Индекс], в положении таблицы [индекс] будет сформирован связанный список, а вновь добавленные элементы будут размещены в таблице [Индекс], а исходные элементы будут связаны через ближайшую запись. Таким образом, проблема конфликта хэш решается в форме связанного списка. Когда количество элементов достигает критического значения (фактор CAPACTIY*), емкость будет расширена, а длина массива таблицы становится таблицей.
Получить метод
Точно так же, когда ключ является нулевой, будет выполнена специальная обработка, а элемент с ключом - это NULL, обнаруживается в связанном списке таблицы [0].
Процесс GET должен сначала вычислять хэш, а затем вычислить значение индекса через хэш и таблицу. Индекс, который является подписанием массива таблиц, рассчитывается на основе хэша и таблицы.
Большинство индексов основаны на B-Tree
Проблемы безопасности потока сервлета в основном вызваны переменными экземпляра, поэтому в сервлетах следует избегать переменных экземпляра.
Если дизайн приложения не может избежать использования переменных экземпляра, то для защиты переменных экземпляра используется синхронизация, но для оптимальной производительности системы путь кода с минимальной доступностью следует синхронизировать.
Напишите синглтонский рисунок
public static long recurisive (int n) {if (n <= 0) return 0; if (n == 1) return 1; возврат рекурсивного (n - 1) + рекурсивный (n - 2);} public static long петли (int n) {if (n <= 0) возвращает 0; if (n == 1) retatic 1; long fib1 = 0; long fib2 = 1; i ++) {sum = fib1+fib2; fib1 = fib2; fib2 = sum;} return sum;} Hashtable-это безопасный класс. Он использует синхронизированный для блокировки всей хэш-таблицы для достижения безопасности потока, то есть заблокировать всю таблицу каждый раз и позволить потоке занять ее. Concurrenthashmap позволяет выполнять несколько операций модификации одновременно, а ключом является использование технологии разделения блокировки. Он использует несколько замков для управления модификациями в разных частях хэш -таблицы.
Concurrenthashmap использует сегменты (сегмент) для представления этих разных частей. Каждый сегмент на самом деле является небольшой хэш -сайте, и у них есть свои замки. Пока множественные операции модификации происходят в разных сегментах, их можно выполнить одновременно.
Некоторые методы должны пересекать сегменты, такие как размер () и содержит Value (). Им может потребоваться заблокировать всю таблицу вместо определенного сегмента. Это требует блокировки всех сегментов в последовательности. После завершения операции замки всех сегментов выпускаются последовательно. «По порядку» здесь очень важна, в противном случае существует высокая вероятность тупика. В concurrenthashmap массив сегментов является окончательным, и его переменные элемента на самом деле являются окончательными. Тем не менее, простое объявление массива в конечном итоге не гарантирует, что участники массива являются окончательными, что требует гарантий реализации.
Это гарантирует, что нет тупика, потому что порядок получения замков фиксируется
① Threadlocal ② Synchronized () ③ wait () и notify () ④ volatile
Threadlocal
Threadlocal гарантирует, что разные потоки имеют разные экземпляры, и один и тот же поток должен иметь один и тот же экземпляр, то есть каждый поток, использующий переменную, предоставляет копию значения переменной. Каждый поток может самостоятельно изменить свою собственную копию, а не конфликтовать с копией других потоков.
Преимущества: предоставляет безопасные общие объекты.
Разница от других механизмов синхронизации: механизм синхронизации состоит в том, чтобы синхронизировать одновременный доступ к одному и тому же ресурсу с помощью нескольких потоков и общения между несколькими потоками;
Threadlocal - это обмен данными, который изолирован из нескольких потоков и в основном не делит ресурсы между несколькими потоками. Это, конечно, не требует синхронизации нескольких потоков.
нестабильный
Влатильная измененная переменная элемента вынуждена перечитывать значение переменной элемента из общей памяти каждый раз, когда к ней обращается поток. и,
Когда переменная члена меняется, поток вынужден записать значение изменения обратно в общую память.
Преимущества: Таким образом, в любой момент два разных потока всегда видят одинаковое значение определенной переменной элемента.
Причина: спецификация языка Java гласит, что для получения наилучшей скорости разрешено сохранять частные копии переменных общих членов.
И это сравнивается только с исходным значением переменной общего элемента, когда поток входит или оставляет блок синхронного кода.
Таким образом, когда несколько потоков взаимодействуют с объектом одновременно, необходимо обратить внимание на то, чтобы поток могло бы своевременно получить изменения в переменных общих элементов.
Влатительное ключевое слово подсказывает виртуальную машину: для этой переменной члена оно не может сохранить свою личную копию, но должно напрямую взаимодействовать с переменной общей члена.
Советы по использованию: используйте volatile на переменных элемента, доступ к которому доступны двумя или более потоками.
Не необходимо использовать, когда доступ к переменной, которая будет доступна, уже находится в синхронизированном кодовом блоке или является постоянной.
Чтобы повысить эффективность, поток копирует переменную элемента (например, а) (например, b), а доступ к A в потоке фактически доступ к B. Синхронизация A и B выполняется только в определенных действиях, поэтому существует ситуация, когда A и B несовместимы. Волатильный используется, чтобы избежать этой ситуации.
volatile говорит JVM, что переменные, которые он изменяет, не сохраняют копии и непосредственно получают доступ к тем, что в основной памяти (лучше использовать, когда есть много операций чтения; связь между потоками требуется, но эта статья не может этого сделать)
Волатильные переменные имеют синхронизированные свойства видимости, но не обладают атомными свойствами.
Это означает, что поток может автоматически обнаружить последнее значение нестабильной переменной. Волатильные переменные могут использоваться для обеспечения безопасности потока, но могут быть применены только к очень ограниченному набору вариантов использования: нет никаких ограничений между несколькими переменными или между текущим значением переменной и измененным значением.
Вы можете использовать летучую переменную только вместо замков в ограниченных случаях. Чтобы сделать летучую переменную идеальную безопасность резьбы, должны быть выполнены следующие два условия одновременно:
Операции записи в переменные не зависят от текущего значения; Переменная не включена в инвариант с другими переменными.
Sleep () против ожидания ()
Sleep - это класс потоков (поток), который заставляет этот поток приостановить выполнение в течение указанного времени и отправлять возможность выполнения в другие потоки, но состояние мониторинга остается и автоматически возобновится после этого. Вызов Sleep не выпустит блокировку объекта.
Подождите, метод объектного класса. Вызов метода ожидания в этом объекте заставляет поток отказаться от блокировки объекта и ввести пул ожидания, ожидающий этого объекта. Только после выпуска метода уведомления (или уведомления) для этого объекта этот поток входит в пул блокировки объекта и готовится к получению блокировки объекта и входит в состояние работы. (Если переменная объявляется как летучая, она будет соответствовать основной памяти каждый раз, когда к ней обращается; если к переменной доступна синхронное метод или синхронное блок, переменная синхронизируется при получении блокировки при входе метода или блока, а блокировка выделяется, когда метод или блок выходит.)
http://www.yjbys.com/news/202750.html
Клиентская программа должна сначала получить определенную роль контейнера, а затем получить определенную роль итератора с помощью конкретной роли контейнера.
Итератор IT = new ArrayList.iterator ();
1) Доступ к содержимому объекту контейнера без обнаружения его внутреннего представления.
2) Поддержать множественные отслеживания контейнерных объектов.
3) Предоставьте унифицированный график (полиморфная итерация) для пересечения различных контейнерных структур.
Используйте новое ключевое слово} → конструктор был вызван
Используйте метод NewInstance класса класса} → конструктор был вызван
Используйте метод NewInstance класса Constructor} → Функция конструктора была вызвана
Использование метода клона} → Нет конструктора не вызывается
Использование десериализации} → Нет конструктора не вызывается
Сотрудник EMP2 = (сотрудник) class.forname ("com.employee"). NewInstance (); или
Employee emp2 = employee.class.newinstance (); конструктор конструктор = employee.class.getConstructor (); Сотрудник EMP3 = Constructor.newinStance ();
Используя метод клона, нам нужно сначала реализовать клонируемый интерфейс и реализовать метод клона, определенный им
Сотрудник EMP4 = (работник) EMP3.Clone ();
Когда программа начинается, она не загружает все файлы класса, которые будут использоваться программой одновременно. Вместо этого он динамически загружает определенный файл класса в память через механизм загрузки класса Java (ClassLoader) в соответствии с потребностями программы. Следовательно, только после того, как файл класса загружен в память, может ли это ссылаться другие классы. Следовательно, ClassLoader используется для динамической загрузки файлов класса в память.
Bootstrap ClassLoader: называется загрузчиком класса стартапа, он является загрузчиком класса верхнего класса в иерархии загрузки класса Java, отвечающим за загрузку библиотеки класса основных классов в JDK, например: rt.jar, ресурсы. Jar, Charsets.jar и т. Д. Java_home/jre/lib/ext/по умолчанию.
App ClassLoader: называется системным загрузчиком класса, который отвечает за загрузку всех банок и файлов класса в каталоге класса приложения.
Поскольку это может избежать повторной нагрузки, когда отец загрузил класс, у ребенка -класса загрузчика нет необходимости загружать его снова.
Учитывая факторы безопасности, давайте представим, что если мы не используем этот режим делегата, мы можем динамически заменить типы, определенные в API Core Java в любое время, что будет создавать очень большой риск безопасности. Метод родительского делегата может избежать этой ситуации, потому что строка уже загружается загрузчиком класса загрузки (BountStrcp ClassLoader) при запуске, поэтому пользовательский класс загрузчик никогда не сможет загрузить строку, записанную сам по себе, если вы не измените алгоритм по умолчанию класса поиска ClassLoader в JDK.
1. Запрос клиента объекта запроса, этот запрос будет содержать параметры из запроса GET/POST и может только понимать потребности клиента, а затем ответить.
2. Соответствующая информация о объекте ответа отвечает на запросы клиентов
3. Объект сеанса относится к сеансу между клиентом и сервером, начиная с веб -приложения от клиента на сервер, пока клиент не отключен от сервера.
4. Out объект является экземпляром класса JSPWriter и является широко используемым объектом для вывода контента для клиента.
5. Объект страницы указывает на саму текущую страницу JSP, которая немного похожа на этот указатель в классе. Это экземпляр класса java.lang.object
6. Объект приложения реализует обмен данными между пользователями и может хранить глобальные переменные. Он начинается с запуска сервера, пока сервер не отключится
7. Объект исключения является объектом исключения. Когда происходит исключение во время процесса работы, этот объект генерируется.
8. PageContext Object предоставляет доступ ко всем объектам и пространствам имен на странице JSP
9. Объект конфигурации используется двигателем JSP для передачи информации в него при инициализировании сервлета.
JS имеет функцию isnan (val) // Если это число, он возвращает ложь
Есть XMLDOM SARSING, SAX SARSING и STAX SARSING
XMLDOM: (xmldocumentObjectModel) Производительность сильно ухудшается при обработке больших файлов. Эта проблема вызвана структурой дерева DOM, которая занимает большую память, и DOM должен загружать весь документ в память перед анализом файла, который подходит для случайного доступа к XML;
Sax: (SimpleApiforxml) В отличие от DOM, Sax-это метод анализа XML, управляемый событиями. Он считывает файлы XML в последовательности и не требует, чтобы весь файл был загружен сразу. При встрече с событием, таким как начало файла, конец документа или начала тега и конца тега, оно запускает событие, когда пользователь обрабатывает файл XML, написав код обработки в своем событии обратного вызова, подходящее для последовательного доступа к XML;
Stax: разница между (StreamingApiforxml) и другими методами заключается в том, что приложения могут обрабатывать XML как поток событий, что лучше, чем другие методы с точки зрения производительности и доступности;
Thread.getState ()
Выше приведены вопросы о интервью Java, составленные редактором для вас. Я надеюсь, что они будут вам полезны. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение. Редактор ответит вам вовремя!