Java Interview Review (@javasobes) के नवीनतम पोस्ट टेलीग्राम पर

Java Interview Review टेलीग्राम पोस्ट

Java Interview Review
यह टेलीग्राम चैनल निजी है।
Популярные вопросы и ответы с собеседований на Java-разработчика.

Канал для Android-разработчиков @AndroidSobes

Связаться с нами @SobesAdmin

http://itsobes.ru/
7,563 सदस्य
17 तस्वीरें
अंतिम अपडेट 11.03.2025 07:43

Java Interview Review द्वारा टेलीग्राम पर साझा की गई नवीनतम सामग्री

Java Interview Review

13 Jan, 10:52


The owner of this channel has been inactive for the last 11 months. If they remain inactive for the next 19 days, they may lose their account and admin rights in this channel. The contents of the channel will remain accessible for all users.
Java Interview Review

17 Sep, 09:01

63,747

Что такое synchronized?

Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется this, статического – .class текущего класса.

Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока synchronized на одном и том же объекте. Такая блокировка называется intrinsic lock или monitor lock, подробно рассматривается в Java Concurrency in Practice 2.3.1.

Блок synchronized также необходим для использования методов wait, notify, notifyAll.

#Язык
#Многопоточность
Java Interview Review

14 Sep, 14:00

54,757

Чем отличаются checked и unchecked исключения?

Вопрос формулируют по-разному, суть вопроса – объяснение иерархии классов исключений. Подробно описано в документации.

Исключения бывают checked и unchecked. Checked требуется указывать в сигнатуре метода в разделе throws; перехватывать или добавлять в throws в вызывающем его методе. Unchecked можно добавить, но не обязательно, перехватывать не обязательно даже если указана в throws.

🔘 Throwable – базовый класс для всего что может быть использовано с оператором throw и в конструкции try-catch
🔘 RuntimeException – «нормальные» unchecked-исключения
🔘 Error – unchecked исключения, которые означают «серьезные проблемы» приложения. Не должны обрабатываться (хотя технически можно). Теоретически JVM может находиться в невалидном состоянии и не давать больше никаких гарантий
🔘 Exception (кроме RuntimeException) – checked исключения

#Язык
Java Interview Review

13 Sep, 14:00

42,378

Какие бывают модификаторы?

