#вопросы_с_собеседований
Может ли не быть ни одного блока 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
Как управлять состоянием системы через события?
Event-driven архитектура — концепция программирования, которая позволяет создавать сложные приложения, используя событийно-ориентированный подход. Так создаются распределенные системы, которые легко масштабируются и обладают высокой отказоустойчивостью.
Начните изучать эту технологию на бесплатном открытом уроке «Архитектурный подход Event Driven Architecture» от OTUS: https://otus.pw/OKs1/
На занятии рассмотрим:
✔️ взаимодействие сервисов на основе событий;
✔️ плюсы и минусы такого подхода;
✔️ сочетания событийного и синхронного взаимодействия;
✔️ паттерны проектирования событий;
✔️ подход Event Sourcing и CQRS.
Урок пройдёт 27 сентября в 20:00 мск в рамках курса «Microservice Architecture».
👩💻 Пройдите вступительное тестирование прямо сейчас и зарегистрируйтесь на событие: https://otus.pw/OKs1/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KQ9xk
ConcurrentHashMap
ConcurrentHashMap — это реализация интерфейса Map, оптимизированная для многопоточной работы.
Она позволяет эффективно выполнять операции чтения и записи данных из нескольких потоков без необходимости явной блокировки всей структуры данных.
ConcurrentHashMap используется в приложениях, где требуется высокая производительность при работе с разделяемыми данными в многопоточном окружении.
Особенно полезна, когда количество операций чтения значительно превышает количество операций записи.
Метод isEmpty()
Метод isEmpty() позволяет проверить, пустая ли коллекция или строка.
Он определен в интерфейсе java.util.Collection
, поэтому доступен для всех коллекций, таких как ArrayList
, HashSet
и других. Также есть отдельная реализация для класса String
.
Метод возвращает значение true
, если коллекция или строка не содержат элементов, и false
— если в коллекции или строке есть хотя бы один элемент.
Это позволяет упростить проверку на пустоту, вместо сравнения размера коллекции с нулем.
#это_база
Контейнер Optional
Optional — это контейнер, который может содержать какое-то значение или не содержать ничего.
Он используется для обозначения отсутствия значения вместо null
. Это позволяет избежать ошибок NullPointerException
.Optional
появился в Java 8. Он представлен классом java.util.Optional
.
Чтобы создать экземпляр Optional
, используются статические методы:
— empty()
для пустого Optional
.
— of()
для Optional
с заданным значением.
Для получения значения из Optional
используются методы get()
, или orElse()
с указанием значения по умолчанию. Также есть методы фильтрации значений, например filter()
, map()
и flatMap()
.
#это_база
Класс 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
CopyOnWriteArrayList
CopyOnWriteArrayList — это реализация интерфейса List, оптимизированная для работы в многопоточном окружении.
Основное отличие этой коллекции в том, что все модифицирующие операции (добавление, удаление элементов) не изменяют существующий массив, а создают его копию.
Это позволяет избежать необходимости синхронизации для потокобезопасного чтения.CopyOnWriteArrayList
полезен в ситуациях, когда чтение данных происходит гораздо чаще, чем изменение. Например, при реализации общего кэша в многопоточном приложении.
Как веб-разработчику продвинуться по карьерной лестнице?
Далеко не каждый специалист умеет создавать отказоустойчивые и легко масштабируемые архитектуры. В свою очередь, многие компании предъявляют разработчикам именно такие требования.
Научитесь применять в работе архитектурные решения высшего пилотажа – пройдите обучение «Highload Architect» от OTUS.
За 5 месяцев вы научитесь:
✅ использовать в своих проектах решения, которые выдерживают миллионы запросов в секунду;
✅ правильно оптимизировать работоспособность серверов;
✅ эффективно использовать инструменты, которые уже есть в проектах.
Программа полностью обновлена и отвечает реалиям мира IT. Все преподаватели курса – практикующие специалисты. Занятия проходят в режиме живых вебинаров, сочетаемых с выполнением домашних работ и созданием выпускного проекта для портфолио.
Пройдите вступительное тестирование прямо сейчас и узнайте, готовы ли вы стать студентом курса: https://otus.pw/K9Cm/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KHR36
Хотите начать карьеру в Java, но не знаете как? Расскажем и покажем на бесплатном мини-курсе Skillbox. Будет полезно и тем, кто только хочет познакомиться с профессией, и тем, кто уже начал делать первые шаги в ней. Подойдёт новичкам разных возрастов.
Регистрируйтесь: https://epic.st/Pgi8k
🎉 И получите первый подарок — гайд по профессии Java-разработчика.
Что будем делать на мини-курсе:
🔹 Обсудим, почему Java — один из самых востребованных языков
🔹 Познакомимся с кодом Java и рассмотрим ключевые элементы приложений на этом языке
🔹 Определим навыки для трудоустройства
🔹 Сравним Java и Python
🔹 Сделаем Java-приложения по инструкции
Как проходит мини-курс:
📌 Смотрите видео в удобное время
📌 Получаете полезные материалы
📌 Закрепляете навыки
📌 Посещаете итоговый вебинар
🎁 За время обучения вы получите 5 полезных материалов в подарок, сертификат на скидку 10 000 рублей на любой курс, персональную карьерную консультацию и доступ к изучению английского языка в Skillbox на год.
Успейте записаться бесплатно!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Как управлять состоянием системы через события?
Event-driven архитектура — концепция программирования, которая позволяет создавать сложные приложения, используя событийно-ориентированный подход. Так создаются распределенные системы, которые легко масштабируются и обладают высокой отказоустойчивостью.
Начните изучать эту технологию на бесплатном открытом уроке «Архитектурный подход Event Driven Architecture» от OTUS: https://otus.pw/8xdG/
На занятии рассмотрим:
✔️ взаимодействие сервисов на основе событий;
✔️ плюсы и минусы такого подхода;
✔️ сочетания событийного и синхронного взаимодействия;
✔️ паттерны проектирования событий;
✔️ подход Event Sourcing и CQRS.
Урок пройдёт 27 сентября в 20:00 мск в рамках курса «Microservice Architecture».
👩💻 Пройдите вступительное тестирование прямо сейчас и зарегистрируйтесь на событие: https://otus.pw/8xdG/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8JzxWt