Bloom Filter может гарантировать, что элемента нет, но наличие определяет только с некоторой вероятностью.
Вместо хранения всех ключей он использует битовый массив и несколько хэш-функций. Это экономит память и позволяет быстро отсекать обращения к медленному хранилищу, но создаёт возможность false positive.
Разбираемся, откуда берутся ложноположительные срабатывания, почему классический Bloom Filter не даёт false negative и зачем его ставят перед основным хранилищем.
#BloomFilter #DataStructures #Algorithms #Backend #SystemDesign #Database #Performance #Программирование
Что произойдёт, если producer стабильно отправляет данные быстрее, чем consumer успевает их обрабатывать?
Очередь лишь откладывает проблему: растут lag и задержка, а буфер или хранилище рано или поздно заканчиваются. Здесь нужен backpressure — механизм, который ограничивает поток данных и не даёт перегрузке расти бесконтрольно.
Разбираемся, как backpressure работает в Reactive Streams и bounded-очередях и почему consumer lag в Kafka сам по себе producer не замедляет.
#Backpressure #Kafka #ReactiveStreams #DistributedSystems #Backend #SystemDesign
Два потока работают с разными переменными, но всё равно могут тормозить друг друга.
Причина — false sharing. Если часто изменяемые данные попадают в одну cache line, ядрам приходится постоянно синхронизировать состояние этой линии, даже если сами переменные не пересекаются.
Разбираемся, почему это происходит и как alignment или padding помогают разнести данные по разным cache lines.
#FalseSharing #Multithreading #CPU #Concurrency #Performance #SystemsProgramming #Backend #Программирование
Сравнить один URL с шаблоном несложно. Но когда такая логика нужна для роутинга, всё становится интереснее.
URL Pattern API позволяет декларативно описывать шаблоны URL, проверять совпадения и получать отдельные части маршрута без самописного парсинга.
Разбираемся, как работает URLPattern и зачем он нужен в браузере.
#URLPattern #urlpatternapi #api #url #JavaScript #WebAPI #Frontend #Routing #Regex #js
Создал индекс, запускаешь EXPLAIN ANALYZE — а PostgreSQL всё равно выбирает Seq Scan?
Это не обязательно ошибка. Планировщик может отказаться от индекса, если запрос возвращает слишком много строк, условие не совпадает с индексом или составной индекс не подходит по левому краю.
Разбираемся, почему индекс для PostgreSQL — не команда, а всего лишь один из возможных путей выполнения запроса.
#PostgreSQL #Postgres #SQL #Database #Indexes #ExplainAnalyze #Backend #Программирование
Вставить новую строку — просто. Обновить существующую — тоже. Но что, если нужно сделать это одной SQL-конструкцией?
В PostgreSQL для этого есть MERGE: он позволяет сопоставить данные и выполнить нужное действие в зависимости от результата — например, INSERT или UPDATE.
Разбираемся, как MERGE упрощает такую логику в SQL.
#PostgreSQL #Postgres #SQL #Merge #Database #Backend #Databases #Программирование
Exactly Once звучит как гарантия: каждое сообщение будет обработано ровно один раз. Но что произойдёт, если внешний API уже принял платёж, а процесс упал до commit offset?
Retry создаёт риск повторного эффекта, отказ от retry — риск потерять команду. Kafka Transactions помогают внутри Kafka, но не делают атомарными HTTP-вызовы, чужие базы и другие внешние эффекты.
Разбираемся, где заканчивается Exactly Once и зачем нужны идемпотентность, дедупликация, Inbox и Outbox.
#ExactlyOnce #Kafka #DistributedSystems #Backend #Idempotency #Outbox #SystemDesign #Программирование
В HTTP/2 потеря одного TCP-пакета может заставить ждать данные сразу нескольких потоков.
В HTTP/3 эту проблему решает QUIC: он работает поверх UDP и позволяет потокам быть независимыми на транспортном уровне. Потеря данных в одном потоке больше не блокирует остальные.
Разбираемся, зачем HTTP/3 понадобился QUIC и что изменилось по сравнению с HTTP/2.
#http #HTTP3 #QUIC #HTTP2 #TCP #UDP #Networking #Backend #WebDev #Программирование
Одно слово осталось на второй строке заголовка? Раньше такие переносы часто приходилось исправлять вручную.
Теперь в CSS есть text-wrap: balance: браузер сам распределяет текст между строками более равномерно.
У свойства есть ограничения по количеству строк, зато оно уже входит в Baseline и поддерживается актуальными Chrome, Firefox и Safari.
#css #textwrap #textwrapbalance #typography #frontend #webdev #html #frontenddev
Раньше для плавной анимации изменений интерфейса приходилось вручную управлять состояниями элементов и переходами.
View Transitions API упрощает этот сценарий: браузер может анимировать переход между состояниями одного документа с гораздо меньшим количеством кода.
Разбираемся на простом примере, как это работает и чем новый подход отличается от старого.
#css #viewtransitions #viewtransitionsapi #webapi #frontend #webdev #js #javascript #cssanimation
User-Agent давно используют, чтобы определить браузер, ОС и устройство. Но эта строка разрослась, а её парсинг стал сложным и ненадёжным.
Google предложил альтернативный подход — Client Hints. Вместо разбора одной большой строки браузер передаёт данные через отдельные HTTP-заголовки.
Разбираемся, как работают Client Hints, что они дают разработчику и почему пока важно учитывать поддержку браузерами.
#http #httpclienthints #clienthints #useragent #browser #chrome #webdev #googlechrome
Для светлой и тёмной темы больше не обязательно отдельно переопределять каждый цвет.
CSS-функция light-dark() позволяет указать сразу два значения — для светлой и тёмной цветовой схемы, а браузер выберет нужное.
Разбираемся, как работает light-dark() и что нужно настроить через color-scheme.
#CSS #LightDark #DarkMode #Frontend #webdev #frontend #html #csslightdark
Нашли проблему в коде? Оставьте note прямо в Hunk и передайте замечание AI-агенту.
С помощью Hunk Review агент получает комментарий, исправляет код и может ответить прямо под ним, указав, что именно было исправлено.
Так обратную связь по коду можно быстро передавать AI-агентам прямо из терминала.
Полный обзор Hunk — по ссылке под шортсом!
#hunk #aicoding #codereview #кодревью #developertools #terminal #utility #aiagents #codingagents
Кэш должен снижать нагрузку на базу. Но иногда происходит ровно наоборот.
Если у популярного ключа одновременно истекает TTL, множество запросов могут увидеть пустой кэш и одновременно отправиться в базу за одними и теми же данными.
Разбираемся, что такое Cache Stampede и как защититься от него с помощью singleflight или блокировки на ключ.
#CacheStampede #Caching #Backend #Databases #SystemDesign #Highload #Программирование
Один AI-агент пишет код, другой — ищет в нём проблемы. А разработчик проверяет замечания и решает, что действительно нужно исправить.
Hunk позволяет агенту оставлять комментарии к коду, которые можно отревьюить, верифицировать и передать другому агенту на исправление.
Удобный способ организовать код-ревью, особенно если для написания и проверки кода используются разные AI-агенты.
Полный обзор Hunk — по ссылке под шортсом!
#hunk #aicoding #codereview #кодревью #developertools #terminal #utility #aiagents
HTTP 103 Early Hints позволяет браузеру начать загрузку важных ресурсов ещё до получения основного ответа от сервера.
Разбираемся, как Early Hints сокращает ожидание, что можно preload'ить заранее и когда это действительно помогает ускорить загрузку страницы.
#HTTP #EarlyHints #WebDevelopment #Frontend #Performance #WebPerformance #Программирование
Hunk — это интерактивная консольная утилита с TUI-интерфейсом (Terminal UI) для просмотра и код-ревью изменений в коде (git diff) прямо в терминале.
В этом шортсе — полезные горячие клавиши Hunk: управление sidebar, Hunk Metadata, переносом строк и другими элементами интерфейса.
Полный обзор всех возможностей Hunk — по ссылке под шортсом!
#hunk #aicoding #codereview #кодревью #developertools #terminal #utility #cli #hotkeys
Раньше в CSS нельзя было подняться вверх по дереву и выбрать родителя по состоянию потомка. Приходилось использовать JavaScript или костыли с классами. Теперь есть псевдокласс :has() — он позволяет стилизовать родителя, если у него есть определённый потомок. Например, section:has(.featured) применит стили к секции, если внутри неё есть элемент с классом featured. Работает во всех современных браузерах: Chrome, Firefox, Safari, Edge. Поддержка началась с декабря 2023 года. Это настоящий прорыв для CSS-селекторов, который упрощает вёрстку и убирает лишний JavaScript. Сохраняй — пригодится!
#css #csshas #cssclass #frontend #webdev #webdesign #html #css3 #cssparentselector
Режим Watch в Hunk автоматически обновляет ревью при каждом изменении в рабочей директории. Запускаете hunk diff --watch — и больше не нужно перезапускать просмотр руками. Сохранили файл — интерфейс обновился сам. А если нужно принудительно перезагрузить — клавиша r для reload файлов. Идеально для итеративной работы с кодом: правите, смотрите, правите дальше — всё в одном окне терминала. Подробный разбор — в полном видео по ссылке!
#hunk #aicoding #codereview #кодревью #developertools #terminal #utility #aiagents
Раньше, чтобы отправить сложный поисковый запрос, разработчикам приходилось выбирать между двумя неидеальными вариантами. GET — параметры в URL, которые быстро превращали адрес в километровую строку с ограничениями по длине, а параметры попадали в логи и историю браузера. POST — можно передать данные в теле запроса, но он считается небезопасным и неидемпотентным: прокси и кеши не знают, что запрос только читает данные, поэтому не кешируют ответы и не могут автоматически повторить его при ошибке.
В июне 2026 года IETF официально утвердил новый метод — QUERY. Он работает как POST — данные в теле запроса, без ограничений по длине. Но при этом он безопасный и идемпотентный, как GET — его можно кешировать и автоматически повторять. Это заполнило пробел, который существовал в HTTP долгие годы. Сохраняй — пригодится!
#http #httpquery #httppatch #httpget #httppost #api #url #hypertexttransferprotocol #webserver
