Telegram Web Link
Совет по Java 💡

Чтобы сделать большие и сложные цепочки компараторов более читаемыми, мне нравится присваивать компараторы переменным, имена которых начинаются с "by". Таким образом, вызов sorted() становится меньше и читается почти как естественный язык. Кроме того, вы можете использовать статический импорт.

@javatg
👍34🔥116
🖥 SuperTokens Core — компонент с открытым исходным кодом на Java, предназначенный для реализации аутентификации и управления сессиями в веб-приложениях!

🌟 SuperTokens позиционируется как альтернатива таким решениям, как Auth0, Firebase Auth и AWS Cognito, предоставляя разработчикам полный контроль над пользовательскими данными и возможность развертывания на собственных серверах.

🖥 Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
🔥На Stepik вышел курс: Linux: полный апгрейд твоих скиллов

Хочешь реально понимать, что происходит под капотом твоей системы, а не просто кликать по GUI?

Без глубокого знания базы ты не инженер - ты просто пользователь.

🔹 В курсе ты:

- Освоишь bash, grep, sed, awk - инструменты, которыми живут админы.
- Разберёшь права, процессы, сеть, файловую систему и научишься чинить всё, что падает.
- Настроишь SSH, firewall, systemd, crontab, демоны и автозапуск.
- Научишься анализировать логи, следить за нагрузкой, и не паниковать при 100% CPU.

💡 Формат: пошаговое объяснение базы и разбор важных практик по работе с Linux.

🎯 После курса ты: будешь чувствовать Linux как родную среду и забудешь, что такое “permission denied”.

🚀 24 часа действует скидка 30%

👉 Учиться со скидкой
🔥7👍53
🖥 Как ускорить Spring Boot при старте: spring-context-indexer

Как вы знаете, при старте Spring Boot-приложения много времени уходит на classpath scanning. Даже если вы используете @ComponentScan, Spring всё равно перебирает кучу классов в поиске бин-кандидатов. Это рефлексивно и медленно.

📌 Есть способ это оптимизировать — spring-context-indexer.

🔧 Что делать

1. Добавьте зависимость в pom.xml:


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>6.1.3</version> <!-- актуальная для Spring Boot 3 -->
<optional>true</optional>
</dependency>


2. Всё! Spring Boot на этапе компиляции сгенерирует индекс классов с аннотациями (@Component, @Service, @Repository, и т.п.) в META-INF/spring.components.

3. При старте приложения Spring сначала смотрит в индекс, а не сканирует classpath целиком.

💡 Полезно, если:

- У вас много модулей;
- Вы используете fat JAR;
- Приложение долго стартует и важна скорость.

⚠️ Важно

- Работает только с аннотациями Spring, не с кастомными;
- Не забудьте включить annotation processing в IDE (особенно в IntelliJ: Settings → Build, Execution, Deployment → Compiler → Annotation Processors).

📊 Профит: в крупных проектах - до 30–50% ускорения старта.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10
Media is too big
VIEW IN TELEGRAM
Не пропусти МТС True Tech Champ — масштабный фестиваль 21 ноября для тех, кто живет технологиями 🔥

Тебя ждут:

▫️ Захватывающая сюжетная линия. Тебя ждет уникальная кибервселенная с возможностью влиять на ход происходящего.
▫️ Конференция с международными спикерами. Эксперты расскажут о трендах в ИИ и инновациях в индустрии.
▫️ ИТ-качалка. Наращивай экспертизу на воркшопах.
▫️ Шоу-финал ИТ-чемпионата. Более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Выбирай и болей за фаворитов.
▫️ Айтивности. Тебя ждут бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч.
▫️ HR-Hub. Команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек.
▫️ Афтепати со звездными хэдлайнерами. Зажги под популярные хиты.

Когда: 21 ноября, МТС Live Холл в Москве и онлайн.

Регистрируйся на сайте. Участие бесплатно, количество мест ограничено.
🧠 Быстрый профилинг Java: -XX:+PrintCompilation

Хотите понять, что JIT-компилятор делает с вашим кодом и где реально тратится время?
Есть скрытая, но очень полезная фича JVM — флаг:


java -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation -jar app.jar


📌 Что даёт?
JVM начнёт логировать все методы, которые JIT компилирует, и в какой момент.
Вы увидите:

- какие методы вызываются чаще всего (горячие точки);
- какие инлайнятся и оптимизируются;
- где есть неожиданные “узкие места”.

💡 Зачем это нужно?

- Быстро найти кандидатов на оптимизацию;
- Понять, почему приложение медленно стартует (компиляция тяжёлых методов);
- Увидеть, какие части кода JIT не трогает (и, возможно, почему).

⚠️ Нюанс: это диагностический инструмент. На продакшене лучше использовать аккуратно (или дублировать трафик на стенд).

👉 Хочешь глубже? Смотри ещё -XX:+PrintInlining — покажет какие методы JVM решила инлайнить (и почему отказалась).

Быстрый взгляд на JIT — и вы понимаете поведение кода куда глубже.
🎉7👍5🔥21🥰1
🖥 Jooby - полезный веб-фреймворк для Java

По сути это модульный веб-фреймворк для Java, который упрощает создание современных веб-приложений. Он поддерживает множество популярных библиотек и инструментов, таких как MVC, WebSockets, и многие другие, предоставляя простой интерфейс для разработки.

Jooby - хороший выбор для разработчиков, которые ищут простой и расширяемый веб-фреймворк с хорошей производительностью.

https://jooby.io/

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥2🥰1
🖥 Еще одна коварная задача на Java - с побочным эффектом

Рассмотрите этот, на первый взгляд, безобидный код:


public class SideEffectSurprise {
static int x = 10;

public static void main(String[] args) {
int result = x + increment() + x;
System.out.println("result = " + result);
System.out.println("x = " + x);
}

static int increment() {
return ++x;
}
}


Вопрос:
Что выведет программа?
Почему?
Как именно вычисляется выражение x + increment() + x — слева направо или как-то иначе?
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда Яндекса — это профессионалы, которые одержимы своим делом и решают задачи, где нет готовых решений.

Сейчас мы ищем сильных бэкенд-разработчиков — с опытом от 3 лет на C++, Python, Java или Go. Участвуйте в Week Offer, чтобы получить офер онлайн, всего за неделю.

Как будет проходить Week Offer Backend?

• Подайте заявку до 12 ноября.
• Пройдите технические секции 15 и 16 ноября.
• Познакомьтесь с командами и получите офер 17–21 ноября.

Если вам интересно строить полезные сервисы вокруг ИИ-технологий, проводить исследования и превращать их в реальные продукты для миллионов пользователей — переходите по ссылке. На сайте собрали все подробности.
Где хранятся статические поля классов?
Anonymous Quiz
32%
В Heap
27%
В Stack
30%
В Metaspace
2%
В регистре процессора
8%
В оперативной памяти
👍7🔥3
Серия бесплатных онлайн-уроков от Центрального университета: продукт, ML, аналитика, разработка.

С 27 октября по 5 ноября — эксперты с опытом в Google, Яндексе, Т-Банке и других ведущих IT-компаниях поделятся опытом:
о том, как думают продакты, как выстраивается гибкая разработка и какие ошибки допускают аналитики.
Онлайн — в 19:00 по Москве. Можно присоединиться к любому занятию.

Главное — зарегистрироваться, чтобы получить ссылку на трансляции
🔥2
📢 Вышел Kotlin 2.3.0-Beta2!

Новая бета-версия приносит множество улучшений по всем направлениям.

Вот ключевые новинки:

Язык
• Больше стабильных и включённых по умолчанию функций.
• Новый чекер неиспользуемых возвращаемых значений - поможет ловить потенциальные баги.
• Уточнения в контекстно-зависимом разрешении имён.

🖥️ Kotlin/JVM
• Поддержка Java 25 (включая новые языковые и VM-фичи).

📱 Kotlin/Native
• Улучшенная взаимодействие с Swift: экспорт Swift-интерфейсов стал удобнее.
• Проверки границ обобщённых типов теперь включены по умолчанию — строже и безопаснее.

🌐 Kotlin/Wasm
• Поддержка полных квалифицированных имён.
• Новое предложение по обработке исключений включено по умолчанию.

Kotlin/JS
• Экспериментальная возможность экспорта suspend-функций.
• Новое представление для LongArray — лучше совместимость и производительность.


🛠️ Gradle
• Совместимость с Gradle 9.0.
• Новый API для регистрации сгенерированных исходников — проще интегрировать кодогенерацию.


📦 Стандартная библиотека
• Функциональность измерения времени (kotlin.time) теперь стабильна!

👉 http://kotl.in/2-3-0-beta2
🔥71🎉1
Forwarded from VK Team
Конкурс для тех, кто не боится высоких нагрузок 😎

Мы в VK вовсю готовимся к Highload++. Привезём много крутого — и вы обязаны это увидеть.

Поэтому мы решили разыграть 2 билета на ивент 💙

Условия простые:
подпишитесь на каналы @vkjobs, @backendhubvk и @frontendhubvk
нажмите кнопку «Участвовать»
увеличьте свои шансы и пригласите друга — вместе веселее!

Информацию об организаторе, правилах и призах ищите здесь, а результаты конкурса мы подведём 1 ноября. Удачи!

Участников: 0
Призовых мест: 2
Дата розыгрыша: 16:00, 01.11.2025 MSK (2 дня)
💡 Задача с подвохом на Java

Рассмотрите следующий фрагмент кода:


public class TrickyComparison {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // Что выведет? Почему?

Integer x = 100;
Integer y = 100;
System.out.println(x == y); // А это?
}
}


Вопрос:
Что напечатает эта программа и почему? Объясните поведение оператора == при сравнении объектов типа

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
❤️ Приходите на Backend Talks от Яндекс 360
Санкт-Петербург, 13 ноября в 19:00

Разберём архитектуру облачной записи встреч, наведём порядок в API и покажем, как простые решения спасают сервисы.

В программе:

📌 Как не упустить важное: архитектура облачной записи и конспектирования видеовстреч в Телемосте — Илья Григорьев, разработчик бэкенда Телемоста.

📌 Укрощение API: процессы и инструменты, которые действительно работают — Никита Ломакин, разработчик в команде Техплатформы.

📌 Как мы закапывали звездолёт: почему важно отстаивать простоту на архревью — Артемий Коцюбенко, разработчик протокольных сервисов Почты.

Команда Яндекс 360 работает с нагрузками >1.000.000+ RPS и создает продукты которыми пользуются 95+ млн человек каждый месяц — Диск, Почта, Телемост, Мессенджер и другие.

🍻А после докладов вас будут ждать афтепати и нетворкинг!

Регистрируйтесь по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
Программистом будет, всё по тз сделал

@javatg
😁49👍11🔥8
💡 Полезный совет для Spring Boot

Если клиент прислал в JSON лишние поля, а вы их не используете — приложение может упасть при десериализации.

Чтобы такого не было, добавьте к DTO аннотацию:

@JsonIgnoreProperties(ignoreUnknown = true)

Тогда лишние поля просто игнорируются, и API продолжает работать без ошибок. Удобно при обновлении контрактов и поддержке разных версий клиентов.

#SpringBoot #Java #Backend #SoftwareEngineering
👍28🔥63
🎯 Как настроить фильтрацию запросов с помощью Spring Security и IP-блокировки

Если вы хотите улучшить безопасностб вашего приложения можно настроить фильтрацию запросов с использованием Spring Security, а также внедрить блокировку определённых IP-адресов.

1) Добавление зависимостей

В файл pom.xml добавьте следующие зависимости:

<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>


2) Создание фильтра для блокировки IP-адресов

Создайте фильтр, который будет проверять IP-адрес пользователя и блокировать его, если он находится в списке запрещённых:

@Component
public class IpFilter extends OncePerRequestFilter {

private static final Set<String> blockedIps = new HashSet<>(Arrays.asList("192.168.1.100", "10.0.0.5"));

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String ipAddress = request.getRemoteAddr();

if (blockedIps.contains(ipAddress)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.getWriter().write("Access Denied: Your IP is blocked.");
return;
}

filterChain.doFilter(request, response);
}
}


3) Настройка Spring Security для использования фильтра

Теперь настроим Spring Security, чтобы наш фильтр IP-блокировки применялся ко всем входящим запросам:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private IpFilter ipFilter;

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/public/**").permitAll() // Доступ для публичных ресурсов
.anyRequest().authenticated() // Остальные запросы требуют аутентификации
.and()
.addFilterBefore(ipFilter, UsernamePasswordAuthenticationFilter.class); // Вставляем фильтр IP
}
}


4) Создание контроллера для тестирования

Создадим простой контроллер с двумя маршрутами: один доступен всем пользователям, а другой требует аутентификации:

@RestController
public class TestController {

@GetMapping("/public/hello")
public String publicHello() {
return "Hello from public endpoint!";
}

@GetMapping("/private/hello")
public String privateHello() {
return "Hello from private endpoint, you are authenticated!";
}
}


5) Важно

Этот подход не является универсальной защитой от всех типов атак. Он помогает ограничить доступ для определённых IP-адресов, но не защищает от более сложных угроз, таких как атаки с подменой IP (например, через прокси-серверы).

Для более комплексной защиты используйте дополнительные механизмы, такие как WAF, анти-DDoS системы, а также более детальную настройку доступа через роли и права.

@javatg
👍62🔥2🤔1
🚀 Spring Boot Совет

Spring Boot Startup Report помогает прозрачно увидеть, что именно тормозит запуск вашего приложения, и быстро найти узкие места.

Что даёт
- интерактивный HTML-отчёт со списком и таймлайном инициализации бинов
- flame chart для наглядного анализа времени
- поиск по классу или аннотации
- автогенерация отчётов в интеграционных тестах

Как подключить
Gradle:

testImplementation("com.maciejwalkowiak.spring:spring-boot-startup-report:0.2.0")


Как пользоваться

- запустите приложение и откройте endpoint /startup-report для интерактивного отчёта

- в тестах отчёты сохраняются в target/startup-reports для Maven и build/startup-reports для Gradle

- если в classpath нет Jackson, добавьте jackson-databind

Подсказка

- держите зависимость в test-scope, чтобы не тянуть её в прод
- начните с самых тяжёлых бинов из отчёта, вынесите дорогостоящую инициализацию и лениво подгружайте то, что реально нужно на старте

github.com/maciejwalkowiak/spring-boot-startup-report
👍93
This media is not supported in your browser
VIEW IN TELEGRAM
Вот теперь вы знаете как вы выглядите со стороны
😁16👍1
2025/11/05 04:06:38
Back to Top
HTML Embed Code: