Статьи

Неправильные ответы на основные вопросы Java

обзор

В Интернете вопросы и ответы Java-интервью копируются с одного веб-сайта на другой. Это может означать, что неправильный или устаревший ответ никогда не будет исправлен. Вот несколько вопросов и ответов, которые не совсем верны или устарели. т.е. до Java 5.0.

Каждый заданный вопрос сопровождается двумя разделами. Первый раздел курсивом указывает на неполный / неправильный ответ. Последний раздел в простом формате дает полный / правильный ответ.

Сколько способов можно передать аргумент подпрограмме и объяснить их?

Аргумент может быть передан двумя способами. Они передаются по значению и по ссылке.
Передача по значению: этот метод копирует значение аргумента в формальный параметр подпрограммы.
Передача по ссылке: в этом методе ссылка на аргумент (а не значение аргумента) передается параметру.

Java поддерживает только Pass-By-Value. Вы можете передать ссылку по значению, но вы не можете передать по ссылке в Java. Ссылки на Java могут быть описаны как Call By Sharing, но это обычно не используется.

Что такое сборка мусора и как ее явно назвать?

Когда объект больше не упоминается какой-либо переменной, Java автоматически восстанавливает память, используемую этим объектом. Это называется сборкой мусора. Система. Метод gc () может использоваться для его явного вызова.

Объект может быть очищен, если у него больше нет сильной ссылки из корневого контекста. Объект, который имеет слабую или мягкую ссылку, может быть очищен. Объект без строгой ссылки не может быть очищен (т. Е. Нет гарантии, что GC будет запущен, а второстепенный GC не будет очищать оставшиеся в живых объекты)

System.gc () — это подсказка о необходимости запуска Full GC. Это можно отключить с помощью параметра командной строки.

Что такое временные и изменчивые модификаторы?

Переходный процесс: модификатор переходного процесса применяется только к переменным и не сохраняется как часть постоянного состояния своего объекта. Переходные переменные не сериализуются.
Volatile: модификатор Volatile применяется только к переменным и сообщает компилятору, что переменная, измененная volatile, может быть неожиданно изменена другими частями программы.

Переходный процесс может применяться только к полям и не может применяться к локальным переменным. Это может быть применено к статическим переменным, но обычно игнорируется. Переходные поля не сериализуются автоматически, но могут быть сериализированы с помощью пользовательской сериализации, например writeObject и readObject ()

volatile можно применять только к полям и сообщать JIT, а не компилятору, что каждый доступ должен получать согласованную с кэшем копию поля. (Условно из «основной» памяти)

Объясните использование ключевого слова transient?

Это ключевое слово указывает на то, что значение этой переменной-члена не нужно сериализовать с объектом. Когда класс будет десериализован, эта переменная будет инициализирована значением по умолчанию своего типа данных (т. Е. Ноль для целых чисел).

Это ключевое слово означает, что поле не может быть сериализовано автоматически. Он не десериализуется автоматически, оставляя значение по умолчанию для поля. Значение по умолчанию для Integer равно нулю . Значение по умолчанию для int равно 0

Что такое перегрузка метода и переопределение метода?

Перегрузка метода: когда метод в классе, имеющий одно и то же имя метода с разными аргументами, называется перегрузкой метода.
Переопределение метода: когда метод в классе с одинаковым именем метода с одинаковыми аргументами называется переопределением метода.

Перегрузка методов происходит, когда два метода имеют одно и то же имя, но разные подписи . Подпись включает типы параметров и универсальный тип. Один метод может вызываться с разными аргументами, а два перегруженных метода могут вызываться с одинаковыми аргументами. т.е. его подпись не аргументы, которые имеют значение.

Переопределение метода происходит только тогда, когда подкласс имеет ту же сигнатуру, что и метод в родительском классе.

В чем разница между Integer и int?

  1. Integer — это класс, определенный в Java. пакет lang, тогда как int — это примитивный тип данных, определенный в самом языке Java. Java не преобразует автоматически из одного в другой.
  2. Целое число может использоваться в качестве аргумента для метода, который требует объекта, тогда как int может использоваться для вычислений.

Integer — это ссылка на объект, который упаковывает int. Основное отличие с тех пор, как были добавлены автобокс и распаковка, состоит в том, что Integer может быть нулевым, а оператор == сравнивает ссылки для Integer и фактические значения для типа int.

1
2
3
4
5
6
7
8
9
Integer i1 = 1;
Integer i2 = 1;
// true as the same autoboxed Integer is used.
System.out.println(i1 == i2);
 
