Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

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

Перевополщение Stable Values в JDK 26

Время на прочтение9 мин
Охват и читатели9K

В новом переводе от команды Spring АйО рассмотрим ленивую инициализацию в Java , которая почти всегда значит: поле сначала null, потом double-checked locking, volatile, синхронизация. Ошибиться легко, а final не поставить. Итог - код хрупче и JVM хуже делает constant folding.

В JDK 26 (preview, JEP 526) добавили LazyConstant<T>: final поле, рецепт вычисления через Supplier, значение доступно черезget(). Supplier выполнится при первом get и только один раз успешно, даже при гонке потоков. Кроме этого значение помечается как @Stable - JVM может считать его константой и агрессивнее оптимизировать.

Граничные случаи: null нельзя; не сериализуется; исключение из Supplier пробросится и следующая попытка снова пересчитает; equals у LazyConstant - только identity.

Для 1:n есть List.ofLazy и Map.ofLazy: элементы/значения считаются по индексу/ключу по требованию и кэшируются.

Читать далее

HikariCP в проде: пять настроек, которые часто крутят неправильно

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

В проде connection pool редко падает громко — чаще он тихо превращает сервис в очередь ожидания: запросы висят, база задыхается, Kubernetes начинает перезапускать поды, а в логах всплывает знакомое Connection is not available.

В этой статье разбираем пять настроек HikariCP, которые чаще всего крутят «на глаз»: размер пула, minimumIdle, maxLifetime, keepaliveTime и connectionTimeout. Покажем, почему «поставить побольше» почти всегда плохая идея, как таймауты инфраструктуры ломают соединения и какие метрики стоит вывести в Grafana, чтобы увидеть проблему до инцидента.

Читать далее

Как я сделал игру «Найди 250 отличий» на чистом JS и выложил в Яндекс Игры: цифры, грабли и доход

Уровень сложностиПростой
Время на прочтение19 мин
Охват и читатели8.8K

Можно ли запустить казуальную HTML5-игру на чистом JS в Яндекс Играх, не зная геймдева и верстки? Спойлер: можно, но придется пройти через 2-3 месяца модерации.

Под катом — честный постмортем инди-проекта, созданного по вечерам на коленке. Рассказываю про костыли SPA-архитектуры на тегах <div>, продвижение и реальные графики трафика и доходов за первые недели.

Читать далее

Как не надо работать с Git'ом

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

Решил поделиться вполне элементарными, но такими полезными приемами работы с гитом, которые нарушаются постоянно не только новичками или молодыми сотрудниками, но и вполне опытными разработчиками !

Читать далее

Scala Digest. Выпуск 41

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

Привет, Хабр! Мы Настя, Эвелина и Михаил — бэкенд-разработчики Т-Банка, пишем код на Scala и горим желанием его популяризировать. Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем дополнительные материалы и собственные комментарии. Мотивацию черпаем из желания развиваться и делиться полученными знаниями.

Поздравляем читателей с первым днем лета, желаем кайфовой разработки, интересных материалов и комфортных перерывов под летним солнцем!

Приветствуем любую обратную связь! (づ ◕‿◕ )づ

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

Qwen3.5 на двух V100, reverse SSH вместо Cloudflare в Telegram Mini App: собираю AI-репетитора английского

Время на прочтение13 мин
Охват и читатели7K

У меня в углу комнаты стоит сервер с двумя Tesla V100 32GB. Они доcтались мне для другой задачи, которая отвалилась, и полгода стояли мёртвым грузом. Параллельно я в очередной раз пробовал заниматься английским — Simpler, Doalingo, ещё пара продуктов. Хорошие, но мне не подходил формат: я хотел сценарий «открыл телефон дома на семь минут, поговорил, закрыл». Без расписания, без камеры, без поиска тьютора, который понимает мой акцент с пятого раза.

Сошлось.

Идея: Telegram Mini App, в нём кнопка «говорить», за ней — AI-репетитор, который слышит, что я сказал, отвечает голосом, помнит контекст разговора, тыкает в мои повторяющиеся ошибки и подбрасывает слова, которые я пытаюсь выучить. Полностью бесплатно.

Модель Qwen3.5 вышла 25 февраля , я её гоняю всего несколько недель, продукт сырой. Эта статья — про архитектурные решения и про то, на какие грабли я уже успел наступить.

Читать далее

Как выкатывать ecommerce в Битрикс по частям и не останавливать продажи (7 часть)

Время на прочтение13 мин
Охват и читатели6.9K

Финальная часть серии — про самое нервное в любом ecommerce-проекте: как включать новую архитектуру по частям, не устраивать «большой релиз» и не останавливать продажи. 

К этому моменту у нас уже есть SSO, события, наблюдаемость, быстрый каталог, корзина, цены, checkout, интеграции, Gateway и SDK. Теперь начинается самая чувствительная часть — включать все это в продакшен без большого релиза или остановки продаж.

Сложность — в процессе. Один модуль уже готов, второй еще нет, часть трафика ходит по старому пути, часть — по новому… Поэтому я сделала практическую схему постепенного включения: фича-флаги, канареечный трафик, двойное чтение, shadow-режим и критерии готовности.

Читать далее

Как и почему умирает ИИ-внедрение: пять bottlenecks

Уровень сложностиПростой
Время на прочтение18 мин
Охват и читатели7.7K

Привет, Хабр. Меня зовут Виктор Овчинников, я руковожу разработкой интеграционной платформы Digital Q.Integration в компании Диасофт. 

Больше двадцати лет моя команда занимается обменом данными между корпоративными системами, и про то, как именно этот слой убивает ИИ-проекты, я уже подробно разбирал в предыдущей статье на Хабре

Интеграция - это только одно из пяти узких мест, на которых ломается реальное ИИ-внедрение. Дальше идут атаки на агентов, регуляторика, разрыв стоимости разработки и сценарий, которого нет в голове у заказчика. Со мной в этом разборе еще трое: ИИ-архитектор Андрей Носов, Team Lead пентестер Сергей Зыбнев и директор по информационной безопасности компании Вебмониторэкс Лев Палей. 

Читать далее

Canary в Kubernetes с Argo Rollouts и Prometheus: автоматический анализ и откат

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

Обычный Kubernetes Deployment умеет заменить одну версию приложения другой, но почти ничего не знает о том, как новая версия ведёт себя под реальным трафиком. Контейнер может быть живым, readiness-проба — зелёной, а error rate или latency уже уезжают в красную зону.

В статье разберём, как собрать canary-деплой с Argo Rollouts и Prometheus: настроить пошаговый выкат, подключить AnalysisTemplate, автоматически откатываться по метрикам и не перепутать replica-based canary с настоящим traffic split через ingress или service mesh.

Читать туториал

Как написать свое расширение postgres?

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.9K

Привет, хабровчане! Сегодня покажу, как писать расширения для PostgreSQL. На примере pg_plan_alternatives, который логирует все пути, рассматриваемые планировщиком. Вы увидите то, что обычно скрывает планировщик.

Нам потребуется:

А что если бы видеопамять можно было использовать как обычную RAM?

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

У меня 8 гигабайт оперативки. На бумаге звучит терпимо — ровно до того момента, пока не откроешь десятка два вкладок в хроме, рядом Figma, Slack, ещё вкладку со Stack Overflow, и поверх всего этого попробуешь что-то писать в VS Code. Сначала система начинает подтормаживать. Потом подтормаживать сильнее. В какой-то момент я просто встаю и иду за чаем — и, возвращаясь, нередко застаю её всё в той же задумчивости..

Тут-то вопрос и нарисовался: а нельзя ли, хотя бы теоретически, приспособить видеопамять под расширение оперативки?

Читать далее

AI-инструменты внедрили. Как CTO понять, что они реально меняют разработку?

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели6.2K

Любая компания — точка в семимерном пространстве.

Эти семь координат меняются не одновременно. Например, у компании уже могут быть ai - агенты и внутренняя платформа, но сотрудники всё ещё работают через чат, проверки запускают вручную, а решения принимают по старой управленческой логике. Поэтому одного ответа «мы на L5» мало: он не объясняет, где в компании создаётся стоимость, что реально выходит наружу и как быстро организация меняется. Одна шкала легко превращается в маркетинг, а профиль по семи осям даёт более проверяемую картину.

Профиль можно записать так: ⟨A, B, C, D, E, F, G⟩.

Оси D / E / F — структурный сдвиг, который не виден на пирамиде агентов. Их трудно сфейкать: они требуют пересборки ответственности, identity, расчётов и формата производства ценности. Именно там появляется настоящий moat AI-native компании, если он вообще появляется.

Что именно стало лучше в инженерной системе после внедрения AI?

Это можно проверить: сократился ли lead time, стало ли ревью быстрее, уменьшился ли риск изменений, начали ли команды чаще доводить AI-предложения до проверенного pull request. Или AI просто добавил ещё один слой активности: больше черновиков, больше подсказок, больше обсуждений, но тот же bottleneck в тестах, ревью и понимании контекста?

В Stack Overflow Developer Survey 2024 76% респондентов уже используют AI-инструменты в разработке или планируют начать, а 62% уже используют их сейчас. Но позитивное отношение снизилось с 77% до 72%, и это важный сигнал: первая волна восторга проходит, руководители и разработчики начинают спрашивать не «есть ли у нас AI», а «что он реально меняет в работе».

Читать далее

Какие проблемы чаще всего ломают кастомизации Битрикс24 после перехода на ORM и PHP 8

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели8.5K

Пятница, 18:00. Вы обновляете PHP на сервере с 7.4 на 8.0 — что может пойти не так? Деплой проходит, страница обновляется, и вместо привычного портала вы видите белый экран с TypeError: array_search(): Argument #2 ($haystack) must be of type array, null given. Мессенджер разрывается от сообщений: «Ничего не работает». Знакомо?

Читать далее

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

62 бесплатных урока июня: Java, Docker, LLM, SRE, DWH и другие темы для роста в IT

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

Карьерный рост в IT редко упирается только в «выучить еще один инструмент». Чаще проблема в другом: понять, какие технологии уже стали рабочей практикой, где стоит углубиться в архитектуру, а где пора закрыть пробелы в инфраструктуре, безопасности, аналитике или управлении.

В этом дайджесте собрали 62 бесплатных открытых урока OTUS на июнь — от Java, Docker, Kubernetes, Kafka и SRE до LLM, DWH, Data Mesh, тестирования и ИБ. Занятия проводят преподаватели-практики, поэтому это не обзор ради обзора, а возможность разобрать актуальные темы с экспертами и задать вопросы.

Смотреть подборку

Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок

Время на прочтение13 мин
Охват и читатели11K

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

Эта схема отлично работает на лёгких API‑запросах, но рассыпается, как только трафик становится тяжелее. В случае с Яндекс Диском речь идёт о массовой загрузке файлов. 

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

Читать далее

Спутниковая связь в симуляторе NS-3. Часть 1

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.6K

Моделирование спутниковых систем связи в симуляторе компьютерных сетей NS-3 с использованием модуля Satellite.

Читать далее

Забытый мультиколор (часть 2)

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели7.3K

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

Создание графики, форматы, вывод на экран

Читать далее

Шахматные программы VII. Основной перебор Stockfish

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели6.3K

Итак, мы добрались до самого сердца шахматной программы Стокфиш. Ее основной функции - search. Именно здесь бьется пульс этого движка.

Сейчас мы произведем разбор этой функции. О ее важности уже не раз говорилось на предыдущих страницах. Теперь нам предстоит понять, как основной поиск выглядит в реальной программе. Еще раз напомню, что функцию search можно найти в файле search.cpp. Обзорному описанию содержания этого файла была посвящена предыдущая часть

Читать далее

Что именно делал компилятор: как ассемблер помогает разобраться в производительности кода на C++

Время на прочтение10 мин
Охват и читатели16K

Расскажу вам одну историю о том, как смог прокачаться в качестве C++-программиста. Мне в этом помогло не чтение стандарта. Я тогда ещё не понимал до конца метапрограммирование с использованием шаблонов (честно говоря, прямо сейчас эту тему изучаю). Нет, просветление наступило, когда я всмотрелся в целую простыню кода на ассемблере x86–64, но не запаниковал, а подумал: “O, нет, нет. ЧТО ТАМ сделал компилятор?”

Читать вывод компилятора — это не какое-то мистическое тёмное искусство, которое практикуют только подстриженные в барбершопах разработчики компиляторов, с закрытыми глазами разбирающиеся в выделении регистров. Это навык. Его можно усвоить, затем в нём напрактиковаться, и результат вас очень удовлетворит. Овладев этим умением, вы больше никогда не будете писать «умные» абстракции как раньше. 

Читать далее

Зачем первокурснику машина Тьюринга (и почему это важнее, чем кажется в эпоху «вайбкодинга»)

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели14K

Модель мышления: не талант, а способ смотреть на правила

Если вы только начинаете учиться программировать, вы, скорее всего, уже слышали: «у кого-то математический склад ума, у кого-то гуманитарный», «надо просто больше практики», «язык слишком сложный». Исследования показывают картину инее и одновременно обнадёживающую: дело не в «IQ вообще» и не в том, хорошо ли вы решали задачи по алгебре в школе, а в том, какую внутреннюю модель вы используете, когда читаете программу.

Классическая работа Saeed Dehnadi и Richard Bornat *The camel has two humps описывает знаменитый «двухгорбый» распределение успехов на первых курсах программирования. Значительная доля студентов — иногда до половины потока — не проходит вводный курс, несмотря на мотивацию, хороших преподавателей и смену языков и методик за десятилетия. Авторы показали, что до изучения синтаксиса Java или Python можно довольно надёжно предсказать, кто «поймёт», а кто будет бороться, с помощью простого теста на последовательность присваиваний — не на знание языка, а на согласованность ментальной модели вычисления.

Что такое «правильная модель мышления» в их смысле

Dehnadi и Bornat опираются на идею mental models (ментальных моделей): человек, рассуждая, строит воображаемое «состояние мира», проверяет в нём гипотезу и ищет контрпримеры Johnson-Laird, Mental Models . В эксперименте «верблюд с двумя горбами» студентам давали короткие фрагменты псевдокода с присваиваниями. Оказалось, что успешные новички последовательно интерпретируют присваивание как правило перезаписи ячейки памяти: «сначала вычисли выражение справа, затем положи результат в переменную слева, старое значение исчезает». Неуспешные часто смешивают модели: где-то видят «равенство», как в уравнении из школьной математики, где-то — «копирование слева направо», где-то отказываются отвечать, потому что «это бессмысленно».

Читать далее