Forwarded from Java Guru 🤓
😁14👍6🔥4🍾3❤1
🔥Не упустите шанс прокачать свой скилл и решать проблемы с производительностью на опережение!
Думаете, что знаете об оптимизации PostgreSQL всё? Проверим.
Приглашаем разработчиков и администраторов БД на интенсивный практикум, где мы не будем говорить об очевидных вещах.
1 октября в 20:00 технический директор 1С-Старт Дмитрий Кириллов разберет "по косточкам" оптимизацию PostgreSQL на открытом практическом уроке "Неочевидные оптимизации PostgreSQL на основе его исходного кода".
👨💻 Разработчики, научитесь писать запросы, учитывая скрытые механизмы планировщика, и использовать индексы максимально эффективно
👨💻Администраторы БД, поймете, какие параметры конфигурации реально влияют на производительность, а какие можно не трогать
👨💻Архитекторы систем, сможете лучше проектировать структуру БД и прогнозировать ее масштабирование на основе «внутренней логики» PostgreSQL
А в подарок - три мини-курса для практической работы с SQL от OTUS.
Бесплатно по предварительной записи - практикум для тех, кто хочет докопаться до сути: https://tglink.io/6816bef9c91f
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFKAQV8L
Думаете, что знаете об оптимизации PostgreSQL всё? Проверим.
Приглашаем разработчиков и администраторов БД на интенсивный практикум, где мы не будем говорить об очевидных вещах.
1 октября в 20:00 технический директор 1С-Старт Дмитрий Кириллов разберет "по косточкам" оптимизацию PostgreSQL на открытом практическом уроке "Неочевидные оптимизации PostgreSQL на основе его исходного кода".
👨💻 Разработчики, научитесь писать запросы, учитывая скрытые механизмы планировщика, и использовать индексы максимально эффективно
👨💻Администраторы БД, поймете, какие параметры конфигурации реально влияют на производительность, а какие можно не трогать
👨💻Архитекторы систем, сможете лучше проектировать структуру БД и прогнозировать ее масштабирование на основе «внутренней логики» PostgreSQL
А в подарок - три мини-курса для практической работы с SQL от OTUS.
Бесплатно по предварительной записи - практикум для тех, кто хочет докопаться до сути: https://tglink.io/6816bef9c91f
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFKAQV8L
❤5👍2🔥2
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥2
1 октября (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2
Хотите писать код быстрее и без лишнего копипаста? Используйте Postfix Completion — умные сокращения, которые превращают выражения в полноценный код.
— Превращает набранное выражение в готовую конструкцию (например, myVar.notnull → if (myVar != null) {...})
— Работает для условий, циклов, логирования, null-check и многого другого
— Доступна для Java, Kotlin и многих языков
— Экономит время
— Снижает вероятность синтаксических ошибок
— Ускоряет рутинные действия (особенно null-checks)
— Пишите выражение, затем ставите точку и выбираете суффикс (например, .if, .for, .notnull)
— IDEA сама развернёт шаблон в готовый код
— Список доступных суффиксов: Settings → Editor → General → Postfix Completion
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍13🔥8
Иногда кажется, что читаешь книги в параллельной вселенной. Увлекся редким фэнтези-сериалом или зависаешь на мемуарах — и поговорить об этом не с кем.
В COMMOK ты точно наткнешься на человека, который тоже застрял на той самой главе или в восторге с того же автора. Здесь разговоры о книгах живые, искренние и без снобизма. А может, вы найдете друзей сразу по нескольким интересам?
COMMOK — это место, где хобби и увлечения превращаются в настоящие встречи и новые истории. Устанавливай приложение и захабься!
App Store: https://apps.apple.com/ru/app/id1671122965
Google Play: https://play.google.com/store/apps/details?id=com.saleskit.commok
erid:2VtzqxCBL7n
Реклама. Запорожец Сергей Александрович
ИНН 662313192669
В COMMOK ты точно наткнешься на человека, который тоже застрял на той самой главе или в восторге с того же автора. Здесь разговоры о книгах живые, искренние и без снобизма. А может, вы найдете друзей сразу по нескольким интересам?
COMMOK — это место, где хобби и увлечения превращаются в настоящие встречи и новые истории. Устанавливай приложение и захабься!
App Store: https://apps.apple.com/ru/app/id1671122965
Google Play: https://play.google.com/store/apps/details?id=com.saleskit.commok
erid:2VtzqxCBL7n
Реклама. Запорожец Сергей Александрович
ИНН 662313192669
👍3❤2🔥2
Что такое BeanPostProcessor в Spring?
BeanPostProcessor — это интерфейс из Spring Framework, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring контейнере. Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:
🟡 postProcessBeforeInitialization(Object bean, String beanName) - вызывается до того, как бин будет инициализирован (до вызова метода @PostConstruct или InitializingBean#afterPropertiesSet).
🟡 postProcessAfterInitialization(Object bean, String beanName) - вызывается после инициализации бина (после завершения всех инициализационных методов).
Зачем нужен BeanPostProcessor?
Он используется для дополнительной обработки и кастомизации бинов после их создания, но до передачи клиентскому коду. Примеры:
- Добавление проксирования бинов (например, для AOP или транзакций).
- Валидация или изменение свойств бинов.
- Логирование жизненного цикла.
- Добавление кастомных аннотаций.
- Обработка маркерных интерфейсов.
Как это работает?
1️⃣ Spring сканирует контекст на наличие бинов, реализующих интерфейс BeanPostProcessor.
2️⃣ Если такие бины найдены, они применяются ко всем бинам в приложении.
3️⃣ Методы postProcessBeforeInitialization и postProcessAfterInitialization вызываются для каждого бина, который создаёт Spring.
Результат: Вывод сообщений о каждом бине до и после инициализации.
Подписывайся на наш канал в Max🟪
BeanPostProcessor — это интерфейс из Spring Framework, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring контейнере. Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:
Зачем нужен BeanPostProcessor?
Он используется для дополнительной обработки и кастомизации бинов после их создания, но до передачи клиентскому коду. Примеры:
- Добавление проксирования бинов (например, для AOP или транзакций).
- Валидация или изменение свойств бинов.
- Логирование жизненного цикла.
- Добавление кастомных аннотаций.
- Обработка маркерных интерфейсов.
Как это работает?
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
System.out.println("Before Initialization: " + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
System.out.println("After Initialization: " + beanName);
return bean;
}
}
Результат: Вывод сообщений о каждом бине до и после инициализации.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤9👍4🔥4
Как вы решаете вопрос с покрытием?
Почти в каждом проекте висит задача: поднять покрытие до 70%.
И почти в каждой команде никто не хочет этим заниматься.
Explyt – AI-плагин для Java и Kotlin разработчиков, который снимает эту боль.
Он генерирует юнит-тесты прямо в IDE: по коду, по runtime-трассам, по спекам. И делает это так, как будто реально вник в проект.
📌 Что умеет:
- создаёт осмысленные тесты для Java и Kotlin-кода
- поддерживает JUnit 4/5, TestNG, кастомные фреймворки
- превращает execution trace в автотесты
- предлагает фиксы, если сгенерированный тест падает
- есть режим агента, где AI сам меняет код, запускает тесты и ищет ошибки
📦 Плагин доступен:
- через JetBrains Marketplace
- или напрямую с сайта разработчика
🎁 30 дней бесплатного доступа – просто пользуйтесь.
👉 Попробовать на своём проекте
Почти в каждом проекте висит задача: поднять покрытие до 70%.
И почти в каждой команде никто не хочет этим заниматься.
Explyt – AI-плагин для Java и Kotlin разработчиков, который снимает эту боль.
Он генерирует юнит-тесты прямо в IDE: по коду, по runtime-трассам, по спекам. И делает это так, как будто реально вник в проект.
📌 Что умеет:
- создаёт осмысленные тесты для Java и Kotlin-кода
- поддерживает JUnit 4/5, TestNG, кастомные фреймворки
- превращает execution trace в автотесты
- предлагает фиксы, если сгенерированный тест падает
- есть режим агента, где AI сам меняет код, запускает тесты и ищет ошибки
📦 Плагин доступен:
- через JetBrains Marketplace
- или напрямую с сайта разработчика
🎁 30 дней бесплатного доступа – просто пользуйтесь.
👉 Попробовать на своём проекте
👍4🔥3
Forwarded from Java Guru 🤓
Что добавить в код, чтобы в REST API роли и аутентификация работали корректно
👍5🔥3❤1
Forwarded from Java Guru 🤓
Что добавить в код, чтобы в REST API роли и аутентификация работали корректно
Anonymous Quiz
15%
http.cors().and().headers().frameOptions().disable();
8%
http.requestCache().disable();
59%
http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELES S));
9%
http.sessionManagement().disable();
8%
http.rememberMe();
👍4🔥2❤1
Java Streams предлагают множество методов для упрощения манипуляций с данными и повышения читаемости кода.
Вот краткое руководство с примерами:
Освойте эти методы, чтобы писать более чистый и эффективный код на Java!
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥7❤4☃2
⁉️ Хотите стать тимлидом или уже им работаете, но чувствуете синдром самозванца?
На курсе «Team Lead» от OTUS вы получите системные знания и практику, которые помогут уверенно управлять командой, правильно делегировать задачи, решать конфликты и мотивировать людей. Программа составлена практикующими экспертами, которые ежедневно решают задачи лидов в IT-компаниях.
Вы сможете отработать ошибки на модели команды — без риска для реального проекта, научитесь говорить на одном языке с бизнесом и прокачаете навыки, которые ценят работодатели.
➡️ Запишитесь на курс уже сегодня, чтобы активировать скидку на обучение по промокоду TL10 (актуален до 28.09): https://vk.cc/cQ1lvH
На курсе «Team Lead» от OTUS вы получите системные знания и практику, которые помогут уверенно управлять командой, правильно делегировать задачи, решать конфликты и мотивировать людей. Программа составлена практикующими экспертами, которые ежедневно решают задачи лидов в IT-компаниях.
Вы сможете отработать ошибки на модели команды — без риска для реального проекта, научитесь говорить на одном языке с бизнесом и прокачаете навыки, которые ценят работодатели.
➡️ Запишитесь на курс уже сегодня, чтобы активировать скидку на обучение по промокоду TL10 (актуален до 28.09): https://vk.cc/cQ1lvH
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576👍3❤2🔥2
Как настроить аутентификацию с OAuth2
В Spring Boot 3 интеграция с OAuth2 стала ещё проще благодаря улучшенной поддержке социальных логинов. Рассмотрим, как настроить аутентификацию через Google с использованием Spring Security 6.
1️⃣ Создание проекта
Используйте Spring Initializr для создания проекта с следующими зависимостями:
— Spring Web
— Spring Security
— OAuth2 Client
Или добавьте их вручную в pom.xml:
2️⃣ Получение OAuth2-учётных данных Google
1. Перейдите в Google Cloud Console
2. Создайте новый проект
3. Перейдите в раздел APIs & Services → Credentials
4. Нажмите Create Credentials → OAuth 2.0 Client IDs
5. Укажите тип приложения Web application
6. Добавьте Authorized redirect URI
7. Сохраните и получите Client ID и Client Secret
3️⃣ Конфигурация application.yml
Добавьте следующие настройки в src/main/resources/application.yml:
Замените YOUR_CLIENT_ID и YOUR_CLIENT_SECRET на полученные значения.
4️⃣ Конфигурация безопасности
Создайте класс конфигурации:
Подписывайся на наш канал в Max🟪
В Spring Boot 3 интеграция с OAuth2 стала ещё проще благодаря улучшенной поддержке социальных логинов. Рассмотрим, как настроить аутентификацию через Google с использованием Spring Security 6.
Используйте Spring Initializr для создания проекта с следующими зависимостями:
— Spring Web
— Spring Security
— OAuth2 Client
Или добавьте их вручную в pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
1. Перейдите в Google Cloud Console
2. Создайте новый проект
3. Перейдите в раздел APIs & Services → Credentials
4. Нажмите Create Credentials → OAuth 2.0 Client IDs
5. Укажите тип приложения Web application
6. Добавьте Authorized redirect URI
7. Сохраните и получите Client ID и Client Secret
Добавьте следующие настройки в src/main/resources/application.yml:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope:
- profile
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
user-name-attribute: sub
Замените YOUR_CLIENT_ID и YOUR_CLIENT_SECRET на полученные значения.
Создайте класс конфигурации:
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/login", "/error").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.loginPage("/login")
.defaultSuccessUrl("/dashboard", true);
return http.build();
}
}
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥4
Бесплатный карьерный форум для студентов IT-направлений 😍
На "Найти IT" ты сможешь найти работу, пообщаться с работадателями, показать свое резюме и пет-проекты, узнать всё о стажировках и вакансиях!
Кто будет: Альфа-Банк, Сбер, Ozon Tech, МТС, X5 Tech — больше 30 компаний, которые хантят студентов ИТ-специальностей
Плюсы для карьеры:
— нетворкинг с 2000+ участниками
— HR, тимлиды, разрабы и другие представители компаний, которые ответят на все твои вопросы
— выступления спикеров, только в офлайне
— 15+ призов в розыгрыше от FutureToday
Где и когда:DAA EXPO — 11 октября, 12:00–17:00 👇
Зарегистрироваться: https://vk.cc/cQ0Fft?erid=2W5zFH1VhJg
На "Найти IT" ты сможешь найти работу, пообщаться с работадателями, показать свое резюме и пет-проекты, узнать всё о стажировках и вакансиях!
Кто будет: Альфа-Банк, Сбер, Ozon Tech, МТС, X5 Tech — больше 30 компаний, которые хантят студентов ИТ-специальностей
Плюсы для карьеры:
— нетворкинг с 2000+ участниками
— HR, тимлиды, разрабы и другие представители компаний, которые ответят на все твои вопросы
— выступления спикеров, только в офлайне
— 15+ призов в розыгрыше от FutureToday
Где и когда:DAA EXPO — 11 октября, 12:00–17:00 👇
Зарегистрироваться: https://vk.cc/cQ0Fft?erid=2W5zFH1VhJg
❤2🔥1
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍14❤3🔥2
Абстракция в Java
Абстракция — это способность выделять существенные характеристики объекта и упускать несущественные.
Абстракция позволяет сосредоточиться на важных свойствах и поведении объекта, скрыв детали реализации.
В Java абстракция реализуется с помощью абстрактных классов и интерфейсов.
Абстрактный класс содержит абстрактные методы без реализации. Подклассы обязаны реализовать эти методы.
Интерфейс задает «контракт», описывая поведение классов без деталей реализации. Классы реализуют интерфейс.
Реализация абстракции требует тщательного анализа предметной области и выделения общих свойств объектов.
Подписывайся на наш канал в Max🟪
Абстракция — это способность выделять существенные характеристики объекта и упускать несущественные.
Абстракция позволяет сосредоточиться на важных свойствах и поведении объекта, скрыв детали реализации.
В Java абстракция реализуется с помощью абстрактных классов и интерфейсов.
Абстрактный класс содержит абстрактные методы без реализации. Подклассы обязаны реализовать эти методы.
Интерфейс задает «контракт», описывая поведение классов без деталей реализации. Классы реализуют интерфейс.
Реализация абстракции требует тщательного анализа предметной области и выделения общих свойств объектов.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤6👍4
Sorted set
SortedSet — это интерфейс в Java Collection Framework, который предоставляет упорядочение элементов в множестве. Элементы упорядочиваются с помощью их естественного порядка или с помощью компаратора, который обычно предоставляется при создании отсортированного множества.
SortedSet имеет несколько дополнительных операций, которые позволяют использовать упорядочение элементов:
— first() и last() возвращают первый и последний элементы в множестве соответственно.
— headSet(), tailSet() и subSet() возвращают подмножества элементов, которые находятся до, после или между заданными элементами соответственно.
В этом примере мы создаем TreeSet (класс, который реализует SortedSet) и добавляем в него несколько строк. Поскольку строки реализуют интерфейс Comparable, они упорядочиваются в алфавитном порядке. Затем мы используем различные методы SortedSet для получения первого и последнего элементов, а также подмножеств элементов.
Подписывайся на наш канал в Max🟪
SortedSet — это интерфейс в Java Collection Framework, который предоставляет упорядочение элементов в множестве. Элементы упорядочиваются с помощью их естественного порядка или с помощью компаратора, который обычно предоставляется при создании отсортированного множества.
SortedSet имеет несколько дополнительных операций, которые позволяют использовать упорядочение элементов:
— first() и last() возвращают первый и последний элементы в множестве соответственно.
— headSet(), tailSet() и subSet() возвращают подмножества элементов, которые находятся до, после или между заданными элементами соответственно.
В этом примере мы создаем TreeSet (класс, который реализует SortedSet) и добавляем в него несколько строк. Поскольку строки реализуют интерфейс Comparable, они упорядочиваются в алфавитном порядке. Затем мы используем различные методы SortedSet для получения первого и последнего элементов, а также подмножеств элементов.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍3
CompletableFuture
CompletableFuture в пакете java.util.concurrent является классом, который предоставляет мощный и гибкий подход к асинхронному программированию. Он позволяет выполнять асинхронные операции и обрабатывать их результаты, комбинировать несколько операций и управлять зависимостями между ними.
Помимо операций, представленных на изображении, CompletableFuture также предоставляет множество других методов для работы с асинхронными операциями, таких как thenApply(), thenCompose(), thenCombine(), exceptionally() и другие, которые позволяют обрабатывать результаты, комбинировать операции, обрабатывать исключения и многое другое. Это делает CompletableFuture мощным инструментом для асинхронного программирования.
Подписывайся на наш канал в Max🟪
CompletableFuture в пакете java.util.concurrent является классом, который предоставляет мощный и гибкий подход к асинхронному программированию. Он позволяет выполнять асинхронные операции и обрабатывать их результаты, комбинировать несколько операций и управлять зависимостями между ними.
Помимо операций, представленных на изображении, CompletableFuture также предоставляет множество других методов для работы с асинхронными операциями, таких как thenApply(), thenCompose(), thenCombine(), exceptionally() и другие, которые позволяют обрабатывать результаты, комбинировать операции, обрабатывать исключения и многое другое. Это делает CompletableFuture мощным инструментом для асинхронного программирования.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥3
Агрегация: что это и когда использовать?
Агрегация — это тип отношения между классами, при котором один класс "владеет" экземпляром другого, но их жизненные циклы не зависят друг от друга. Это «слабое» отношение, так как объект одного класса может существовать независимо от объекта другого.
Пример:
🟢 В этом примере класс Car агрегирует объект Engine, но двигатель может существовать сам по себе, вне машины.
Агрегацию стоит использовать, когда один объект логически принадлежит другому, но их существование не связано напрямую. Например, библиотека и книги, где книги могут существовать без самой библиотеки
Подписывайся на наш канал в Max🟪
Агрегация — это тип отношения между классами, при котором один класс "владеет" экземпляром другого, но их жизненные циклы не зависят друг от друга. Это «слабое» отношение, так как объект одного класса может существовать независимо от объекта другого.
Пример:
class Engine {
void start() {
System.out.println("Двигатель запущен");
}
}
class Car {
private Engine engine;
Car(Engine engine) {
this.engine = engine;
}
void startCar() {
engine.start();
System.out.println("Машина поехала");
}
}
public class Main {
public static void main(String[] args) {
Engine engine = new Engine(); // Двигатель может существовать отдельно
Car car = new Car(engine);
car.startCar();
}
}Агрегацию стоит использовать, когда один объект логически принадлежит другому, но их существование не связано напрямую. Например, библиотека и книги, где книги могут существовать без самой библиотеки
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥4