Динамическое создание и выполнение метода в Java с использованием ASM
ASM позволяет динамически генерировать байт-код в Java. В этом примере создается класс с простым методом hello()
, который выводит сообщение в консоль.•
Создается класс HelloClass с методом hello()
.•
Метод hello()
динамически генерируется и выводит строку "Hello, ASM!" в консоль.
⚙️ Динамическое изменение поведения объектов с помощью InvocationHandler и Proxy
В Java можно динамически изменять поведение объектов, используя InvocationHandler
и Proxy
.
🗣️ Это полезно для создания прокси-объектов, которые могут оборачивать существующие объекты и добавлять новые функции, такие как логирование, кеширование или контроль доступа.
•
InvocationHandler позволяет перехватывать вызовы методов у прокси-объекта и добавлять дополнительное поведение, такое как логирование.•
Использование Proxy позволяет динамически создавать новый объект, который ведет себя как реальный объект, но с добавленным поведением.•
Этот подход позволяет добавлять новое поведение к существующим объектам без изменения их кода, что делает его мощным инструментом для реализации аспектно-ориентированного программирования (AOP).
Читать полностью…
➡️ Реализация шаблонного метода с использованием default методов в интерфейсах
Java 8 представила возможность добавлять методы с реализацией по умолчанию (default
) в интерфейсы.
🗣️ Это открывает интересные возможности для создания шаблонных методов, которые могут быть переопределены в классах, реализующих интерфейс.
• default
методы в интерфейсах позволяют задавать базовое поведение, которое можно переопределить в классах, реализующих интерфейс.
Читать полностью…
➡️ JOOQ
JOOQ (Java Object Oriented Querying) — это мощная библиотека для построения SQL-запросов в Java с использованием объектно-ориентированного подхода. Она генерирует типизированный SQL-код на основе вашей базы данных, что позволяет избежать ошибок на этапе компиляции.
🗣 JOOQ — идеальный инструмент для тех, кто хочет сочетать мощь SQL с безопасностью и удобством объектно-ориентированного программирования в Java. Если вы еще не пробовали JOOQ, самое время начать!
🔗 Ссылочка на доку
➡️ Stream API и Collectors.toMap
Stream API позволяет легко трансформировать коллекции. В данном примере используется Collectors.toMap
для создания мапы, где ключами являются строки из списка, а значениями — их длины.•
Использование LinkedHashMap::new
гарантирует сохранение порядка элементов, как в исходном списке, что может быть полезно в ситуациях, где порядок имеет значение.
⁉️ Spring Security — Alohomora для Java-разработчиков
Хотите освоить ключевой навык для Java-разработчика и обеспечить безопасность данных в своих проектах?
Ждем вас на открытом вебинаре 27 августа в 20:00 мск, где мы разберем:
- основы Spring Security;
- применение Spring Security для защиты данных и повышения безопасности проектов;
- применение магии «Alohomora» для открытия запертых дверей в мире безопасности.
Урок идеально подходит для Java- и Kotlin-разработчиков.
Встречаемся в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/czIbk7Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔍 Поиск в глубину
Это метод рекурсивного исследования всех вершин графа, начиная с заданной стартовой вершины, сначала посещая как можно больше вершин вдоль каждой ветви, прежде чем вернуться.
Этот пример иллюстрирует обход в глубину для следующего графа:
0
/ \
1-----2
\
3
Начиная с вершины 2, алгоритм посетит вершины в следующем порядке: 2, 0, 1, 3.
Ну как там с фичами?
Обсудите все рабочее и актуальное на JVM Day — конференции от Т-Банка для опытных Java- и Scala-разработчиков.
В программе — 15+ докладов. В блоке по Java расскажут про фичи, инструменты и фреймворки. А по Scala — разберут подходы к бэкенд-разработке с использованием экосистемы и практику функционального программирования.
После — афтепати с развлечениями, музыкой и фотозоной. Полезные знакомства тоже будут.
Встреча пройдет 31 августа в штаб-квартире Т-Банка. Участие бесплатное. А регистрация тут
erid:2VtzquYEL7w
Реклама. АО "ТБанк", ИНН 7710140679, лицензия ЦБ РФ № 2673
🔴 Новый сервис для тех, кто любит решать задачки и хочет подтянуть свои навыки в разработке.
Это CodeRun. В нём найдёте задачи по фронтенду, бэкенду, мобильной разработке, аналитике и машинному обучению. А ещё комьюнити, в котором можете и попросить помощи, и посоревноваться с участниками.
Подписывайтесь ✨ @yandex
Нестатические блоки инициализации
Нестатические блоки инициализации — это специальные блоки кода, которые используются для инициализации полей экземпляра (переменных) объекта при создании экземпляра класса. Они предназначены для выполнения кода инициализации, который должен быть выполнен каждый раз при создании нового объекта класса.
Нестатические блоки инициализации описываются внутри класса и выполняются при создании экземпляра класса перед выполнением конструктора. Они объявляются с использованием фигурных скобок и не имеют имени.
Thread.UncaughtExceptionHandlerThread.UncaughtExceptionHandler
— это интерфейс в языке программирования Java, который используется для обработки неотловленных исключений (uncaught exceptions) в потоках (threads). Когда исключение возникает в потоке и не обрабатывается внутри этого потока, оно передается обработчику неотловленных исключений, если такой обработчик был установлен.
Интерфейс Thread.UncaughtExceptionHandler
имеет один метод:
void uncaughtException(Thread t, Throwable e);
Метод split
Метод split() используется для разбиения строки на подстроки по заданному разделителю. Он принимает один параметр — регулярное выражение, по которому будет производиться разбиение строки и возвращает массив строк (String[]), содержащий подстроки.
Если в качестве разделителя передать пробел (" "), то строка разбивается по пробелам на отдельные слова. Также можно указать число в качестве второго параметра, это будет лимит количества элементов.
#это_база
Поднимаем Кафку, не опуская рук. Отказоустойчивый кластер на вашем ПК
22 августа приглашаем вас на вебинар от Слёрма с Василием Калугиным, владельцем корпоративного сервиса Apache Kafka в АО «ЭР-Телеком Холдинг», чтобы поговорить про Кафку и научиться разворачивать кластер на своём железе.
На вебинаре:
🥹 Расскажем про язык Кафки: топики, партиции, продюсеры-консьюмеры, кластер, ноды.
🥹 Рассмотрим принципы её работы: как работают очереди сообщений, сколько должно быть консьюмеров для эффективной вычитки, как повысить надёжность кластера с помощью репликации данных.
🥹 И покажем, как развернуть кластер Кафки на своём ПК с 3 нодами, schema-registry и авторизацией.
Обычно в инструкциях кластер из 1 ноды, зукипера и 1 брокера, но это не наш путь. Учим работать с реальными исходными данными, а не на теоретических примерах 😉
😢И наш традиционный розыгрыш — один из участников вебинара получит бесплатное место на курс «Apache Kafka для разработчиков».
🫣22 августа в 14:00 мск
🫣Регистрация — по ссылке
Реклама ООО «Слёрм» ИНН 3652901451
service() service()
является частью жизненного цикла сервлета. Сервлеты в Java используются для создания динамических веб-приложений. Когда запрос поступает от клиента (например, браузера) к веб-приложению, сервлет обрабатывает этот запрос.
Метод service()
вызывается контейнером сервлетов (например, сервером приложений) для обработки запроса. Контейнер передает объекты ServletRequest
и ServletResponse
в метод service()
. Разработчик сервлета должен реализовать этот метод, чтобы обработать запрос и сгенерировать ответ.
Обычно, разработчики переопределяют метод doGet()
или doPost()
вместо service()
, в зависимости от того, какой тип HTTP-запроса они хотят обрабатывать. Метод service()
в своей реализации делегирует вызовы соответствующим методам обработки запросов (doGet()
, doPost()
, и так далее).
#для_продвинутых
PipedOutputStreamPipedOutputStream
представляет собой выходной поток данных, который можно использовать для записи байтовых данных. Однако его особенность заключается в том, что он предназначен для использования в связке с PipedInputStream
, обеспечивая таким образом межпоточное взаимодействие. Когда данные записываются в PipedOutputStream
, они становятся доступными для чтения из соответствующего PipedInputStream
.
#для_продвинутых
❔ Какие три элемента – самые важные в жизни сотрудника внутри IT-компании?
включение в бизнес-процессы компании
развитие в компании
парадигма «мотивация – демотивация – увольнение/рост»
Каждый из этих элементов может стать как трамплином, так и проблемой. И для сотрудника, и для команды, и даже для целой организации.
На конференции «OTUS CONF: поддержка и управление в IT-командах»
вы узнаете:
- Как лучше «подключать» удалённых сотрудников к бизнес-процессам организации
- Как давать обратную связь и как на неё реагировать без ущерба для профессиональных отношений
- Как повысить уровень вовлечённости сотрудников
- Как бороться с «тихими увольнениями»
Будет интересно тимлидам, руководителям в IT, эйчарам, HRBP
Присоединяйтесь, слушайте дискуссии экспертов в сферах HR и управления, задавайте вопросы
28 августа, 19:00 МСК
Бесплатно
➡️ Записаться на конференциюРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📚 Пройди тест на знание Java и получи доступ к 🌿🌿 открытым урокам по Spring
🕗 Два открытых урока можно посмотреть без регистрации и оценить формат обучения. Для доступа ко всем открытым урокам из курса «Разработчик на Spring Framework» от OTUS необходимо пройти входное тестирование: ответить на 21 вопрос и уложиться в тайминг.
📊 -Курс рассчитан на профессионалов с практическим опытом работы на Java.
- Мы будем 5 месяцев погружать вас в теорию и практику Spring Framework. - Дадим 18 практических работ. Процесс review сдаваемой работы максимально приближен к тому, каким он мог быть на реальном проекте. Помимо этого, мы попросим вас сдать дипломную работу, каких скучных записанных занятий, только живые онлайн-лекции, интересные практические задачи и развернутая обратная связь от лучших экспертов ниши. 📅 Старт группы уже 30 сентября 2024г. Доступна рассрочка на обучение.
➡️ НАЧАТЬ ТЕСТИРОВАНИЕРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👩💻 Типы данных Java: идентификаторы и примитивы
Хотите глубже понять типы данных в Java? Ждем вас на открытом вебинаре 2 сентября в 20:00 мск,
где мы разберем:
➡️ как работать с идентификаторами и примитивами в Java;
➡️ как решать задачи, аналогичные экзаменационным, и набить руку на примерах;
➡️ все возникающие вопросы.
Урок идеально подходит для тех, кто хочет изучить Java вглубь, узнать тонкости и хитрости языка, а также для Java-разработчиков, стремящихся структурировать свои знания и лучше подготовиться к собеседованиям.
Спикер Дмитрий Коган — опытный разработчик, председатель совета предприятия в DXC, публицист, спортивный журналист и блогер.
Встречаемся в преддверии старта курса «Углубленное изучение языка Java».
Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/czWeuE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ Apache Commons Lang
Apache Commons Lang — это библиотека, которая расширяет стандартную библиотеку Java, предоставляя множество утилит для работы со строками, числовыми операциями, рефлексией и другими общими задачами программирования.
🗣 Если вам часто приходится манипулировать строками, работать с числами или использовать рефлексию, Apache Commons Lang может стать незаменимым помощником.
🔗 Ссылочка на доку
✔️ Работа с WeakHashMap для управления памятью
WeakHashMap — это специализированная реализация интерфейса Map, которая позволяет хранить ключи с использованием слабых ссылок.•
Это означает, что если объект-ключ больше не имеет сильных ссылок в программе, он может быть очищен сборщиком мусора, что помогает управлять памятью более эффективно.
➡️ Работа с EnumMap для эффективного хранения данных
EnumMap — это специализированная реализация интерфейса Map, которая используется для картирования значений перечислений (enum) на другие объекты.
🗣️ В отличие от обычных карт, EnumMap оптимизирован для работы с перечислениями, обеспечивая высокую производительность и компактность хранения.Читать полностью…
‼️Тест по React JS от OTUS
— Ответьте на 30 вопросов и проверьте, насколько хорошо вы знаете язык.
Сможете сдать — пройдёте на продвинутый онлайн-курс по React.js по спец. цене!
👉ПРОЙТИ ТЕСТ - https://vk.cc/czLmNM
Курс доступен в рассрочку.
❇️ Пройдите тест и получите:
✔️ Живое общение с экспертами
✔️Получите видео-курс по Git в подарок
✔️ Лучшие открытые уроки прошлых наборов курса
✔️ Продвинутые темы и практика на «боевых» задачах уровня Middle+
✔️ Скидку на прохождение онлайн курса «React.js Developer»
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Anonymous Inner Class
Anonymous Inner Class (Анонимный Внутренний Класс) — это специальный тип внутреннего класса, который определяется без имени и создается «на лету» внутри блока кода или выражения. Он является удобным способом создания классов, когда класс нужен только для реализации какого-то интерфейса или абстрактного класса, и нет необходимости создавать отдельный именованный класс.
Анонимные внутренние классы обычно используются для создания объектов, которые реализуют интерфейсы или наследуются от абстрактных классов. Они часто используются в событийном программировании и обработке событий в пользовательском интерфейсе, где нужно определить обратный вызов (callback) или обработчик (handler) на месте.
#для_продвинутых
DateTimeFormatterDateTimeFormatter
— это класс в языке программирования Java, который используется для форматирования и разбора даты и времени. Он является частью пакета java.time, который был введен в Java 8 для улучшения работы с датами и временем.DateTimeFormatter
позволяет задавать желаемый формат вывода даты и времени, а затем преобразовывать объекты LocalDate, LocalTime, LocalDateTime, ZonedDateTime
и другие объекты, представляющие дату и время, в строки с этим форматом, а также выполнять обратную операцию — парсить строки с датой и временем в объекты даты и времени.
#для_продвинутых
Ворвись в IT с Романом Сакутиным
Онлайн-школы обещают небо в алмазах для всех начинающих айтишников. Но сколько в этом правды? Роман, айтишник с 10 летним опытом, сделал бесплатный симулятор разных айти профессий для полных новичков.
В нём вы сможете пройти свой первый рабочий день под руководством наставника даже если вы абсолютный ноль и получить награду в конце.
Играйте бесплатной в боте - /channel/break_into_it_bot?start=TG_IN_20082024
erid: LjN8KGWhZ
One Weekend Offer для Java-разработчиков 👨💻
Если вы — Java-разработчик уровня Middle/Senior/Lead с опытом работы от 3 лет, то присоединяйтесь к команде Сбера!
31 августа – 1 сентября вы сможете пройти все этапы отбора, познакомиться с будущей командой и получить заветный оффер. Какие задачи будут в вашем планере?
▫️ Проводить декомпозицию и оценку задач.
▫️ Работать в тесной связке с аналитиками и разработчиками front-end.
▫️ Выполнять code review.
▫️ Проектировать архитектуру приложения.
Наша команда разрабатывает высоконагруженные сервисы с использованием Cloud Native подхода к созданию, развёртыванию и управлению современными приложениями в средах облачных вычислений.
Откликайтесь, и увидимся на выходных! 😉
PriorityQueue
В Java можно использовать класс PriorityQueue
для реализации приоритетной очереди. PriorityQueue
предоставляет мин-кучу (min-heap), что означает, что на вершине всегда находится элемент с наименьшим значением при их извлечении. Если вам нужна макс-куча (max-heap), вы можете использовать класс Collections.reverseOrder()
для изменения порядка сравнения элементов.
Обратите внимание, что приоритетная очередь автоматически упорядочивает элементы при добавлении и предоставляет эффективное извлечение элемента с наименьшим приоритетом. Однако, если вам нужна более сложная логика сравнения элементов, вы можете использовать собственный компаратор при создании PriorityQueue
.
#для_продвинутых
Класс Assert
Класс Assert предоставляет удобные методы для проверки условий во время выполнения программы. Он позволяет программистам добавлять проверки, которые помогают выявлять ошибки и неправильное поведение в программе на ранних этапах разработки. Когда условие не выполняется (ложно), Assert генерирует исключение AssertionError, чтобы предупредить разработчика о проблеме.
#для_продвинутых
Trie
Trie (или префиксное дерево) — это древовидная структура данных, предназначенная для эффективного хранения множества строк, где ключи представляют собой последовательности символов. Trie предоставляет эффективный способ поиска, вставки и удаления строк. Он основан на представлении ассоциативного массива, где ключом является строка.
Основные компоненты Trie:
Узел Trie (Trie Node): Каждый узел содержит ссылки на дочерние узлы, представляющие следующие символы в строке, а также флаг, указывающий, является ли этот узел концом строки.
Корень Trie (Trie Root): Вершина дерева, которая не содержит символ, но имеет ссылки на дочерние узлы, представляющие все возможные первые символы строк.
Операции Trie:
Вставка (Insertion): Для вставки строки в Trie, мы начинаем с корня и последовательно добавляем узлы для каждого символа строки. При этом, если узел уже существует для данного символа, мы просто переходим к следующему узлу. Последний узел строки помечается как конец строки.
Поиск (Search): Поиск строки в Trie осуществляется путем последовательного перехода от корня к листу, используя символы строки в качестве направляющих индикаторов. Если в какой-то момент мы достигаем узла, у которого нет соответствующего символа или строки, то строка отсутствует в Trie.
Поиск по префиксу (Prefix Search): Эта операция позволяет определить, существует ли какая-либо строка, начинающаяся с заданного префикса. Мы просто выполняем поиск, не обязательно дойдя до конца строки.
#для_продвинутых
Collections.shuffleCollections.shuffle
— это метод в библиотеке Java, который перемешивает элементы коллекции в случайном порядке. Этот метод принимает на вход коллекцию и использует генератор случайных чисел для перемешивания элементов.
В примере на картинке создается список чисел от 1 до 10, затем вызывается Collections.shuffle
(numbers), чтобы перемешать элементы списка. После этого выводится результат.
Обратите внимание, что shuffle
изменяет переданную коллекцию, а не создает новую. Если вам нужно сохранить оригинальный порядок элементов, создайте копию коллекции перед вызовом метода shuffle
.
#для_начинающих