Integer i3 = -200;
Integer i4 = -200;
// false as different autoboxed Integer objects are used.
System.out.println(i3 == i4);

Каковы различные состояния потока?

Различные состояния потоков готовы, работают, ожидают и не работают.

Начиная с Java 5.0, которая должна быть большинством разрабатываемых систем Java, класс Thread.State перечисляет возможные состояния потоков как

  • NEW — поток, который еще не начался, находится в этом состоянии.
  • RUNNABLE — поток, выполняющийся на виртуальной машине Java, находится в этом состоянии.
  • BLOCKED — поток, который заблокирован в ожидании блокировки монитора, находится в этом состоянии.
  • WAITING — В этом состоянии находится поток, который бесконечно ждет другого потока для выполнения определенного действия.
  • TIMED_WAITING — Поток, который ожидает, пока другой поток выполнит действие в течение указанного времени ожидания, находится в этом состоянии.
  • TERMINATED — завершившийся поток находится в этом состоянии.

Какой базовый класс для всех классов?

java.lang.Object

Это верно для пользовательских классов. Для примитивных типов, таких как int.class, void.class и сам объект не имеют суперкласса.

1
Class parent = boolean.class.getSuperclass(); // returns null

Что такое поток демонов?

Theards [sic], работающие в фоновом режиме, называются потоками deamon. Поток-демон — это поток, который не дает возможности запускать другие потоки, когда он входит в состояние выполнения, он не дает возможности запускать другие потоки.

Поток Daemon — это любой поток, который не будет препятствовать завершению работы JVM. Любой поток может считаться «фоновым» потоком. Потоки демона получают тот же приоритет, что и потоки, не являющиеся демонами (в зависимости от их приоритета). Когда поток демона работает, он не препятствует запуску другого потока по-другому, чем запуск потока, не являющегося демоном.

Поток демона — это поток с низким приоритетом, который периодически запускается на заднем плане и выполняет операцию сбора мусора для системы времени выполнения Java.

Сборщик мусора является примером потока демона. Поток демона может иметь высокий приоритет и работать постоянно.

Какие ограничения накладываются на значения каждого случая оператора switch?

Во время компиляции каждое значение регистра оператора switch должно принимать значение int

В Java 5.0 поддерживается включение enum, а в Java 7 поддерживается включение String.

Что такое Java-бин?

Java Bean — это программный компонент, разработанный для многократного использования в различных средах.

ИМХО: Этот ответ неопределенный и может говорить о чем угодно.

Java Bean — это «Java-объект, который сериализуем, имеет нулевой конструктор и предоставляет доступ к свойствам с использованием методов получения и установки».

Почему вы используете синхронизированный блок против синхронизированного метода?

Синхронизированные блоки устанавливают блокировки на более короткие периоды, чем синхронизированные методы.

Это может быть правдой, но не гарантировано. Часто синхронизированные блоки используются для удержания блокировки нескольких вызовов объекта с синхронизированными методами. ИМХО самое распространенное использование синхронизированных блоков — это блокировка другого объекта, кроме этого

1
2
3
4
5
6
7
8
Map<key, value=""> map = Collections.synchronizedMap(new LinkedHashMap<key, value="">());
// perform multiple operations in a thread safe manner
synchronized(map) {
Value value = map.get(key);
if (value == null)
map.put(key, value = new Value(key));
return value;
}

Какой из них быстрее в Java?

1
2
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}

Ответ: Который когда-либо идет вторым с быстрей Серверная JVM может обнаруживать и устранять циклы, которые ничего не делают. Метод с любым циклом компилируется, когда цикл повторяется около 10000 раз. (На основе -XX: CompileThreshold = 10000) Первый цикл потребует времени, чтобы обнаружить, что он ничего не делает, однако второй будет скомпилирован.

Какой оператор Java является ассоциативным?

Оператор = является ассоциативным справа.

Согласно http://introcs.cs.princeton.edu/java/11precedence/ список ассоциативных операторов справа налево. (Намного больше, чем один)

  • ( ) бросать
  • новый объект
  • ? :
  • назначение = + = — = * = / =% = & = ^ = | = << = >> = >>> =

Какой класс исключений генерируется системой времени выполнения Java?

Система времени выполнения Java генерирует исключения RuntimeException и Error.

ИМХО: Это ответ на другой вопрос. Это ответ на; Каковы суперклассы времени выполнения, непроверенные исключения?

Среда выполнения Java может генерировать Error, Exception или RuntimeException.

Ссылка: неправильное ядро ​​Интервью на Java Ответы нашего партнера по JCG Питера Лоури из Vanilla Java .

Статьи по Теме: