№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist
#вопросы_с_собеседований
Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
Чтобы узнать значение конкретного символа в строке по его порядковому номеру, можно воспользоваться методом charAt(int index) класса String.
Этот метод возвращает символ, расположенный в строке по указанному индексу. Индексы нумеруются от 0 до длины строки минус 1.
Если переданный индекс находится вне диапазона длины строки, будет выброшено исключение IndexOutOfBoundsException.
Реализации исключения при делении на ноль
В этом примере мы создаем собственное исключение DivideByZeroException
, которое наследуется от класса Exception
. Затем, в блоке try
мы проверяем, если делитель равен нулю, то мы бросаем это исключение с соответствующим сообщением. В блоке catch
мы перехватываем исключение и выводим его сообщение об ошибке.
Обратите внимание, что если вы пытаетесь поделить ноль на ноль, будет брошено исключение типа ArithmeticException
, которое уже предусмотрено в Java для обработки ситуаций деления на ноль.
CopyOnWriteArrayList
CopyOnWriteArrayList — это реализация интерфейса List, оптимизированная для работы в многопоточном окружении.
Основное отличие этой коллекции в том, что все модифицирующие операции (добавление, удаление элементов) не изменяют существующий массив, а создают его копию.
Это позволяет избежать необходимости синхронизации для потокобезопасного чтения.CopyOnWriteArrayList
полезен в ситуациях, когда чтение данных происходит гораздо чаще, чем изменение. Например, при реализации общего кэша в многопоточном приложении.
ConcurrentHashMap
ConcurrentHashMap — это реализация интерфейса Map, оптимизированная для многопоточной работы.
Она позволяет эффективно выполнять операции чтения и записи данных из нескольких потоков без необходимости явной блокировки всей структуры данных.
ConcurrentHashMap используется в приложениях, где требуется высокая производительность при работе с разделяемыми данными в многопоточном окружении.
Особенно полезна, когда количество операций чтения значительно превышает количество операций записи.
Контейнер Optional
Optional — это контейнер, который может содержать какое-то значение или не содержать ничего.
Он используется для обозначения отсутствия значения вместо null
. Это позволяет избежать ошибок NullPointerException
.Optional
появился в Java 8. Он представлен классом java.util.Optional
.
Чтобы создать экземпляр Optional
, используются статические методы:
— empty()
для пустого Optional
.
— of()
для Optional
с заданным значением.
Для получения значения из Optional
используются методы get()
, или orElse()
с указанием значения по умолчанию. Также есть методы фильтрации значений, например filter()
, map()
и flatMap()
.
#это_база
Собеседование по Java. Разбор 1606 вопросов и ответов
Смотреть статью
Highload буткемп: Системный дизайн, Производительность и Масштабирование
Приглашаем на курсы для прокачки навыков архитектора и проектировщика на весеннем highload-потоке от DevHands.
🌐 Приходите на уникальный образовательный трек без отрыва от работы (занятия вечером), в рамках которого вы:
🤩 изучите ключевые хайлоад-паттерны и получите навыки проектирования систем с миллионной аудиторией (балансировка, масштабирование, высокая доступность, шардинг, CAP/PACELS, транзакционные очереди и многое другое)
🤩 поупражняетесь в системном дизайне и проектировании, и получите живую обратную связь на реальных задачах: магазин/маркетплейс, объявления, соцсети, такси/доставка и тд.
🤩 погрузитесь в highload максимально, при желании в первый же день получите в управление свою инфраструктуру, попробуете “выжать” 100K RPS из своих сервисов, получите уникальный опыт работы с кластерными решениями - Redis, SPQR, CockroachDB
🤩 научитесь планировать нагрузку и связывать бизнес-показатели с нефункциональными требованиями к системе
🤩 попрактикуетесь в проведении и прохождения секций системного дизайна на интервью
Только «живые» онлайн-сессии: лекции, брейнштормы, презентации домашних проектов.
🗓 Старт потока 22 апреля, изучайте программу и записывайтесь:
🤩 Буткэмп “Производительность и масштабируемость” для тех, кто хочет поработать с собственной инфрой
🤩 Курс “Системный дизайн высоконагруженных проектов” для тех, кто хочет только практику проектирования “у доски”
🥸 Кто мы: R&D-центр Devhands, основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo и Yum! Brands, с многолетним опытом высоконагруженных проектов и управления глобальными технологическими организациями, член программного комитета Highload.
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2Vtzqv8dwE1
Интерфейс Delayed
Интерфейс Delayed используется для объектов, у которых есть время истечения задержки.
Он позволяет организовать очередь объектов с учетом их задержки.
Основные методы:getDelay(TimeUnit unit)
— возвращает оставшееся время задержки в указанных единицах измерения.compareTo(Delayed o)
— сравнивает текущий объект с переданным по оставшемуся времени задержки.
Этот интерфейс реализуется классами, которые должны храниться в очереди с задержкой, например в DelayQueue
.
#это_база
Класс DateTimeFormatter
Класс DateTimeFormatter используется для форматирования и парсинга объектов даты и времени.
Он позволяет указать нужный формат даты и времени при выводе этих данных в строку или при чтении из строки в объекты LocalDateTime
, LocalDate
и другие классы API даты и времени.
🗞 EasyOffer 2.0 собрал более 1 млн рублей за первые сутки краудфандинга
Платформа EasyOffer, предназначенная для подготовки к IT-собеседованиям, объявила о разработке новой версии сервиса. За первые 24 часа краудфандинга проекту удалось привлечь более 1 000 000 рублей.
В релизе EasyOffer 2.0 планируется:
— крупнейшая база реальных вопросов и задач с технических интервью
— тренажёры по интервальным повторениям и симуляторы собеседований
— аналитика по компаниям, грейдам, популярности и сложности вопросов
— тестовые задания и требования из вакансий
📆 Релиз запланирован на конец мая.
Сейчас в рамках сбора средств можно оформить годовой PRO-доступ за 3 200 ₽. После запуска такая сумма будет соответствовать цене месячной подписки.
#вопросы_с_собеседований
Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
— Если в блоке try вызвать метод System.exit(). Это приведет к немедленному завершению приложения, и блок finally пропускается.
— Если произойдет аварийное завершение JVM, например OutOfMemoryError. В этом случае JVM останавливается без выполнения finally.
— Если в блоке try выбрасывается исключение Error или его подклассы (например, StackOverflowError). Такие исключения обычно означают серьезную проблему, поэтому JVM не гарантирует выполнение finally.
— Если при выполнении кода в блоке try произошел deadlock. В этом случае поток зависает, и блок finally не выполняется.
— Если программа была принудительно остановлена, например, по kill -9 в Linux.
Метод replaceFirst()
Метод replaceFirst()
в Java используется для замены первого подстроки в строке на другую подстроку. Этот метод является частью класса java.lang.String
и принимает два параметра: регулярное выражение (регулярное выражение) и замену.
Сигнатура метода:
public String replaceFirst(String regex, String replacement)Где:
regex
— это регулярное выражение, которое вы ищете в строке.replacement
— строка, которой вы заменяете первое найденное совпадение с regex.Хакатон от МТС: 5 треков и 1 500 000 рублей. Для тех, кто готов воплотить идею в прототип
Приглашаем на хакатон МТС True Tech Hack 2025. Протестируй свои идеи и разработай решение на базе одной из пяти ИТ-платформ МТС.
Призовой фонд соревнования — 1 500 000 рублей.
Участие могут принять системные аналитики, Data Scientists, Data Engineers, frontend и backend-разработчики, Android-разработчики, бизнес-аналитики, аналитики данных, MLOps-инженеры, DevOps-инженеры, Product-менеджеры, ИТ-архитекторы, UI/UX-дизайнеры.
На хакатоне ты сможешь:
— Выбрать свой трек и создать решение на базе ИТ-платформ МТС.
— Побороться за призовой фонд — 1 500 000 рублей.
— Расширить свои профессиональные связи через нетворкинг с участниками хакатона и экспертами МТС.
— Повысить шансы на прохождение стажировки в МТС.
— Узнать больше о продуктах и технологиях МТС от экспертов компании
Регистрация до 16 апреля.
Регистрируйся прямо сейчас: https://truetechhack.ru/
Шифр Цезаря
Шифр Цезаря — это простой шифр подстановки, который сдвигает каждую букву в сообщении на фиксированное количество позиций в алфавите.
В этом примере мы создали класс CaesarCipher
, который содержит два метода: encrypt
и decrypt
. encrypt
принимает сообщение и сдвиг, чтобы зашифровать его, а decrypt
принимает зашифрованное сообщение и сдвиг, чтобы дешифровать его.
Заметьте, что этот код предназначен только для демонстрации принципа работы шифра Цезаря и не обеспечивает высокую степень безопасности.
#для_начинающих
Класс LinkedList
Класс LinkedList
представляет собой двусвязный список, который является одной из структур данных для хранения и управления коллекцией элементов. LinkedList предоставляет реализацию интерфейсов List и Deque, что означает, что он может использоваться как список элементов и как двусторонняя очередь (двунаправленный список).
#для_начинающих
#вопросы_с_собеседований
Как получить синхронизированную коллекцию из не синхронизированной?
Для того, чтобы получить синхронизированную коллекцию из несинхронизованной, можно использовать несколько способов:
— Обернуть исходную коллекцию в Collections.synchronizedList/Set/Map. Это создаст обёртку, которая будет синхронизировать все операции с коллекцией.
— Использовать один из классов синхронизированных коллекций из java.util.concurrent. При создании экземпляра этих классов, коллекция уже будет синхронизирована.
— Создать собственную реализацию коллекции, в которой явно синхронизировать методы с помощью synchronized или Lock.
— Использовать коллекцию, которая синхронизируется внутри каким-либо образом, например Vector.
❓ Java-разработчики, уже пробовали работать с асинхронным кодом через Scala Future?
⏰ 15 апреля в 18:30 на открытом вебинаре Валентин Шилин расскажет, как эффективно использовать Future в Scala: избегать ошибок (блокировки, потеря контекста), комбинировать асинхронные операции (Future.sequence, traverse, for-comprehensions) и улучшать производительность кода.
Валентин — старший программист и аналитик данных Deutsche Telekom IT GmbH, эксперт в обработке больших данных и преподаватель курсов по Scala и Apache Spark.
Если вы используете Java и хотите перейти на Scala, или уже работаете с Play Framework, Akka или Spark, — вебинар точно для вас. Научитесь грамотно писать асинхронный код, избегая типичных проблем.
🎁 Все участники смогут задать вопросы эксперту и получат скидку на полный курс по Scala-разработке.
👉 Регистрируйтесь и повысьте эффективность своей работы
https://otus.pw/O1Xc/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
⚡️ Linux теперь в Telegram!
Ребята сделали крутейший канал про Linux, где на простых картинках и понятном языке обучают работе с этой ОС, делятся полезными фишками и инструментами
Подписывайтесь: @linuxos_tg
Метод isEmpty()
Метод isEmpty() позволяет проверить, пустая ли коллекция или строка.
Он определен в интерфейсе java.util.Collection
, поэтому доступен для всех коллекций, таких как ArrayList
, HashSet
и других. Также есть отдельная реализация для класса String
.
Метод возвращает значение true
, если коллекция или строка не содержат элементов, и false
— если в коллекции или строке есть хотя бы один элемент.
Это позволяет упростить проверку на пустоту, вместо сравнения размера коллекции с нулем.
#это_база
#вопросы_с_собеседований
Можно ли переопределить статический или приватный метод в Java?
Приватный метод недоступен вне класса, поэтому он не будет переопределен подклассом. Следовательно, его нельзя переопределить. Точно так же статический метод не может быть переопределен, потому что если мы создадим статические методы с одним и тем же именем метода и сигнатурой как в базовом, так и в производном классе, производный класс скроет методы в базовом классе. Это известно как сокрытие метода.
#вопросы_с_собеседований
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому 16 байт
тратится на хранение упакованного объекта и 4 байта
(8 для x64
) - на хранение ссылки на этот объект в самой структуре данных. Таким образом, в x32 JVM 4 байта
используются на хранение одного элемента и 16 байт
- на хранение упакованного объекта типа Byte
. Для x64
- 8 байт
и 24 байта
соответственно.
Узнаем количество файлов в папке
В данном примере мы задаем путь к папке, получаем список файлов в этой папке с помощью метода listFiles()
, а затем выводим количество файлов в папке с помощью свойства length
массива файлов.
👩💻 Сообщения, которые не теряются: Брокеры против хаоса в Java
Приглашаем на открытый урок.
🗓 08 апреля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
Узнайте, как обеспечить 100% доставку данных в распределенных Java-системах: боремся с потерями, хаосом и scaling-вызовами.
О чём поговорим:
✔️Брокеры vs хаос: Как Kafka, RabbitMQ и ActiveMQ спасают данные от потерь.
✔️ Асинхронный Java на практике: Пишем код с гарантированной доставкой сообщений.
✔️ Антипаттерны: Топ-5 ошибок, которые приводят к краху системы (и как их избежать).
Кому будет интересно:
Вебинар будет полезен разработчикам, архитекторам и специалистам по интеграции, работающим с распределенными системами и стремящимся обеспечить надежную доставку данных.
В результате урока:
Участники научатся выбирать брокеры под задачи, реализовывать паттерны вроде Publisher-Subscriber , а также получат шаблоны кода для интеграции в свои проекты.
🔗 Ссылка на регистрацию: https://otus.pw/dk0u/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Класс ReentrantReadWriteLock
Класс ReentrantReadWriteLock используется для организации разделяемого доступа к ресурсам с разделением на чтение и запись.
Он позволяет эффективно организовать одновременный доступ к данным для чтения множеством потоков и исключительный доступ для записи отдельными потоками.
Проще говоря, множество потоков могут одновременно заходить в метод read
, но в write
может находиться только один поток в данный момент времени.
Это позволяет эффективно организовать доступ на чтение и запись.
#вопросы_с_собеседований
Может ли не быть ни одного блока catch при отлавливании исключений?
Да, возможен вариант без блока catch при работе с исключениями.
Достаточно использовать только блок try и finally. В этом случае исключение, возникшее в блоке try, просто будет выброшено дальше, без обработки в данном месте.
Такой подход может быть оправдан, если нет необходимости обрабатывать исключение непосредственно там, где оно возникло. Например, достаточно просто закрыть использованные ресурсы в блоке finally.
То есть использование конструкции без catch вполне допустимо и имеет свои применения в зависимости от логики программы.
CallableCallable
— это интерфейс из пакета java.util.concurrent
, который представляет собой задачу, которую можно выполнить и получить результат, а также обработать исключение, если оно произошло во время выполнения задачи. Он аналогичен интерфейсу Runnable
, но в отличие от Runnable
, Callable
может возвращать результат выполнения и бросать проверяемые исключения.
#для_продвинутых
Интерфейс UnaryOperator
Интерфейс UnaryOperator
— это функциональный интерфейс, введенный в Java 8 в пакете java.util.function
. Этот интерфейс представляет собой оператор, который принимает один аргумент и возвращает результат того же типа, что и входной аргумент. Он представляет унарную операцию, то есть операцию, которая применяется к одному операнду.
#для_продвинутых
Hibernate ORMHibernate ORM
- это фреймворк для работы с базами данных, который позволяет разработчикам работать с объектами вместо запросов SQL. Hibernate позволяет ускорить процесс разработки и уменьшить количество кода, необходимого для работы с базой данных.
В этом примере мы создаем класс Student
, который аннотируется с помощью аннотаций Hibernate
, указывающих, что данный класс является сущностью, а его поля соответствуют столбцам в таблице базы данных. Затем мы создаем объект SessionFactory
и используем его для сохранения и получения объекта Student
из базы данных.
#для_начинающих
📕 Открытый урок по разработке веб-приложений на Scala
На открытом уроке 1 апреля в 20:00 мск мы погрузимся в мир бэкенд-разработки на Scala.
📗 В результате вы:
— Узнаете ключевые аспекты создания современных веб-приложений на Scala;
— Познакомитесь с популярными фреймворками и инструментами для работы с базами данных;
— На практике создадите простое CRUD-приложение для закрепления навыков.
Спикер: Алексей Воронец — руководитель разработки департамента проектных решений и поисковых систем в компании Naumen, эксперт с 14-летним опытом, специализирующийся на Scala и функциональном программировании.
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие
https://otus.pw/5BIv/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Большие числа BigInteger
В Java для работы с большими числами (такими, которые не умещаются в примитивные типы данных) используется класс BigInteger
из пакета java.math
. Этот класс позволяет производить арифметические операции с большими числами, которые могут содержать до 2^31-1 битов.
#для_начинающих