#вопросы_с_собеседований
Что такое deadlock?
Что такое deadlock?
Взаимная блокировка (deadlock)
- явление, при котором все потоки находятся в режиме ожидания. Происходит, когда достигаются состояния:1. взаимного исключения: по крайней мере один ресурс занят в режиме неделимости и, следовательно, только один поток может использовать ресурс в любой данный момент времени.
2. удержания и ожидания: поток удерживает как минимум один ресурс и запрашивает дополнительные ресурсов, которые удерживаются другими потоками.
3. отсутствия предочистки: операционная система не переназначивает ресурсы: если они уже заняты, они должны отдаваться удерживающим потокам сразу же.
4. цикличного ожидания: поток ждёт освобождения ресурса, другим потоком, который в свою очередь ждёт освобождения ресурса заблокированного первым потоком.
Простейший способ избежать взаимной блокировки – не допускать цикличного ожидания. Этого можно достичь, получая мониторы разделяемых ресурсов в определённом порядке и освобождая их в обратном порядке.
Как проверить, удерживает ли поток монитор определённого ресурса?
Метод
Метод
Thread.holdsLock(lock)
возвращает true
, когда текущий поток удерживает монитор у определённого объекта.#вопросы_с_собеседований
Для чего используются ключевые слова volatile, synchronized, transient, native?
Для чего используются ключевые слова volatile, synchronized, transient, native?
volatile
- этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!synchronized
- это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.Ключевые слова
transient
и native
к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.#вопросы_с_собеседований
В чём заключаются различия между java.util.concurrent.Atomic.compareAndSwap() и java.util.concurrent.Atomic.weakCompareAndSwap().
В чём заключаются различия между java.util.concurrent.Atomic.compareAndSwap() и java.util.concurrent.Atomic.weakCompareAndSwap().
•
•
•
weakCompareAndSwap()
не создает memory barrier
и не дает гарантии happens-before
;•
weakCompareAndSwap()
сильно зависит от кэша/CPU
, и может возвращать false
без видимых причин;•
weakCompareAndSwap()
, более легкая, но поддерживаемая далеко не всеми архитектурами и не всегда эффективная операция.#вопросы_с_собеседований
Что такое «потоки-демоны»?
Что такое «потоки-демоны»?
Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой частью программы. Если какой-либо процесс может выполняться на фоне работы основных потоков выполнения и его деятельность заключается в обслуживании основных потоков приложения, то такой процесс может быть запущен как поток-демон с помощью метода setDaemon(boolean value), вызванного у потока до его запуска. Метод boolean isDaemon() позволяет определить, является ли указанный поток демоном или нет. Базовое свойство потоков-демонов заключается в возможности основного потока приложения завершить выполнение потока-демона (в отличие от обычных потоков) с окончанием кода метода main(), не обращая внимания на то, что поток-демон еще работает.
👎 6 признаков того, что вы плохой программист
В большинстве случаев мы знаем, что нам следует делать, но не делаем. Мы думаем, что сделаем это позже, но «позже» никогда не наступает. Это первый шаг к тому, чтобы стать плохим программистом.
https://proglib.io/sh/3QAMoJsY6h
В большинстве случаев мы знаем, что нам следует делать, но не делаем. Мы думаем, что сделаем это позже, но «позже» никогда не наступает. Это первый шаг к тому, чтобы стать плохим программистом.
https://proglib.io/sh/3QAMoJsY6h
☕️ Основы Java за 30 минут: самоучитель для начинающих
В этой статье мы рассмотрим основные особенности языка Java, познакомимся с его философией и разберемся с причинами его популярности, а также напишем пару простеньких программ, чтобы изучить его синтаксис и подход к написанию кода.
https://proglib.io/sh/69n5jeLJ8A
В этой статье мы рассмотрим основные особенности языка Java, познакомимся с его философией и разберемся с причинами его популярности, а также напишем пару простеньких программ, чтобы изучить его синтаксис и подход к написанию кода.
https://proglib.io/sh/69n5jeLJ8A
Java All-in-One For Dummies (2020)
Автор: Doug Lowe
Количество страниц: 960
Если вы всегда хотели научиться программировать на Java, но не знали, с чего начать, эта книга вам подойдет. Она послужит не только учебником, но и сопровождающим в работе справочным материалом, где всегда можно найти ответ на любой вопрос о тонкостях языка.
Скачать книгу
Автор: Doug Lowe
Количество страниц: 960
Если вы всегда хотели научиться программировать на Java, но не знали, с чего начать, эта книга вам подойдет. Она послужит не только учебником, но и сопровождающим в работе справочным материалом, где всегда можно найти ответ на любой вопрос о тонкостях языка.
Скачать книгу
Telegram
Книги для программистов (reserved)
Java All-in-One For Dummies (2020)
Автор: Doug Lowe
Автор: Doug Lowe
В чём различия между volatile и Atomic переменными?
volatile
принуждает использовать единственный экземпляр переменной, но не гарантирует атомарность. Например, операция count++
не станет атомарной просто потому, что count
объявлена volatile
. C другой стороны class AtomicInteger
предоставляет атомарный метод для выполнения таких комплексных операций атомарно, например getAndIncrement()
– атомарная замена оператора инкремента, его можно использовать, чтобы атомарно увеличить текущее значение на один. Похожим образом сконструированы атомарные версии и для других типов данных.Начинай с PMI.
Программа развития в IT в международной компании!
За полтора года на программе IT Inkompass ты изучишь ключевые кейсы в анализе данных бизнес-процессов и настройке дашбордов . Под руководством ментора ты будешь заниматься сбором и обработкой данных, разработкой функций и упаковкой их в микросервисы. Успей подать заявку – https://vk.cc/c5O1Jy
Что мы предлагаем?
· заработная плата — 80 000 рублей, ДМС и компенсация питания;
· длительность программы развития – 18 месяцев;
· оформление в штат компании сразу на старте программы;
· возможность работать как в классном современном офисе, так и удаленно.
Спеши подать заявку: https://vk.cc/c5O1Jy
Программа развития в IT в международной компании!
За полтора года на программе IT Inkompass ты изучишь ключевые кейсы в анализе данных бизнес-процессов и настройке дашбордов . Под руководством ментора ты будешь заниматься сбором и обработкой данных, разработкой функций и упаковкой их в микросервисы. Успей подать заявку – https://vk.cc/c5O1Jy
Что мы предлагаем?
· заработная плата — 80 000 рублей, ДМС и компенсация питания;
· длительность программы развития – 18 месяцев;
· оформление в штат компании сразу на старте программы;
· возможность работать как в классном современном офисе, так и удаленно.
Спеши подать заявку: https://vk.cc/c5O1Jy
Что произойдет в результате компиляции кода?
Anonymous Quiz
64%
Ошибка компиляции в строке 4.
5%
Ошибка компиляции в строке 5.
7%
Ошибка компиляции в строке 6.
24%
Код скомпилируется успешно
Рассказываем, как пройти один курс и зарабатывать под 100 000 ₽!
Сейчас в мире много возможностей и интересных, высокооплачиваемых профессий, в некоторых даже новички удаленно зарабатывают от 95 000₽, а после двух лет работы — до 340 000 ₽.
Одна из таких профессий — Java-разработчик!
Стать таким специалистом можно, например, в Skypro. Там после обучения выдают диплом государственного образца и помогают с трудоустройством: подбирают вакансии, натаскивают на собеседования с HR, подсказывают с резюме. Бонусом каждый выпускник забирает с собой портфолио с двумя готовыми проектами.
Вы сможете создавать собственные финансовые приложения, социальные сети и сайты.
Переходи по ссылке с уникальным предложением в честь старта потока и освой востребованную профессию с дополнительной скидкой 10% по промокоду «УЧИСЬ» - https://go.skyeng.ru/javaproglib_skypro
Сейчас в мире много возможностей и интересных, высокооплачиваемых профессий, в некоторых даже новички удаленно зарабатывают от 95 000₽, а после двух лет работы — до 340 000 ₽.
Одна из таких профессий — Java-разработчик!
Стать таким специалистом можно, например, в Skypro. Там после обучения выдают диплом государственного образца и помогают с трудоустройством: подбирают вакансии, натаскивают на собеседования с HR, подсказывают с резюме. Бонусом каждый выпускник забирает с собой портфолио с двумя готовыми проектами.
Вы сможете создавать собственные финансовые приложения, социальные сети и сайты.
Переходи по ссылке с уникальным предложением в честь старта потока и освой востребованную профессию с дополнительной скидкой 10% по промокоду «УЧИСЬ» - https://go.skyeng.ru/javaproglib_skypro
#вопросы_с_собеседований
Чем отличается работа метода wait() с параметром и без параметра?
Чем отличается работа метода wait() с параметром и без параметра?
wait() без параметров освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/ notifyAll(),
с параметрами заставит поток ожидать заданное количество времени или вызова notify()/ notifyAll().
с параметрами заставит поток ожидать заданное количество времени или вызова notify()/ notifyAll().
#вопросы_с_собеседований
Что такое double checked locking Singleton?
Что такое double checked locking Singleton?