Как стать автором
Поиск
Написать публикацию
Обновить
204.49

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга

Многие крупные компании применяют Go, а спрос на опытных инженеров, владеющих Go, высок как никогда. Онбординг проходит действительно быстро, и у нас есть успешные тому примеры. Все благодаря общей простоте языка и отсутствию function coloring. В карточках рассказываем, как это получилось у Кирилла в 2ГИС↓

Хочешь так же? Сейчас в проект Отелло ищем инженеров с Java и C#:
go-jobs.2gis.ru

Теги:
0
Комментарии0

Обновлена информационная база JBook по изучению Java полностью на русском языке. Проект помогает выучить язык с полного нуля и до уровня поиска работы, включая концепции, приёмы, актуальные фреймворки, ООП, основные алгоритмы, паттерны решения задач и видеоразборы. Есть множество упражнений разного уровня сложности к каждой лекции. Проект развивается с 2018 года и постоянно обновляется вместе с версиями Java, документацией и новыми подходами к разработке.

Теги:
+3
Комментарии0

Сегодня за день я сделал:

1. Переработал FidoJ (современный аналог jNode, на базе микросервисной архитектуры) настолько, насколько это возможно. Поправил все последствия вайбкодинга, и теперь FidoJ - это реально пусечка.

2. NodehistJ (Java-аналог перловому nodehist) также подвергся небольшим изменениям, также касающиеся устранения последствий вайбкодинга.

3. Теперь я не планирую делегировать ИИ бо‌льшую часть своей работы. По моему мнению, ИИ (юзал DeepSeek-V3, ибо Claude слишком дорогой для меня) даже не справлялся с багфиксом, чего уж говорить о полноценном рефакторинге. Поэтому с вайбкодингом я завязываю. Вручную намного быстрее, чем через ИИ.

Теги:
0
Комментарии1

Сегодня у нас задачка с подвохом для тех, кто пишет на Java. Какой результат будет выведен в консоль? Пишите в комментариях!

import java.util.stream.Stream;
public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
        Integer result = prepareStream(stream);
        System.out.printf("Result after stream processing: %s%n", result);
    }

    private static Integer prepareStream(Stream<Integer> stream) {
        System.out.printf("Incoming stream with: %d elements%n", stream.count());
        return stream
                .map(integer -> integer++ + ++integer)
                .filter(integer -> integer % 3 == 0)
                .reduce(0, Integer::sum);
    }
}

Дальше будет решение, поэтому если не хотите спойлеров — не читайте!

.

.

.

Подвох в том, что будет выброшено исключение:

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
 at java.base/java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
 at java.base/java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:96)
 at java.base/java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:800)
 at java.base/java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:191)
 at java.base/java.util.stream.ReferencePipeline.map(ReferencePipeline.java:190)
 at Main.prepareStream(Main.java:16)
 at Main.main(Main.java:7)

Исключение выбрасывается из-за того, что при выводе в консоль лога с количеством элементов стрима мы использовали операцию stream.count(), которая является терминальной и делает дальнейшее использование стрима невозможным.

System.out.printf("Incoming stream with: %d elements%n", stream.count());

Ну а после того, как мы избавимся от лога, который нам все ломает, правильный ответ будет — 18.

С учетом postfix и prefix инкремента числа в каждой итерации мы получаем:
.map(1 → 1 + 3)...(5 → 5 + 7)

Потом после фильтрации по делению на 3 без остатка в стриме остаются числа 6 и 12. И при помощи операции reduce() находим сумму этих чисел.

Теги:
+2
Комментарии0

Приглашаем на бесплатный вебинар «Как стартовать в Java и не потеряться: структура, инструменты, кейсы». 

📅 Дата: 8 июля

Время: 18:00–19:00 (Мск)

Java — один из самых востребованных языков, но с чего начать, если вокруг столько информации, а подходы быстро устаревают? В прямом эфире разберем:

✔️ С чего начать в Java, чтобы не тратить время на устаревшие методы

✔️ Ключевые инструменты (JUnit, Maven, Git) — как их применять с первых шагов

✔️ Кейсы, которые помогут на собеседованиях и в реальных проектах

✔️ Как избежать типичных ошибок новичков и сразу писать чистый код

Почему стоит прийти?

🔹 Узнаете, как быстро войти в Java с актуальными знаниями

🔹 Увидите разбор реальных примеров и учебных проектов

🔹 Получите рекомендации по ресурсам и дальнейшему развитию

👨‍🎓 Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в ИТ. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy. 

🔗 Записаться

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии0

