Все потоки
Поиск
Написать публикацию
Обновить

Бэкенд

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

Кэширование DNS в NodeJS

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

Команда JavaScript for Devs подготовила перевод статьи о том, как кэширование DNS в NodeJS помогает ускорить работу приложений. На примере инфраструктуры крупного онлайн-сервиса автор показывает, как незаметные на первый взгляд DNS-запросы могут превратиться в узкое место и как простое решение на уровне кода способно повысить стабильность и отклик системы.

Читать далее

Почему языковые модели «галлюцинируют»

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

Команда AI for Devs подготовила перевод статьи OpenAI о природе галлюцинаций языковых моделей. Почему модели уверенно «выдумывают» факты, как это связано с предсказанием следующего слова и почему традиционные метрики только усиливают проблему?

Читать далее

Testcontainers: путь к надежным интеграционным тестам в Spring Boot

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

Мы знаем, что разработка надежных приложений требует тщательного тестирования. Многие программисты и даже целые компании склонны полагаться исключительно на юнит-тесты, считая, что этого достаточно для обеспечения качества их приложений. Однако такой подход часто демонстрирует свои минусы на этапе вывода функционала в тестовый контур, а далее уже в продакшн. Где-то не заполнилось поле, которое должно быть Not Null, где-то не создался Kafka-consumer из-за опечатки в конфиге. Сколько раз такие проблемы возникали в вашей практике и приводили к тому, что нужно срочно делать Pull Request с исправлением очевидной ошибки, испытывая стыд перед коллегами за то, что совершили такую элементарную оплошность? Сколько раз компоненты, прекрасно работающие по отдельности, выбрасывали пачки исключений при совместной работе?

Избежать таких сценариев помогут интеграционные тесты. И сегодня мы поговорим об одном из инструментов интеграционного тестирования – TestContainers.

Читать далее

ИИ в работе программиста

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

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

Читать далее

Топ 5 возможностей Gin, которые должен знать каждый Go-разработчик

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

Команда Go for Devs подготовила перевод статьи о скрытых возможностях Gin-фреймворка. Даже если вы давно пишете API на Go, в арсенале Gin есть несколько приёмов, которые сделают ваш код быстрее, надёжнее и проще в сопровождении. От кастомных валидаторов до graceful shutdown — фишки, о которых знают не все.

Читать далее

Как победить циклические импорты в Python простым способом

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

Команда Python for Devs подготовила перевод статьи о том, как справляться с циклическими импортами в Python. В статье показан простой приём: иногда не нужно переписывать архитектуру, а достаточно изменить стиль импорта, чтобы избежать ошибок.

Читать далее

Как мы ищем рестораны на карте: геоиндекс в Яндекс Еде

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

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

Привет! Меня зовут Серёжа Синягин, я старший разработчик в Яндекс Еде и пишу на C++. В этой статье расскажу о задаче, с которой столкнулся в работе: как мы определяем, какие рестораны доступны пользователю для заказа. По пути заглянем во внутреннюю кухню, обсудим библиотеку H3 от Uber и разберём, как устроены R‑деревья и как мы используем их у себя.

Читать далее

Повышаем производительность Redis: советы для начинающих

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

Привет всем, меня зовут Дмитрий Шитиков, я – бэкенд-разработчик в ПСБ.

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

Читать далее

if err != nil: почему мы (не) любим обработку ошибок в Go? Обзор предложений по её улучшению

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

Привет, Хабр! Меня зовут Павел Агалецкий, я ведущий инженер в платформе Авито. Эта статья на одну из самых холиварных тем, о которой вы могли слышать или читать множество раз. При обсуждении Go, особенно новичками или представителями других языков программирования, камнем преткновения обычно становится проверка ошибок — if err != nil.

Рассказываю, какие есть особенности и нюансы, сравниваю обработку ошибок в Go и других языках. Говорим о подходах к изменению обработки ошибок и обсуждаем последний proposal от Яна Тейлора. А еще разбираемся, почему все предложения отклонялись.

Читать далее

Неожиданный скачок продуктивности благодаря Rust

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

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

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

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

Читать далее

Java Digest #28

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

Всем привет! 👋👋👋👋👋

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

Соскучились по AoT-компиляции? Даже если нет, упоминаний о ней не избежать. Java 25, Spring 7, Spring Boot 4, Gradle 9.0.0, Intellij IDEA 2025.2, Amplicode 2025.2, что-то релизнулось, что-то только собирается, но обо всем уже нашли статьи и собрали для вас. 

А теперь к громким новостям. Нидерландские ученые убили SQL — именно так мог бы звучать заголовок к научной статье о том, как 2,5 млн строк кода на PL/SQL переводили на Java с помощью LLM.

Читать далее

Infrastructure as Code на практике: как мы рефакторили сложный Ansible-репозиторий

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

Привет. Я Сергей Истомин, DevOps-инженер в KTS.

Это статья о том, как сделать так, чтобы заказчику было легко пользоваться Ансиблом. Сразу оговорюсь: речь пойдет о кейсе, когда на вашей ферме 100 голов, и всех вы знаете по именам (да, так тоже бывает).

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

Читать далее

Будущее джунов в эпоху ИИ: угроза или шанс?

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

Команда AI for Devs подготовила перевод статьи о будущем джунов в эпоху ИИ. Автор утверждает: полностью заменить начинающих разработчиков невозможно и опасно — именно они со временем становятся тимлидами. Но чтобы оставаться востребованными, джуны должны освоить «версию 2.0» своей роли и научиться работать бок о бок с ИИ.

Читать далее

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

Что скрывает ваш API Gateway

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

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

Хорошо спроектированный и надежный API — это ворота, через которые ваши данные и функциональность взаимодействуют с внешним миром: мобильными приложениями, веб‑сайтами, партнерскими сервисами и даже внутренними клиентами.

Читать далее

Почему в Linux «Всё есть файл»? Или почему гениальные абстракции UNIX настолько гениальны

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

– Ваш терминал и ваше интернет соединение – это файл!
– Да что вы такое говорите?
– Скажите ещё, что и мышка в моей руке или жёсткий диск – это тоже файл.
– Абсолютно верно!

На самом деле, с точки зрения Linux – это так.

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

Читать далее

Иногда ядра CPU ведут себя странно: о чётном и нечётном

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

Одно из самых важных наблюдений, которые я сделал за годы работы, заключается в том, что во всех программах есть ошибки. С ростом сложности программы растёт и сложность ошибок, которые можно в ней встретить. Часто изъяны программы — сущности вполне простые и понятные. Их легко заметить, проверить и воспроизвести. Иногда процесс исправления заурядной ошибки выставляет идеи программиста о том, как работают те или иные механизмы, в столь новом и неожиданном свете, что в итоге кажется, будто кто-то просто над ним издевается.

Сегодня хочу рассказать об ошибке, которая была исправлена путём редактирования одной строчки кода. Это исправление избавило людей, работающих на огромном количестве устройств, от странных ошибок, которые очень трудно воспроизвести. Речь идёт о ситуациях, в которых Anubis не давал пользователям смотреть сайты, при том что никаких веских причин для этого у него не было. Не переключайтесь. Будет интересно.

Читать далее

Часть вторая. Как я пытался засунуть gRPC в браузер — продолжение

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

Предыдущая часть

Картина мира: почему браузер — главный блокер для «настоящего» gRPC

Если коротко, gRPC живёт поверх HTTP/2 и активно полагается на стримы. А в браузере до сих пор нет низкоуровневого API, который позволил бы JavaScript управлять HTTP/2‑стримами на том уровне, который нужен gRPC. Даже unary‑вызов в gRPC — это частный случай стрима: открыли поток, отдали запрос, забрали ответ, закрылись. Пока браузеры не дадут этот «рычаг», все WEB‑решения — это компромиссы разной степени изящности.

Чем это оборачивается на практике:

Нативные bidi‑стримы из браузера недоступны

Приходится конвертировать транспорт: HTTP/1.1 или WebSocket → что‑то «похоже на gRPC» → gRPC/HTTP2 на бэкенде

Добавляются прокси, адаптеры и слой совместимости, где теряется часть достоинств «чистого» gRPC

Читать далее

Как мы выследили регрессию использования памяти в продакшен-сервисах на Go 1.24

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

Команда Go for Devs подготовила перевод статьи о том, как команда инженеров выявила регрессию использования памяти в Go 1.24. Оказалось, что всего одна оптимизация в аллокаторе памяти, случайно потерянная при рефакторинге, заставляла Go «съедать» сотни мегабайт RAM. Но сообщество Go-разработчиков быстро нашло и устранило проблему.

Читать далее

Zen of Python: философия языка

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

Команда Python for Devs подготовила перевод статьи о Zen of Python — шуточном, но глубоком своде афоризмов, которые уже четверть века задают тон питонячей культуре. Как появился этот «питонячий декалог», зачем он нужен и стоит ли ему следовать?

Читать далее

Автоматическая сборка PDF-документации из Markdown в GitLab CI

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

Готовили релиз нашего нового решения для 1С по отправке СМС-подтверждений и столкнулись с классической задачей. Документацию мы ведем в Markdown. Это удобно для нас, но не для конечного клиента.

Клиенту нужен привычный PDF. Простой и надежный.

Главный вопрос: как автоматически собирать несколько .md файлов с картинками в один PDF-файл прямо в пайплайне GitLab CI? Особенно когда твои раннеры работают на PowerShell под Windows, как у нас.

Решение нашлось в связке Docker и Pandoc. Вот пошаговый план

Читать далее