#вопросы_с_собеседований
Что такое livelock?
Что такое livelock?
livelock – тип взаимной блокировки, при котором несколько потоков выполняют бесполезную работу, попадая в зацикленность при попытке получения каких-либо ресурсов. При этом их состояния постоянно изменяются в зависимости друг от друга. Фактической ошибки не возникает, но КПД системы падает до 0. Часто возникает в результате попыток предотвращения deadlock.
Реальный пример livelock, – когда два человека встречаются в узком коридоре и каждый, пытаясь быть вежливым, отходит в сторону, и так они бесконечно двигаются из стороны в сторону, абсолютно не продвигаясь в нужном им направлении.
Реальный пример livelock, – когда два человека встречаются в узком коридоре и каждый, пытаясь быть вежливым, отходит в сторону, и так они бесконечно двигаются из стороны в сторону, абсолютно не продвигаясь в нужном им направлении.
#вопросы_с_собеседований
В каком случае может быть потерян элемент в HashMap?
В каком случае может быть потерян элемент в HashMap?
Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals уже не найдет указанный ключ в списке элементов. Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.
#вопросы_с_собеседований
В чем проблема сериализации Singleton?
В чем проблема сериализации Singleton?
Проблема в том, что после десериализации мы получим другой объект. Таким образом, сериализация дает возможность создать Singleton еще раз, что недопустимо. Существует два способа избежать этого:
☕️ явный запрет сериализации;
☕️ определение метода с сигнатурой (default/public/private/protected/) Object readResolve() throws ObjectStreamException, назначением которого станет возврат замещающего объекта вместо объекта, на котором он вызван.
☕️ явный запрет сериализации;
☕️ определение метода с сигнатурой (default/public/private/protected/) Object readResolve() throws ObjectStreamException, назначением которого станет возврат замещающего объекта вместо объекта, на котором он вызван.
#вопросы_с_собеседований
В чем разница между interrupted() и isInterrupted()?
В чем разница между interrupted() и isInterrupted()?
Механизм прерывания работы потока в Java реализован с использованием внутреннего флага, известного как статус прерывания. Прерывание потока вызовом Thread.interrupt() устанавливает этот флаг. Методы Thread.interrupted() и isInterrupted() позволяют проверить, является ли поток прерванным.
Когда прерванный поток проверяет статус прерывания, вызывая статический метод Thread.interrupted(), статус прерывания сбрасывается.
Нестатический метод isInterrupted() используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
Когда прерванный поток проверяет статус прерывания, вызывая статический метод Thread.interrupted(), статус прерывания сбрасывается.
Нестатический метод isInterrupted() используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
#вопросы_с_собеседований
Сколько необходимо дополнительной памяти при вызове ArrayList.add()?
Сколько необходимо дополнительной памяти при вызове ArrayList.add()?
🕵️ Где программисту искать удаленную работу?
Рассмотрели 12 международных и российских площадок для поиска удалённой работы: ссылки, различия в механике поиска, плюсы и минусы.
https://proglib.io/sh/30rRSxjemG
Рассмотрели 12 международных и российских площадок для поиска удалённой работы: ссылки, различия в механике поиска, плюсы и минусы.
https://proglib.io/sh/30rRSxjemG
Если в массиве достаточно места для размещения нового элемента, то дополнительной памяти не требуется. Иначе происходит создание нового массива размером в 1,5 раза превышающим существующий (это верно для JDK выше 1.7, в более ранних версиях размер увеличения иной).
#вопросы_с_собеседований
Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?
Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?
Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.
#вопросы_с_собеседований
В чем разница между Collection и Stream?
В чем разница между Collection и Stream?
Коллекции позволяют работать с элементами по отдельности, тогда как стримы так делать не позволяют, но вместо этого предоставляют возможность выполнять функции над данными как над одним целым.
Также стоит отметить важность самой концепции сущностей: Collection - это прежде всего воплощение Структуры Данных. Например, Set не просто хранит в себе элементы, он реализует идею множества с уникальными элементами, тогда как Stream, это прежде всего абстракция необходимая для реализации конвеера вычислений, собственно поэтому, результатом работы конвеера являются те или иные Структуры Данных или же результаты проверок/поиска и т.п.
Также стоит отметить важность самой концепции сущностей: Collection - это прежде всего воплощение Структуры Данных. Например, Set не просто хранит в себе элементы, он реализует идею множества с уникальными элементами, тогда как Stream, это прежде всего абстракция необходимая для реализации конвеера вычислений, собственно поэтому, результатом работы конвеера являются те или иные Структуры Данных или же результаты проверок/поиска и т.п.
Starting Out with Java (2019)
Автор: Tony Gaddis
Данная книга представляет собой пошаговое введение в Java. Автор описывает процедурное программирование - структуры и методы - прежде чем начинать объектно-ориентированную парадигму, чтобы гарантировать, что студенты понимают фундаментальные концепции программирования и решения задач. Каждая глава содержит четкие и легко читаемые примеры кода, краткие и практические примеры из реальной жизни и множество упражнений.
Скачать книгу
Автор: Tony Gaddis
Данная книга представляет собой пошаговое введение в Java. Автор описывает процедурное программирование - структуры и методы - прежде чем начинать объектно-ориентированную парадигму, чтобы гарантировать, что студенты понимают фундаментальные концепции программирования и решения задач. Каждая глава содержит четкие и легко читаемые примеры кода, краткие и практические примеры из реальной жизни и множество упражнений.
Скачать книгу
Telegram
Книги для программистов (reserved)
Starting Out with Java (2019)
Автор: Tony Gaddis
Автор: Tony Gaddis
Programming Kotlin (2019)
Автор: Venkat Subramaniam
Программисты не просто так используют Kotlin, им это нравится. Даже Google признал его первоклассным языком для разработки под Android. С Kotlin вы можете смешивать императивный, функциональный и объектно-ориентированный стили программирования и получать выгоду от подхода, наиболее подходящего для рассматриваемой задачи. Работая с данной книгой, вы научитесь использовать многие возможности этого очень лаконичного, элегантного и выразительного языка с помощью простых для понимания примеров. Вы научитесь писать простые в обслуживании, высокопроизводительные приложения JVM и Android, работать с асинхронностью программ и многому другому.
Скачать книгу
Автор: Venkat Subramaniam
Программисты не просто так используют Kotlin, им это нравится. Даже Google признал его первоклассным языком для разработки под Android. С Kotlin вы можете смешивать императивный, функциональный и объектно-ориентированный стили программирования и получать выгоду от подхода, наиболее подходящего для рассматриваемой задачи. Работая с данной книгой, вы научитесь использовать многие возможности этого очень лаконичного, элегантного и выразительного языка с помощью простых для понимания примеров. Вы научитесь писать простые в обслуживании, высокопроизводительные приложения JVM и Android, работать с асинхронностью программ и многому другому.
Скачать книгу
Telegram
Книги для программистов (reserved)
Programming Kotlin (2019)
Автор: Venkat Subramaniam
Автор: Venkat Subramaniam
#вопросы_с_собеседований
Для чего используются ключевые слова volatile, synchronized, transient, native?
Для чего используются ключевые слова volatile, synchronized, transient, native?
volatile - этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!
synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.
Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.
Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
#вопросы_с_собеседований
Что такое Semaphore?
Что такое Semaphore?