Сегодня 24 июня до 23.59 успейте принять участие в главном DevOps-исследовании года!

Это last call по исследованию состояния DevOps 2025 в России, проводимого компанией «Экспресс 42» при поддержке Axiom JDK. Оно закрывается сегодня ночью в 00.00 по мск.

Помогите отследить тренды и понять, как опыт разработчиков (DX) влияет на эффективность команд и успех компании. Фокус State of DevOps Russia 2025 на developer experience. 

Осталось всего несколько часов — пройдите опрос до 23.59.

Мы вместе изучим, что помогает компаниям формировать позитивный опыт для разработчиков и как на него влияют внутренние платформы, ML/AI-инструменты, облачные технологии и практики ИБ.

Опрос анонимный и займёт ~20 минут. Данные нужны, чтобы понять, какие инструменты реально работают в проде, а какие — только в красивых презентациях.

Если вы — DevOps-инженер, разработчик, тестировщик, админ, тимлид, CTO, техдир — внесите свой вклад.

Все участники получат:

  • Полный доступ к результатам исследования;

  • Возможность выиграть билеты на Highload++ и DevOpsConf.

  • Промокоды и мерч от партнёров (AvitoTech, VK Cloud, Positive Technologies, Selectel, ecomtech, Okko, Онтико, Т-Технологии,  Axiom JDK, Экспресс 42).

Участвуйте сегодня и голос вашей команды будет услышан. Чем больше ответов — тем лучше получится карта DevOps-практик в России.

Почитать предыдущие отчёты можно тут

PS. А у кого есть интерес заняться девопсом в команде Axiom JKD, загляните сюда.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Telegram запустил конкурс для разработчиков под Android. Призовой фонд: $50 000. Срок сдачи работ: 11 июля, 23:59 по дубайскому времени (UTC+4). Объявление итогов: июль 2025.

В дополнение к призовым, победитель конкурса сможет присоединиться к команде Telegram в Дубае и зарабатывать 1 миллион долларов в год после вычета налогов.

Задача: Внедрить обновлённый интерфейс профилей в приложение Telegram для Android в строгом соответствии с предоставленным дизайном.

Полные условия конкурсного задания, технические подробности и макеты представлены в отдельном канале платформы.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

В развитие темы Bare Metal VM, над которой я время от времени размышляю начиная аж с 2010 года, предлагаю ознакомиться с интересным и, на мой взгляд, перспективным проектом OSv.

Ещё в 10-м году я подумывал над тем, что имея сервера приложений наподобие Томката и серьёзную взрослую изоляцию на уровне загрузчика классов - можно выкинуть подлежащую ОС со всеми её ненужными сервисами из нашего стека, оставив сервер приложений на голом железе. Тогда же выяснилось, что не я один так думаю, было коммерческое предложение Oracle JRockitVE. Судя по всему, наследница вот этого приобретения Bea.

Ранее я уже писал статью об этой идее на Хабре и пытался защищать в дискуссии.

Можно попробовать снова.

Ещё можно смотреть на развитие ОС на базе грааля. Или вспомнить про JaOS.

К современным ОС типа Линукса у меня есть много претензий, и есть несколько идей, которые можно было бы реализовать для их улучшения. Некоторые из них описаны в указанном проекте. Некоторые в том или ином виде наличествуют в специализированных коммерческих предложениях (Юникс) крупных вендоров типа АйбиЭм или того же Оракла. Это касается, например,

  • файлово-дискового стека,

  • оптимизации сети,

  • использования ГПУ в неожиданных местах,

  • гибкости в использовании СУБД при разработке с контейнером.

Теги:
Всего голосов 2: ↑2 и ↓0+5
Комментарии6

Какую тему для книги можно выбрать в 2025? Современный мир — насыщенный мир. Книг выходит очень много. Как, интересно, можно выбрать тему для книги? От этого зависит конечная аудитория книги всё-таки. Микросервисы? Внедрение зависимостей? Ещё что-нибудь? Я в смятении. А выбирать пора уже. Полгода как прошлая книга вышла...

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

Поддержка должна быть бесплатной. Всегда!

Последнее время замечаю тенденцию, что многие хостинги и публичные облака вводят платную поддержку. 

Позиционируется поддержка как дополнительная опция и гарантия времени ответа. Но на мой взгляд это выглядит как вымогательство денег, когда компания может оказывать качественную поддержку, но если вы их не “подкупите” дополнительно, не будет.

