Как стать автором
Обновить
-1
1.2

Пользователь

Отправить сообщение

Еще раз про асинхронную машину состояний и где именно там аллокации

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

Несмотря на то, что про async/await уже было сказано много слов и записано множество докладов, тем не менее, в своей практике преподавания и наставничества, я часто сталкиваюсь с недопониманием устройства async/await даже у разработчиков уровня Middle+. В данной статье мы подробно рассмотрим машину состояний, сгенерированную компилятором из асинхронного метода для понимания принципа работы асинхронности в C#, разберемся где именно там аллокации и порешаем задачи для самопроверки. Если вы уже раз сто видели как выглядит асинхронная машина состояний, но все равно недопонимаете ее, тогда эта статья для вас.

Читать далее
Всего голосов 23: ↑21 и ↓2+24
Комментарии9

Вопросы по SQL, которые часто задают на собеседовании. Часть 1

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

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

Читать далее
Всего голосов 29: ↑25 и ↓4+22
Комментарии24

Разреженные структуры данных

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

Когда-то я писал пост про различные интересные структуры данных. Среди них был т.н. sparse set. Там мы описали его в общих чертах, опустив некоторые детали (которыми позже статья была дополнена). Но кроме sparse set существуют и другие разреженные структуры данных! На них сегодня и посмотрим : )

Разредиться!
Всего голосов 27: ↑27 и ↓0+27
Комментарии11

Шаг за шагом: Реализация автоматического резервного копирования PostgreSQL в Kubernetes и его синхронная отправка на S3

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


Привет! У каждого из нас бывает что после какой-то задачи, ты хочешь чем-то поделиться. Но зачастую мотивации хватает только на поделиться в рамках внутреннего Confluence. Сейчас, я реализовал решение которое объявлено в названии статьи. Сразу хотелось бы сказать, что я не претендую на истину в последней инстанции со своим решением, оно просто отражает путь который пройден мной. Более того, СУБД в кластере здесь тоже не предмет для обсуждения.

Читать дальше →
Всего голосов 5: ↑3 и ↓2+1
Комментарии9

От Kubernetes в мечтах к Kubernetes в проде. Часть 4. Хранилище секретов ― HCP Vault

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

В серии статей по теме DevOps мы вместе с Lead DevOps инженером департамента информационных систем ИТМО Михаилом Рыбкиным рассказываем о проверенных инструментах выстраивания инфраструктуры, которыми с недавнего времени пользуемся сами. В предыдущих статьях мы уже рассмотрели предпосылки перехода на новую инфраструктуру, познакомились с азами Kubernetes и обсудили методы доставки кода. В рамках последней темы мы пришли к методологии GitOps, при которой конфигурация кластера описана декларативно и есть ровно один источник правды ― git с его историей версий и т. д. Но git не является достаточно доверенной средой для хранения секретов ― с его помощью мы не смогли бы обеспечить разделение доступов и т. п. Так что в следующей статье цикла мы рассказываем о том, как можно реализовать отдельное хранилище секретов, без которого полноценно перейти на GitOps невозможно.

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Комментарии7

Генератор случайных чисел, который можно запустить в голове

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

Люди ужасно плохо справляются с придумыванием случайных чисел. Я хотел научиться быстро генерировать «достаточно случайные» числа. Мне не нужно было что-то совершенное, просто способ придумывания случайных цифр за полминуты. Поискав онлайн, я нашёл старый пост в Usenet, написанный Джорджем Марсалья:

Выберите двухразрядное число, допустим, 23. Оно будет вашим «порождающим значением» (seed).

Создайте новое двухразрядное число: количество десяток плюс шесть, умноженное на количество единиц.

Пример последовательности: 23 –> (2 + 6 * 3) = 20 –> (2 + 6 * 0) = 02 –> 12 –> 13 –> 19 –> 55 –> 35 –> …

