№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist
#вопросы_с_собеседований
Что такое сигнатура метода?
Сигнатура метода — это уникальная комбинация имени метода и списка его параметров. Сигнатура метода определяет, какие аргументы должны быть переданы методу при его вызове.
Сигнатура метода используется для определения перегрузки методов. Два или более метода считаются перегруженными, если они имеют одинаковое имя, но разные сигнатуры. То есть они принимают разные наборы параметров.
Важно отметить, что сигнатура метода не включает в себя возвращаемый тип и модификаторы доступа.
LinkedList
LinkedList - это реализация связного списка на основе двусвязных элементов.
LinkedList оптимизирован для операций вставки/удаления элементов и часто используется там, где требуется динамически изменяемый список без ограничения размера.
В примере демонстрируются основные операции с LinkedList.
Стань частью масштабного ИТ-события от МТС
True Tech Day 2025 — третья технологическая конференция МТС для профессионалов ИТ‑индустрии. Одна из главных тем в этом году — тренды и практики искусственного интеллекта.
В программе:
— Доклады от ученых и зарубежных спикеров с индексом Хирша более 50.
— Кейсы применения современных ИИ‑решений — от AI‑агентов, тестов LLM и бенчмарков до вопросов регулирования.
— AI-интерактивы и технологические квесты.
— Пространство для нетворкинга,
…а еще after-party со звездным лайн-апом.
Когда: 6 июня
Где: Москва, МТС Live Холл и онлайн
Участие бесплатно. Регистрируйся по ссылке.
Класс Java.io.OutputStream
Java.io.OutputStream - это абстрактный класс, который представляет поток вывода байтов.
Он является базовым классом для всех классов, которые представляют вывод информации в различные места назначения, такие как файл, сетевое соединение и т.д.
Основные подклассы OutputStream:
FileOutputStream, ByteArrayOutputStream, FilterOutputStream и др.
В результате работы кода из примера в файл file.txt будет записано:
Hello World!
#это_база
IllegalStateException()
IllegalStateException — это тип checked исключения, которое генерируется при попытке выполнить операцию, которая не разрешена в текущем состоянии объекта.
Исключение IllegalStateException сигнализирует, что операция не может быть выполнена из-за некорректного состояния объекта.
Обработка этого исключения позволяет избежать неопределенного поведения программы и привести объект в правильное состояние перед вызовом операции.
Есть фича. Есть дедлайн. Есть понимание, что тесты надо писать… но они отъедают время, которого итак впритык.
Один наш знакомый девелопер сказал: «С тех пор как поставил Explyt Test — начал писать меньше тестов… но покрытие стало лучше. Как это вообще возможно?!»
Попробуйте сами. Плагин сам предлагает тесты для вашего кода — прямо в IDE.
👉 explyt.ai — сэкономь себе пару часов уже сегодня.
#вопросы_с_собеседований
Дайте определение понятию “поток-демон”.
Поток-демон (daemon thread) — это поток, который работает в фоновом режиме и не предотвращает завершение программы.
Потоки-демоны помечаются методом setDaemon(true) и обычно используются для выполнения фоновых задач — логгирование, мониторинг, очистка и т. д.
Однако, такие потоки не должны использоваться для критически важных операций, т. к. могут аварийно завершиться при выходе из приложения.
Механизм try-with-resources
Механизм try-with-resources — это способ автоматического закрытия ресурсов после их использования. Появился этот механизм в Java 7.
Он работает для классов, реализующих интерфейс AutoCloseable (например, потоки), уменьшает количество кода и упрощает обработку исключений.
Ресурсы объявляются в скобках после try и закрываются автоматически по завершении этого блока. Ресурсы закрываются в обратном порядке создания при нормальном или аварийном завершении.
По сравнению с блоком try-catch-finally этот механизм позволяет лаконичнее писать код с автозакрытием ресурсов.
В этом примере в блоке try создаются объекты FileReader и BufferedReader для чтения данных из файла.
После завершения блока try оба ресурса будут автоматически закрыты, даже если произойдет исключение.
#это_база
#вопросы_с_собеседований
В каких случаях разумно использовать массив, а не ArrayList?
Использование обычных массивов вместо ArrayList имеет смысл в следующих ситуациях:
— Нужен предсказуемый и строгий контроль размера массива. Массивы имеют фиксированный размер, в отличие от ArrayList.
— Требуется максимальная производительность при работе с примитивными типами данных (int, double и т. д.). Доступ к элементам массива быстрее, чем в ArrayList.
— Нужно создать структуру данных, которая должна быть неизменяемой.
— Требуется тесная интеграция с существующим кодом на основе обычных массивов. Переход на ArrayList может потребовать значительный рефакторинг.
— Не нужны динамические функции ArrayList, такие как автоматическое изменение размера, методы вставки/удаления и т. д.
— Ограничения на использование дополнительной памяти. Массивы компактнее ArrayList за счет фиксированного размера.
Интерфейс Comparable
Интерфейс Comparable
используется для поддержки сортировки элементов коллекции.
Он содержит единственный метод compareTo
, который сравнивает текущий объект с переданным объектом. Метод возвращает значение меньше нуля, если текущий объект меньше переданного, больше нуля если текущий объект больше, и ноль если объекты равны.
Чтобы ваш класс стал сравниваемым, он должен реализовывать интерфейс Comparable
и переопределить метод compareTo
.
Реализация Comparable
позволяет сортировать экземпляры класса с помощью методов Collections.sort
и Arrays.sort
. Также она используется в TreeSet
и TreeMap
для корректного упорядочивания элементов.
В примере реализован метод compareTo
, который сравнивает средний балл текущего и переданного студента.
После создания списка студентов мы отсортировали его методом Collections.sort
. Благодаря Comparable
студенты расположились в порядке возрастания среднего балла.
Интерфейс Comparator
Интерфейс Comparator
используется для реализации произвольной сортировки элементов коллекции.
В отличие от Comparable
, где порядок сравнения "встроен" в класс, Comparator
позволяет задавать нужный порядок сортировки вне класса.Comparator
содержит единственный метод compare
, который принимает два объекта и возвращает целое число, показывающее соотношение объектов.
Чтобы задать свой порядок сортировки, нужно создать класс, реализующий Comparator
, и переопределить метод compare
.Comparator
часто используется для сортировки объектов в коллекциях как альтернатива их естественному порядку.
В примере мы определили компаратор LastNameComparator
, который сравнивает студентов по фамилии.
При сортировке списка передали этот компаратор, и студенты отсортировались по фамилии, а не по среднему баллу.
#вопросы_с_собеседований
Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
Если оператор return встречается как в блоке catch, так и в блоке finally, то return в блоке finally имеет больший приоритет и будет выполнен в любом случае.
Порядок выполнения такой конструкции будет следующий:
— Выполняется код в теле try.
— Если возникает исключение, управление передается в блок catch.
— В блоке catch может выполниться return, возвращающий значение из метода.
— Далее обязательно выполнится блок finally, даже если в catch уже был return.
— Если в finally есть оператор return, он перезапишет любое значение, возвращаемое ранее.
— Метод вернет значение, указанное в return блока finally.
Интерфейс BlockingQueue
Интерфейс BlockingQueue используется для реализации очередей с блокировками.
Он позволяет безопасно работать с очередью из нескольких потоков.
Основные методы:add(E e)
— добавляет элемент в очередь, может выбросить исключение если очередь переполнена.offer(E e)
— добавляет элемент в очередь, возвращает false
если очередь переполнена.put(E e)
— добавляет элемент в очередь, блокирует поток если очередь переполнена.take()
— извлекает и удаляет элемент из очереди, блокирует поток если очередь пуста.poll()
— извлекает и удаляет элемент из очереди, возвращает null
если очередь пуста.
#это_база
#вопросы_с_собеседований
Можно ли синхронизировать доступ к строке?
Хотя строки неизменяемы, т. е. их содержимое нельзя изменить после создания, они могут использоваться из разных потоков.
Чтобы избежать race condition, когда два потока одновременно читают/записывают одну строку, можно использовать синхронизацию.
Для этого есть несколько способов:
— Объявить методы класса, которые работают со строкой, как synchronized.
— Использовать блок synchronized при работе со строкой.
— Использовать какой-либо lock (например ReentrantLock) для синхронизации доступа к строке.
— Использовать классы из java.util.concurrent для работы со строками, например StringBuffer.
#вопросы_с_собеседований
Как работает сравнение двух строк?
Чтобы сравнить две строки, используется метод equals() класса String. Этот метод сравнивает строки по символам и возвращает логическое значение — true если строки одинаковые, false если строки разные.
Также можно использовать метод compareTo() который возвращает 0 если строки одинаковые, положительное число если первая строка больше в лексикографическом порядке, отрицательное если вторая строка больше.
#вопросы_с_собеседований
Что такое анонимные классы и где они применяются?
Анонимные классы - это классы без имени, которые используются для создания объекта определенного класса или интерфейса "на лету".
Анонимные классы удобны, когда нужно создать простой класс "одноразового использования" для какой-то конкретной задачи. Они позволяют избежать громоздких именованных классов в таких случаях.
Чаще всего они применяются для:
- создания обработчика событий в GUI-приложениях.
- создания компаратора или другого функционального интерфейса для сортировки или фильтрации коллекций.
- расширения класса путем создания подкласса без имени.
Double.compare
()
Метод Double.compare()
используется для сравнения двух значений типа double.
Он принимает два значения double и возвращает:
- отрицательное число, если первое значение меньше второго.
- ноль, если значения равны.
- положительное число, если первое значение больше второго.
В этом примере мы передаем Double.compare()
как компаратор в метод sort() из класса Arrays.
Это позволяет корректно отсортировать массив с плавающей точкой по возрастанию.
#вопросы_с_собеседований
Какова иерархия коллекций?
В Java есть два основных интерфейса для коллекций - Collection и Map.
Interface Collection находится на верху иерархии и определяет общие методы для работы с коллекциями, такие как add(), remove(), size() и другие. От него наследуются конкретные реализации коллекций.
Наиболее часто используемые реализации Collection - это List, Set и Queue.
Map интерфейс реализует отдельную структуру данных. Он представляет отображение ключ-значение. Основные реализации - HashMap и TreeMap.
Java-разработчик в команду MAX в VK, Москва
Ребята разрабатывают крупнейший мессенджер в России, который будет включать в себя денежный сервис, звонки, искусственный интеллект, мини-приложения и много чего ещё. Сейчас они ищут Java-инженера с опытом в масштабировании сервисов, архитектуре высоконагруженных систем и проектировании надёжных решений.
Нужен опыт в Java от 3-х лет, уверенное знание алгоритмов, опыт многопоточного программирования и понимание распределённых систем.
Если хотите расти вместе с проектом — откликайтесь!
Метод service()
Метод service() используется в Servlet классах в Java и вызывается контейнером сервлетов (например Tomcat) для обработки запроса клиента.
Он является центральной точкой входа для обработки запроса и генерации ответа. Реализация метода service() обычно содержит логику получения параметров запроса, вызова бизнес-логики приложения и формирования ответа клиенту.
По умолчанию service() вызывает методы doGet, doPost, doPut etc. в зависимости от типа HTTP запроса.
Но можно переопределить его, чтобы реализовать свою собственную логику обработки запросов.
В этом примере мы переопределяем метод service() в классе MyServlet, который расширяет HttpServlet.
В методе мы получаем параметр "name" из HTTP запроса с помощью метода getParameter().
Затем формируем ответ, используя PrintWriter, в который записываем приветствие с именем пользователя.
#это_база
#вопросы_с_собеседований
Что такое сериализация?
Сериализация — это процесс преобразования объекта в поток байтов для сохранения состояния объекта в файле или передачи по сети. Она выполняется потоками ObjectOutputStream и ObjectInputStream.
Сериализованный объект сохраняется в универсальном бинарном формате, независимом от платформы.
Сериализация позволяет сохранить состояние объекта между запусками программы и передавать объект через сеть.
Для сериализации класс должен имплементировать интерфейс Serializable. А если добавить полям класса модификатор transient, то такие поля не будут сериализованы.
Зубчатый массив в Java
Зубчатый массив (BitSet) — это специальная структура данных для эффективного хранения и манипулирования наборами битов.
Представляет собой массив битов, который увеличивается динамически по мере добавления элементов. Занимает меньше памяти, чем обычные структуры данных для хранения булевых значений.
Позволяет выполнять операции над битами: установка, сброс, инверсия, логические операции.
Зубчатый массив полезен при решении задач: поиск в множествах, хранение состояний и флагов, оптимизация расхода памяти и в целом при необходимости эффективно хранить и манипулировать большим количеством булевых значений.
#это_база
💕 Прокачай навыки в ИТ-архитектуре! Стань частью команды ВТБ!
⚡Открыта регистрация на хакатон ARCHI.Tech от ВТБ!⚡
Когда: 19–25 мая 2025
Формат: онлайн
Призовой фонд: 1,2 млн рублей
➡️ Хочешь развиваться в ИТ-архитектуре? Тогда тебе сюда!
ARCHI.Tech от ВТБ — первый в России архитектурный хакатон для опытных специалистов и начинающих ИТ-архитекторов.
Участвуй, особенно если ты:
- Студент или выпускник технического вуза
- ИТ-архитектор
- Backend-разработчик
- Аналитик
В 2025 году еще больше возможностей:
⚡ Только реальные кейсы
⚡ Обратная связь от опытных экспертов
⚡ Возможность стать частью команды ВТБ
Выбери трек:
- Прикладной архитектурный сервис
- Архитектурный стандарт надежности
- Архитектура данных цифрового рубля
Регистрируйся в составе команды или индивидуально. Нет команды? Поможем собрать!
Успей подать заявку до 19 мая, 15:00 МСК по ссылке.
Метод before()
Метод before()
используется для сравнения порядка двух объектов типа Date
.
Он позволяет проверить, идет ли одна дата перед другой.
Метод before()
определен в классе java.util.Date
и имеет следующий формат:
boolean before(Date date)Он сравнивает текущий объект
Date
с датой, переданной в качестве параметра, и возвращает:true
, если текущая дата идет раньше переданной даты.false
, если текущая дата идет позже переданной даты или эти даты равны.before()
мы проверяем, идет ли date1
раньше date2
.date1
содержит более раннюю дату, то метод before()
возвращает true
.Осталось всего 2 дня — углубитесь в функциональное программирование на Scala в Otus 📢
24 апреля в 20:00 пройдёт открытый вебинар с Алексеем Воронцом — руководителем разработки в Naumen, 14 лет опыта, из них 9 лет на Scala. Он расскажет:
— почему Scala — функциональный язык
— как работать с ключевыми библиотеками
— как повысить выразительность кода
Если вы уже знакомы со Scala или желаете перейти на него и хотите развивать функциональный подход в своих проектах — этот вебинар для вас.
Каждый участник:
— сможет задать вопросы эксперту
— получит скидку на полный курс по Scala-разработке
👉 Не упустите возможность перейти на новый уровень — регистрируйтесь, осталось 2 дня до начала
https://otus.pw/YFDw/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Блокирующий метод
Блокирующий метод (blocking method) — это метод, который приостанавливает выполнение текущего потока и ждет определенного события или условия.
Они используются для синхронизации потоков, например при работе с сетью или файлами.
При вызове блокирующего метода поток переходит в состояние ожидания и не выполняет других операций.
Метод блокирует поток до тех пор, пока не произойдет нужное событие, например данные не будут доступны для чтения.
Чтобы избежать блокировки всего приложения, блокирующие вызовы обычно заворачивают в отдельные потоки.
Например, метод readLine()
блокирует поток до тех пор, пока пользователь не введет строку и не нажмет Enter.
После ввода данных метод возвращает управление потоку и программа выводит введенную строку.
Таким образом, блокирующий вызов позволяет приостановить выполнение кода до наступления нужного события.
#это_база
#вопросы_с_собеседований
Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
Метод main может выбросить исключение. Это исключение будет передано в JVM (виртуальную машину Java). JVM отловит это исключение и завершит выполнение программы, выведя stack trace (трассировку стека) исключения.
Таким образом, исключение из main приведет к аварийному завершению программы.
Чтобы избежать этого, лучшей практикой является перехватывать исключения внутри main и обрабатывать их, не допуская выброса за его пределы.
Хотите глубже разобраться в функциональном программировании и писать более качественный код на Scala? Приходите на вебинар в Otus
24 апреля в 20:00 пройдёт открытый вебинар с Алексеем Воронцом — руководителем разработки в Naumen, 14 лет опыта, из них 9 лет на Scala. На практических примерах он покажет:
— почему Scala — функциональный язык
— как работать с ключевыми библиотеками
— как повысить выразительность кода
❗️ Если вы уже знакомы со Scala или только начинаете к нему присматриваться и хотите развивать функциональный подход в своих проектах — этот вебинар для вас.
Каждый участник:
— сможет задать вопросы эксперту
— получит скидку на полный курс по Scala-разработке
👉 Регистрируйтесь и сделайте свой код лучше
https://otus.pw/EMPN/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👩💻 JDBC — ваш швейцарский нож для работы с данными
Приглашаем на открытый урок.
🗓 22 апреля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
О чём поговорим:
✔️Основы JDBC: что это такое, зачем нужно и как работает
✔️Практические примеры выполнения сложных запросов
✔️Работа с транзакциями и обработка ошибок в JDBC
✔️ Оптимизация производительности при работе с данными через JDBC
Кому будет интересно:
Вебинар будет полезен разработчикам, инженерам по базам данных и архитекторам ПО, стремящимся улучшить навыки работы с базами данных и оптимизировать взаимодействие с данными.
В результате урока:
Вы научитесь эффективно использовать JDBC для работы с базами данных и сможете применять полученные знания в реальных проектах
🔗 Ссылка на регистрацию: https://otus.pw/ZWnw/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Хотите освоить программирование или сменить работу в IT?
А вы готовы всего за час создать и опубликовать целое приложение?
Отлично! Тогда присоединяйтесь к онлайн-конференции «Как создать первый проект на Python и Java с нуля»!
Новички в IT узнают:
- какой язык программирования лучше выбрать для старта
- как быстро создать и развернуть приложение
- как работают Python и Java на практике
- как размещать код на GitHub и работать с репозиториями
- какие дополнительные инструменты использовать для профессионального роста
Программисты на других языках, и те, кто ищет новые возможности в IT:
- поймёте, какие IT-технологии сейчас востребованы
- узнаете, какие навыки прокачивать для успешной смены деятельности
- отработаете навыки быстрой сборки и быстрого развёртывания проекта
- узнаете о новых возможностях для обучения и развития
Также вас ждёт квиз с призами!
Спикеры:
Сурен Хоренян: бэкенд-разработчик на Python, руководитель команды в «VK Рекламе»
Сергей Прощаев: Java-разработчик
Бонус! Скидка 7% на любой курс OTUS и полезные материалы в подарок!
18 апреля, 19:00 МСК
Бесплатно
Записаться на событие - https://otus.pw/k1k7/?erid=2W5zFK7P624
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.