KeyListener KeyListener
— это интерфейс в Java, который позволяет отслеживать события, связанные с клавиатурой. Он используется для определения того, когда пользователь нажимает, отпускает или печатает клавишу.
#для_продвинутых
Офер в Яндекс для опытных бэкендеров за два дня
24–25 августа приглашаем бэкендеров с опытом работы от пяти лет получить офер в Яндекс через multitrack за 2 дня. Достаточно решить задачи онлайн до 20 августа и пройти несколько технических секции 24 августа, чтобы уже 25-го получить офер и выбрать три команды, к которым вам было бы интересно присоединиться.
Как правило, за несколько собеседований сложно понять, подходит ли вам команда и наоборот. Multitrack позволит вам поработать в трёх разных командах Яндекса и выбрать подходящую. Вы сможете погрузиться в рабочие процессы, познакомиться с будущими коллегами и понять, с какими задачами и технологиями хотите работать.
Узнать подробности и зарегистрироваться.
Реклама. ООО "Яндекс". ИНН 7736207543
DatagramPacketDatagramPacket
— это класс в Java, который представляет собой пакет датаграмм. Датаграммы используются для реализации бессоединительной службы доставки пакетов. Это означает, что каждый пакет отправляется независимо от других пакетов, и нет гарантии, что они будут доставлены в том же порядке, в котором были отправлены.
#для_продвинутых
GZIPInputStreamGZIPInputStream
— это класс в Java, который используется для декомпрессии данных, сжатых с помощью алгоритма gzip
. Gzip
– это популярный формат сжатия, который используется для уменьшения размера файлов без значительной потери данных.
#для_продвинутых
Какое из следующих утверждений о потоках неверно?
1. Если метод start()
вызывается дважды для одного и того же объекта Thread
, во время выполнения генерируется исключение.
2. Порядок, в котором запускались потоки, может не совпадать с порядком их фактического выполнения.
3. Если метод run()
вызывается напрямую для объекта Thread
, во время выполнения генерируется исключение.
4. Если метод sleep()
вызывается для потока, во время выполнения синхронизированного кода, блокировка не снимается.
Правильный ответ: 3. Если метод run()
вызывается напрямую для объекта Thread
, во время выполнения исключение не генерируется. Однако, код, написанный в методе run()
будет выполняться текущим, а не новым потоком. Таким образом, правильный способ запустить поток – это вызов метода start()
, который приводит к выполнению метода run()
новым потоком.
Вызов метода start()
дважды для одного и того же объекта Thread
приведёт к генерированию исключения IllegalThreadStateException
во время выполнения, следовательно, утверждение 1 верно. Утверждение 2 верно, так как порядок, в котором выполняются потоки, определяется Планировщиком потоков, независимо от того, какой поток запущен первым. Утверждение 4 верно, так как поток не освободит блокировки, которые он держит, когда он переходит в состояние Ожидания.
Промпт-инженеринг — новый хайп или перспективная профессия?
Рассказываем про направление с большим потенциалом и маленькой конкуренцией на рынке на нашей бесплатной лекции.
По итогам эфира вы узнаете:
— Кто такой промт-инженер и чем он занимается;
— Как интегрировать скиллы промт-инжинеринга в работу, если вы работаете в IT;
— Кому в действительности нужны его услуги и какие результаты это даст;
— Сколько платят промт-инженеру в России и мире;
— Кто может стать промт-инженером и какой порог входа;
Кликай на ссылку и забирай подробную информацию вместе с классными бонусами.
erid: LjN8JveAZ
ООО Зерокодер, ИНН 9715401631
Класс TreeMap
Класс TreeMap
реализует интерфейс Map
, используя дерево. TreeMap
обеспечивает эффективное средство хранения пар ключ/значение в отсортированном порядке и позволяет быстро извлекать данные.
Следует отметить, что, в отличие от хэш-карты, карта деревьев гарантирует, что ее элементы будут отсортированы в порядке возрастания ключа.
Все методы и конструкции класса TreeMap
можно посмотреть здесь.
#для_продвинутых
Подчеркивание в числовых литералах
В Java SE 7 и более поздних версиях символы подчеркивания могут использоваться в числовых литералах без появления каких-либо предупреждений или ошибок в выводе.
Газпромбанк открывает набор на оплачиваемую стажировку GPB.IT Factory: Perl-разработка
На стажировке ты приобретешь или укрепишь навыки программирования на надежном языке Perl и получишь опыт коммерческой разработки. И все это на реальных задачах банка!
Почему стоит подать заявку:
– ЗП до 150 000 рублей до вычета налога;
– работа в удаленном или гибридном формате;
– нет требований к опыту в трудовой.
Лучшие участники смогут остаться в штате Газпромбанка после стажировки!
Регистрируйся до 11 августа по ссылке 👈
Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap
Ответ на картинке.
Что такое double checked locking Singleton?
double checked locking Singleton - это один из способов создания потокобезопасного класса реализующего шаблон Одиночка. Данный метод пытается оптимизировать производительность, блокируясь только случае, когда экземпляр одиночки создаётся впервые.
Следует заметить, что требование volatile обязательно. Проблема Double Checked Lock заключается в модели памяти Java, точнее в порядке создания объектов, когда возможна ситуация, при которой другой поток может получить и начать использовать (на основании условия, что указатель не нулевой) не полностью сконструированный объект. Хотя эта проблема была частично решена в JDK 1.5, однако рекомендация использовать volatile для Double Cheсked Lock остаётся в силе.
#вопросы_с_собеседований
При помощи чего формируются запросы к базе данных?
Для выполнения запросов к базе данных в Java используются три интерфейса:
☕️ java.sql.Statement
- для операторов SQL без параметров;
☕️ java.sql.PreparedStatement
- для операторов SQL с параметрами и часто выполняемых операторов;
☕️ java.sql.CallableStatement
- для исполнения хранимых в базе процедур.
Объекты-носители интерфейсов создаются при помощи методов объекта java.sql.Connection:
☕️ java.sql.createStatement()
возвращает объект Statement;
☕️ java.sql.prepareStatement()
возвращает объект PreparedStatement;
☕️ java.sql.prepareCall()
возвращает объект CallableStatement;
#вопросы_с_собеседований
Напишите пример перехвата и обработки исключения в блоке try — catch метода
Ответ на картинке.
#вопросы_с_собеседований
Можно ли перегружать метод main() в Java?
Да, метод main() может быть перегружен, но JVM или виртуальная машина Java вызывает только исходный метод main().
Метааннотации
Метааннотации — это особые аннотации, которые используются для описания других аннотаций. Они позволяют определять параметры, которые будут применяться к аннотациям, а также правила, которые эти аннотации должны соблюдать.
Метааннотации могут использоваться для следующих целей:
— Определение параметров аннотаций. Метааннотации могут использоваться для определения параметров, которые будут применяться к аннотациям. Например, метааннотация @Retention
определяет, когда аннотация будет доступна: в исходном коде, во время компиляции или во время выполнения.
— Определение правил для аннотаций. Метааннотации могут использоваться для определения правил, которые должны соблюдать аннотации. Метааннотация @Target
определяет, к каким элементам кода можно применить аннотацию.
— Создание новых аннотаций. Метааннотации можно использовать для создания новых аннотаций. Например, можно использовать метааннотацию @Target
для создания аннотации, которая может применяться только к классам.
#для_начинающих
SoftReferenceSoftReference
(мягкая ссылка) — это класс, который представляет собой ссылку на объект, который может быть удален сборщиком мусора (GC) в любой момент, если память нужна для других объектов.
Принцип работы:
— Создание: SoftReference
создается с помощью конструктора, который принимает ссылку на объект.
— Доступ к объекту: Для доступа к объекту, на который ссылается SoftReference
, используется метод get()
.
— Очистка: GC может очистить SoftReference
в любой момент, если память нужна для других объектов.
Когда использовать SoftReference:
— Кэширование: SoftReference
можно использовать для реализации кэшей, где важно сохранить объекты в памяти, если это возможно, но не обязательно.
— Сохранение метаданных: SoftReference
можно использовать для хранения метаданных об объектах, которые не являются критичными для работы приложения.
#для_продвинутых
InvocationHandlerInvocationHandler
— это интерфейс, реализуемый обработчиком вызовов для экземпляра прокси. Каждый экземпляр прокси имеет связанный с ним обработчик вызовов. Когда метод вызывается на экземпляре прокси, вызов метода кодируется и отправляется в метод invoke
его обработчика вызовов.
#для_продвинутых
ResultSetResultSet
в Java представляет собой объект, который содержит данные, полученные в результате выполнения запроса к базе данных. Он используется для итерации по строкам и столбцам результата запроса и доступа к значениям данных.
#для_начинающих
Бэкенд-разработчики, вышла новая версия CodeRun с задачами от разработчиков Яндекса и внешних экспертов
CodeRun — бесплатный онлайн-тренажер с кастомизацией сложности и большим каталогом задач. Здесь можно готовиться к техническим собеседованиям по программированию и заполнять пробелы в знаниях. А еще решать тематические и авторские подборки и задания с прошлых турниров и контестов.
Главная особенность: здесь есть система рейтинга и баллов, а также сезонные турниры. По итогам каждого сезона лучшие кодеры могут получить мерч, сертификаты и даже возможность попасть в штат Яндекса по упрощенному найму.
2 сезон уже начался: решайте задачи и зарабатывайте баллы на ценные призы.
Как между собой связаны Iterable и Iterator?
Интерфейс Iterable
имеет только один метод - iterator()
, который возвращает Iterator
.
Java Bean
JavaBeans - это стандартный подход к созданию переносимых и повторно используемых компонентов. Они представляют собой классы, которые следуют определенным соглашениям и обеспечивают удобный способ управления состоянием и поведением объектов.
Основные характеристики JavaBeans:
1. Класс должен быть публичным и иметь открытый конструктор без аргументов.
2. Приватные поля класса должны быть доступны с помощью геттеров и сеттеров (getter
и setter
методы).
3. Класс должен быть сериализуемым, то есть должен реализовывать интерфейс Serializable
.JavaBeans
также могут иметь дополнительные свойства, такие как события и методы уведомления, которые позволяют другим компонентам реагировать на изменения состояния.
#вопросы_с_собеседований
Можно ли «воскресить» объект, ставший подходящим для сборки мусора?
Когда объект становится пригодным для сборки мусора, GC должен запустить для него метод finalize. Метод finalize гарантированно запускается только один раз, поэтому сборщик мусора помечает объект как завершенный и дает ему паузу до следующего цикла.
В методе finalize вы можете технически «воскресить» объект, например, присвоив его статическому полю. Объект снова станет живым и не подходящим для сборки мусора, поэтому сборщик мусора не соберет его в следующем цикле.
Однако объект будет помечен как завершенный, поэтому, когда он снова станет приемлемым, метод finalize вызываться не будет. По сути, вы можете провернуть этот трюк с «воскрешением» только один раз за время существования объекта. Имейте в виду, что этот уродливый прием следует использовать только в том случае, если вы действительно знаете, что делаете, но понимание этого приема дает некоторое представление о том, как работает сборщик мусора.
#вопросы_с_собеседований
Можно ли объявить класс абстрактным, если в нем нет абстрактных членов? Какова может быть цель такого класса?
Ответ:
Да, класс можно объявить абстрактным, даже если он не содержит абстрактных членов. Из-за абстрактности его объект не может быть создан, но сам класс может служить корневым для некоторой иерархии, предоставляя методы, которые могут быть полезны для реализаций.
Метод copyValueOf()
Метод copyValueOf() в Java имеет две различные формы:
1) public static String copyValueOf(char[] data) — возвращает строку, которая представляет собой последовательность символов в заданном массиве.
2)public static String copyValueOf(char[] data, int offset, int count) — возвращает строку, которая представляет собой последовательность символов в заданном массиве.
Параметры:
data — массив символов;
offset — начало смещения подмассива;
count — длина подмассива.
Узнаем разницу между 2 датами, представленными в виде строк
Для вычисления разницы между двумя датами, представленными в виде строк, можно использовать классы java.time.LocalDate и java.time.temporal.ChronoUnit из пакета java.time.
В этом примере мы используем метод LocalDate.parse()
для преобразования строковых значений в объекты типа LocalDate. Затем мы используем метод ChronoUnit.between()
для вычисления разницы между двумя датами в днях, месяцах и годах.
Обратите внимание, что вы должны использовать формат даты "yyyy-MM-dd" для парсинга строковых значений даты. Если ваши строки даты имеют другой формат, вам может потребоваться использовать другой метод для преобразования их в объекты LocalDate.
Ловим лето с пользой на МТС True Tech Camp 🏖
Залетай на идеальный летний ивент для опытных it-специалистов, продактов, дизайнеров и тех, кто в теме digital.
26 июля / Dream Beach Club
Наш кэмп — место, где можно отвлечься от рутины и классно провести время с такими же крутыми спецами, как ты 😎
В программе:
🌊 Летний вайб и тусовка у бассейна
🏄 Гонка на яхтах и заплывы на сапах
🤖 Бои роботов
👨🎤 Отличное настроение под музыку DJ и звёздных хедлайнеров
🏸 Лёгкие активности и коктейли
😈 Фановые кодерские челленджи
🎤 Общение с IT-экспертами и лидерами индустрии, а также выступления CREAM SODA и UMA2RMAN
Регистрируйся на truetechcamp.ru, чтобы успеть занять место на лежаках!
В чем разница между interrupted() и isInterrupted()?
Механизм прерывания работы потока в Java реализован с использованием внутреннего флага, известного как статус прерывания. Прерывание потока вызовом Thread.interrupt() устанавливает этот флаг. Методы Thread.interrupted() и isInterrupted() позволяют проверить, является ли поток прерванным.
Когда прерванный поток проверяет статус прерывания, вызывая статический метод Thread.interrupted(), статус прерывания сбрасывается.
Нестатический метод isInterrupted() используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
#вопросы_с_собеседований
Приглашаем на Backend Meetup Яндекс 360 18 июля
Яндекс 360 — это цифровое пространство, в котором легко планировать важные события, сохранять и делиться воспоминаниями. Мы делаем всем знакомые сервисы: Диск, Почту, Телемост, Мессенджер и другие. Работаем с нагрузками >100 000+ RPS и создаём отказоустойчивые, легко масштабируемые продукты, которыми пользуются 80+ млн человек каждый месяц — но пока мало рассказываем о себе. Пришло время это исправить!
Приглашаем вас на митап, где мы обсудим решения нетривиальных архитектурных задач в Почте и Телемосте. В программе:
🔹 «Запускаем таски по расписанию: когда важна высокая частота, а креши дорого стоят» — Илья Григорьев, разработчик в Телемосте
Илья расскажет про архитектуру и алгоритм работы самописного фреймворка Pecker, который помогает запускать таски с высокой частотой.
🔹 «13 миллиардов счётчиков и 220k RPS на запись: что считает Спамооборона о ваших письмах» — Тимур Нургалиев, тимлид в Спамообороне
Тимур поделится деталями работы Спамообороны и опытом в реализации масштабируемого отказоустойчивого сервиса, который защищает пользователей от миллиардов спам-сообщений.
Регистрируйтесь на митап здесь.
Трюк с битовыми операциями
Этот код демонстрирует обмен значений двух переменных (a и b) без использования дополнительной временной переменной.
Он использует битовую операцию XOR (^). Ключевой момент здесь в том, что XOR двух одинаковых чисел возвращает 0, а XOR числа с 0 возвращает само это число. Таким образом, когда мы применяем XOR к a и b и затем обратно, мы фактически обмениваем их значения.
Блокирующий метод
Блокирующий метод — это метод, который временно останавливает выполнение текущего потока до завершения определенного условия или операции. Блокирующие методы часто используются для синхронизации работы потоков или для ожидания определенных условий.
Существует несколько способов сделать метод блокирующим. Один из способов — это использовать ключевое слово synchronized
. Метод, помеченный ключевым словом synchronized
, блокирует объект, на котором он вызывается. Это означает, что ни один другой поток не может вызвать этот метод, пока он не будет завершен.
Метод на картинке блокирует объект, на котором он вызывается, до тех пор, пока он не завершит свою работу.
#для_начинающих