Как стать автором
Обновить
22
0.7

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

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

Транзакции в БД на Go с использованием многослойной архитектуры

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

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

Однажды, я столкнулся с инцидентом на проде и обратился за помощью к самому опытному инженеру. Он пришел на помощь и с легкостью изменил значение в БД с помощью... ручного обновления. 🤯 Проблема заключалась в том, что набор SQL-обновлений не был выполнен внутри транзакции.

Работа в новой компании — это всегда увлекательно. Я осознал, что даже если какой-то аспект кажется простым, например, SQL-транзакции, его легко упустить из виду.

SQL кажется чем-то, что мы все хорошо знаем, и мало чем может удивить. (Ему уже 50 лет!) Возможно, пришло время пересмотреть подходы, так как мы уже прошли фазу хайпа по поводу NoSQL, и снова возвращаемся к “используйте просто Postgres”, а иногда и к “SQLite тут за глаза”.

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

Основной принцип многослойной архитектуры заключается в разделении критически важных частей кода (логики) от деталей реализации (например, SQL-запросов). Одним из способов достижения такого разделения является паттерн «Репозиторий». Однако, наиболее сложным аспектом такой архитектуры является обработка транзакций.

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

7 вдохновляющих книг об управлении продуктом и командами

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

Привет, Хабр! На связи Friflex. Мы занимаемся разработкой мобильных  приложений на Flutter, веб-сервисов, высоконагруженных проектов. К каждому своему продукту мы относимся с заботой, вниманием и искренним желанием сделать его лучше. 

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

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

Материалы для подготовки к собеседованию на позицию Data Scientist. Часть 5: Поведенческое интервью + Бонусы

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

Привет! Меня зовут Артем. Я работаю Data Scientist'ом в компании МегаФон (платформа для безопасной монетизации данных OneFactor).

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

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

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

Как ломаются большие системы и как их траблшутить — инсайты из интенсива ШАДа Яндекса

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

Привет, меня зовут Руслан Савченко, я руководитель службы разработки динамических таблиц в Yandex Infrastructure и преподаватель в Школе анализа данных. Сегодня я поделюсь актуальными инсайтами о том, как ломаются большие системы и как их траблшутить. Думаю, это будет полезно разработчикам и студентам, которые интересуются Site Reliability Engineering. Вообще, мало где сейчас обучают SRE, хотя в индустрии такие задачи очень востребованы.

В основе статьи — материалы SRE Week, открытого интенсива ШАДа по работе с большими нагруженными системами.

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

Чтение на выходные: «Чистый Agile. Основы гибкости» Роберта Мартина

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

Как говорили ранее, в этом году мы намерены прочитать все книги Роберта Мартина. Того самого, которого в айтишной среде называют дядей Бобом. Cегодня речь пойдет о другой стороне работы айтишника — управлении проектами и истории Agile.

Agile — это методология гибкой разработки. В книге Роберт Мартин рассказывает о её создании, опираясь на собственные воспоминания и наблюдения. Так вышло, что он был свидетелем зарождения этой системы, что называется, из семечка. И одним из поводов к чтению однозначно может стать намерение разобраться как же развивались методы Agile, как они приживались и что было до того, как это всё стало ассоциироваться с тем же Lean или Kanban.

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

Распределенная трассировка с Jaeger и Clickhouse

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

Привет! Меня зовут Филипп Бочаров, я руководитель центра мониторинга и наблюдаемости в МТС Digital. Мы делаем распределённую трассировку, чтобы контролировать качество наших сервисов и предотвращать аварии. В этой статье разберём, как добиться понятной и прозрачной работы от сложных распределённых систем.

За время, прошедшее с прошлого доклада, количество обрабатываемых в единицу времени спанов выросло в несколько раз. Рассмотрим, какие архитектурные решения начали «поджимать», и как команда МТС их исправляла.

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

Structured concurrency в языке Go

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

Горутины виснут непонятно почему, случайная запись в закрытый канал вызывает panic, нормально протестировать приложение вообще невозможно.


Наверняка многие из вас сталкивались с такой проблемой: синтаксис языка Go вроде бы очень простой, можно сказать примитивный, да и горутины создаются элементарно, но при этом написать мало-мальски серьёзную программу, которая конкурентно что-то делает, внезапно оказывается не так-то просто.


Чтобы не запутаться, люди придумали концепцию structured concurrency, которую можно применять и в Go.

Читай или страдай
Всего голосов 16: ↑13 и ↓3+13
Комментарии17

Единственное руководство, необходимое для успешной сдачи экзамена CKAD(Certified Kubernetes Application Developer)

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

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

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

От и Go: доклады для гоферов про инструменты для фаззинга, kuber-кластер на Go и не только

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

Бывает, перед инженерами встает выбор: использовать существующее open source-решение задачи или написать свое. И часто, изучив все возможные опции, разработчики предпочитают второй вариант.

Большинство докладов в нашей подборке — инструкции по созданию кастомных решений, которые инженеры и разработчики из YADRO, Avito Tech, Ozon Fintech и других технологических компаний уже опробовали в собственных продуктах. Если вашей команде не хватает инструмента для фаззинга или обработки ошибок на Go — можете сделать их по примерам, которые представили инженеры в выступлениях и презентациях.

Зайти в Go-портал
Всего голосов 7: ↑6 и ↓1+7
Комментарии0

Реализация Graceful Shutdown в Go

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

Изящное завершение работы (Graceful Shutdown) важно для любого длительного процесса, особенно для того, который обрабатывает состояние. Например, что если вы хотите завершить работу базы данных, поддерживающей ваше приложение, а процесс db не сбрасывает текущее состояние на диск, или что если вы хотите завершить работу веб-сервера с тысячами соединений, но не дожидаетесь окончания запросов. Изящное завершение работы не только положительно сказывается на пользовательском опыте, но и облегчает внутренние операции, что приводит к более счастливым инженерам и менее напряженным SRE.

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

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

Новый релиз большого интерактивного «столетнего» учебника по тестированию

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

Гуд ньюз эвриван! Вышло большое обновление учебника «100-Year QA‑Textbook — русскоязычная версия» — одного из самых полных источников по тестированию.

С момента первого релиза (100'000 хабр‑просмотров!) прошло полгода.
За это время столетний учебник стал бесплатным пособием для 10'000+ самообучающихся студентов.

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

Анатомия htmx

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



Hello world!


По данным 2023 JavaScript Rising Stars библиотека htmx заняла второе место в разделе Front-end Frameworks (первое место вполне ожидаемо принадлежит React) и десятое место в разделе Most Popular Projects Overall.


htmx — это библиотека, которая предоставляет доступ к AJAX, переходам CSS, WebSockets и Server Sent Events прямо из HTML через атрибуты, что позволяет создавать современные пользовательские интерфейсы (насколько сложные — другой вопрос), пользуясь простотой и мощью гипертекста. На сегодняшний день у библиотеки почти 30 000 звезд на Github. Удивительно, что до такого решения мы додумались только сейчас, учитывая, что весь функционал был доступен уже 10 лет назад (вы сами убедитесь в этом, когда мы изучим исходный код htmx).


В этой статье мы с вами разберемся, как htmx работает. Но давайте начнем с примера ее использования.

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

Курс «PostgreSQL для начинающих»: #4 — Анализ запросов (ч.1 — как и зачем читать планы)

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

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

В этой лекции мы узнаем, что такое план выполнения запроса, как и зачем его читать (и почему это совсем непросто), и о каких проблемах с производительностью базы он может сигнализировать. Разберем, что такое Seq Scan, Bitmap Heap Scan, Index Scan и почему Index Only Scan бывает нехорош, чем отличается Materialize от Memoize, а Gather Merge от "просто" Gather.

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

Читать далее
Всего голосов 34: ↑33 и ↓1+37
Комментарии4

Погружаемся в Kubernetes: полезные материалы от сотрудников Selectel

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

Часто новичкам сложно начать работу с Kubernetes. Нужно перебрать с десяток курсов, прежде чем они найдут действительно полезные материалы. Чтобы помочь вам с выбором, мы попросили коллег порекомендовать ресурсы для изучения Kubernetes. Сохраняйте в закладки: пригодится начинающим разработчикам, администраторам и DevOps-инженерам.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии0

Материалы для подготовки к собеседованию на позицию Data Scientist. Часть 1: Live Coding

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

Привет! Меня зовут Артем. Я работаю Data Scientist'ом в компании МегаФон (платформа для безопасной монетизации данных OneFactor).

В данной статье разберемся что такое live coding интервью и как к нему готовиться.

Материал в первую очередь будет полезен Data Scientist'ам и ML инженерам, при этом некоторые разделы, например, Алгоритмы и структуры данных подойдут всем IT специалистам, которым предстоит пройти секцию live coding.

Читать далее
Всего голосов 10: ↑9 и ↓1+8
Комментарии11

Мой опыт собеседования в Google [оффер на L5]

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

Предупреждение: я не смогу привести в статье конкретные вопросы из-за подписанного соглашения о неразглашении (NDA).

Работая в лондонском офисе Facebook в команде Instagram*, я начал задумываться о возвращении в Индию. В ноябре 2022 года со мной связался рекрутер Google. Он сообщил об открытии в Бангалоре должности уровня L5 и спросил, интересно ли мне это.

Так как я уже раздумывал о переезде в Индию, то ранее собеседовался в Google, но мне предложили более низкую должность (L4), чем я хотел; потом я устроился в META* на уровень E5.

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

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

На этот раз в процессе подготовки возникла уникальная для меня сложность — счастливое пополнение в моей семье, дочка. За моё внимание боролись подгузники и кодинг, было очень сложно выделить время на сосредоточенную подготовку! У меня было примерно 25-30 дней на освоение и искусства ухода за ребёнком, и прохождения собеседования.
Читать дальше →
Всего голосов 62: ↑58 и ↓4+82
Комментарии95

Сказ о том, как я за год решил более 600 leetcode задач

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

Всем салют!

Хочу рассказать вам историю о том, как я начинал с уровня — «не могу решить даже 1 easy задачу из 10» до уровня — «могу решить каждую вторую medium задачу» и прошел несколько coding сессий в таких компаниях как Meta, Booking, Careem, Avito...

Читать далее
Всего голосов 121: ↑112 и ↓9+129
Комментарии407

DDD в golang. Превозмогая трудности

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

В последнее время достаточно много выступлений, посвященных реализации подходов Domain Driven Design(DDD) в golang.

Я не буду останавливаться на value object, они в golang хорошо реализуются с помощью type defintions. А разберу работу с изменением аггрегатов.

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

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

Event Sourcing и CQRS в Go

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

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

Сегодня мы поговорим о двух концепциях — Event Sourcing и CQRS, и их реализации на языке Go. Go предоставляет хорошие возможности для реализации этих паттернов благодаря своей производительности, простоте и поддержке конкурентности «из коробки».

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

Вкатываемся в Machine Learning с нуля за ноль рублей: что, где, в какой последовательности изучить

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

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

Читать далее
Всего голосов 129: ↑127 и ↓2+155
Комментарии52
1
23 ...

Информация

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