Pull to refresh
4
1
Rating
2
Subscribers
Send message

Разработка фронтенда интернет-магазина через Qwen 3.6 Plus и Qwen ClI

Level of difficultyEasy
Reading time3 min
Reach and readers15K

Привет всем.

Расскажу про свой личный опыт разработки через Qwen 3.6 Plus и Qwen ClI. И да, статья полностью написана человеком.

Это небольшой pet-проект, сделанный в момент, когда Qwen 3.6 Plus был бесплатным с лимитом в 1000 запросов в день. Проект представляет из себя фронтенд вымышленного интернет-магазина по продаже микрокомпьютеров.

Цель была протестировать возможности Qwen. На весь проект у меня ушло 4 дня по 2-3 часа.

Читать далее

Оптимизация запросов в Spring Data JDBC

Level of difficultyMedium
Reading time11 min
Reach and readers8.4K

Я думаю многие согласятся, что Spring Data JDBC — это ORM, который занимает конкретную нишу: он предоставляет более легковесный репозиторный слой доступа к данным поверх реляционной БД без persistence context, без lazy loading, без dirty checking и т.д.

Иными словами, Spring Data JDBC реализует принцип "what you see is what you get" — каждое обращение к репозиторию означает конкретный SQL-запрос в БД, который просто достаёт дерево Aggregate. Это и преимущество, и, тем не менее, иногда это источник потенциальных проблем с производительностью.

В этой статье я разберу ключевые подходы к оптимизации запросов в Spring Data JDBC: от дизайна агрегатов и Single Query Loading, до Stream в качестве возвращаемого значения и @Modifying запросов. Разберём всё с кодом и на примерах.

Только один момент - в этой статье я не затрагиваю Spring Data открытые/закрытые Projection-ы и т.п, так как я предполагаю, что пользователи Spring Data знают, что это и в каких ситуациях их стоит использовать. Эти вещи не специфичны для Spring Data JDBC, я же буду говорить про вещи более специфичные для Spring Data JDBC.

Читать далее

HotSpot AOT-кэш: стартуем быстрее, греемся меньше

Level of difficultyEasy
Reading time8 min
Reach and readers6.9K

В новом переводе от команды Spring АйО рассмотрим, как можно ускорить Java-приложения без переписываний: в свежих JDK появились Ahead-of-Time оптимизации кэша, которые выносят «дорогие» этапы загрузки/линковки классов (и даже частично профилирование методов) из рантайма в заранее подготовленный артефакт.

Рассмотрим как устроен AOT-кэш в JDK 24–26, какие есть workflow (3 шага vs 2 шага/в один прогон), где прячутся подводные камни вроде удвоения требований по памяти при -XX:AOTCacheOutput, и какие практики обучения помогут реально сократить время старта и быстрее выйти на пик производительности.

Читать далее

Project Panama: как Java научилась говорить на C! (Часть 1)

Level of difficultyEasy
Reading time22 min
Reach and readers10K

Как безопасно и эффективно вызывать C-функции из Java? Благодаря Project Panama — новому API из OpenJDK — это стало возможно без использования JNI. 

В новом переводе от команды Spring АйО познакомимся с основами FFM API, посмотрим на запуск Hello World на C, роль jextract, и на то, как управлять памятью вне кучи JVM.

Читать далее

Как установить и настроить VPS-сервер: чек-лист для начинающих

Level of difficultyEasy
Reading time12 min
Reach and readers27K

Вы купили VPS-сервер и не знаете, что делать дальше? Разбираю шаг за шагом, как безопасно подготовить сервер к работе, даже если вы впервые открыли терминал. 

Читать далее

Spring Security для начинающих: конспект от аутентификации до JWT

Level of difficultyMedium
Reading time23 min
Reach and readers34K

На Хабре уже много статей про Spring Security — от кратких заметок до глубоких разборов. В этой статье я решил собрать всё в формате конспект-мануала, который можно читать как пошаговое введение: от базовой аутентификации и фильтров до JWT и OAuth2. Это материал, собранный по официальной документации и дополненный разъяснениями «на простом языке». Я не работал в больших enterprise-командах, поэтому буду рад комментариям и советам от более опытных коллег. Местами я использовал помощь ChatGPT: он помог структурировать материал и сделать стиль более читабельным, ближе к документации.

Читать далее

Нововведения Java 25

Level of difficultyMedium
Reading time5 min
Reach and readers30K

Java не стоит на месте и продолжает активно развиваться. Скоро выйдет уже 25-я версия языка. В этом релизе изменили работу с boilerplate-кодом и конструкторами, а также отказались от поддержки устаревших систем. Обо всех этих и других нововведениях расскажем в статье.

Читать далее

Продвинутые техники RAG в действии

Level of difficultyMedium
Reading time15 min
Reach and readers20K

Всем привет! Представьте таблицу с сотнями или даже тысячами атрибутов. Как в условиях высокой размерности найти релевантные данные по запросу на естественном языке? Классические методы часто не справляются, нужны новые подходы.

Именно за эту сложную задачу взялась команда Департамента управления данными (SberData) в рамках эффективной интеграции ИИ‑агентов в Корпоративную аналитическую платформу Сбера (КАП), которая объединяет современные инструменты для работы с данными: хранение, интеграция, аналитика, моделирование и контроль качества данных. Наличие таких технологий, как продвинутые LLM (например, GigaChat), и большие объёмы данных делают исследование подобных задач актуальным для рынка больших данных.

В статье мы сравним эффективность векторного поиска, гибридных методов и подхода Retrieval‑Augmented Generation (RAG), оценим их влияние на точность результатов и обсудим практические ограничения.

Читать далее

Конфигурация Spring Security на пальцах

Level of difficultyEasy
Reading time14 min
Reach and readers22K

В новом переводе от команды Spring АйО мы рассмотрим решение для регистрации и аутентификации пользователя через клиентское JavaScript-приложение с использованием инфраструктуры Spring Security, а также access и refresh токенов.

Существует множество базовых примеров работы со Spring Security, поэтому цель данной статьи — более подробно описать возможный процесс с помощью блок-схем.

Читать далее

Hibernate. Оптимизму здесь (не) место. Блокировки в БД

Reading time13 min
Reach and readers9.2K

Привет, Хабр! 

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

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

Читать далее

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

Level of difficultyEasy
Reading time11 min
Reach and readers54K

Хранение денежных сумм в базах данных и API: анализ подходов платежных систем

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

Разбираем, как решают эти проблемы Stripe, PayPal, Google Wallet и другие платежные системы. Сравниваем три основных подхода: Integer minor units, Decimal base units и String base units.

Читать далее

Быстрый старт в маскировании данных PostgreSQL с инструментом pg_anon

Level of difficultyEasy
Reading time9 min
Reach and readers6.1K

В этой статье поговорим о не самом гламурном, но жизненно важном — маскировании данных. Маскирование может касаться имён, телефонов, номеров карт, медицинских диагнозов и другой чувствительной информации. Если ваша компания до сих пор передает данные подрядчикам или аналитикам как они есть в базе, это в один «прекрасный» момент обязательно обернётся репутационной или финансовой проблемой для бизнеса.

В этой статье разберём, зачем нужно маскирование, какие данные требуют защиты, и представим opensource-инструмент, который поможет решить эти задачи гибко и эффективно.

Читать далее

Кратко про XHTTP для VLESS: что, зачем и как

Level of difficultyMedium
Reading time8 min
Reach and readers189K

Просили нас тут рассказать про протокол технологию XHTTP в контексте XRay, VLESS и прочих. Просили — рассказываем!

Для начала немного истории. Классическое использование VLESS и подобных прокси‑протоколов (в том числе с использование XTLS‑Reality) предполагает подключение клиента напрямую к прокси‑серверу, который крутится на каком‑нибудь VPS. Однако во многих странах (и в России тоже) под блокировки (или замедления) начали попадать подсети популярных хостеров целиком, а в других странах цензоры начали отслеживать подключения к «одиночным» адресам с большим объемом трафика. Поэтому еще с давних времен обдумывались и проверялись идеи подключения к прокси‑серверам через CDN (сети доставки контента). Чаще всего для этого использовался websocket‑транспорт, но у этого варианта есть два больших недостатка: у него есть один характерный признак (не буду указывать его тут, чтобы не облегчать работу РКН), а во‑вторых, число CDN, которые поддерживают проксирование вебсокетов, не так уж велико, и хотелось бы иметь возможность проксироваться и через те, что не умеют.

Поэтому сначала в известном проекте Tor для бриджей (мостов) придумали транспорт meek, который позволял передавать данные с помощью многочисленные запросов‑ответов по HTTP, и таким образом позволял подключаться к мостам (прокси) через любые CDN. Чуть позже этот же транспорт реализовали в ненадолго воскресшем из мертвых V2Ray. Но у meek есть два очень существенных недостатка, которые вытекают из его принципа работы: скорость работы очень низкая (по сути дела у нас полудуплексная передача и огромный оверхед на постоянные запросы‑ответы), и из‑за огромного количества GET/POST‑запросов каждую секунду, бесплатные CDN довольно быстро могут нас выгнать на мороз, а платные — выкатить солидный счет.

Читать далее

Obsidian: исчерпывающее руководство по Templater

Level of difficultyMedium
Reading time38 min
Reach and readers54K

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

Читать далее

Kafka: ребалансировка изнутри

Level of difficultyMedium
Reading time9 min
Reach and readers20K

Привет! Меня зовут Геннадий, я руковожу командой разработки системы учета товаров в Ozon. Мы активно используем Kafka как основной инструмент для асинхронного взаимодействия между нашими сервисами. Для нас Kafka — это не просто очередь сообщений, а один из ключевых компонентов всей архитектуры. Поэтому мы постоянно погружаемся в его тонкости и нюансы, чтобы грамотно настраивать и использовать его возможности. Думаю, многие из вас сталкиваются с тем же — когда Kafka становится критически важной частью вашего решения.

Хотя информации о ребалансировке Kafka достаточно, она часто либо слишком разрозненная и техническая, либо наоборот — поверхностная и без акцента на важные детали. Я собрал для вас самое важное и объясню это простым и понятным языком.

Читать далее

Читерство в законе. Как пройти собеседование и устроиться на работу в дивном новом мире

Level of difficultyEasy
Reading time6 min
Reach and readers36K

Требования к вакансии — во многом обман. Также как резюме от кандидатов, которые часто накручивают опыт. Собеседование похоже на театральное выступление, к которому готовятся отдельно. Будущего программиста учат не только работать, но ещё и проходить собесы, в том числе врать, использовать LLM для решения задач, чтобы хакнуть эту идиотскую систему найма… Появились менторы, которые помогают «вкатываться» в IT — они советуют, как эффективнее врать продавать себя, и публикуют статьи на Хабре.

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

Ситуация неприятная для тех, кто давно наблюдает за рынком.
Читать дальше →

Распределённые транзакции в микросервисах: от SAGA до Two‑Phase Commit

Reading time29 min
Reach and readers45K

Переход от монолита к микросервисной архитектуре приносит гибкость и масштабируемость, но и создает новые сложности. Одна из ключевых проблем –согласованность данных и транзакции. В монолите обычно можно обернуть несколько операций одной ACID-транзакцией: либо все операции выполняются успешно, либо при ошибке происходит полный откат. В мире микросервисов такой прямолинейный подход не работает. Каждый сервис автономен, у каждого своя база данных, и общаются они через сеть. Как результат, гарантировать атомарность и целостность процессов, охватывающих несколько сервисов, непросто. Возникает риск частичных обновлений: одна часть системы изменилась, а другая – нет, что приводит к неконсистентным (несогласованным) состояниям данных.

Чтобы решить эту проблему, разработаны специальные паттерны и протоколы управления распределёнными транзакциями. В этой статье детально рассмотрим ограничения классических ACID-транзакций в распределённой архитектуре, а также два подхода к распределённым транзакциям – сага (SAGA) и двухфазный коммит (2PC). Разберём мотивацию, принципы работы, преимущества и недостатки каждого, сравним их по критериям. Кроме того, обсудим альтернативные подходы, такие как TCC (Try-Confirm-Cancel), паттерн Outbox, а также кратко упомянем eventual consistency, транзакционные сообщения, инструменты вроде Atomikos и др. В завершение – практические рекомендации, как выбрать подходящий способ обеспечения согласованности в ваших микросервисах.

Читать далее

Spring Boot: создайте свой собственный CLI с помощью Spring Shell

Level of difficultyEasy
Reading time9 min
Reach and readers7.6K

Команда Spring АйО перевела статью о создании собственного интерфейса командной строки  в Spring Boot приложении. Статья выполнена в форме туториала и приводит все необходимые разработчику простые шаги для первоначального освоения Spring Shell.

Читать далее

Как подготовиться и пройти System Design Interview

Level of difficultyEasy
Reading time16 min
Reach and readers39K

System Design Interview — пожалуй, один из самых «бесформенных» этапов технического собеседования. Здесь важно не найти единственно верное решение, а продемонстрировать системное мышление, умение работать с абстракциями, логически выстраивать архитектуру и аргументированно делать выбор технологий.

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

Кстати, Александр ведет репозиторий с заметками: https://github.com/qcha/JBook

Читать далее

Глубокое погружение в процедуру запуска JVM

Level of difficultyEasy
Reading time17 min
Reach and readers18K

Новый перевод от команды Spring АйО расскажет вам, что происходит при запуске самого простого приложения на Java, какие шаги выполняет JVM, сколько классов ей необходимо загрузить, чтобы просто написать «Hello World!» и как все это выглядит на уровне byte code.

Читать далее
1
23 ...

Information

Rating
1,999-th
Registered
Activity