Обновить
174.54

Java *

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

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

ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров54K

После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.

Читать далее

Работа с базой данных для джунов и вайбкодеров. Соединения

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.2K

Коннекты обычно не приносят много головной боли на начальных этапах разработки. Вообще работа с ними обычно делается один раз, во время настройки, и дальше тюнится по необходимости. Но эта необходимость возникает часто в виде непонятных ошибок, которые выкидываются в случайных местах, непонятных графиков в графане и суеты админов вашей базы данных. Я постарался собрать ту информацию, которая позволит вам не потеряться в такой ситуации и даже поможет определить суть проблемы.

Читать далее

Python, Java, C++ и Go — как появились популярные языки программирования

Время на прочтение10 мин
Количество просмотров9K

Привет! Мы уже рассказывали о «вымерших» языках программирования, пришла очередь самых популярных в 2025 году. Языки не придумывают «чтобы было» — для этого всегда есть предпосылки: рассказываем, кто, когда и зачем их создал. А еще делимся интересными фактами, которых вы могли не знать — а теперь будете :)
Читать дальше →

Join таблиц в реальном времени на Apache Flink ( Часть 2 )

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров981

В данной статье приводится решение проблемы построения витрин данных в реальном времени с помощью Apache Flink. Рассказывается 2 часть подробной реализации решения этой задачи. В данной части рассмотрена проблема учета сообщений на удаление и частично операций update , в связи с чем достигается полная консистентность данных СИ с СП при условии гарантии, что ключ join условия не обновляется.

Читать далее

Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров26K

Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций

Задача перевода денег в первом приближении сводится к обновлению пары строк и кажется простой — но обеспечение корректности при параллельном доступе может быть неожиданно сложным для только знакомящихся с уровнями изоляций БД.

Читать далее

До свидания, Kafka, или graceful shutdown на Spring Boot для Kafka

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров7.9K

В этой статье я немного объясню важность graceful shutdown и расскажу как сделать плавное завершение работы твоего Spring Boot приложения, которое взаимодействует с Kafka.

Читать далее

От пет-проекта к книге про Spring

Время на прочтение6 мин
Количество просмотров1.8K

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

Читать далее

ООП — это скам

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров64K

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

После прочтения большинства этих статей и нескольких лет кодинга на C# я заявляю: «ООП - это один большой обман. Никто не понимает, что это такое. Люди просто говорят какие-то умные термины, их собеседники с умным видом кивают, хотя на деле трактуют эти же термины совершенно по-разному».

И вот почему.

Читать далее

Join таблиц в реальном времени на Apache Flink

Уровень сложностиСложный
Время на прочтение5 мин
Количество просмотров1.6K

Статья посвящена реализации join-операций в системах потоковой обработки данных на базе Apache Flink. Рассматриваются основные подходы к объединению потоков в реальном времени, включая inner join, а также паттерны дедупликации. Уделено внимание использованиюKeyedCoProcessFunction для построения отказоустойчивых и масштабируемых join-пайплайнов. Работа ориентирована на инженеров, строящих real-time витрины и сложные трансформации на Flink в продакшене.

Читать далее

Пример забытого «наивного» алгоритма

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров10K

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

Разработчики зачастую пишут код (скелет), используя наивные алгоритмы и не используя валидаторы (предполагая изменить код позже либо ошибочно предположив что объем данных будет небольшим).

Не так давно попался один тикет с жалобой на зависание in-house приложения которое обрабатывает adobe pdf документы (печатает в png изображение для web клиентов).

Приложение использует библиотеку apache pdfbox.

Запустил тест с проблемным pdf документом в котором использовались формы – компьютер “пошел на взлет”. Похоже на длинный цикл, хорошо пошел.

Жду пару минут, стало интересно.

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

Читать далее

Как обезопасить Spring AI MCP сервер с помощью OAuth2

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.2K

Команда Spring АйО перевела статью о том, как правильно настраивать безопасность на MCP серверах с использованием возможностей OAuth2 в свете новейшей спецификации MCP, вышедшей в свет 26-го марта 2025-го года, то есть совсем недавно.

Читать далее

Когда ТЗ — враг: 7 корпоративных запросов, над которыми плачут программисты

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.7K

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

Итак, начну с собственного реноме. Меня зовут Богдан, я работаю в одном достаточно большом отечественном финтеке вот уже 7-й год и добрую половину из них занимаю позицию Java-лида в одной из интеграционных команд. За такое (относительно) длительное время в энтерпрайзе периодически приходят требования на разработку, от которых хочется или плакать, или смеяться, а то и всё вместе. Происходит это по самым разным причинам, которые мы сегодня касаться не будем. Скажу лишь, что никого не осуждаю, не пытаюсь никого принизить и наверняка сам генерировал нечто схожее, о чем пойдет речь ниже. Также стоит учесть, что мой бэкграунд преимущественно бэкендово-интеграционный, соответственно, и кейсы будут из этой области и контекста. Ну а дальше — по кейсам, по тем 7 кейсам, когда прочитав требования, внутри что-то скукоживается от отвращения либо раздается улыбка во всё лицо — у кого как.

Немного глобального контекста: проект, вокруг которого будут описаны курьезные запросы, — интеграционная шина данных, напичканная самой разной интеграционной логикой, Java-приложение, состоящее из невообразимого количества SOAP/REST-методов, шедуллеров и всяческих очередей.

Читать далее

Java Digest #24

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.2K

Всем привет! 👋👋👋👋👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

В этом выпуске рассказываем о новых JEPs в OpenJDK, которые вошли в статус Candidate. Спойлер Applet API — RIP. В этом месяце вышли сразу IntelliJ IDEA 2025.1 и OpenIDE — эта битва будет легендарной! 

Мы добавили краткий обзор JavaOne’25. И, как обычно, собрали полезные статьи: как избавиться от Flaky-тестов с помощью JMina, как ZGC аллоцирует память в хипе. Сделали подборку материалов о паттернах и методологиях разработки и разбавили размышлениями о том, как писать хороший код и оставаться профессионалом. 

Читать свежий выпуск

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

Программирование без условных операторов

Время на прочтение5 мин
Количество просмотров16K


В программировании на C-подобных языках (и не только) частенько приходится использовать условные операторы, такие как If, else, switch — и особенно часто их используют новички, потому что их понимание и работа достаточно проста (в итоге, могут рождаться, иной раз, поистине монструозные конструкции — грешен, практиковал:-))).

К слову, многие отмечают, что последний оператор switch им приходилось видеть только на разнообразных олимпиадных задачках или школьных уроках, в то время как в реальной работе применяется он достаточно редко (а вы его используете, и насколько часто?).

Тем не менее, как бы там ни было, существует целый ряд иных подходов, который позволяет избавиться от этих операторов, что само по себе довольно любопытно, поэтому, рассмотрение этих подходов и видится интересным.
Давайте исследуем некоторые из них…
Читать дальше →

Cервисы в Android

Время на прочтение11 мин
Количество просмотров4.1K

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

Читать далее

Пара советов по покрытию тестами проекта на SpringBoot

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5K

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

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

Читать далее

Шардировать или не шардировать

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров2.7K

Если ваш сервис рассчитан на миллиарды пользователей, то несомненно возникнет вопрос о масштабировании.

Ранее, автор уже рассмотрел способ масштабирования через партицирование. В данной статье рассмотрим шардирование сервиса Баланс дабы обеспечить его работу с миллиардами пользователей без необходимости использовать суперкомпьютеры, а при желании вовсе запускать на "кофеварках".

В чём вопрос?

PyCharm стал единым продуктом. Что это означает?

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров31K

JetBrains объявили о переходе PyCharm к единой модели распространения. С релизом 2025.1 обе редакции — Community и Professional — объединяются в один продукт. Команда Spring АйО не могла пройти мимо данной новости. Теперь при установке вы сразу получаете доступ ко всем Pro-функциям на один месяц. По его истечении можно продолжить использовать базовые возможности бесплатно или приобрести подписку на Pro-версию (что невозможно для пользователей из РФ).

Читать далее

Как сократить время сборки с помощью кеширования контекста от Spring Test

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров3.2K

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

Читать далее

Jqwik: обзор тестирования на основе свойств в UI и API

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.4K

Привет, Хабр! Меня зовут Денис, я SDET-специалист в компании SimbirSoft. Работая на проектах, я приобрел опыт использования различных инструментов тестирования. Спустя тонны написанных автоматизированных тестов по тест-кейсам и техникам тест-дизайна, хочу рассказать вам о возможности тестирования не конкретных данных, а их свойств. Статья будет полезна всем, кто уже знаком с тестированием на основе примеров и позволит расширить кругозор в понимании подготовки данных.

В своей статье я описал методы гарантии качества ПО, такие как тестирование на основе примеров и тестирование на основе свойств, а также составил таблицу с описанием параметров их взаимодействия с тестовым оракулом. Рассказал об инструменте тестирования на основе свойств Jqwik для языка Java, привел примеры использования случайного набора данных на UI и API, раскрыл возможности инструмента и потенциал работы с ним в рамках генерации тестов.

Читать далее ⚡

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