Его период будет порядком множителя (6) в группе остатков, простых относительно модуля, 10 (в данном случае 59).

«Случайными цифрами» будет количество единиц двухразрядных чисел, то есть 3,0,2,2,3,9,5,… то есть члены последовательности mod 10.

Больше всего Марсалья известен своим набором тестов diehard-генераторов случайных чисел (RNG), так что он в этом понимает (здесь и далее под RNG я имею в виду генератор псевдослучайных чисел (PRNG)). Мне стало любопытно, почему это работает и как он выбрал 6.

Мы будем писать на Raku, языке для гремлинов. На случай, если вы тоже гремлин, под спойлерами я буду объяснять все странные особенности.
Читать дальше →
Всего голосов 49: ↑46 и ↓3+62
Комментарии18

Spring Data JPA и Hibernate: решаем проблему динамически изменяемого запроса к базам данных

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

Привет, Хабр! Меня зовут Николай Пискунов, я ведущий разработчик в подразделении Big Data. В блоге beeline cloud мои коллеги уже знакомили вас с SOLID, заглядывали под капот Python. Я же расскажу о том, как с наименьшими затратами получить динамически изменяемый запрос к БД, используя Spring Data JPA и Hibernate. 

Самый простой пример — реализация эндпоинта, который обрабатывает запросы фильтра интернет-магазина. Например, когда вы задаете характеристики, согласно которым возвращаются определенные товары.

Читать далее
Всего голосов 14: ↑8 и ↓6+2
Комментарии22

Как загружать классы в Java 8 и Java 9+?

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

Привет, Хабр! Я разработчик в Институте Системного Программирования РАН, занимаюсь разработкой статического анализатора Svace. Недавно я столкнулся с задачей самостоятельной загрузки классов в JVM, что оказалось непросто, потому что в проекте мы используем модули Java.

Модули появились в Java, начиная с версии 9. Прошло уже несколько лет, но если попытаться найти актуальную информацию о связи модулей и загрузчиков классов, её придётся собирать по крупицам. В статье я поделюсь своим опытом изучения вопроса самостоятельной (и автоматической) загрузки классов с помощью кастомного загрузчика, а также разберу примеры, описывающие большинство случаев загрузки, постараюсь их объяснить.

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии0

Впихнуть невпихуемое, или Как мы боролись с сервисами, которые слишком много «ели»

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

Всем привет! Меня зовут Максим, я релиз-инженер Ozon, и в этой статье я расскажу про впихивание невпихуемого, или про оптимальную с точки зрения используемых ресурсов стратегию деплоя в Kubernetes, которая позволила нам сэкономить тысячи ядер CPU и терабайты RAM.

Читать далее
Всего голосов 29: ↑27 и ↓2+27
Комментарии6

Опыт масштабирования Kubernetes на 2k узлов и на 400k подов

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров11K

Расскажу, как мы в PayPal начинали осваивать Kubernetes. На тот момент большинство наших рабочих нагрузок выполнялось на Apache Mesos, и в рамках этой миграции нам требовалось разобраться с некоторыми аспектами производительности у кластеров, в которых будет работать Kubernetes – с учётом той плоскости управления, что действует в PayPal. Из всех этих аспектов важнее всего было понять, как именно масштабируется платформа, а также выявить, как можно было бы улучшить масштабируемость, настраивая параметры кластера.

Тогда как Apache Mesos может прямо из коробки масштабироваться вплоть до 10 000 узлов, масштабировать Kubernetes непросто. При масштабировании Kubernetes требуется учитывать не только количество узлов и подов, но и ещё некоторые вещи, в частности: сколько ресурсов создано, сколько у нас контейнеров на под, сколько всего сервисов задействовано, а также пропускная способность при развёртывании подов. В этом посте описаны некоторые проблемы, с которыми нам довелось столкнуться при масштабировании, и рассказано, как нам удалось с ними справиться.
Читать дальше →
Всего голосов 29: ↑24 и ↓5+29
Комментарии10