Я основатель облака для простого деплоя проектов через Git push – Amvera Cloud. И вижу, что пользователи пишут нам в поддержку. И говоря честно – люди пишут только тогда, когда другие способы не помогли и они не знают, как решить их насущную проблему. А это значит мы не доработали и сделали что-то непонятно или неудобно. И это наша обязанность постараться им помочь. И я не вижу морального права просить за это с них деньги.

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

И главное, я не верю, что на платной поддержке можно сильно заработать. Это просто предлог, чтобы работать хуже, чем может компания.

Поддержка должна быть бесплатной, всегда, и без всяких но! 

Теги:
Всего голосов 8: ↑7 и ↓1+6
Комментарии3

🗯️ Про метрики на отдельном порту.

Далее про то как сделать выделенный порт и http-пулл для promitheus-метрик, так вот докладываю👇

Мы используем embedded tomcat как и великое множество других Java-проектов(остальным сил и терпения), по этому этот пост применительно к нему.

📍Для создания выделенного порта достаточно создать отдельный коннектор спринговой java-конфигурацией и проинициализировать его через TomcatServletWebServerFactory.

❕Стоит обратить внимание что на данном порту будут доступны вообще все сервлеты доступные и на стандартном порту, но при наличии разграничения доступа обычно это не является проблемой.

P.S. Не хочу быть злом по этому в комменты в свою телегу выложу класс в текстовом варианте😁

Теги:
Всего голосов 3: ↑1 и ↓2+1
Комментарии2

Опасности Apache POI 📍

Наверняка многие из вас юзают Apache POI. Для тех, кто не знает: это джаванская либа для работы с файлами Microsoft Office и OOXML — всякие Excel, Word и прочее.

А в чём опасность?

При генерации Excel-файла эта библиотека позволяет включить отслеживание ширины данных в колонках и автоподгонку ширины столбцов под содержимое (чтобы данные не скрывались из-за маленькой ширины столбца по умолчанию).

Включается это так:
// Отслеживаем ширину для автосайзинга
sheet.trackAllColumnsForAutoSizing();
// ... генерируем строки Excel-файла
// Автосайзим столбцы
sheet.autoSizeColumn(columnIndex);

Проблема: эта тема крайне ресурсоёмкая на больших объёмах данных. На тесте с 100 строками — всё быстро. На проде с 600К строк — 20 минут превращаются в 4 часа. 4 часа, Карл! Чего оно там делает вообще?!)

У нас такое не раз уезжало в прод и штука эта совсем неприятная я вам скажу:

  • Отчёт не собирается вовремя;

  • Заказчик негодует;

  • Паника, крики — в общем, ну его этот трекинг! 😅

Что делать?

В 99% случаев: достаточно автосайзинга только для заголовков:

// Включаем автосайзинг
sheet.trackAllColumnsForAutoSizing();
// Генерируем заголовки
//...
// Автосайзим колонки
sheet.autoSizeColumn(columnIndex);
// Выключаем трекинг
sheet.untrackAllColumnsForAutoSizing();
//... продолжаем генерацию

В 1% случаев: нужно отавтосайзить 1-2 столбца из сотен. Тогда делаем точечный трекинг:

// Трекинг только нужных колонок
sheet.trackColumnForAutoSizing(columnIndex);
// ... генерация данных
// Автосайзим
sheet.autoSizeColumn(columnIndex);

Ну и можно конечно вручную задавать ширину столбцов, но это не всегда удобно.

P.S. Метод autoSizeColumn() очень тяжёлый. Выдержка из джавадоки:

Этот процесс может быть медленным на больших листах, поэтому его стоит вызывать только один раз для каждого столбца в конце обработки.

P.S.S. Еще кстати поя умеют не буферизовать весь excel’ник в память при генерации, надеюсь вы все этим пользуетесь ибо обратное дико некармическая тема)) Знаете ж как?

Приходите к телегу, там обсуждаем наши кровавые энтерпрайзы: https://t.me/umenyarabotaet

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии5

Доделал текстовый редактор на Swing-java

пример как выглядит текстовый редактор
пример как выглядит текстовый редактор

https://github.com/richKirl/simpleEditor посмотреть код можно тут

из особенностей - нету истории ввода Undo/Redo, есть простенькая история команд в эмуляторе командной строки, есть текстовый эмулятор списка, всё сделано предельно костыльно если смотреть сейчас на него)

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Ближайшие события

Он переписал сортировку в Java! Интервью с Владимиром Ярославским

На JPoint 2025 мы пообщались с Владимиром Ярославским — разработчиком, чья работа вошла в историю Java. Именно Владимир стал автором улучшенного алгоритма сортировки, который используется в JDK.

