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

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

20804 @javaproglib

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

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

    #вопросы_с_собеседований Что происходит, когда в потоке выбрасывается исключение? • Если исключение не поймано – поток «умирает» (переходит в состяние мёртв (dead)). • Если установлен обработчик непойманных исключений, то он возьмёт управление на себя. Thread.UncaughtExceptionHandler – интерфейс, определённый как вложенный интерфейс для других обработчиков, вызываемых, когда поток внезапно останавливается из-за непойманного исключения. В случае, если поток собирается остановиться из-за непойманного исключения, JVM проверяет его на наличие UncaughtExceptionHandler, используя Thread.getUncaughtExceptionHandler(), и если такой обработчик найдет, то вызовет у него метод uncaughtException(), передав этот поток и исключение в виде аргументов.
  • Библиотека джависта

    👨‍💻 Зарплаты архитекторов, которые работают с высокими нагрузками, сейчас достигают 350 тыс. рублей. Что нужно уметь, чтобы перейти в эту категорию и устроиться в ведущую IT-корпорацию? - Правильно использовать шаблоны: кеширование, реплицирование, шардирование, а также инструменты, такие как индексы, ClickHouse, Tarantool, RabbitMQ и Kafka, redis; - Обеспечивать отказоустойчивость веб-приложений даже при падении серверов; - Уметь создавать веб-приложения, которые легко масштабировать. 👉🏻 Справитесь ли вы с этими требованиям покажет полный тест — https://otus.pw/ZdJq/
  • Библиотека джависта

    Чистый код — практический подход

    После нескольких докладов о чистом коде (Clean Code) я решил обобщить в статье самое важное по этой теме. Поскольку в Интернете и так много постов и информации об этом, то, я думаю, еще одна статья,...

    Хабр
  • Реклама

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

    Глубокое погружение в Java Memory Model

    Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме. В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике....

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

    Ждем всех Java-разработчиков на бесплатном митапе от Росбанка при поддержке JUG Ru Group. 🗓 6 сентября, 19:00. Онлайн: https://bit.ly/3RdSgIR Офлайн: в деловом центре "Москва-Сити". Участники смогут посетить экскурсию по инновационному офису Росбанка. В программе: ✔Алексей Салаев — «Оптимизация запросов с использованием Spring cache и Bean scope» ✔ Семен Киреков — «Spring Data JPA. Save и границы его применения» ✔ Иван Пономарев — «Kafka streams testing: a deep dive» После каждого доклада вы сможете поучаствовать в дискуссии и задать вопросы спикерам. Автор лучшего вопроса получит удобный рюкзак от Росбанка 🎁 Участие бесплатное, нужно только зарегистрироваться: https://bit.ly/3RdSgIR
  • Библиотека джависта

    #вопросы_с_собеседований Как остановить поток? На данный момент в Java принят уведомительный порядок остановки потока (хотя JDK 1.0 и имеет несколько управляющих выполнением потока методов, например stop(), suspend() и resume() - в следующих версиях JDK все они были помечены как deprecated из-за потенциальных угроз взаимной блокировки). Для корректной остановки потока можно использовать метод класса Thread - interrupt(). Этот метод выставляет некоторый внутренний флаг-статус прерывания. В дальнейшем состояние этого флага можно проверить с помощью метода isInterrupted() или Thread.interrupted() (для текущего потока). Метод interrupt() также способен вывести поток из состояния ожидания или спячки. Т.е. если у потока были вызваны методы sleep() или wait() – текущее состояние прервется и будет выброшено исключение InterruptedException. Флаг в этом случае не выставляется. Схема действия при этом получается следующей: • Реализовать поток. • В потоке периодически проводить проверку статуса прерывания через вызов isInterrupted(). • Если состояние флага изменилось или было выброшено исключение во время ожидания/спячки, следовательно поток пытаются остановить извне. • Принять решение – продолжить работу (если по каким-то причинам остановиться невозможно) или освободить заблокированные потоком ресурсы и закончить выполнение. Возможная проблема, которая присутствует в этом подходе – блокировки на потоковом вводе-выводе. Если поток заблокирован на чтении данных - вызов interrupt() из этого состояния его не выведет. Решения тут различаются в зависимости от типа источника данных. Если чтение идет из файла – долговременная блокировка крайне маловероятна и тогда можно просто дождаться выхода из метода read(). Если же чтение каким-то образом связано с сетью – стоит использовать неблокирующий ввод-вывод из Java NIO. Второй вариант реализации метода остановки (а также и приостановки) – сделать собственный аналог interrupt(). Т.е. объявить в классе потока флаги – на остановку и/или приостановку и выставлять их путем вызова заранее определённых методов извне. Методика действия при этом остаётся прежней – проверять установку флагов и принимать решения при их изменении. Недостатки такого подхода. Во-первых, потоки в состоянии ожидания таким способом не «оживить». Во-вторых, выставление флага одним потоком совсем не означает, что второй поток тут же его увидит. Для увеличения производительности виртуальная машина использует кеш данных потока, в результате чего обновление переменной у второго потока может произойти через неопределенный промежуток времени (хотя допустимым решением будет объявить переменную-флаг как volatile).
  • Библиотека джависта

    Как написать свой первый автотест за 1 час? Посетить открытое занятие курса "Автоматизация тестирования на Java" от ребят из школы автоматизации QA.GURU бесплатное открытое занятие состоится 7-го сентября в 20:00 МСК. ❓Почему надо сходить: Для новичков: — Разработаем ваш первый автотест на поиск в Google —Расскажем о рынке QA. Кто, кому, за что и сколько платит? — Дадим домашнее задание и проверим его у всех участников. Для опытных: — Расскажем про актуальный фреймворк на Java — Покажем боевой проект с полной инфраструктурой (Web, API) — Сессия вопросов и ответов с QA Lead Занятие бесплатное — для участия вступайте в чат @qa_guru_chat — ссылка на занятие будет там.
  • Библиотека джависта

    Опрос «Библиотеки программиста» Прошло почти полгода с момента нашего опроса «💬📈 Что сейчас происходит с IT-индустрией и айтишниками?». По версиям респондентов (более 700) IT-отрасль ждала волна сокращений, массовая релокация, наплыв стартапов и трудности с заменой железа и ПО на отечественные аналоги. Общий прогноз звучал так: «Слишком много переменных, прогнозы от неутешительных до удовлетворительных» Насколько оправдался этот прогноз? Как изменилась ваша жизнь за последние полгода? ➡️ Пройти опрос
  • Библиотека джависта

    #вопросы_с_собеседований Существует ли способ решения проблемы race condition? Распространённые способы решения: • Использование локальной копии — копирование разделяемой переменной в локальную переменную потока. Этот способ работает только тогда, когда переменная одна и копирование производится атомарно (за одну машинную команду), использование volatile. • Синхронизация - операции над разделяемым ресурсом происходят в синхронизированном блоке (при использовании ключевого слова synchronized). • Комбинирование методов - вышеперечисленные способы можно комбинировать, копируя «опасные» переменные в синхронизированном блоке. С одной стороны, это снимает ограничение на атомарность, с другой — позволяет избавиться от слишком больших синхронизированных блоков. Очевидных способов выявления и исправления состояний гонки не существует. Лучший способ избавиться от гонок — правильное проектирование многозадачной системы.
  • Библиотека джависта

    Введение в DbChange JUnit расширение

    Простой и декларативный способ выполнять sql запросы в JUnit тестах. Введение Структура JUnit теста следует модели тестового сценария (test case): ПредУсловия (PreConditions) - это действия, которые...

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

    Практические примеры использования Stream API

    Всем привет! Решил написать статью с практическими примерами использования Stream API. В данной статье не будет теории - только хардкор и практические примеры. Поехали! В качестве "подопытного...

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

    Учебник по Java: введение в класс String Оттачиваем навык работы со строчками: создание, форматирование, конкатенация строк и самые часто используемые методы. https://proglib.io/sh/Va21eG9L4R Зеркало: proglib.tech/p/ucheb…22-08-26
  • Библиотека джависта

    Зачем нужно соединять Java-программу на компьютере и Arduino?

    Картинка rawpixel Любой энтузиаст, строящий свои проекты на базе Arduino, рано или поздно сталкивается с необходимостью тем или иным способом обеспечить взаимосвязь этой платы со своим компьютером....

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

    #вопросы_с_собеседований В чем заключаются различия между CyclicBarrier и CountDownLatch? CountDownLatch (замок с обратным отсчетом) предоставляет возможность любому количеству потоков в блоке кода ожидать до тех пор, пока не завершится определенное количество операций, выполняющихся в других потоках, перед тем как они будут «отпущены», чтобы продолжить свою деятельность. В конструктор CountDownLatch(int count) обязательно передается количество операций, которое должно быть выполнено, чтобы замок «отпустил» заблокированные потоки. Примером CountDownLatch из жизни может служить сбор экскурсионной группы: пока не наберется определенное количество человек, экскурсия не начнется. CyclicBarrier реализует шаблон синхронизации «Барьер». Циклический барьер является точкой синхронизации, в которой указанное количество параллельных потоков встречается и блокируется. Как только все потоки прибыли, выполняется опционное действие (или не выполняется, если барьер был инициализирован без него), и, после того, как оно выполнено, барьер ломается и ожидающие потоки «освобождаются». В конструкторы барьера CyclicBarrier(int parties) и CyclicBarrier(int parties, Runnable barrierAction) обязательно передается количество сторон, которые должны «встретиться», и, опционально, действие, которое должно произойти, когда стороны встретились, но перед тем когда они будут «отпущены». CyclicBarrier является альтернативой метода join(), который «собирает» потоки только после того, как они выполнились. CyclicBarrier похож на CountDownLatch, но главное различие между ними в том, что использовать «замок» можно лишь единожды - после того, как его счётчик достигнет нуля, а «барьер» можно использовать неоднократно, даже после того, как он «сломается».
  • Библиотека джависта

    #вопросы_с_собеседований Что такое FutureTask? FutureTask представляет собой отменяемое асинхронное вычисление в параллельном Java приложении. Этот класс предоставляет базовую реализацию Future, с методами для запуска и остановки вычисления, методами для запроса состояния вычисления и извлечения результатов. Результат может быть получен только когда вычисление завершено, метод получения будет заблокирован, если вычисление ещё не завершено. Объекты FutureTask могут быть использованы для обёртки объектов Callable и Runnable. Так как FutureTask реализует Runnable, его можно передать в Executor на выполнение.
  • Реклама

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

    🧑🏼‍🏫 Ментор в IT: для чего нужен и как его выбрать Отыскать действительно хорошего ментора – задача не из легких. Подскажем, по каким критериям его выбрать и как заинтересовать. 🔗 Основной сайт 🔗 Зеркало
  • Библиотека джависта

    #вопросы_с_собеседований Чем отличаются два интерфейса Runnable и Callable? • Интерфейс Runnable появился в Java 1.0, а интерфейс Callable был введен в Java 5.0 в составе библиотеки java.util.concurrent; • Классы, реализующие интерфейс Runnable для выполнения задачи должны реализовывать метод run(). Классы, реализующие интерфейс Callable - метод call(); • Метод Runnable.run() не возвращает никакого значения, Callable.call() возвращает объект Future, который может содержать результат вычислений; • Метод run() не может выбрасывать проверяемые исключения, в то время как метод call() может.
  • Библиотека джависта

    🔥Хардкорный тест по Java🔥 ⭕️Осторожно! Из-за этого курса можно стать супервостребованным Java-разработчиком! Пройди тест из 20 вопросов и проверь насколько ты готов к обучению на углубленном курсе - "Java Developer. Professional" от OTUS 🦸🏼‍♂️62 компании-партнера ждут, когда ты овладеешь этим мастерством. Проходя вступительный тест курса помни, большая сила — большая ответственность! 📌ПРОЙТИ ТЕСТ