CompletableFuture. Глубокое погружение

Уровень сложностиСложный
Время на прочтение20 мин
Количество просмотров34K

java.util.concurrent.CompletableFuture - класс не новый. Он предстал перед нами во всём своём величии в 2014-м году вместе с выпуском Java 8. Много лет с тех пор прошло, а проще он не стал.

Мы в компании называем их "фьючи". На хабре было много материала по отдельным частям их функциональности, но я решил поставить перед собой более серьёзную задачу - постараться разобрать внутреннее устройство и многие неочевидные нюансы работы с этим классом.

Читать далее
Всего голосов 36: ↑36 и ↓0+36
Комментарии27

Проектный практикум – берем Agile, нарезаем по SMART, варим в Scrum, приправляем Lean, подаем по готовности

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

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

Читать далее
Всего голосов 11: ↑4 и ↓7+2
Комментарии2

Паттерн написания универсальной системы ошибок приложения

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

За свою карьеру написал больше 100 микросервисов и около 30 брал на сопровождение, рефакторинг и доработку. Среди них были сервисы аутентификации, криптографии, адаптеры, прокси, эмитенты токенов, DataStore/DataMart, калькулирующие измерения к срезам статистики на холодных данных и на потоке, оркестраторы с широким спектром смежных систем (пример на хабре) etc. Писал на таких языках, как С#, Java, Kotlin, Scala, Node.js. И некоторое время проходил "день сурка" в момент проектирования или рефакторинга полученного в наследство кода, когда руки доходят до аспекта логирования, мониторинга, обработки ошибок etc. В этой статье опишу с какими реализациями слоя обработки ошибок я сталкивался или находил в качестве best practice, как обычно ее интегрируют в SLA, метрики и логи, почему стал изобретать велосипед и к чему пришел, а также сравню собирательный образ классических подходов с выбраным в по итогу проб и ошибок.

Читать далее
Всего голосов 11: ↑6 и ↓5+2
Комментарии19

Как мы начали использовать виртуальные потоки Java 21 и на раз-два получили дедлок в TPC-C для PostgreSQL

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

В этом посте мы расскажем о примере дедлока в TPC-C для PostgreSQL, причиной которого является исключительно переход на виртуальные потоки Java 21 - и никаких проблем обедающих философов.

Читать далее
Всего голосов 17: ↑16 и ↓1+19
Комментарии31

Профанация вместо инноваций: очередной трудовой конфликт из Сколково

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

В середине ноября к нам обратился сотрудник компании «Таргет Плюс», участника проекта «Сколково», с жалобой на своего работодателя. Он рассказал, что 13 ноября руководство в личной беседе сообщило о закрытии проекта, в разработке которого он участвовал. А уже 16 ноября технический директор запросил разъяснение о прогуле рабочего дня (разумеется, никакого прогула не было). Таким нехитрым способом директор дал понять две вещи: работнику тут больше не рады, и выходного пособия не будет.

На протяжении всего 2023 года у руководства компании не было никаких претензий к сотруднику. Работая удалённо, он исправно выполнял трудовые обязанности и даже получал за это квартальные премии. Но спустя 2 дня после закрытия проекта, 15 ноября, состоялся звонок, на котором менеджмент компании предложил увольнение по «соглашению сторон». Соглашение в кавычках, поскольку в данном случае понималось увольнение без выходного пособия, в случае отказа — увольнение по статье.

Читать далее
Всего голосов 155: ↑148 и ↓7+180
Комментарии97

Блеск и нищета модели предметной области

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


