Java Interview Review
Популярные вопросы и ответы с собеседований на Java-разработчика. Канал для Android-разработчиков @AndroidSobes Связаться с нами @SobesAdmin http://itsobes.ru/
نمایش بیشترکشور مشخص نشده استزبان مشخص نشده استدسته بندی مشخص نشده است
7 423
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-330 روز
- مشترکین
- پوشش پست
- ER - نسبت تعامل
در حال بارگیری داده...
معدل نمو المشتركين
در حال بارگیری داده...
Что такое synchronized?
Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется
this
, статического – .class
текущего класса.
Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока synchronized
на одном и том же объекте. Такая блокировка называется intrinsic lock или monitor lock, подробно рассматривается в Java Concurrency in Practice 2.3.1.
Блок synchronized
также необходим для использования методов wait, notify, notifyAll.
#Язык
#МногопоточностьPhoto unavailableShow in Telegram
📍Что нужно знать начинающему разработчику на Java?
Приходи на практический вебинар по Java для новичков
👉 https://otus.pw/of42/
📌 Что ждет на занятии?
- Поговорим о месте реляционных баз данных в архитектуре информационных систем.
- Рассмотрим основные компоненты и возможности РСУБД на примере PostgreSQL.
- Сделаем обзор основных технологий по работе с реляционными БД в Java (JDBC, JPA/Hibernate, Spring Data и др.)
❗️ Еще больше навыков и оплачиваема стажировка ждет тебя на специализации «Java-разработчик» от онлайн-платформы OTUS.
👉 Регистрируйтесь на занятие
Чем отличаются checked и unchecked исключения?
Вопрос формулируют по-разному, суть вопроса – объяснение иерархии классов исключений. Подробно описано в документации.
Исключения бывают checked и unchecked. Checked требуется указывать в сигнатуре метода в разделе
throws
; перехватывать или добавлять в throws
в вызывающем его методе. Unchecked можно добавить, но не обязательно, перехватывать не обязательно даже если указана в throws
.
🔘 Throwable
– базовый класс для всего что может быть использовано с оператором throw
и в конструкции try-catch
🔘 RuntimeException
– «нормальные» unchecked-исключения
🔘 Error
– unchecked исключения, которые означают «серьезные проблемы» приложения. Не должны обрабатываться (хотя технически можно). Теоретически JVM может находиться в невалидном состоянии и не давать больше никаких гарантий
🔘 Exception
(кроме RuntimeException
) – checked исключения
#ЯзыкКакие бывают модификаторы?
🔘 Модификаторы доступа
private
, protected
, public
(рассмотрим подробнее в разделе #Классы)
🔘 Модификаторы для многопоточности synchronized
и volatile
(подробнее чуть позже)
🔘 static
(рассмотрим подробнее в разделе #Классы)
🔘 final
🔘 abstract
(рассмотрим подробнее в разделе #Классы)
🔘 native
– реализация метода скрыта внутри JVM, нельзя указывать в пользовательском коде
🔘 transient
– поле будет пропущено при сериализации
🔘 strictfp
– самый экзотический, ограничивает точность вычисления для переменной с плавающей точкой до стандарта IEEE. Нужно для переносимости между платформами.
#ЯзыкPhoto unavailableShow in Telegram
Основы Java за 14 дней вместе с наставником – практикующим разработчиком.
10 учебных модулей, 62 урока с практикой в браузере, вебинары и лайвкодинг-сессия. Не важно, сколько вам лет, какое у вас образование и кем вы работаете сейчас.
Начинаем 20 сентября. Занимайте место в группе!
Какие существуют литералы?
Литерал – последовательность символов, обозначающая значение примитивного типа (или строки).
🔘 Целочисленные (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
.
Все нюансы описаны в официальной документации.
#ЯзыкPhoto unavailableShow in Telegram
Weekend Offer для Java-разработчиков в команду VK Звонков
В команде вы сможете прокачивать свои навыки, участвовать в разработке новых фич, развивать и улучшать существующие решения, решать задачи бесперебойной передачи данных в сложных сетевых условиях.
Если вам это интересно, успевайте подать заявку до 9 сентября, где вам подробно расскажут о процессе работы и всех задачах, которые предстоит выполнять, а также проведут интервью и выберут лучших кандидатов, которые будут совершенствовать VK Звонки – универсальный и эффективный инструмент для общения.
Узнать подробнее и подать заявку можно по ссылке
Чем отличается final finally finalize? (2/2)
finally
– часть языковой конструкции try-catch-finally.
Любое исключение, выброшенное из блока try
переводит исполнение в самый соответствующий ему catch
(при наличии). Этим продиктована необходимость располагать блоки catch
в строгом порядке, от типа исключения-наследника, к родителю. В случае multicatch тот же порядок должен соблюдаться и внутри одного catch. Больше примеров про порядок.
После выполнится блок finally
. Выполняется он в любом случае, было исключение или нет. Типичное использование – освобождение ресурсов, обязательные завершающие действия.
Для требующих финализации классов («ресурсов») добавляется интерфейс AutoCloseable
, повторяющийся код блока final
выносится в метод close
и вызывается неявно в конце try-with-resources. Если в этой конструкции присутствует и явный final
, он будет выполнен после.
#ЯзыкЧем отличается final finally finalize? (1/2)
Тем, что это даже синтаксически разные вещи. Как и вопрос о методах Object, это способ начать разговор.
finalize
– метод-финализатор из Object
, мы уже рассмотрели в предыдущих постах.
final
– модификатор, который применяется к переменным, полям, методам и классам. Переменная или поле становится неизменяемым и требует инициализации. Финальный метод нельзя переопределить в наследниках. Финальный класс не может иметь наследников вообще. Используется для создания хорошего (Effective Java Item 15) API по принципу наименьших привилегий.
Когда в методе используется локальная переменная внешней области видимости, она обязана быть effectively final. В этом случае ключевое слово final необязательно, но значение всё равно не должно меняться.
#Язык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
#Многопоточностьیک طرح متفاوت انتخاب کنید
طرح فعلی شما تنها برای 5 کانال تجزیه و تحلیل را مجاز می کند. برای بیشتر، لطفا یک طرح دیگر انتخاب کنید.