🔘 Модификаторы доступа private, protected, public (рассмотрим подробнее в разделе #Классы)
🔘 Модификаторы для многопоточности synchronized и volatile (подробнее чуть позже)
🔘 static (рассмотрим подробнее в разделе #Классы)
🔘 final
🔘 abstract (рассмотрим подробнее в разделе #Классы)
🔘 native – реализация метода скрыта внутри JVM, нельзя указывать в пользовательском коде
🔘 transient – поле будет пропущено при сериализации
🔘 strictfp – самый экзотический, ограничивает точность вычисления для переменной с плавающей точкой до стандарта IEEE. Нужно для переносимости между платформами.

#Язык
Java Interview Review

08 Sep, 14:00

30,670

Какие существуют литералы?

Литерал – последовательность символов, обозначающая значение примитивного типа (или строки).

🔘 Целочисленные (Integer). Возможные форматы: 2019, 1__000_000 (с Java 7), 10048L (можно l, но будет путаться с 1), 0xfd12aa, 0b1011101, 07654321.

🔘 С плавающей точкой (floating-point). Возможные форматы: 123.4, 56.7e8, .07, 42F, 1.4D (избыточно, по умолчанию и так double).

🔘 Символы и строки. Символ (char) – в одинарных кавычках: 'R'. Спецсимволы пишутся с бэкслешем: '\n'. Любой символ можно представлять в виде escape-последовательности: '\u00F1'. Строковый литерал – последовательность символов в двойных кавычках: "Blabla". Для символов строки действуют те же правила.

🔘 Логические (boolean). true и false.

🔘 Специальный литерал null.

Все нюансы описаны в официальной документации.

#Язык
Java Interview Review

06 Sep, 14:00

20,071

Чем отличается final finally finalize? (2/2)

finally – часть языковой конструкции try-catch-finally.

Любое исключение, выброшенное из блока try переводит исполнение в самый соответствующий ему catch (при наличии). Этим продиктована необходимость располагать блоки catch в строгом порядке, от типа исключения-наследника, к родителю. В случае multicatch тот же порядок должен соблюдаться и внутри одного catch. Больше примеров про порядок.

После выполнится блок finally. Выполняется он в любом случае, было исключение или нет. Типичное использование – освобождение ресурсов, обязательные завершающие действия.

Для требующих финализации классов («ресурсов») добавляется интерфейс AutoCloseable, повторяющийся код блока final выносится в метод close и вызывается неявно в конце try-with-resources. Если в этой конструкции присутствует и явный final, он будет выполнен после.

#Язык
Java Interview Review

02 Sep, 14:02

17,491

Чем отличается final finally finalize? (1/2)

Тем, что это даже синтаксически разные вещи. Как и вопрос о методах Object, это способ начать разговор.

finalize – метод-финализатор из Object, мы уже рассмотрели в предыдущих постах.

final – модификатор, который применяется к переменным, полям, методам и классам. Переменная или поле становится неизменяемым и требует инициализации. Финальный метод нельзя переопределить в наследниках. Финальный класс не может иметь наследников вообще. Используется для создания хорошего (Effective Java Item 15) API по принципу наименьших привилегий.

Когда в методе используется локальная переменная внешней области видимости, она обязана быть effectively final. В этом случае ключевое слово final необязательно, но значение всё равно не должно меняться.

#Язык
Java Interview Review

01 Sep, 07:01

15,034

wait, notify, notifyAll

Часто этот вопрос формулируется как задача Producer-сonsumer. Эту задачу и практические задачи на многопоточность вообще при возможности лучше реализовывать на высокоуровневых примитивах синхронизации. Другой подход – воспользоваться также низкоуровневой, но оптимистической блокировкой на compareAndSet. Но обычно использование notify/wait (пессимистическая блокировка) – условие этого задания, то есть требуется реализовать уже существую BlockingQueue.

Эти методы вместе с synchronized – самый низкий уровень пессимистических блокировок в Java, использующийся внутри реализации примитивов синхронизации. Еще с Java 5 в непосредственном использовании этих методов нет необходимости, но теоретические знания всё еще часто спрашивают на интервью.

Чтобы вызывать эти методы у объекта, необходимо чтобы был захвачен его монитор (т.е. нужно быть внутри synchronized-блока на этом объекте). В противном случае будет выброшено IllegalMonitorStateException. Так что для полного ответа нужно понимать, как работает monitor lock (блок synchronized).

Вызов wait тормозит текущий поток на ожидание на этом объекте и отпускает его монитор. Исполнение продолжится, когда другой поток вызовет notify и отпустит блокировку монитора. Если на объекте ожидают несколько потоков, notify разбудит один случайный, notifyAll - все сразу.

В теории, ожидание wait может быть прервано без вызова notify, по желанию JVM (spurious wakeup). На практике это бывает крайне редко, но нужно страховаться и после вызова wait добавлять дополнительную проверку условия завершения ожидания.

Еще два нештатных случая завершения wait – прерывание потока извне и таймаут ожидания. В случае прерывания выбрасывается InterruptedException. Для таймаута нужно указать время ожидания параметрами метода wait. Значение 0 проигнорируется.

Различные проблемы реализации блокировок рассмотрены в Java Concurrency in Practice 14.1.3, 14.2. Для желающих разобраться, как блокировки работают в кишках JVM, написана статья на хабре.

#МетодыObject
#Многопоточность
Java Interview Review

29 Aug, 14:02

12,490

finalize

Метод придуман для минимизации риска утечки внешних ресурсов. Может быть вызван виртуальной машиной при сборке мусора (добавляя при этом для нее избыточную нагрузку). Это не то же самое, что деструктор в C++.

Есть только гарантии, что метод не будет вызван пока есть ссылки на объект, и что не будет вызван больше одного раза. Даже то, что вызов будет вообще – не факт. Исполнять будет неизвестно какой, но не синхронизированный поток. Исключения проигнорируются.

С давних пор использовать финализаторы не рекомендуется (Effective Java Item 7), а с Java 9 этот метод помечен как deprecated. Вместо финализатора всегда стоит воспользоваться try/finally, try-with-resource или более специализированными классами пакета java.lang.ref.

#МетодыObject
Java Interview Review

26 Aug, 14:03

12,332

toString

Строковое представление экземпляра. По умолчанию возвращает "ПолноеИмяКласса@хэшВ16тиричномВиде" (например "java.lang.Object@1a23b4f"). Часть после @ – не адрес в памяти, так что умолчательная реализация почти не несет практической пользы. Полезно добавлять нормальную реализацию даже если не необходимо в логике программы – поможет в отладке. Готовый вызов x.toString() с проверкой на null уже реализован в String.valueOf(x).

#МетодыObject
#Строки