Делимся ссылками на интервью на других ресурсах:

Это только начало — впереди ещё больше бесед с интересными людьми из мира Java и Spring.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

📢 Почему устаревшие библиотеки всё ещё используются? Взгляд на Log4j 1.x 📊

Несмотря на то, что поддержка Log4j 1.x завершилась ещё в 2015 году, исследование показывает удивительную тенденцию:

  • 33.81% проектов продолжают использовать устаревшую версию Log4j 1.x.

  • Лишь 10.89% проектов перешли на современную Log4j-Core 2.x.
    Что ещё более удивительно, даже новые проекты выбирают устаревшую версию, что подчёркивает сложности в управлении зависимостями.

🔍 Почему это происходит?
1️⃣ Недостаточная осведомлённость о безопасности: Разработчики могут недооценивать риски использования уязвимых библиотек.
2️⃣ Высокая стоимость миграции: Переход на новые версии часто воспринимается как сложный и дорогостоящий процесс.
3️⃣ Зависимость от легаси-систем: Многие проекты связаны с устаревшими системами, что делает обновление крайне затруднительным.

⚠️ Риски использования Log4j 1.x
Продолжение работы с этой библиотекой подвергает системы серьёзным угрозам, включая возможность удалённого выполнения кода (например, уязвимость CVE-2019-17571).

💡 Следующие шаги для сообщества

  • Повышать осведомлённость о рисках использования устаревших библиотек.

  • Предоставлять инструменты и ресурсы для упрощения процесса миграции.

  • Рассмотреть временные решения, такие как Reload4j, для быстрого устранения критических проблем.

https://arxiv.org/pdf/2504.03167

Теги:
Рейтинг0
Комментарии0

Привет, Habr!

Уже завтра увидимся на JPoint в Москве, где на стенде Explyt представим новую версию Explyt Test плагина, разыграем весеннюю коллекцию мерча и на вечернем докладе обсудим, что болит и где подгорает у разработчика и тестировщика.

В этом релизе killer фичи Explyt Test плагина – интеграция тестов в существующую кодовую базу и подражание стилю проекта – усилены:

  • возможностями для увеличения тестового покрытия кода

  • генерацией интеграционных тестов для Spring разных видов: MockMVC, Spring Boot

  • анализом моргающих тестов (Flaky tests)

  • генерацией кода в строке редактора (Inline code generation)

  • объяснением ошибок, возникших в консоли

В Explyt Test мы поддержали современные языковые модели от провайдеров OpenAI, Anthropic, DeepSeek, Google Gemini, Cerebras, Groq, Ollama, в том числе:

  • Claude 3.7 Sonnet

  • OpenAI o3-mini

  • DeepSeek R1

  • OpenAI GPT-4.5

Возможности генерации тестов:

  • расширение тестового класса новыми тестовыми методами

  • автоматическая генерация тестов

  • исправление ошибок компиляции и runtime-ошибок в любом тестовом классе

  • использование существующего тестового класса в качестве примера для генерации тестов

  • подготовка проекта для интеграции сгенерированных тестов в существующую кодовую базу 

  • генерация тестового кода по пользовательскому тестовому сценарию 

  • автоматическое исправление ошибок компиляции и runtime-ошибок

Возможности интегрированного ассистента:

  • чат с LLM с поддержкой вложений

  • анализ кода на предмет потенциальных ошибок в реализации (Analyze for bugs)

  • объяснение работы кода и нюансов его использования (Explain code fragment)

  • использование локальной модели для генерации тестов и общения с ассистентом

Поддержка совместимости:

  • IntelliJ IDEA 2024.1+

  • Kotlin K2 

  • Android Studio Koala, Ladybug, Meercat

Поддерживаем тестовые фреймворки: JUnit 5, JUnit 4, TestNG, kotlin-test, фреймворки мокирования: Mockito, Mockito-Kotlin, MockK, SpringMockK, системы сборки: Maven, Gradle, IntelliJ Build System.

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

В личном кабинете добавлена возможность выбирать между Personal и Enterprise версиями.

Explyt Enterprise можно развернуть в виртуальном частном облаке (VPC) или в контуре компании (self-hosting). Код компании не отправляется в интернет и не используется для обучения модели.

Мы очень ценим обратную связь от комьюнити и будем рады пообщаться с вами на стенде Explyt на JPoint и почитать ваши комментарии на Хабре. Скачивайте плагин на сайте, багрепорты и фичреквесты добавляйте в GitHub Issues, узнавать новое – в нашем телеграм.

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Обновление моего текстового редактора на java

