Community Day на Joker 2023 🔥
Joker 2023 совсем скоро, и у вас еще есть возможность купить билет со скидкой по промокоду SENIORJAVIST
.
Но если вы не готовы купить билет на конференцию, то присоединяйтесь к бесплатному Community Day 10 октября.
Этот день такой же насыщенный, как и другие дни конференции:
✔ Доклады о производительности, эволюции Java, архитектуре и Machine Learning.
✔ Воркшоп «Пишем на Idiomatic Kotlin».
✔ Дискуссии со спикерами и участниками после докладов.
✔ Чат с коллегами со всего мира.
➡️ Для участия достаточно зарегистрироваться.
Увидимся на Joker 2023!
Реклама, ООО «Джуг Ру Груп», ИНН 7801341446, erid 2RanykjNUz4
DoubleAdder
DoubleAdder — это класс из пакета java.util.concurrent, предназначенный для эффективного параллельного суммирования значений типа double.DoubleAdder
оптимизирован для многопоточных приложений, когда нужно подсчитать сумму или другое агрегатное значение из большого числа потоков.
Преимущества:
— Высокая скорость за счет разделения на сегменты и отсутствия блокировок.
— Минимизация конфликтов между потоками при обновлении.
— Хорошо масштабируется на большом количестве CPU ядер.
Метод delete() класса StringBuffer
Метод delete() в классе StringBuffer используется для удаления символов из строки. Он удаляет символы из строки, на которой он был вызван.
В качестве аргумента принимает начальный индекс и конечный индекс удаляемого фрагмента и сдвигает оставшиеся символы влево, замещая удаленные.
Возвращает ссылку на текущий объект StringBuffer
.
#это_база
Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.
Ближайшее мероприятие:
• 7-8 октября — Fast Track для С++ разработчиков, офер за 2 дня в команды Фудтеха и Яндекс Маркета.
Зарегистрироваться
Реклама. ООО "Яндекс". erid:2VtzqwWoJws
#вопросы_с_собеседований
Может ли не быть ни одного блока catch при отлавливании исключений?
Да, возможен вариант без блока catch при работе с исключениями.
Достаточно использовать только блок try и finally. В этом случае исключение, возникшее в блоке try, просто будет выброшено дальше, без обработки в данном месте.
Такой подход может быть оправдан, если нет необходимости обрабатывать исключение непосредственно там, где оно возникло. Например, достаточно просто закрыть использованные ресурсы в блоке finally.
То есть использование конструкции без catch вполне допустимо и имеет свои применения в зависимости от логики программы.
🖥 40+ IT-компаний ищут студентов на оплачиваемую стажировку
На форуме “Найти IT” Сбер, Росатом, Kaspersky и другие топовые компании завалят вас предложениями о работе!
“Найти IT” — это:
🔹 Мастер-классы и кейсы от крутых компаний
🔹 Предварительные собеседования и Q&A со спикерами
🔹 Мерч, призы и вкусная еда
И все это бесплатно 😲 Нужно только прийти!
Выбирате город и регистрируйтесь 👇
📍 Москва: 3 октября
📍 Санкт-Петербург: 7 октября
📍 Новосибирск: 26 октября
Реклама. ООО "ФТ". ИНН 7731611424. erid: LjN8KVHHT
Интерфейс Delayed
Интерфейс Delayed используется для объектов, у которых есть время истечения задержки.
Он позволяет организовать очередь объектов с учетом их задержки.
Основные методы:getDelay(TimeUnit unit)
— возвращает оставшееся время задержки в указанных единицах измерения.compareTo(Delayed o)
— сравнивает текущий объект с переданным по оставшемуся времени задержки.
Этот интерфейс реализуется классами, которые должны храниться в очереди с задержкой, например в DelayQueue
.
#это_база
Интерфейс BlockingQueue
Интерфейс BlockingQueue используется для реализации очередей с блокировками.
Он позволяет безопасно работать с очередью из нескольких потоков.
Основные методы:add(E e)
— добавляет элемент в очередь, может выбросить исключение если очередь переполнена.offer(E e)
— добавляет элемент в очередь, возвращает false
если очередь переполнена.put(E e)
— добавляет элемент в очередь, блокирует поток если очередь переполнена.take()
— извлекает и удаляет элемент из очереди, блокирует поток если очередь пуста.poll()
— извлекает и удаляет элемент из очереди, возвращает null
если очередь пуста.
#это_база
#вопросы_с_собеседований
Как работает сравнение двух строк?
Чтобы сравнить две строки, используется метод equals() класса String. Этот метод сравнивает строки по символам и возвращает логическое значение — true если строки одинаковые, false если строки разные.
Также можно использовать метод compareTo() который возвращает 0 если строки одинаковые, положительное число если первая строка больше в лексикографическом порядке, отрицательное если вторая строка больше.
SoftHashMap
SoftHashMap — это реализация интерфейса Map, которая использует слабые ссылки для хранения ключей и значений.
От обычной HashMap
она отличается тем, что при нехватке памяти она может автоматически удалять наименее используемые элементы.
SoftHashMap часто применяется для реализации кешей, где допустима потеря части данных.
Например, кеш изображений в приложении. Если память закончилась, то часть картинок будет удалена из SoftHashMap
, но основная часть приложения продолжит работать.
Метод isDaemon()
Метод isDaemon() используется для определения, является ли поток демоном или нет.
Демон (daemon) — это поток, который работает в фоновом режиме и не препятствует завершению программы. Основная программа может завершиться, даже если демон все еще выполняется.
#это_база
DoubleAccumulator
DoubleAccumulator используется для атомарного накопления двойных значений (double).
Это потокобезопасный класс, который позволяет безопасно накапливать числа с плавающей точкой из нескольких потоков.
Это полезно при параллельных вычислениях, чтобы избежать состояния гонки.
В примере создается DoubleAccumulator, который будет суммировать числа. Два потока t1 и t2 накапливают в него значения 0.1 и 0.2 соответственно.
В конце программы выводится итоговое значение accumulator - 30.0.
🧚♀️Задумывались ли вы, как может выглядеть идеальная библиотека для работы с данными?
Наверняка с помощью такой библиотеки можно очень гибко настраивать валидацию данных, трансформировать данные в разные формы, описывать предметную область, находить закономерности в массивах данных, генерировать тестовые данные по образцу, разбирать не структурированные данные на составные части и даже исправлять грамматические ошибки.
Вдобавок, она должна быть простой для понимания и производительной. Такая библиотека это не мечта, а вполне себе реальность!
👉На бесплатном вебинаре онлайн-курса «Clojure Developer» — «Malli, программируем на схемах» мы познакомимся с библиотекой Malli, посмотрим на стандартные (и не очень) сценарии её использования: регистрация
🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KVr1N
Привет! Мы в МТС активно поддерживаем ИТ-сообщество в России и запускаем всероссийскую олимпиаду по программированию с главным призом в 3 млн рублей.
Для кого? Для школьников, студентов и действующих ИТ-специалистов.
Что будет? Блок онлайн-заданий, митапы и мастер-классы, общение в закрытом Telegram-канале и финальный очный тур с программированием на скорость. Когда олимпиада завершится, мы создадим True Tech Community, где будем делиться полезными и эксклюзивными материалами для разработчиков.
А что еще? Финалистов ждет afterparty, фестиваль технологий, интерактив, квесты, карьерные стенды, где лучшие специалисты смогут получить оффер от МТС.
Регистрация уже открыта! Подробности по ссылке. Ждем тебя!
Реклама. ПАО "МТС". ИНН 7740000076. erid: LjN8KKQwJ
Axiom JDK Meetup: Java 21 и доверенные технологии
Спикеры расскажут об особенностях отечественной Java-экосистемы, бесшовной миграции Java-стека на доверенные технологии, обеспечении безопасности и оптимизации Java для микросервисов.
Доклады в программе:
✔ Роман Карпов, «Кто разрабатывает российскую Java и почему она лучше Oracle и других JDK»
✔ Олег Чирухин, «Axiom JDK Pro и Libercat: безопасная миграция Java-стека и KPI по импортозамещению»
✔ Александр Дроздов, «Безопасная разработка: защищаем открытый код и получаем сертификацию ФСТЭК»
✔ Олег Чирухин, «Легковесные Java-контейнеры: ускоряем разработку на 25%»
После докладов пройдет сессия вопросов и ответов со спикерами митапа.
Встречаемся в онлайне 27 сентября в 18:00 по Москве.
Зарегистрироваться на митап.
Реклама, ООО «Вайлдкард», ИНН 7801718607, erid 2RanykdhJjz
#вопросы_с_собеседований
Как получить не модифицируемую коллекцию?
Чтобы создать неизменяемую коллекцию, можно использовать интерфейс Collection и его реализации, такие как ArrayList или HashSet.
Экземпляр коллекции по умолчанию является изменяемым, но можно создать неизменяемую версию, вызвав метод Collections.unmodifiableCollection() и передав ему изменяемую коллекцию.
Этот метод вернет обертку этой коллекции, которая будет неизменяемой. Попытка модифицировать возвращенную коллекцию приведет к ошибке UnsupportedOperationException.
LongAdder
LongAdder — это класс из пакета java.util.concurrent, оптимизированный для высокопроизводительного параллельного суммирования long значений.LongAdder
применяется в многопоточных приложениях, когда нужно эффективно подсчитать сумму или другое агрегатное значение из нескольких потоков.
Преимущества:
— Высокая скорость за счет разделения на сегменты и отсутствия блокировок.
— Минимизация конфликтов между потоками при обновлении.
— Лучше масштабируется на большом кол-ве ядер.
Метод trimToSize()
Метод trimToSize() используется для оптимизации размера внутреннего массива коллекций, таких как ArrayList или HashMap.
Этот метод позволяет уменьшить размер внутреннего массива коллекции до текущего количества элементов, то есть избавиться от неиспользуемой памяти.
Вызывать этот метод имеет смысл после массового удаления элементов из коллекции, чтобы освободить лишнюю память.
При добавлении новых элементов размер массива автоматически увеличится.
Метод trimToSize()
является необязательной оптимизацией производительности и памяти. Его можно не вызывать, в этом случае внутренний массив будет занимать максимальный размер.
#это_база
#вопросы_с_собеседований
Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
— Если в блоке try вызвать метод System.exit(). Это приведет к немедленному завершению приложения, и блок finally пропускается.
— Если произойдет аварийное завершение JVM, например OutOfMemoryError. В этом случае JVM останавливается без выполнения finally.
— Если в блоке try выбрасывается исключение Error или его подклассы (например, StackOverflowError). Такие исключения обычно означают серьезную проблему, поэтому JVM не гарантирует выполнение finally.
— Если при выполнении кода в блоке try произошел deadlock. В этом случае поток зависает, и блок finally не выполняется.
— Если программа была принудительно остановлена, например, по kill -9 в Linux.
Класс ReentrantReadWriteLock
Класс ReentrantReadWriteLock используется для организации разделяемого доступа к ресурсам с разделением на чтение и запись.
Он позволяет эффективно организовать одновременный доступ к данным для чтения множеством потоков и исключительный доступ для записи отдельными потоками.
Проще говоря, множество потоков могут одновременно заходить в метод read
, но в write
может находиться только один поток в данный момент времени.
Это позволяет эффективно организовать доступ на чтение и запись.
Класс DateTimeFormatter
Класс DateTimeFormatter используется для форматирования и парсинга объектов даты и времени.
Он позволяет указать нужный формат даты и времени при выводе этих данных в строку или при чтении из строки в объекты LocalDateTime
, LocalDate
и другие классы API даты и времени.
Что стоит знать о Java-конференции Joker, которая пройдёт уже скоро?
В этот раз большая двухдневная офлайн-часть в Санкт-Петербурге (и еще два дня в онлайне). Но если вы не в Петербурге, можно поучаствовать и удалённо.
В программе всё полезное Java-разработчикам: от архитектуры до производительности, от нововведений Java 21 до идиоматичного Kotlin.
Прочитать описания всех докладов уже можно на сайте.
При посещении за свой счет работает промокод SENIORJAVIST
. Если вы покупаете билет себе сами, то переходите по этой ссылке.
Если билет вам покупает работодатель, то пришлите ему эту ссылку.
Реклама, ООО «Джуг Ру Груп», ИНН 7801341446, erid 2Ranynvt62k
#вопросы_с_собеседований
Можно ли синхронизировать доступ к строке?
Хотя строки неизменяемы, т. е. их содержимое нельзя изменить после создания, они могут использоваться из разных потоков.
Чтобы избежать race condition, когда два потока одновременно читают/записывают одну строку, можно использовать синхронизацию.
Для этого есть несколько способов:
— Объявить методы класса, которые работают со строкой, как synchronized.
— Использовать блок synchronized при работе со строкой.
— Использовать какой-либо lock (например ReentrantLock) для синхронизации доступа к строке.
— Использовать классы из java.util.concurrent для работы со строками, например StringBuffer.
PhantomHashMap
PhantomHashMap — это еще одна реализация интерфейса Map, которая использует призрачные ссылки для хранения ключей и значений.
Отличие PhantomHashMap
от обычной HashMap
заключается в том, что она не хранит реальные значения, а только призрачные ссылки на них.
Как только ссылка на значение становится призрачной, оно может быть удалено сборщиком мусора.PhantomHashMap
чаще всего используется для отслеживания жизненного цикла объектов. Например, чтобы понять, какие объекты все еще используются, а какие можно удалить.
FilterOutputStream
FilterOutputStream — это класс, который служит оберткой для других классов вывода и позволяет добавлять дополнительную обработку или фильтрацию данных перед записью.
Он используется, когда нужно изменить или отфильтровать данные перед отправкой в базовый поток вывода. Например, шифровать данные перед записью в файл.
В примере создается поток записи в файл FileOutputStream
. Далее создается шифр AES и на его основе CipherOutputStream
, который будет шифровать данные перед записью в fileStream
.
В итоге строка "Secret message" будет зашифрована и записана в зашифрованном виде в файл data.txt.
#это_база
Локальный класс (Local inner class)
Локальный класс - это класс, объявленный внутри метода или блока кода. Он доступен только в пределах этого метода или блока.
Локальные классы часто используются для упрощения кода, когда нужен вспомогательный класс, не требующийся за пределами метода.
Здесь внутри метода main() объявлен локальный класс LocalClass. В нем определен метод printMessage().
Далее создается экземпляр LocalClass и вызывается его метод.
#вопросы_с_собеседований
Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
Чтобы узнать значение конкретного символа в строке по его порядковому номеру, можно воспользоваться методом charAt(int index) класса String.
Этот метод возвращает символ, расположенный в строке по указанному индексу. Индексы нумеруются от 0 до длины строки минус 1.
Если переданный индекс находится вне диапазона длины строки, будет выброшено исключение IndexOutOfBoundsException.
#вопросы_с_собеседований
Как получить синхронизированную коллекцию из не синхронизированной?
Для того, чтобы получить синхронизированную коллекцию из несинхронизованной, можно использовать несколько способов:
— Обернуть исходную коллекцию в Collections.synchronizedList/Set/Map. Это создаст обёртку, которая будет синхронизировать все операции с коллекцией.
— Использовать один из классов синхронизированных коллекций из java.util.concurrent. При создании экземпляра этих классов, коллекция уже будет синхронизирована.
— Создать собственную реализацию коллекции, в которой явно синхронизировать методы с помощью synchronized или Lock.
— Использовать коллекцию, которая синхронизируется внутри каким-либо образом, например Vector.
Реализации исключения при делении на ноль
В этом примере мы создаем собственное исключение DivideByZeroException
, которое наследуется от класса Exception
. Затем, в блоке try
мы проверяем, если делитель равен нулю, то мы бросаем это исключение с соответствующим сообщением. В блоке catch
мы перехватываем исключение и выводим его сообщение об ошибке.
Обратите внимание, что если вы пытаетесь поделить ноль на ноль, будет брошено исключение типа ArithmeticException
, которое уже предусмотрено в Java для обработки ситуаций деления на ноль.
WebSocket + Jetty
В данном видео автор запускает WebSocket сервер на базе Jetty без Spring. Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и автору понадобился простой Java проект с socket-сервером без необходимости тащить спринг.
https://youtu.be/N6XYz7c8duI