gram news
Java Geek channel avatar

Java Geek

@java_geek

Практичные советы, лайфхаки и код для Java-разработчиков. Каждый пост — реальная польза. Учим Java на примерах. По всем вопросам @evgenycarter

ProjectsRUProgramming

2,380subscribers

Open the Channel

Latest posts

  • Java Geek

    9 Sept, 05:29

    ☕ Java Tip: Как работает var в JavaС версии Java 10 появился ключевое слово var. Оно упрощает код, автоматически выводя тип переменной:var list = new ArrayList<String>(); list.add("Hello"); list.add("Java");// Компилятор понимает, что list -> ArrayList<String>✅ Удобно: меньше шаблонного кода.❌ Важно: var не значит "динамическая типизация"! Тип фиксируется при компиляции.📌 Используй var, если тип переменной очевиден - код станет чище.📲 Мы в MAX👉 @java_geek
    117111Open in Telegram
  • Java Geek

    7 Sept, 07:37

    Что такое перегрузка методов в Java?Перегрузка методов — это мощный приём, который позволяет классу иметь несколько методов с одинаковым именем, но разными параметрами. Это даёт объектам класса возможность обрабатывать близкие (почти одинаковые) задачи, но с разными входными данными.Вот очень короткий пример, демонстрирующий перегрузку методов:class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } }В этом примере класс Calculator имеет два метода add: один принимает два целых числа (int) и возвращает сумму в виде целого числа, а другой — два числа с плавающей запятой (double) и возвращает сумму в виде double.Имя метода одинаковое, но параметры различаются, что позволяет вызывать подходящий метод в зависимости от типов аргументов.
  • Java Geek

    31 Aug, 05:51edited

    Fluent InterfaceFluent Interface (Текучий интерфейс) — это шаблон проектирования, который позволяет создавать код, читающийся как текст на естественном языке.Он достигается путем создания методов, которые возвращают ссылку на this объект, позволяя вызывать их в цепочке.📲 Мы в MAX👉 @java_geek
    Image from a post by Java GeekImage from a post by Java Geek
  • Java Geek

    26 Aug, 05:12

    В чем отличия между TreeSet и HashSet?Основное отличие между TreeSet и HashSet заключается в том, что TreeSet хранит элементы в отсортированном порядке, в то время как порядок хранения элементов в HashSet не определен. TreeSet также обеспечивает быстрый поиск и извлечение элементов в отсортированном порядке.📲 Мы в MAX👉 @java_geek
    Image from a post by Java GeekImage from a post by Java Geek
  • Java Geek

    24 Aug, 07:22

    🏗 System Design: Эволюция архитектуры от 1 до 1 000 000 пользователейГлавная ошибка разработчиков при проектировании систем - строить звездолет для поездки за хлебом. Микросервисы, Kafka и Kubernetes не нужны вашему стартапу в первый день.Архитектура должна эволюционировать шаг за шагом. Вот как выглядит этот путь.Уровень 1: Одинокий Волк (1 - 1000 юзеров)Всё крутится на одном сервере (например, в DigitalOcean или AWS EC2).• Что там: Ваше Java-приложение (Monolith) + база данных (PostgreSQL) + веб-сервер (Nginx) живут на одной машине. • Плюсы: Развертывание занимает 5 минут, всё работает быстро (сетевые задержки нулевые). • Минусы: Если сервер упал - упало всё. Масштабировать можно только покупкой более мощного процессора/памяти (Вертикальное масштабирование).Уровень 2: Разделение труда (10 000 юзеров)Приложение начинает тормозить, потому что СУБД "съела" всю оперативную
    264221Open in Telegram
  • Java Geek

    23 Aug, 11:05

    🚀 Подборка полезных IT каналов в MaxСистемное администрирование, DevOps 📌https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак
    MAXСистемный Администратор | Sysadmin Windows & Linux Server. …Купить рекламу: https://telega.in/m/i_odmin Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
  • Java Geek

    21 Aug, 07:52

    🏗 Java: Структурная конкурентность. Прощайте, зомби-потоки!Допустим, вы используете Виртуальные потоки (Project Loom), чтобы сделать два независимых запроса: получить данные пользователя (API 1) и его заказы (API 2).Раньше мы использовали ExecutorService или CompletableFuture. Но у них есть огромная архитектурная дыра: они ничего не знают друг о друге.🧟‍♂️ Проблема зомби-потоков (Unstructured Concurrency)Если API 1 мгновенно падает с ошибкой 500, ваш метод все равно будет ждать, пока API 2 доработает (или упадет по таймауту). Поток, качающий заказы, становится "сиротой". Он делает бесполезную работу, тратит сеть и память, хотя результат уже никому не нужен.А если ошибку выкинет родительский метод? Дочерние потоки продолжат жить своей жизнью в фоне. Это хаос.🧩 Решение: StructuredTaskScopeВ современной Java (начиная с 21 версии) потоки привязали к лексической области
    16711Open in Telegram
  • Java Geek

    20 Aug, 06:49

    🚀 Java на стероидах: Запуск за 0.05 сек с GraalVM Native ImageГлавный аргумент хейтеров Java: "Она жирная и медленная на старте".И они правы. JVM нужно время, чтобы прогреться, загрузить классы и скомпилировать байт-код (JIT). Для микросервисов в Kubernetes или Serverless (AWS Lambda) это критично.Но GraalVM Native Image превращает ваше Java-приложение в нативный бинарник. Без JVM. Без java -jar. Просто исполняемый файл.🏎 JIT vs AOT: В чем разница?1. Standard JVM (JIT - Just In Time): Вы запускаете код -> JVM интерпретирует его -> находит "горячие участки" -> компилирует их в машинный код прямо во время работы. • Плюс: Максимальная производительность на длинной дистанции (Runtime Optimization). • Минус: Медленный старт, жрет память на компилятор.2. Native Image (AOT - Ahead Of Time): Вы компилируете код заранее. Весь "мертвый" код выкидывается. Остается только то, что
    19211Open in Telegram
  • Java Geek

    18 Aug, 20:29

    🐳 Java Testing: Хватит мокать базы данных!Вы всё еще используете H2 для тестов, а в продакшене стоит PostgreSQL? Или, может быть, вы поднимаете docker-compose руками перед запуском mvn test?⛔ Как было раньшеРаньше нам приходилось делать трюки с @DynamicPropertySource, чтобы вручную прокинуть jdbc:url, username и password из поднятого контейнера в контекст Spring.// Old School (Java 17 / Boot 2.7) @DynamicPropertySource static void registerPgProperties(DynamicPropertyRegistry registry) { registry.add("spring.datasource.url", postgres::getJdbcUrl); registry.add("spring.datasource.username", postgres::getUsername); // ... куча ручного кода }✅ Как сейчас@ServiceConnection сама понимает, что это за контейнер (Postgres, Redis, Kafka, RabbitMQ), и автоматически прописывает нужные свойства в ваш application.properties на время теста.
  • Java Geek

    18 Aug, 16:01

    🕵️ Бенчмарк как оружие массового поражения, разработка по Mechanical Sympathy и Java после LoomЭто лишь часть докладов конференции JVM Day, которые пройдут 29 августа в штаб-квартире Т-Банка в Москве. На ивенте соберутся представители JVM-комьюнити: разрабы, тимлиды, архитекторы и другие спецы, которые работают с Java, Kotlin и Scala.Среди спикеров конфы: 🔴Андрей Кулешов из Яндекса разберет, что произошло в мире JVM-языков за первую половину 2026 года. 🔴Сергей Петрелевич из Т-Банка расскажет, как принципы Mechanical Sympathy и готовые библиотеки помогают ускорить стандартное Spring Boot MVC-приложение. 🔴Александр Ланцов из Мир Plat.Form выступит с докладом о том, насколько после Loom стали удобнее и применимее разные подходы к построению конкурентных программ.Закончится конференци
    2331985Open in Telegram
  • Java Geek

    18 Aug, 15:16

    Array vs ArrayListВыбор между Array (стандартным Java-массивом) и ArrayList зависит от специфики задачи на Java, которую требуется решить. Помните о следующих особенностях этих типов:☕️ Array имеет фиксированный размер и память для него выделяется в момент объявления, а размер ArrayList может динамически изменяться; ☕️ Массивы Java работают гораздо быстрее, а в ArrayList намного проще добавлять/удалять элементы; ☕️ При работе с Array велика вероятность получить ошибку ArrayIndexOutOfBoundsException; ☕️ У ArrayList только одно измерение, а вот массивы Java могут быть многомерными.👉 @java_geek
    Image from a post by Java GeekImage from a post by Java Geek
  • Java Geek

    18 Aug, 08:02

    Почему ты получаешь отказ после "норм собеса"?Дело не в знаниях - ты просто не знаешь, что реально проверяют на собеседованияхОтсюда: — непонимание, какие навыки надо качать, чтобы выйти на следующий грейд — ощущение стагнации и отсутствие роста в скиллах — долгое время на одной и той же зпРешение — знать, что от тебя ждёт интервьюер, и умение правильно донести свою мысльДля этого ребята из ШОРТКАТ (менторской программы для разработчиков) собрали в один файл ОТВЕТЫ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥Они проанализировали более 100 мок-интервью и собрали внутри реальные вопросы + ответы сильного кандидатаЗабрать можно бесплатно (!) в боте — @shortcut_sh_botПереходите по ссылке выше и забирайте файл, чтобы быстрее выйти на новый уровень ☝️Реклама.
    Image from a post by Java GeekImage from a post by Java Geek
  • Java Geek

    17 Aug, 05:18

    🔒 Java Sealed Classes: Диктатура в вашей иерархииРаньше в Java у нас было всего два стула для классов:1. Public: Наследуйся кто хочет (открытый проходной двор). 2. Final: Никто не пройдет (полная изоляция).Но что, если я хочу разрешить наследование только моим классам Circle и Square, но запретить Васе из соседнего отдела создавать свой кривой Triangle? Начиная с Java 17, у нас есть Sealed Classes.🚧 Как это работает?Вы используете ключевое слово sealed и permits, чтобы явно перечислить, кому дозволено быть вашим наследником.public sealed interface PaymentResult permits Success, Failure, Pending { }Теперь компилятор гарантирует: в мире существуют только три вида PaymentResult. Четвертого не дано.
    234321Open in Telegram
  • Java Geek

    10 Aug, 05:37

    🕵️ Java var: Удобный сахар или скрытая угроза?С выходом Java 10 ключевое слово var позволило нам писать меньше кода. var - это Local Variable Type Inference. Это значит, что Java осталась строго типизированным языком, просто теперь компилятор сам догадывается о типе переменной, глядя на то, что находится справа от знака равно (=).Но иногда его догадки могут вас удивить. Вот 3 примера, где var работает неочевидно.1. Ловушка "Diamond Operator" (<>)Самая частая ошибка новичков.// Без var (Классика) List<String> list = new ArrayList<>(); // Компилятор видит слева List<String> и понимает, что справа тоже String.// С var (Ошибка) var list = new ArrayList<>();В чем проблема? У компилятора нет информации о типе. Он видит пустые скобки <> и решает, что это ArrayList<Object>. В итоге вы теряете типизацию:
  • Java Geek

    8 Aug, 12:00

    🚀 Подборка полезных IT каналов в MaxСистемное администрирование, DevOps 📌https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак
    MAXСистемный Администратор | Sysadmin Windows & Linux Server. …Купить рекламу: https://telega.in/m/i_odmin Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
    2582111Open in Telegram
  • Java Geek

    5 Aug, 12:32

    ⚔️ Java Battle: List.of() vs Arrays.asList() - в чем разница?На код-ревью часто можно увидеть, как эти два метода используют взаимозаменяемо. На первый взгляд, результат один - список элементов. Но под капотом это два совершенно разных зверя.Давайте разберем, почему замена одного на другой может сломать ваш код.1. Иллюзия неизменяемости (The Mutability Trap)Это самое важное различие.🔴List.of() (Java 9+): Создает по-настоящему неизменяемый список. Вы не можете ни добавить, ни удалить, ни изменить элемент. 🔴Arrays.asList() (Java 1.2+): Создает список фиксированного размера, который "обернут" вокруг массива. Вы не можете менять размер (add/remove), но можете заменять элементы!var legacyList = Arrays.asList("A", "B"); var modernList = List.of("A", "B");legacyList.set(0, "C"); // ✅ РАБОТАЕТ! Список теперь ["C",
  • Java Geek

    4 Aug, 08:04

    🔴 Завтра тестовое собеседование с Java-разработчиком5 августа(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.Как это будет: 📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос СергеюЭто бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_botРеклама. О рекламодателе.
    Image from a post by Java GeekImage from a post by Java Geek
  • Java Geek

    3 Aug, 10:28

    ☕️ Лямбды и Функциональные интерфейсы: Как это работает под капотом?Мы все любим лямбды в Java за краткость. Но задумывались ли вы, как строго типизированная Java понимает запись x -> x 2, не зная типа переменной x?Все дело в Функциональных интерфейсах. Давайте разберем механику, которая превращает "бойлерплейт" в элегантный код.🧩 Что такое SAM? В основе лежит концепция SAM (Single Abstract Method). Функциональный интерфейс - это интерфейс, у которого есть ровно один абстрактный метод.Лямбда-выражение - это не самостоятельный объект. Это ленивая реализация этого самого единственного метода "на лету".🔥 До vs После Взгляните, как функциональный интерфейс Predicate<T> убивает лишний шум:// ❌ До Java 8 (Анонимный класс) // Куча лишнего кода ради одной проверки Predicate<String> isLong = new Predicate<String>() { @Override public boolean test(String s) { return s.length() > 5;
    29111Open in Telegram
  • Java Geek

    29 Jul, 07:07

    🚀 Hibernate: Эффективное обновление с @DynamicUpdateЧасто ли вы задумывались, почему Hibernate при обновлении одного поля в сущности генерирует SQL-запрос, который включает все поля? Это может быть неэффективно, особенно для сущностей с десятками колонок.Именно здесь на помощь приходит аннотация @DynamicUpdate!💡 В чем проблема? (Без @DynamicUpdate)По умолчанию, когда вы вызываете repository.save(entity) для существующей сущности, Hibernate генерирует UPDATE запрос, который устанавливает значения для всех полей, кроме первичного ключа.// Without @DynamicUpdate update employee set age=?, // даже если только age изменился first_name=?, //... и это тоже last_name=? where id=?Если изменилось только age, остальные поля обновляются на те же значения, что были.
    325111Open in Telegram
  • Java Geek

    27 Jul, 06:56

    Что такое пул строк? Это набор строк, хранящийся в Heap.☕ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк; ☕ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени; ☕ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё; ☕ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением; ☕ Пул строк является примером паттерна «Приспособленец» (Flyweight).📲 Мы в MAX👉 @java_geek
    63722Open in Telegram