Изучаем Java. По вопросам сотрудничества: @seniorvladislav
➡️ 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
.
#для_продвинутых
PhaserPhaser
очень похож на более известную CountDownLatch
. Однако он предоставляет некоторые дополнительные функции. Он позволяет нам установить динамическое количество потоков, которые должны ждать перед продолжением выполнения.
С Phaser
определенное количество потоков должно дождаться барьера, прежде чем перейти к следующей фазе выполнения. Благодаря этому мы можем координировать несколько фаз выполнения.
#для_продвинутых
➡️ Пример Singleton в Java
🗣️ Этот код демонстрирует две реализации паттерна Singleton в Java, который гарантирует, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к этому экземпляру.
•
В первой реализации используется класс с приватным конструктором и статическим методом для получения единственного экземпляра.•
Во второй реализации используется перечисление (enum), что обеспечивает автоматическую гарантию единственного экземпляра и потокобезопасность.
Читать полностью…
❕ Есть одна штука, которая мешает развивать продукт и внедрять новые функции.
Это устаревший легаси-монолит.
Поэтому архитектуру легаси-системы нужно обновлять. Однако процесс обновления часто влечёт за собой простои, баги и системные отказы.
Так как же всего этого избежать?
Поговорим на открытом вебинаре «Как обновить легаси-монолит и не поседеть?»
На встрече выступит Алексей Ягур, действующий тимлид с большим опытом программирования в ведущих компаниях.
⌨️Вы узнаете:
- Как проводить аудит существующей системы и планировать миграцию
- О различных подходах к обновлению легаси-монолитов
- Об актуальных инструментах и методиках, которые упрощают процесс миграции
- О том, как снизить риски при переходе на новую архитектуру
👍Бонус! Всем участникам – скидка 5% на любой курс OTUS и бесплатный чек лист по переходу от монолита к микросервисам
13 августа
19:00 МСК
Бесплатно
✅ Записаться на событиеРеклама. ООО «Отус онлайн-образование», ОГРН 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
.
#для_начинающих
Single Responsibility Principle
Принцип единственной ответственности (Single Responsibility Principle, SRP) является одним из принципов SOLID, предложенных Робертом Мартином. Этот принцип гласит, что у класса должна быть только одна причина для изменения. Иными словами, класс должен выполнять только одну ответственность.
Применительно к Java это означает, что класс должен быть спроектирован так, чтобы он занимался только одним аспектом функциональности. Если у класса есть более одной обязанности, его стоит разделить на несколько классов, каждый из которых будет отвечать за свою конкретную обязанность.
#для_продвинутых
➡️ Отправка email с использованием JavaMail API
Метод postMail
отправляет письмо на заданные адреса. Он принимает список получателей, тему, сообщение и адрес отправителя.
⚙️ Настраивается соединение с SMTP-сервером, создается сессия и сообщение. Устанавливаются адрес отправителя и получателей, заголовки, тема и текст сообщения.
✔️ Затем сообщение отправляется с помощью метода Transport.send
.
➡️ Скриншот в Java
🗣️ Этот код выполняет захват экрана и сохраняет его как изображение в формате PNG.
•
Получает размер экрана с помощью Toolkit.getDefaultToolkit().getScreenSize()
.•
Создает прямоугольник, соответствующий размеру экрана.•
Создает объект Robot
для выполнения действий, связанных с автоматизацией, таких как захват экрана.•
Захватывает изображение экрана в виде объекта BufferedImage
.•
Сохраняет захваченное изображение в файл с указанным именем и форматом PNG с помощью ImageIO.write()
.
Читать полностью…