Мартин Фаулер в книге «Patterns of Enterprise Application Architecture» описывает «Модель предметной области (Domain Model)» как сложный подход к организации бизнес-логики. Метод заключается в создании классов, соответствующих объектам предметной области из реального мира как с точки зрения структуры данных, так и поведения. При этом технические аспекты, такие как хранение данных, аутентификация и авторизация, управление транзакциями, выносится за пределы слоя бизнес-логики. Паттерн реализуется одним из двух способов:

  1. Богатая (насыщенная) модель — данные и поведение инкапсулируются внутри объектов предметной области.
  2. Анемичная модель — в объектах предметной области инкапсулируются только данные, поведение (методы) выносится в отдельный слой сервисов.

Фаулер и Эванс считают анемичную модель анти-паттерном. Однако многие кодовые базы, с которыми мне доводилось работать, реализованы именно в стиле «анемичной» модели. Под катом расшифровка и видео моего доклада с DotNext 2019 Moscow, посвященного сравнению сильных и слабых сторон обоих подходов и не очевидным деталям реализации модели предметной области в парадигме ООП и в функциональном стиле.
Читать дальше →
Всего голосов 36: ↑34 и ↓2+45
Комментарии46

«Хватит программировать в YAML и JSON!»: неочевидные проблемы шаблонизирования

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

Часто в IT-компаниях разработчики используют шаблонизаторы в YAML, JSON и Terraform, управляя параметрами конфигураций, ACL-списками и другими сущностями. Но у такого подхода много подводных камней: шаблоны не всегда корректно отрабатывают и превращают код в спагетти. Особенно если приспичило добавить десятки вложенных условий.

В этой статье рассказываем, откуда соблазн «программировать» в YAML и JSON и почему этого лучше не делать. А еще делимся полезными инструментами, которые помогут избавиться от зловредной привычки. Подробности под катом!
Читать дальше →
Всего голосов 35: ↑33 и ↓2+39
Комментарии15

Курс «PostgreSQL для начинающих»: #3 — Сложные SELECT

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

Продолжаю публикацию расширенных транскриптов лекционного курса "PostgreSQL для начинающих", подготовленного мной в рамках "Школы backend-разработчика" в "Тензоре".

В этой лекции углубимся в расширенные возможности команды SELECT : как можно "сложить" и "вычесть" выборки (UNION/INTERSECT/EXCEPT), или запомнить и использовать в рекурсивных запросах (CTE), что дают оконные функции (WINDOW) и соединения (JOIN).

Как обычно, для предпочитающих смотреть и слушать, а не читать - доступна видеозапись и слайды.

Читать далее
Всего голосов 32: ↑31 и ↓1+34
Комментарии7

JWT-аутентификация при помощи Spring Boot 3 и Spring Security 6

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

Переход от базовых приложений к более сложным требует использования Spring Security для обеспечения безопасности. Новая версия, Spring Security 6, изменяет некоторые базовые реализации, а русскоязычных материалов на эту тему очень мало. В этой статье мы рассмотрим JWT-аутентификацию и авторизацию с помощью Spring Boot 3 и Spring Security 6, чтобы помочь начинающем разработчикам разобраться и начать пользоваться базовым функционалом этой библиотеки. Цель данной статьи - показать, как использовать JWT-аутентификацию с API-интерфейсами.

Читать далее
Всего голосов 15: ↑12 и ↓3+10
Комментарии12

Подборка книг для менеджеров и тимлидов, которые развивают команды в России

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

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

Вся подборка основана на рекомендациях Оксаны Нечитайловой, руководителя отдела сервисного дизайна продуктов YADRO, — в IT-сфере она уже 15 лет и имеет богатый опыт управления командами и построения процессов. Каждую книгу подборки Оксана сопроводила развернутыми комментариями, которые помогут вам понять, стоит ли вам тратить на нее время.

Читать далее
Всего голосов 19: ↑16 и ↓3+20
Комментарии10

Информация

В рейтинге
1 407-й
Зарегистрирован
Активность

Специализация

Специалист
PostgreSQL
OOP
Java
Git
High-loaded systems
Elasticsearch
MongoDB
RabbitMQ
Java Spring Framework
Apache Kafka