Обновить
512K+
OTUS
Развиваем технологии, обучая их создателей
784,83
Рейтинг
184 682
Подписчики
Сначала показывать

Анатомия памяти в .NET: Типы данных, способы хранения, выделение памяти и работа GC

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

В этой статье мы заглянем под капот CLR (Common Language Runtime) и разберём как хранятся разные типы данных. Также поговорим о том, что такое стек и куча, и как они взаимодействуют. И в заключении рассмотрим, как происходит выделение памяти и разберем принципы работы сборщика мусора.

Читать далее

Тонкости работы с процессором преобразования в OpenTelemetry

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

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

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

Прокачать observability

Records в C#: Классы, которые пишут код за вас

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

Давайте представим, что вам нужно создать класс для хранения данных пользователя. Сколько строк кода вы напишете? Конструктор, свойства, метод ToString(), сравнение объектов... А если добавится новое поле? Придется обновлять конструктор, метод Equals, GetHashCode — утомительная работа, которая не добавляет бизнес-ценности вашему приложению.

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

Читать далее

Opaque Types в Scala: типобезопасность без runtime‑overhead

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

Строгая типизация не всегда спасает от глупых ошибок. Если userId, orderId и productId — это один и тот же Int или Long, компилятор не увидит разницы и спокойно пропустит неверный аргумент. В Scala 3 для таких случаев есть opaque types: они позволяют сделать доменные типы различимыми на этапе компиляции, но без лишних обёрток и накладных расходов в рантайме. Разберём, как это работает и чем этот подход лучше type alias, case class и AnyVal.

Читать далее

Command & Control как ключ к расследованию утечек данных

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

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

А в подавляющем большинстве случаев системные утечки — это процесс, управляемый извне. И ключ к расследованию, минимизации ущерба и построению защиты лежит в детектировании инфраструктуры Command & Control (C2). Без понимания того, как работает C2, SOC превращается в пожарную команду, тушащую искры, но не видящую самого пожара.

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

Открыть материал

DI‑контейнер Symfony: autowiring, теги и compiler passes

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

DI-контейнер — сердечко Symfony. Контроллеры, сервисы, слушатели событий, консольные команды, Voter, нормалайзеры — всё это сервисы, которые живут в контейнере и получают зависимости через него.

Разберём три уровня глубины: autowiring для повседневной работы, теги для расширяемых архитектур, compiler passes для магии уровня фреймворка.

Читать далее

Concepts в C++: шаблоны, которые наконец‑то понятны

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

Ошибки шаблонов в C++ — отдельный жанр: вы ожидаете простой контракт к типу, а получаете десятки строк из глубин STL. Проблема не в компиляторе, а в том, что сами требования к типам в классических шаблонах долгое время оставались неявными. Concepts это меняют: они позволяют формализовать ожидания к типу прямо в коде, сделать перегрузку осмысленной, а ошибки — читаемыми. В этой статье разберём, как работают concepts, зачем они действительно нужны и как использовать их не как «синтаксический сахар», а как инструмент проектирования.

Читать далее

Делегаты и Лямбды: От тайного знания к повседневному инструменту

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

В этой статье мы не просто посмотрим синтаксис — мы поймём зачем это нужно и как работает под капотом. Мы пройдём путь от указателей на функции в C/C++ до современных лямбда-выражений в C#, разберёмся с делегатами и научимся использовать всю мощь функциональных возможностей языка.

Читать далее

Design‑First в действии: API на Spring с OpenAPI Generator

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

Когда команда пишет API, но документация живёт своей жизнью, а интеграторы часами гадают, что значит ошибка 500, — проект неизбежно тонет в хаосе. В этой описан подход, который является лучшим решением: Design‑First на основе OpenAPI.

Мы пройдём полный цикл: от проектирования спецификации до работающего Spring‑приложения с автоматической генерацией кода и централизованной обработкой ошибок.

Вы узнаете, как одна команда ./gradlew clean build может создать модели и интерфейсы, избавив вас от рутины.

Читать далее

Проблема «зоопарка» протоколов в одной АСУ ТП

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

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

Разобраться в теме

