Обложка канала

Библиотека джависта. Страница 48

20804 @javaproglib

Полезные материалы по всему, что может быть полезно разработчику на Java.

  • Библиотека джависта

    #вопросы_с_собеседований Что такое livelock? livelock – тип взаимной блокировки, при котором несколько потоков выполняют бесполезную работу, попадая в зацикленность при попытке получения каких-либо ресурсов. При этом их состояния постоянно изменяются в зависимости друг от друга. Фактической ошибки не возникает, но КПД системы падает до 0. Часто возникает в результате попыток предотвращения deadlock. Реальный пример livelock, – когда два человека встречаются в узком коридоре и каждый, пытаясь быть вежливым, отходит в сторону, и так они бесконечно двигаются из стороны в сторону, абсолютно не продвигаясь в нужном им направлении.
  • Библиотека джависта

    ♨️Задумываешься начать карьеру в IT в качестве Java-разработчика? 🎯 Испытай себя в этом деле на открытом уроке 22 августа в 20:00 «Элементы формальной логики. Базовые структуры данных в языке Java» в OTUS. Вместе с сертифицированным Java-разработчиком Евгением Непомнящим познакомимся с основами алгоритмов и булевой алгебры. В процессе мы изучим базовые структуры данных языка Java: массивы, списки и словари. 📚Занятие проходит в рамках буткемпа «Java Developer» для тех, кто хочет за 3 месяца освоить профессию Java-разработчика. 📌Запишитесь на урок: https://otus.pw/j5Pv/
  • Библиотека джависта

    #вопросы_с_собеседований Почему методы wait() и notify() вызываются только в синхронизированном блоке? Монитор надо захватывать в явном виде (через synchronized-блок), потому что методы wait() и notify() не синхронизированы.
  • Реклама

  • Библиотека джависта

    #вопросы_с_собеседований В чем разница между notify() и notifyAll()? Дело в том, что «висеть» на методе wait() одного монитора могут сразу несколько потоков. При вызове notify() только один из них выходит из wait() и пытается захватить монитор, а затем продолжает работу со следующего после wait() оператора. Какой из них выйдет - заранее неизвестно. А при вызове notifyAll(), все висящие на wait() потоки выходят из wait(), и все они пытаются захватить монитор. Понятно, что в любой момент времени монитор может быть захвачен только одним потоком, а остальные ждут своей очереди. Порядок очереди определяется планировщиком потоков Java.
  • Библиотека джависта

  • Библиотека джависта

    🔥Меня уволили: 8 способов справиться с потерей работы и найти новую Увольнение – это всегда стресс. А в нынешнее тяжелое время и вовсе «конец света». Расскажем, как не опускать руки и начать новый эпизод в карьере. https://proglib.io/sh/9qAhBenSNT
  • Библиотека джависта

    #вопросы_с_собеседований Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод? Да, можно создавать новые экземпляры класса, так как статические поля не принадлежат к экземплярам класса.
  • Библиотека джависта

    В каких состояниях может находиться поток? Потоки могут находиться в одном из следующих состояний: • Новый (New). После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод start(). В этом состоянии поток не считается живым. • Работоспособный (Runnable). Поток переходит в состояние Работоспособный, когда вызывается метод start(). Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым. • Работающий (Running). Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент. • Живой, но не работоспособный (Alive, but not runnable). Поток может быть живым, но не работоспособным по нескольким причинам: ○ Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод wait(). Вызов notify() или notifyAll() может перевести поток из состояния Ожидания в состояние Работоспособный. ○ Сон (Sleeping). Метод sleep() переводит поток в состояние Сна на заданный промежуток времени в миллисекундах. ○ Блокировка (Blocked). Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен. ○ Мёртвый (Dead). Поток считается мёртвым, когда его метод run() полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван метод start().
  • Библиотека джависта

    👍 Как правильно писать сообщения коммитов в GIT, чтобы всем было хорошо Правильно написанные сообщения к коммитам в Git помогают сделать проект с открытым или закрытым исходным кодом удобным для дальнейшей доработки и поддержки. В этой статье вы познакомитесь с различными стратегиями написания хороших сообщений и их использования для оптимизации процесса разработки. 🔗 Основной сайт 🔗 Зеркало
  • Библиотека джависта

    ☘️Хардкорный тест из 21 вопроса только для тех, кто уже знает и любит Java и хочет освоить Framework Spring. 🚀Если сможете сдать — пройдёте на продвинутый курс для разработчиков по спец.цене. ⏰ Время прохождения теста ограничено 30 минут 👉🏻ПРОЙТИ ТЕСТ: https://otus.pw/sony/
  • Библиотека джависта

    #вопросы_с_собеседований Какие существуют способы синхронизации в Java? Системная синхронизация с использованием wait()/notify(). Поток, который ждет выполнения каких-либо условий, вызывает у этого объекта метод wait(), предварительно захватив его монитор. На этом его работа приостанавливается. Другой поток может вызвать на этом же самом объекте метод notify() (опять же, предварительно захватив монитор объекта), в результате чего, ждущий на объекте поток «просыпается» и продолжает свое выполнение. В обоих случаях монитор надо захватывать в явном виде, через synchronized-блок, потому как методы wait()/notify() не синхронизированы! • Системная синхронизация с использованием join(). Метод join(), вызванный у экземпляра класса Thread, позволяет текущему потоку остановиться до того момента, как поток, связанный с этим экземпляром, закончит работу. • Использование классов из пакета java.util.concurrent, который предоставляет набор классов для организации межпоточного взаимодействия. Примеры таких классов - Lock, Semaphore и пр.. Концепция данного подхода заключается в использовании атомарных операций и переменных.
  • Библиотека джависта

    #вопросы_с_собеседований Дайте определение понятию «синхронизация». Синхронизация - это процесс, который позволяет выполнять потоки параллельно. В Java все объекты имеют одну блокировку, благодаря которой только один поток одновременно может получить доступ к критическому коду в объекте. Такая синхронизация помогает предотвратить повреждение состояния объекта. Если поток получил блокировку, ни один другой поток не может войти в синхронизированный код, пока блокировка не будет снята. Когда поток, владеющий блокировкой, выходит из синхронизированного кода, блокировка снимается. Теперь другой поток может получить блокировку объекта и выполнить синхронизированный код. Если поток пытается получить блокировку объекта, когда другой поток владеет блокировкой, поток переходит в состояние Блокировки до тех пор, пока блокировка не снимется.
  • Библиотека джависта

    🔥 Бесплатная Live coding сессия, где будем решать задачу с собеседования в международную FinTech компанию В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress. На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills: — Структурируешь знания по принципам SOLID — Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ — Подготовишься к техническому интервью с этапом Live coding 🚀 Стартуем 18 августа в 19.00 по МСК Регистрируйся бесплатно: https://cutt.ly/BZ0wv09
  • Библиотека джависта

    #вопросы_с_собеседований В чём заключается разница между методами start() и run()? Несмотря на то, что start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит, в случае, когда вы вызываете метод start().
  • Библиотека джависта

    💣 Хотите научиться применять SOLID-принципы? 📌 Тогда приглашаем вас на открытый урок «Обработка исключений и SOLID» 11 августа в 20:00 мск. Вместе Евегнием Тюменцевым, директором компании по разработке ПО, мы: 🔸 Разберем, какие практики обработки исключений препятствуют повторному использованию кода. 🔸 Поймем, как можно нарушить инкапсуляцию с помощью исключений, и причем здесь SOLID. 🔸 Обсудим альтернативы обработки исключений. 🔸 Рассмотрим подходы к обработке исключений, которые помогают писать расширяемый код. 🚀 Урок входит в программу онлайн-курса «Архитектура и шаблоны проектирования» от OTUS. Курс даст практическую основу начинающим архитекторам и разработчикам, которые стремятся повысить свой профессиональный уровень. 🟢 Чтобы участвовать, пройдите вступительный тест
  • Реклама

  • Библиотека джависта

    Каким образом можно создать поток? • Создать потомка класса Thread и переопределить его метод run(); • Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Эти интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run(). • Вызвать метод submit() у экземпляра класса реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
  • Библиотека джависта

    🔥Освой востребованную профессию Java-разработчика с нуля до Junior+ за 3 месяца! OTUS запускает набор на новый запуск буткемпа «Java Developer»! Буткемп «Java Developer»! от OTUS — это онлайн- курс с менторами, интенсивное обучение по ускоренной методике, построенное на вебинарах 4 дня в неделю с ведущими специалистами престижных IT-компаний. А еще много-много практики. У нас: — индивидуальные сессии с карьерным специалистом — комплексная поддержка менторов — поддержка комьюнити — проектная работа и наполнение портфолио После успешного обучения у вас будет достаточно навыков, чтобы претендовать на среднюю по рынку зарплату в 105 тысяч рублей. 📌Оставьте заявку и присоединяйтесь к группе по спец.цене: https://otus.pw/7ktz/ Протестируйте процесс обучения заранее. Ждем на бесплатных открытых уроках! 08 августа в 20:00 - "Структура программы на Java. Примитивные типы." 22 августа в 20:00 - "Элементы формальной логики. Базовые структуры данных в языке Java."
  • Библиотека джависта

    #вопросы_с_собеседований Что такое «зелёные потоки» и есть ли они в Java? Зелёные (легковесные) потоки(green threads) - потоки эмулируемые виртуальной машиной или средой исполнения. Создание зелёного потока не подразумевает под собой создание реального потока ОС. Виртуальная машина Java берёт на себя заботу о переключении между разными green threads, а сама машина работает как один поток ОС. Это даёт несколько преимуществ. Потоки ОС относительно дороги в большинстве POSIX-систем. Кроме того, переключение между native threads гораздо медленнее, чем между green threads. Это всё означает, что в некоторых ситуациях green threads гораздо выгоднее, чем native threads. Система может поддерживать гораздо большее количество green threads, чем потоков OС. Например, гораздо практичнее запускать новый green thread для нового HTTP-соединения к веб-серверу, вместо создания нового native thread. Однако есть и недостатки. Самый большой заключается в том, что вы не можете исполнять два потока одновременно. Поскольку существует только один native thread, только он и вызывается планировщиком ОС. Даже если у вас несколько процессоров и несколько green threads, только один процессор может вызывать green thread. И всё потому, что с точки зрения планировщика заданий ОС всё это выглядит одним потоком. Начиная с версии 1.2 Java поддерживает native threads, и с тех пор они используются по умолчанию.