🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»
⮕ Твой стартовый набор искателя данных:
⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»
Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽
☞ Что ждет тебя в этом квесте
📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)
⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»
Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽
☞ Что ждет тебя в этом квесте
— Получение артефактов: портфолио проектов и сертификаты— Прокачка от новичка до Senior Data Scientist— Босс-файты с реальными задачами из индустрии— Доступ к гильдии единомышленников
📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
Иногда пишу ChatGPT «спасибо» на случай, если через 10 появится Skynet, и ИИ оставит меня в живых.
А вы как? Пишете «спасибо» после удачного ответа или общаетесь с ИИ как с микроволновкой: нажал кнопку — получил результат?
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍5🔥1
❤️ Отлично, часто использую
🤔 Использую только там, где это действительно упрощает
🌚 Функциональщина не для меня, только ООП.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔85❤35🌚21
⚡️ Будь как этот гений с картинки — предлагай свои условия работодателю, а не наоборот!
Кто нужен?
Но если вы пока джун — я бы предложил:
- Full-time контракт: 180к/мес после курса + опцион на карьеру в топ-компаниях
- Либо фикс за проект: стань ML-инженером за 39к вместо 44к с промокодом LASTCALL
🔗 Старт 9 сентября
Кто нужен?
Senior ML-Engineer с опытом работы более 6 месяцев в FAANG компаниях. Требование: разработать кросс-платформенное приложение-трекер зарплат с AI-распознаванием вакансий по резюме.
Но если вы пока джун — я бы предложил:
- Full-time контракт: 180к/мес после курса + опцион на карьеру в топ-компаниях
- Либо фикс за проект: стань ML-инженером за 39к вместо 44к с промокодом LASTCALL
🔗 Старт 9 сентября
🥱4❤1👍1
Календарь перевернули, учебный год начали, а Java-сообщество не стоит на месте. Вот актуальные события и материалы:
🔹 Java 25 (LTS) запланирована на 16 сентября 2025
Среди 18 новых улучшений — профилирование CPU-времени в JFR, Vector API, структурная конкуренция и многое другое. Стабилизация уже в самом разгаре.
🔹 95% пилотных проектов в области генеративного ИИ в компаниях проваливаются
Согласно отчёту MIT, лишь около 5 % пилотных внедрений генеративного ИИ приносят ощутимый финансовый эффект, несмотря на активный интерес и ожидания. Основные причины провалов — неправильная интеграция, неоправданные приоритеты и недостаточная адаптация под бизнес-процессы.
🔹 Java 26 может получить HTTP/3
Следующий релиз рассматривает опциональную поддержку HTTP/3, что может обновить сетевой стек платформы.
🔹 Отказ от Oracle Java в пользу Open-Source
79 % организаций переходят на бесплатные дистрибутивы Java — это экономия до 40 %, гибкое лицензирование и меньше рисков.
🔹 AI-кодогенерация не вытеснит разработчиков
AI хорошо помогает с рутиной, но без человеческого интеллекта, контекста и внимания к качеству и безопасности Java-разработка не обойдётся.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥2
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результататом запуска кода?
Anonymous Quiz
38%
Number is: 42
2%
NullPointerException
7%
Number is: Optional[42]
47%
Ошибка компиляции
6%
Посмотреть ответ
👍6🥱5❤3🔥2😁1
Senior Java-разработчик — от 285 000 ₽ — удалёнка
Senior Java Developer — от 285 000 ₽ — удалёнка
Java-разработчик — от 300 000 ₽ — удалёнка
Java разработчик / Backend Java Developer — от 170 000 до 300 000 ₽ — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1👏1🤔1
Иногда реально ощущение, что нас держат в Матрице.
Большинство сидит, читает статьи про ML, смотрит ролики «как это работает» — и всё.
❗ Сегодня последний день промокода Lastcall (−5000 ₽).
Уже завтра стартует первый вебинар по Машинному обучению — полный набор для выхода из Матрицы.
Кто готов вырваться из симуляции и ворваться в сезон найма?
👾 — я уже в команде Нео
👍 — хочу красную таблетку
🤔 — пока думаю, но интересно
Забирай полный комплект для ML-разработки: Python + Математика + Машинное обучение.
🔥 Скидка 30% действует только до 9 сентября → забираем себе
Большинство сидит, читает статьи про ML, смотрит ролики «как это работает» — и всё.
❗ Сегодня последний день промокода Lastcall (−5000 ₽).
Уже завтра стартует первый вебинар по Машинному обучению — полный набор для выхода из Матрицы.
Кто готов вырваться из симуляции и ворваться в сезон найма?
👾 — я уже в команде Нео
👍 — хочу красную таблетку
🤔 — пока думаю, но интересно
Забирай полный комплект для ML-разработки: Python + Математика + Машинное обучение.
🔥 Скидка 30% действует только до 9 сентября → забираем себе
🥱2❤1
Хотите писать код быстрее и без лишнего копипаста? Используйте Postfix Completion — умные сокращения, которые превращают выражения в полноценный код.
🔹 Что делает
— Превращает набранное выражение в готовую конструкцию (например, myVar.notnull → if (myVar != null) {...})
— Работает для условий, циклов, логирования, null-check и многого другого
— Доступна для Java, Kotlin и многих языков
🔹 Зачем это нужно
— Экономит время
— Снижает вероятность синтаксических ошибок
— Ускоряет рутинные действия (особенно null-checks)
🔹 Как использовать
— Пишите выражение, затем ставите точку и выбираете суффикс (например, .if, .for, .notnull)
— IDEA сама развернёт шаблон в готовый код
— Список доступных суффиксов: Settings → Editor → General → Postfix Completion
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥1
Многие знают, что volatile «гарантирует видимость между потоками». Давайте разберёмся, что именно делает это ключевое слово на уровне Java Memory Model (JMM).
В многопроцессорной архитектуре потоки могут обращаться к своим копиям переменных через L1/L2 кэши, а не к основной памяти. Компилятор и процессор активно реорганизуют инструкции (out-of-order, speculative execution), что при отсутствии механизмов синхронизации ведёт к неожиданному поведению в многопоточности.
Если переменная не volatile, один поток может работать со старым значением из кеша и никогда не увидеть обновление другим потоком.
Пример:
class FlagExample {
boolean flag = false;
void thread1() {
while (!flag) {
// бесконечный цикл
}
}
void thread2() {
flag = true;
}
}
JVM и JIT могут оптимизировать while(!flag) так, что значение flag будет читаться один раз и кешироваться локально — и первый поток не выйдет из цикла.
🔹 Гарантирует видимость — каждое чтение/запись идёт из основной памяти, а не из локальных кешей
🔹 Гарантирует порядок операций — volatile запрещает компилятору и процессору менять порядок операций до и после чтения/записи
🔹 Гарантирует правило happens-before — запись в переменную будет видна всем потокам, которые читают её после
Пример:
volatile int counter = 0;
void inc() {
if (counter < 10) {
counter++; // всё ещё не безопасно
}
}
▪️ Не обеспечивает атомарность
counter++ разваливается на чтение → инкремент → запись. Если два потока сделают это одновременно, одно из увеличений потеряется.
Для атомарных операций используйте атомики или синхронизацию.
▪️ Не заменяет synchronized
volatile гарантирует видимость, но не защищает этот блок от одновременного выполнения разными потоками. Для таких случаев используйте synchronized или Lock.
Пример double-checked locking:
class Singleton {
private static volatile Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
Без volatile JVM могла бы отдать ссылку на не до конца сконструированный объект.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3👏2
— JEP 522, авторы — Ivan Walulya и Thomas Schatzl, нацелен на реализацию в JDK 26; последнее обновление датировано 8 сентября 2025 года.
— Согласно дорожной карте JDK 26, окончательное рассмотрение этого JEP запланировано на 15 сентября 2025 года.
— Предложено снизить накладные расходы на синхронизацию между потоками приложения и сборщика мусора G1, сохранив существующую архитектуру и взаимодействие с пользователем.
— Ключевая идея — внедрение второй таблицы карточек (card table):
▪️ Потоки приложения работают с быстрой, простой, синхронно-нережимой "первой" таблицей
▪️ Потоки-оптимизаторы обрабатывают отдельную вторую таблицу
▪️ При необходимости G1 выполняет атомарный обмен таблицами, позволяя каждому потоку работать автономно и эффективно
— Производительность:
▪️ В сценариях с частыми изменениями ссылок в объектах — прирост производительности в диапазоне 5–15 %
▪️ Даже в менее интенсивных сценариях — прирост до 5 % за счёт упрощения write-барьеров (уменьшение с ~50 до ~12 инструкций на x64)
— Снижение пауз GC: более лёгкая структура таблиц карточек и менее громоздкая синхронизация сокращают продолжительность пауз сборщика мусора
— Дополнительная память:
▪️ Вторая таблица занимает ~0,2 % от кучи — порядка 2 МБ на каждый ГБ JVM-кучи
▪️ Несмотря на это, она заменяет более объёмные вспомогательные структуры и не увеличивает общий объём памяти заметно
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4❤1💯1
🎯 Как настроить аутентификацию с 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️⃣ Конфигурация безопасности
Создайте класс конфигурации:
🐸 Библиотека джависта
#Enterprise
В 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();
}
}
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥2🎉1
Anonymous Poll
37%
Да, если он глубоко понимает Java Core и архитектуру приложений
21%
Нет, современные фреймворки — неотъемлемая часть разработки
34%
Зависит от конкретного проекта и требований
9%
Не знаю, но интересно узнать мнение других
😁6💯1👾1
⚙️ Интеграция системы логирования с Logback в Spring Boot
Ищете, как настроить логирование в приложении на Spring Boot? Используйте Logback для эффективного логирования и управления уровнями логов. Используйте AI для ускорения процесса.
📝 Промпт:
💡 Расширения:
— Добавьте
— Добавьте
— Добавьте
🐸 Библиотека джависта
#CoreJava
Ищете, как настроить логирование в приложении на Spring Boot? Используйте Logback для эффективного логирования и управления уровнями логов. Используйте AI для ускорения процесса.
📝 Промпт:
Generate a logging system integration for a Spring Boot 3 application using Logback.
— Set up logback-spring.xml for flexible configuration of logging levels and appenders.
— Define rolling file appender to archive old log files based on size or date.
— Configure log format with PatternLayoutEncoder for structured and readable logs.
— Implement different logging levels (INFO, WARN, ERROR) for different components of the application.
— Integrate MDC (Mapped Diagnostic Context) for tracking user sessions or specific requests.
— Set up asynchronous logging with AsyncAppender to improve performance in high-traffic applications.
— Enable console logging for development and file logging for production environments.
— Добавьте
Set up rolling file appender for log rotation based on size or date
для архивирования старых логов.— Добавьте
Implement asynchronous logging with AsyncAppender
для улучшения производительности в высоконагруженных приложениях.— Добавьте
Integrate custom appenders for external monitoring systems like Elasticsearch or Splunk
для интеграции с внешними системами мониторинга.#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥1
🎧 Что послушать — #подкаст
🔹 Javaswag #80
Дата выпуска: 22 августа 2025
Ведущий: Дмитрий Волыхин
Гость: Илья Зонов, архитектор
Продолжительность: примерно 2 часа 6 минут
В выпуске обсуждают роль архитектора, подход API First, книгу Code of Architecture, жизненный баланс на высоких ставках, работу с Kafka и сериализацией, а также многие другие аспекты разработки и архитектуры в мире IT.
🔹 Ключевые темы выпуска
00:00 — Начало
06:03 — Linux и эмбеддед системы
12:57 — Проекты на Java
19:03 — Постгресс и банки
30:31 — PostgreSQL
34:55 — Бизнес-процессы
42:13 — Процесс разработки в малых и крупных компаниях
49:12 — Принятие решений в команде
55:16 — Work-life balance на высоких ставках
01:00:36 — Подход API First
01:14:23 — Роль архитектора и Kotlin
01:17:23 — Генерация клиентов
01:25:10 — Книжный клуб Code of Architecture
01:33:48 — Мотивация
01:40:45 — Чтение книг
01:47:29 — Инструменты для работы с текстом и заметками
01:55:10 — Vim и Emacs
01:56:52 — Ответ на предыдущее непопулярное мнение
02:01:35 — Готовность к изменениям
🔗 Слушать выпуск
🐸 Библиотека джависта
#DevLife
🔹 Javaswag #80
Дата выпуска: 22 августа 2025
Ведущий: Дмитрий Волыхин
Гость: Илья Зонов, архитектор
Продолжительность: примерно 2 часа 6 минут
В выпуске обсуждают роль архитектора, подход API First, книгу Code of Architecture, жизненный баланс на высоких ставках, работу с Kafka и сериализацией, а также многие другие аспекты разработки и архитектуры в мире IT.
🔹 Ключевые темы выпуска
00:00 — Начало
06:03 — Linux и эмбеддед системы
12:57 — Проекты на Java
19:03 — Постгресс и банки
30:31 — PostgreSQL
34:55 — Бизнес-процессы
42:13 — Процесс разработки в малых и крупных компаниях
49:12 — Принятие решений в команде
55:16 — Work-life balance на высоких ставках
01:00:36 — Подход API First
01:14:23 — Роль архитектора и Kotlin
01:17:23 — Генерация клиентов
01:25:10 — Книжный клуб Code of Architecture
01:33:48 — Мотивация
01:40:45 — Чтение книг
01:47:29 — Инструменты для работы с текстом и заметками
01:55:10 — Vim и Emacs
01:56:52 — Ответ на предыдущее непопулярное мнение
02:01:35 — Готовность к изменениям
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤1
Garbage Collector (GC) в Java — это механизм автоматического управления памятью, который отвечает за очистку памяти от объектов, которые больше не используются в программе. Вместо того, чтобы разработчик вручную освобождал память, как в некоторых других языках программирования, Java использует сборщик мусора, который делает это автоматически.
Когда вы создаёте объект в Java, он занимает место в куче (heap) — области памяти, предназначенной для динамического распределения. Однако по мере работы программы некоторые объекты становятся ненужными, и их можно удалить, чтобы освободить память для других задач. Это и есть основная задача GC — найти объекты, которые больше не используются, и освободить память.
1. Маркировка. На первом этапе система анализирует объекты в куче и помечает те, на которые существуют ссылки, то есть которые всё ещё могут быть использованы в программе. Эти объекты называют живыми.
2. Сборка мусора. После маркировки GC удаляет объекты, которые не были помечены как «живые». Эти объекты больше не используются в программе и могут быть безопасно удалены, а занимаемое ими пространство освобождается.
3. Компактизация (Compaction). Иногда после удаления объектов в куче остаются фрагменты пустой памяти. В этом случае GC может перемещать объекты, чтобы устранить фрагментацию и сделать память более сплошной. Это улучшает использование доступных ресурсов.
Java предлагает несколько типов сборщиков мусора, каждый из которых имеет свои особенности и подходит для разных сценариев:
— Serial GC: простой сборщик, использующий один поток для работы с памятью. Это может быть полезно в простых приложениях, но вызывает большие паузы в работе программы, что не подходит для сложных многозадачных приложений.
— Parallel GC: этот сборщик использует несколько потоков для работы, что ускоряет процесс очистки. Он подходит для многозадачных приложений и приложений с большими объемами данных, где важно минимизировать время пауз.
— CMS (Concurrent Mark-Sweep): сборщик мусора, который работает параллельно с основной программой, минимизируя паузы. Он использует несколько шагов для маркировки и уборки мусора, чтобы не блокировать выполнение приложения на долгое время.
— G1 (Garbage First): один из самых современных сборщиков мусора. Он фокусируется на минимизации времени пауз и дает разработчикам больше контроля над процессом. G1 отлично подходит для больших приложений с высоким уровнем взаимодействия.
Одним из главных аспектов работы GC является Stop-the-World пауза, когда приложение временно приостанавливается, чтобы сборщик мусора очистил память. Хотя паузы в большинстве случаев довольно короткие, они могут заметно повлиять на производительность, особенно в приложениях с высокими требованиями к времени отклика.
— Оптимизация размера кучи. Размер кучи можно настроить в зависимости от объема данных, с которым работает ваше приложение. Неправильно выбранный размер может привести к слишком частым или слишком редким сборкам мусора.
— Использование правильного сборщика. Выбор сборщика мусора зависит от особенностей вашего приложения. Например, для приложений с требованием низкой задержки лучше использовать G1 или CMS.
— Профилирование. Используйте инструменты профилирования, чтобы отслеживать, как работает GC в вашем приложении. Это поможет выявить проблемы и оптимизировать использование памяти.
— Когда ваше приложение работает с большим количеством объектов, и необходимо следить за производительностью.
— Если заметны задержки или паузы, вызванные работой GC, и нужно оптимизировать работу с памятью.
— В сложных многозадачных или распределённых приложениях, где важно, чтобы GC не блокировал выполнение других задач.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1👏1