Блокировки в 1С: управляемые и автоматические

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

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

Блокировки — одна из тех тем в 1С, которые все знают на уровне «ну там что-то с параллельным доступом», но мало кто понимает до конца.

В платформе 1С:Предприятие есть два разных режима управления блокировками — автоматический и управляемый. Выбор между ними определяет, как ваша система будет себя вести под нагрузкой.

Когда два пользователя одновременно меняют один и тот же документ или регистр, возникает конфликт. Без блокировок один перезапишет данные другого — классическая проблема lost update. Или один прочитает данные, которые второй ещё не дозаписал.

Блокировки гарантируют, что параллельные операции не сломают данные. Но за это приходится платить — пока один пользователь держит блокировку, другие ждут. Вопрос в том, кто управляет этим процессом: СУБД автоматически или мы вручную.

Разобрать блокировки

Поиск и устранение проблем в Zabbix, или как перестать «слепо» мониторить

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

Система Zabbix является универсальной системой мониторинга с открытым исходным кодом, предназначенной для наблюдения за состоянием IT-инфраструктуры: серверов, сетевых устройств, приложений, баз данных, систем виртуализации и облаков в режиме реального времени.

В этой статье мы разберем системный подход к диагностике самого Zabbix и его правил, чтобы ваш мониторинг начал приносить пользу, а не создавать шум.

Читать далее

Temporal Tables в MS SQL Server: история изменений

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

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

Temporal tables позволяют следить за историями изменений уровне движка. SQL Server сам хранит полную историю изменений каждой строки — без триггеров, без дополнительного кода и без самописного аудита. Фича появилась в SQL Server 2016 и к сегодняшнему дню обросла возможностями. Разберём, как все устроено и как использовать.

Читать далее

Как найти подозрительные логины из разных стран за 2 часа в PostgreSQL

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

В задачах на SQL особенно интересно то, что один и тот же результат часто можно получить несколькими способами – и разница между ними оказывается не только в красоте запроса, но и в его поведении на реальных данных. В этой статье – разбор прикладной задачи про поиск подозрительных логинов из разных стран в пределах двух часов: с вариантом через self join, альтернативой на оконных функциях и сравнением планов выполнения в PostgreSQL.

Разбор запроса

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

Система компоновки данных в 1С

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

Большинство знают базу: создал схему компоновки, написал запрос, перетащил поля в настройки — получил отчёт. Но СКД умеет гораздо больше! И многие задачи, которые решают кодом в модуле отчёта, на самом деле решаются средствами самой компоновки — проще, надёжнее и с бонусом в виде пользовательской настройки.

Разберём механизм и приёмы, которые экономят время и код.

Читать далее

Микроуправление под видом менторства: Как задушить инициативу в зародыше

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

В каждом ИТ‑проекте есть момент, когда опытный разработчик или архитектор получает в подчинение джуниора или новую команду. Естественно, тимлид хочет добиться эффективной работы своих новых подчиненных искренне веря, что он ментор, наставник, «старший товарищ». Но через некоторое время для команды он превращается в надзирателя, который заглядывает через плечо, проверяет каждый коммит и требует отчета по каждому чиху.

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

Разбор проблемы

CSV в Spark: Искусство правильной загрузки данных

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

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

Читать далее

strace: отладка Linux-приложений через системные вызовы

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

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

Читать далее

Паттерн «Идемпотентный потребитель» в .NET и зачем он вам нужен

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

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

Читать далее

Voters в Symfony

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

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

В каждом проекте рано или поздно появляется логика вида «этот пользователь может редактировать этот пост, а тот нет». И начинается: if ($post->getAuthor() === $currentUser) в контроллерах, в сервисах, в шаблонах. Копипаста расползается, а потом приходит новое требование — «модератор тоже может редактировать, но только в своей категории» — и вы бегаете по двадцати файлам, молясь, что ничего не забыли.

Symfony Voters — механизм, который выносит всю логику авторизации в одно место. Не аутентификации (тип кто ты?), а именно авторизации (что тебе можно?). Разберём, как это работает.

Разобраться в Voter
1
23 ...

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS