№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist
👩💻 SpELые приложения на Spring
Присоединяйтесь к открытому уроку, узнайте, как динамически выражать и обрабатывать данные в Spring-приложениях.
🗓 21 мая в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
О чём поговорим:
✔️Разоберем, для чего нужен SpEL.
✔️Рассмотрим, в каких проектах Spring его можно встретить.
Кому будет интересно:
Spring-разработчикам, Java-бэкенд-инженерам, архитекторам ПО, IT-специалистам и студентам, заинтересованным в технологиях Spring.
В результате урока:
Узнаете, для чего нужен SpEL и где его можно применять.
🔗 Ссылка на регистрацию: https://otus.pw/fBo8/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
TreeMap
TreeMap - это класс, который реализует интерфейс Map и представляет отображение, где ключи хранятся в отсортированном порядке. TreeMap
хранит элементы в красно-черном дереве, что обеспечивает быстрый доступ и эффективный поиск элемента по ключу.
Элементы в TreeMap
автоматически сортируются по ключу. Также можно использовать методы get(key)
, remove(key)
и др., чтобы получить, удалить или изменить элементы в TreeMap
.
В этом примере мы создаем TreeMap
, добавляем в нее несколько элементов и выводим все элементы. При запуске программы в консоли вы увидите следующий вывод:
1 - одинЧитать полностью…
2 - два
3 - три
4 - четыре
5 - пять
Spring Context
Модуль Spring
Context
является частью фреймворка Spring
и представляет собой IoC (Inversion of Control) контейнер. Он отвечает за управление объектами приложения и использует внедрение зависимостей для достижения инверсии управления.
Интерфейсы BeanFactory
и ApplicationContext
представляют контейнер Spring IoC. - BeanFactory
является корневым интерфейсом для доступа к контейнеру Spring
и предоставляет базовые функции для управления бинами.- ApplicationContext
является под интерфейсом BeanFactory
, поэтому он предлагает все функции BeanFactory
, а также предоставляет разрешение сообщений, поддержку интернационализации, публикацию событий и контексты специфические для уровня приложения.
В этом примере мы создаем экземпляр ApplicationContext
, используя AnnotationConfigApplicationContext
и передавая ему класс конфигурации AppConfig
.
Далее получаем бин MyService
, вызывая метод getBean()
.
И наконец, вызываем метод getMessage()
у экземпляра myService
и выводим результат на экран.
Frontend + Летний митап + Суббота = Я.Субботник по разработке интерфейсов 💛
7 июня в Москве Яндекс Go проводит Я.Субботник по разработке интерфейсов. В программе 4 доклада и воркшоп:
👉 Артемий Карпов расскажет, как команда выстраивает взаимодействие между разработкой и тестированием при написании автотестов и улучшении семантики приложения
👉 Миша Колосовский покажет, как сделать статические схемы интерактивными и причем тут SVG
👉 Давид Давыдов объяснит, что мы сделали с серверным API и как пришли к одной строчке кода вместо сотни
👉 Серёжа Алейников поделится опытом портирования нативного BDUI в вебе
На воркшопе участники в командах будут исправлять некорректные интерфейсы, стараясь учесть требования дизайнеров, бэкенд-разработчиков и тестировщиков. Вместе обсудим варианты решений, а коллеги из Яндекса помогут найти самое оптимальное.
Регистрируйтесь и зовите друзей!
Мероприятие бесплатное. Количество мест в офлайне ограничено — пожалуйста, дождитесь нашего подтверждения.
Реклама. ООО «Яндекс.Такси» ИНН 7704340310
Как разобраться в нейросетях раз и навсегда?!
🚀 Хотите понять, как искусственный интеллект может упростить вашу жизнь или вывести ваш бизнес на новый уровень?
🤖 Авторский канал "ИИчко" — место, где ИИ становится доступным, понятным и невероятно полезным для всех, кто интересуется технологиями.
🔍 Что вас ждет:
• Образовательный контент;
• Простые объяснения сложных тем ИИ;
• Инсайты для профессионалов;
• Практические советы;
• Тренды и вдохновение;
Подписывайтесь на "ИИчко" и откройте для себя ИИ с новой стороны!
👉 /channel/+HnGfS-hawx1mM2Fi
Exchanger
Класс Exchanger
в пакете java.util.concurrent
является классом синхронизации. Он облегчает обмен элементами между парой потоков, создавая точку синхронизации. Его работа проста: он просто ждет, пока два отдельных потока вызовут его метод exchange()
. Когда это происходит, он обменивается данными, предоставленными потоками.
В этом примере кода MakeString
создает строку, добавляя к ней символы от A до J, затем он обменивается этой строкой с UseString
при помощи метода exchange()
. UseString
выводит полученную строку и обменивается пустой строкой с MakeString
. Этот процесс повторяется три раза.
В третий раз MakeString
вызывает exchange()
с тайм-аутом в 250 миллисекунд, а UseString
спит 500 миллисекунд перед вызовом exchange()
. Из-за этого возникает исключение TimeoutException
, которое обрабатывается в MakeString
, и выводится сообщение “Timeout Occurred”.
ArrayBlockingQueueArrayBlockingQueue
— это класс в пакете java.util.concurrent
, который представляет собой ограниченную блокирующую очередь, реализованную на основе массива. Он упорядочивает элементы в порядке FIFO (First In First Out).
Попытки поместить элемент в полную очередь приведут к блокировке операции, ровно как и попытки взять элемент из пустой очереди.
Этот класс поддерживает необязательную политику справедливости для упорядочения. По умолчанию оно не гарантируется. Однако очередь, созданная с установленной справедливостью в значение true
, предоставляет доступ к потокам в порядке FIFO. Справедливость обычно снижает пропускную способность, но уменьшает изменчивость.
В этом примере кода класс Producer
добавляет числа от 0 до 4 в очередь с помощью метода put()
. Consumer
берет элементы из очереди с помощью метода take()
и выводит их. Так как емкость очереди равна 2, то после добавления двух элементов в очередь Producer
блокируется, пока Consumer
не возьмет элемент из очереди.
Строки (String)
Строка представляет собой массив символов. При работе со строками важно понимать, что объект String является неизменяемым (immutable).
То есть при любых операциях над строкой, которые изменяют эту строку, фактически будет создаваться новая строка.
Методы, используемые в примере:
- str1 + " " + str2 - конкатенация строк.
- length() - возвращает длину строки.
- toCharArray() - преобразует строку в массив символов.
- toUpperCase() - преобразует все символы строки в верхний регистр.
- toLowerCase() - преобразует все символы строки в нижний регистр.
- contains() - проверяет, содержит ли строка указанную последовательность символов.
#это_база
Аргументы командной строки
Аргументы командной строки - это массив строк, который передается в метод main при запуске программы. Эти аргументы могут быть использованы для передачи информации в программу при ее запуске.
Чтобы запустить код с аргументами командной строки, нужно передать их после имени класса при запуске программы из командной строки. Например:
- java CommandLineArguments arg1 arg2 arg3
Для демонстрации в этом примере мы выводим общее количество аргументов, а затем перебираем их и выводим каждый аргумент по отдельности.
#это_база
Перегрузка методов
Перегрузка методов позволяет создавать несколько методов с одинаковым именем, но с разными параметрами.
Это может быть полезно, когда нужно выполнить похожие действия для разных типов данных или с разным количеством параметров.
В этом примере мы создаем два метода с именем add, но с разными параметрами. Когда мы вызываем метод add в методе main, компилятор автоматически выбирает правильную версию метода на основе типов передаваемых аргументов.
#это_база
Прыжки по массиву
Дан целочисленный массив nums. Изначально вы располагаетесь на первом индексе массива, и каждый элемент массива представляет собой максимальную длину вашего прыжка на этой позиции.
Возвращается true, если вы можете достичь последнего индекса, или false в противном случае.
Алгоритм использует максимальную длину прыжка в каждой позиции, чтобы определить самый дальний индекс, до которого он может добраться. Постоянно обновляя самый дальний индекс, он проверяет, возможно ли достичь последнего индекса, и возвращает соответствующий результат (True или False).
- Если текущий индекс i больше, чем farthest, это означает, что мы не можем продолжить, поэтому мы возвращаем False.
- Если farthest больше или равен последнему индексу, значит, мы достигли конца массива и возвращаем True.
- Если мы завершаем цикл, не достигнув конца массива, мы возвращаем False.
#разбор_кода
#вопросы_с_собеседований
Что такое сигнатура метода?
Сигнатура метода — это уникальная комбинация имени метода и списка его параметров. Сигнатура метода определяет, какие аргументы должны быть переданы методу при его вызове.
Сигнатура метода используется для определения перегрузки методов. Два или более метода считаются перегруженными, если они имеют одинаковое имя, но разные сигнатуры. То есть они принимают разные наборы параметров.
Важно отметить, что сигнатура метода не включает в себя возвращаемый тип и модификаторы доступа.
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!
#это_база
IoC (Inversion of Control)
Это модель программного проектирования, в которой управление жизненным циклом объекта переходит от самого объекта к внешним компонентам. Например, вместо того, чтобы объект сам создавал свои зависимости, он получает их извне.
В Java IoC
реализуется с помощью DI
(Dependency Injection) - механизма внедрения зависимостей.
В этом примере мы создали объект User
в одном месте нашего приложения, а затем передали его как зависимость в объект UserController
, который в свою очередь воспользовался этой зависимостью для выполнения своей работы. Это и есть пример IoC
и DI
в Java.
Производительность и наблюдаемость бэкенда. Поиск проблем в продакшене
Признак мастерства бэкендера — глубокое понимание своего стека и того, как работает код в продакшене. Недаром во многих бигтех-компаниях принят подход “you build it, you run it”. Хороший программист не только умеет запилить фичи, но и знает, как работает в проде его софт, и может разобраться, почему его сервис тормозит. Для этого нужно знать особенности рантаймов, инфраструктуры и современные подходы к сбору телеметрии.
Приходи на курс — разберёшься в перформансе на уровне кода и инфраструктуры, научишься внедрять наблюдаемость как в бигтех-компаниях, прокачаешься для собеседований в компании, где ждут от разработчиков широкого инженерного мышления.
🌐 В программе курса:
🤩 Архитектура бэкенд-серверов (Golang, Java, PHP и др) и её особенности: модели обработки запросов и параметры конфигурации, влияющих на производительность
🤩 Zero-code instrumentation на разных языках программирования
🤩 Open Telemetry: основы технологии и применение на примере SigNoz
🤩 Суб-real-time телеметрия поверх UDP c PINBA и “промстэком” (Grafana/Prometheus)
🥸 Кто мы: R&D-центр Devhands. Автор курса — Михаил Курмаев, эксперт по сложным распределённым системам. Долгое время строил платформу в Badoo/Bumble, сейчас в Т-банке развивает дата-платформу.
🗓 Старт курса: 3 июня, 4 недели обучения.
Изучить программу и записаться можно здесь.
Ждем вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2Vtzqx225tQ
ThreadGroupThreadGroup
представляет собой группу потоков. Кроме того, группа потоков может также включать в себя другие группы потоков. Они образуют дерево, в котором каждая группа потоков, кроме начальной, имеет родителя.
Это позволяет удобно управлять несколькими потоками одновременно, например, приостанавливать, возобновлять или прерывать группу потоков одним вызовом метода.
В этом примере мы создаем группу потоков с именем MyGroup и добавляем в нее два потока. Затем мы запускаем эти потоки и выводим информацию о группе с помощью метода list()
.
Результатом работы этого кода будет вывод информации о группе и сообщений от двух запущенных потоков.
Spring Web ModuleSpring Web Module
является частью фреймворка Spring
и включает в себя необходимые компоненты для создания веб-приложений, а также имеет встроенный контейнер Apache Tomcat
.
Он может использоваться для создания различных веб-проектов на языке Java.
В этом примере мы создаем класс Application
с аннотацией @SpringBootApplication
, которая указывает на то, что это главный класс приложения Spring Boot
. Мы также добавляем аннотацию @RestController
, чтобы указать, что этот класс является контроллером.
Метод home()
аннотирован как @GetMapping("/")
, что означает, что он обрабатывает HTTP GET запросы к корневому URL-адресу (“/”). Этот метод возвращает строку “Hello World!”.
Результатом работы этого кода будет запуск веб-приложения, которое отображает строку “Hello World!” при обращении к корневому URL-адресу.
Spring Data JPASpring Data JPA
— это модуль Spring Data
, который фокусируется на использовании JPA
для хранения данных в реляционной базе данных. Его наиболее привлекательной особенностью является возможность автоматического создания реализаций репозитория во время выполнения из интерфейса репозитория.
В этом примере мы создаем интерфейс UserRepository
, который расширяет JpaRepository
. Это позволяет нам использовать готовые методы для работы с базой данных, такие как save
, findAll
, delete
и т. д. Кроме того, мы добавляем собственный метод findByUsername
, который позволяет нам искать пользователя по его имени пользователя.
Сервис UserService
использует UserRepository
и мы можем использовать этот сервис в нашем контроллере, чтобы обрабатывать запросы от клиента и возвращать данные из базы данных.
Результатом работы этого кода будет возможность поиска пользователя по его имени пользователя в базе данных с помощью метода findByUsername
из репозитория UserRepository
.
👩💻 Открытый урок «Облака и Mongo DB Atlas»
🗓 12 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
Погружаемся в мир облачных технологий и учимся разворачивать кластер MongoDB бесплатно.
Программа вебинара:
✔️ Облачные технологии: что такое облака, какие бывают уровни (IaaS, PaaS, SaaS) с простыми аналогиями для понимания.
✔️ Практическая демонстрация: как создать кластер MongoDB в Atlas и подключиться к нему.
Вебинар будет полезен:
Разработчикам, начинающим backend-программистам, студентам IT-курсов и всем, кто хочет разобраться в облачных сервисах.
В результате вебинара вы:
Научитесь создавать кластеры MongoDB в облаке.
🔗 Ссылка на регистрацию: https://otus.pw/BH4jg/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
LinkedBlockingQueueLinkedBlockingQueue
— это опционально ограниченная блокирующая очередь, основанная на связанных узлах. Это означает, что LinkedBlockingQueue
может быть ограничена, если указана ее емкость, в противном случае она будет неограниченной.
Эта очередь упорядочивает элементы в порядке FIFO. Новые элементы вставляются в хвост очереди, а операции извлечения из очереди получают элементы из головы очереди.
В этом примере создается LinkedBlockingQueue
с емкостью 2. Затем в очередь добавляются два элемента. После этого пытаемся добавить третий элемент с помощью метода put()
. Так как очередь заполнена, выполнение программы заблокируется на этой строке и не продолжится, пока не освободится место в очереди.
Дан целочисленный массив nums, поверните массив вправо на k шагов.
Метод rotate принимает массив nums и целое число k. Сначала мы проверяем, что k не отрицательное число и не больше длины массива. Затем мы вызываем метод reverse, который переворачивает первую часть массива от начала до конца - k-1.
Метод reverse переворачивает вторую часть массива от конца - k до конца. Наконец, мы вызываем метод reverse, который переворачивает весь массив. Это позволяет нам получить массив, который был повернут на k шагов вправо.
Метод reverse принимает массив nums, индекс начала и индекс конца. Мы меняем местами элементы массива от начала до конца и уменьшаем индекс начала и увеличиваем индекс конца до тех пор, пока они не пересекутся.
#разбор_кода
Поиск максимальной прибыли
Дан целочисленный массив prices, где prices[i] - это цена данной акции на i-й день. В каждый день вы можете принять решение о покупке и/или продаже акции. В любой момент времени вы можете держать не более одной акции. Однако вы можете купить ее и тут же продать в тот же день. Найдите и верните максимальную прибыль, которую вы можете получить.
Метод maxProfit принимает массив цен prices, где prices[i] - это цена акции в i-й день. Алгоритм находит все возможные прибыли путем вычитания цены покупки из цены продажи и добавления их в список priceGain. Затем суммирует все значения в списке priceGain и возвращает итоговую сумму как максимальную прибыль.
#разбор_кода
☄️ Интеграционное тестирование | Spring Boot + Yandex SourceCraft + Amplicode + Docker Compose Starter
В новом видео вы узнаете, как писать интеграционные тесты быстро и эффективно, совмещая сильные стороны нескольких инструментов.
Мы покажем, как использовать генерацию кода от Amplicode учитывающую контекст всего приложения и дополнить её точечной генерацией от Yandex SourceCraft Code Assistant, а также быстро настроить окружение для тестов с помощью не так давно появившегося Docker Compose стартера.
⚡️СМОТРЕТЬ НА YOUTUBE
⚡️СМОТРЕТЬ В VK ВИДЕО
⚡️СМОТРЕТЬ НА RUTUBE
#реклама
О рекламодателе
String.replace()
Метод replace() используется для замены всех вхождений одного символа или подстроки на другой символ или подстроку в исходной строке. Этот метод возвращает новую строку с замененными символами или подстроками.
В этом примере создается строка "Hello, World!" и вызывается метод replace() для замены всех вхождений символа 'l' на символ 'w'. Результат замены сохраняется в новой строке replaced. Затем исходная и измененная строки выводятся.
#это_база
#вопросы_с_собеседований
Что такое анонимные классы и где они применяются?
Анонимные классы - это классы без имени, которые используются для создания объекта определенного класса или интерфейса "на лету".
Анонимные классы удобны, когда нужно создать простой класс "одноразового использования" для какой-то конкретной задачи. Они позволяют избежать громоздких именованных классов в таких случаях.
Чаще всего они применяются для:
- создания обработчика событий в 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-х лет, уверенное знание алгоритмов, опыт многопоточного программирования и понимание распределённых систем.
Если хотите расти вместе с проектом — откликайтесь!