обновлённая версия редактора
обновлённая версия редактора
  • подсветка синтаксиса java пока в процессе(подсветка простая пока только на С++)

  • добавлена панелька для ввода поиска - её можно скрыть

  • добавлен счетчик символов текста в редакторе

  • все панели участницы можно скрыть, менять размер

  • быстрое переключение между консолью и пространством с текстом

  • выбран путь емуляции исполнения процесса это значит * - звёздочку я реализовал сам )

  • табы как пробелы - пока предустановлен размер 2 пробела на 1 таб

  • добавлены хоткеи, покачто их нельзя переназначить

  • покраска ошибок в красный цвет

    радует что редактором уже можно пользоваться, мне самому как криейтеру этого текстового редактора нравится )

    добавлю режим PLAIN text`a, подсветку синтаксиса java, калькулятор простенький, возможно добавлю проигрыватель музыки аля как опция

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии7

Друзья, приглашаем на бесплатный вебинар «Микросервисы на Java: современные подходы».

Разберем ключевые принципы микросервисной архитектуры, методы взаимодействия сервисов, стратегии управления данными в распределенной системе и развертывание в Docker и Kubernetes.

📅 Дата: 21.02.2025

Время: 18:00-19:00 (Мск)

На вебинаре:

✔️ Основные концепции микросервисной архитектуры

✔️ Коммуникация микросервисов: REST, gRPC, Kafka

✔️ Управление данными и распределенные транзакции

✔️ Развертывание в контейнерах: Docker и Kubernetes

👉Записаться на вебинар👈

Заинтересовала тема вебинара? Возможно, вам будет полезен курс «Микросервисы на Java: практический подход (JVA-083)». Программа поможет улучшить навыки Java-разработки и изучить микросервисную архитектуру на практике, предоставляя понимание проектирования и внедрения систем, соответствующих современным требованиям.

👉Записаться на курс👈

Теги:
Рейтинг0
Комментарии0

Виртуальные потоки в Java: Новый шаг в асинхронном программировании

Долгое время разработчики Java использовали реактивный подход для достижения масштабируемости и неблокирующих операций. Хотя он действительно даёт хорошие результаты, этот стиль программирования часто оказывается сложным и требует значительных усилий для освоения и поддержки.

Теперь, с появлением виртуальных потоков в Java (Project Loom), появилась простая и эффективная альтернатива. Эти потоки легковесны и позволяют запускать миллионы параллельных задач без перегрузки JVM. В отличие от обычных потоков, они управляются на уровне JVM, что минимизирует затраты на переключение контекста и использование ресурсов. А главное — не нужно менять привычный стиль программирования: виртуальные потоки легко интегрируются с блокирующими API, что упрощает их применение.

Для тех, кто сталкивался со сложностями реактивного программирования, это действительно облегчение. С виртуальными потоками мы можем разрабатывать высокопроизводительные системы, сохраняя код чистым и понятным.

Однако важно отметить, что реактивный подход остаётся актуальным в некоторых сценариях, например, для потоковой обработки данных или событийно-ориентированных систем. Но такие случаи становятся всё более редкими. Для большинства приложений виртуальные потоки будут предпочтительным решением.

Виртуальные потоки — это значительный шаг вперёд для разработчиков на Java. Они упрощают работу с асинхронными задачами и избавляют нас от многих сложностей, присущих реактивным системам.

А что думаете вы? Готовы ли вы попробовать виртуальные потоки?

Теги:
Рейтинг0
Комментарии0

Приглашаем на бесплатный вебинар «Разбор кодовых примеров сертификационного уровня "Специалист"». Расскажем КАК решать экзаменационные задачи и обсудим мнемонические формулы, которые помогут запомнить информацию и сэкономить время — критически важный ресурс на экзамене. Особое внимание уделим типичным ошибкам кандидатов и примерам «ловушек» в задачах.

Даже если вы не планируете сдавать экзамен, полученные знания и навыки пригодятся на технических интервью и собеседованиях.

📅 Дата: 13.02.2025

⏰ Время: 18:00-19:00 (Мск)

Разберем практические примеры:

✔️ Углубленный дизайн классов

✔️ Многопоточность

✔️ Дженерики и коллекции

✔️ Лямбда-выражения и встроенные функц. интерфейсы

✔️ Java Stream API

✔️ Фреймворки, инструментарий

👨‍🎓  Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в IT. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy.

👉Записаться👈

Теги:
Рейтинг0
Комментарии0

Вклад авторов