Премиум каналы

Бэкендошная

Канал о Backend-разработке: языки программирования, алгоритмы и структуры данных, методологии, околопрограммистские темы и никакого (ну почти) фронтенда

Последние публикации с канала

Пишете тесты? Какой подход вам ближе?

Anonymous Poll

5% - Классический / Детройт

37% - Мокистский / Лондон

21% - It depends

37% - Не пишу тесты - тестирую в голове

21.12.2022 / 06:12

Пишу юнит-тесты почти 5 лет и основные сражения, которые я видел по их поводу, заключались только в том - писать по TDD или нет.

Но сегодня наткнулся на то, что оказывается есть два способа тестирования - классический из Детройта и мокистский из Лондона.

Основная разница только в том, какая часть является юнитом и какие зависимости нужно заменять заглушками с ожидаемым поведением. В классической школе - юнитом является поведение и заглушками заменяются только те зависимости, которые могут повлиять на другие тесты или являются внешними - БД, файловая система, http-запросы. А при лондонском подходе - почти все зависимости заменяются на заглушки и тестируется только отдельный класс и его методы. Это делает тесты по-настоящему изолированными.

Подробнее про различия в статье - https://habr.com/ru/company/jugru/blog/571126/

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

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

А что насчет вас? Какой подход выберите?

#coding #test

Хабр
Школы юнит-тестирования

Существуют две основные школы юнит-тестирования: классическая (ее также называют школой Детройта, или Чикаго) и лондонская (ее также называют мокистской школой, от слова mock). Эти школы кардинально...

21.12.2022 / 06:12

Читая очередную статью про распределнные системы, наткнулся на интересный факт: New York Times использует Kafka в качестве основной базы данных для всех своих статей. "Всех" означает что каждая статья, каждая ее правка, каждый заголовок с пометкой "молния" - хранится в брокере сообщений и никогда не будет удален. А это более чем 170 лет истории.

Нашел статью, в которой описан сам подход к log-based архитектуре, а также то, как конкретно это реализовано у New York Times.

https://www.confluent.io/blog/publishing-apache-kafka-new-york-times/

#systemdesign #kafka

Confluent
Publishing with Apache Kafka at The New York Times | Confluent

This post covers how Apache Kafka and its Streams API are used for storing and processing all the articles ever published by The New York Times

16.12.2022 / 08:12

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

https://youtu.be/mx5JzpfwjLo

#kafka #microservices

YouTube
Межсервисная шина данных на Apache Kafka | Павел Агалецкий | DevOps Meetup 2022| СберМаркет Tech

Павел Агалецкий, ведущий инженер в Авито, расскажет, как в Авито построили надежную во всех смыслах шину данных для обмена событиями между сервисами на основе Apache Kafka. Как мы гарантируем соблюдение контрактов публикуемых событий и способны переживать…

07.12.2022 / 06:12

Для тех кто выдержал пять часов про динамическое программирование - сегодня я принес восемь часов про структуры данных

Видео представляет из себя компиляцию нескольких последовательных уроков, которые охватывают как классические структуры, так и менее популярные - например Union Find

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

В целом - даже если вы знаете на зубок все что представлено в уроках - они станут отличным способом упорядочения информации в голове

https://youtu.be/RBSGKlAvoiM

#leetcode #ds

YouTube
Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer

Learn and master the most common data structures in this full course from Google engineer William Fiset. This course teaches data structures to beginners using high quality animations to represent the data structures visually.

You will learn how to code…

02.12.2022 / 06:12

Пятичасовое видео с примерами решения типовых алгоритмических задач из категории динамического программирования

Автор показывает два подхода к решению одной и той же задачи - при помощи мемоизации и табуляции, а также во всех случаях объясняет сложности по времени и памяти

https://www.youtube.com/watch?v=oBt53YbR9Kk

#leetcode #dp

YouTube
Dynamic Programming - Learn to Solve Algorithmic Problems & Coding Challenges

Learn how to use Dynamic Programming in this course for beginners. It can help you solve complex programming problems, such as those often seen in programming interview questions about data structures and algorithms.

This course was developed by Alvin Zablan…

23.11.2022 / 07:11

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

Сегодня я принес вам статью, в которой инженеры Notion делятся своим опытом по шардированию базы Postgtres

https://blog.quastor.org/p/notion-sharded-postgres-database-8af4

#postgres #database #systemdesign

Quastor
How Notion Sharded Their Postgres Database

Get Summaries of Big Tech Engineering Blog Posts on Frontend, Backend, Machine Learning, Data Engineering and more!

08.11.2022 / 06:11

Статья про интересный подход к написанию чистого кода.

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

https://davidamos.dev/the-rule-of-six/

#cleancode

ww16.davidamos.dev
davidamos.dev - This website is for sale! - davidamos Resources and Information.

This website is for sale! davidamos.dev is your first and best source for all of the information you’re looking for. From general topics to more of what you would expect to find here, davidamos.dev has it all. We hope you find what you are searching for!

21.10.2022 / 08:10

Проблемы микросервисов

- сетевые издержки на коммуникацию между функциями
- сложности при отладке из-за распределенности системы
- усложнение архитектуры
- одинаковые функции в разных микросервисах

Про решение первых трех есть немало статей, в том числе и в этом канале они были - тут и тут

Сегодня я делюсь статьей с best practices решения проблем дублирования кода - вынесения его в библиотеки и переиспользование в нескольких независмых сервисах.

https://medium.com/duda/shared-libraries-design-and-best-practices-710774ae0bdc

#microservices

11.10.2022 / 06:10

Привет!

Сегодня очень полезная информация для прохождения секции system design: пример пошагового проектирования системы на подобии Google Places - сервисов, которые основаны на поиске ближайших к вам мест по критериям - рестораны, гостиницы, заправки и т.д.

https://youtu.be/M4lR_Va97cQ

#systemdesign

YouTube
FAANG System Design Interview: Design A Location Based Service (Yelp, Google Places)

Weekly system design newsletter: https://bit.ly/3tfAlYD

Checkout our bestselling System Design Interview books:
Volume 1: https://amzn.to/3Ou7gkd
Volume 2: https://amzn.to/3HqGozy

Other things we made:
Digital version of System Design Interview books:…

07.10.2022 / 08:10

Один из самых частых этапов при подготовке к собеседованиям - это решение алгоритмических задач на Leetcode.

И помимо пользы от решения самих задач, платформа вводит некий соревновательный момент, отображая процент пользователей, которые в принципе решили эти задачи.

Сегодня я делюсь с вами интересным видео, в котором автор взял TOP-3 задачи, по которым меньше всего процент успешных решений и пытается их решить, плпутно делясь алгоритмами и подходами к решению

https://youtu.be/Ow1D5O05NfM

#leetcode

YouTube
Top Competitive Programmer vs. LeetCode's HARDEST Questions

A top competitive programmer from the Codeforces/CodeChef realm (with almost zero prior interview experience) takes on the hardest questions known to LeetCode to find out... how good is competitive programming, really? Is it enough to dominate even the hardest…

04.10.2022 / 06:10

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

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

https://netflixtechblog.com/timestone-netflixs-high-throughput-low-latency-priority-queueing-system-with-built-in-support-1abf249ba95f

#highload

Medium
Timestone: Netflix’s High-Throughput, Low-Latency Priority Queueing System with Built-in Support…

by Kostas Christidis

30.09.2022 / 08:09

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

Но как быть, если у вас нет архитектуры распределенных транзакций?

Ответить на этот вопрос на примере одного из кейсов, где возникает подобная проблема, попробует автор видео

https://www.youtube.com/watch?v=Trl4--FO7Yo

#microservices

YouTube
Do you need a Distributed Transaction? Working through a Design Problem

If you're working in a distributed application, you're bound to run into a design issue where you want data consistency between services. But you don't have a distributed transaction, so what's the solution? In this video, I will take an example use case…

27.09.2022 / 06:09

Оптимизация объявления структур в Golang с точки зрения потребляемой памяти и процессорного времени

https://towardsdev.com/golang-writing-memory-efficient-and-cpu-optimized-go-structs-62fcef4dbfd0

#golang

Medium
[Golang] Writing memory efficient and CPU optimized Go Structs

A struct is a typed collection of fields, useful for grouping data into records. This allows all the data relating to one entity to be…

23.09.2022 / 07:09

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

Сегодня речь пойдет про авторизацию и best practise по ее реализации в микросервисной архитектуре

https://www.osohq.com/post/microservices-authorization-patterns

#microservices

Osohq
Best Practices for Authorization in Microservices

How do you reliably perform authorization in a backend built with microservices? There are lots of valid answers, but they tend to fall into three groups.

20.09.2022 / 05:09

Еще одна проблема в микросервисной архитектуре после перехода с монолита - это транзакции.

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

Для микросервисной архитектуры есть подход распределенных транзаций, но он не лишен изъянов

Сегодняшняя статья расскажет в том числе про такие изъяны, а также предложит новый вариант решения проблемы транзацикй в распределенной системе

https://krishnakrmahto.com/transactional-messaging-in-microservices

#microservices

Learning Backend
Transactional Messaging in Microservices

Introduction
Problem Statement
Transactional messaging is a common problem in Microservices - how do you integrate message publishing with database transactions that update business entities or data. For e.g., we may require to publish domain events ...

16.09.2022 / 07:09

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

https://medium.com/wix-engineering/event-driven-architecture-5-pitfalls-to-avoid-b3ebf885bdb1

#systemdesign

Medium
Event Driven Architecture — 5 Pitfalls to Avoid

5 pitfalls that Wix engineers have encountered and fixed during their migration of more than 2000 microservices to Event Driven…

13.09.2022 / 05:09

Одна из основных проблем микросервисов - это проблема их коммуникации.

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

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

https://skolaparthi.com/communication-between-microservices/

#microservices

Skolaparthi
Communicating Between Microservices

Communicating Between Microservices:Microservices are a great framework for any enterprise, but it is of no use if they cannot communicate...

09.09.2022 / 07:09

Обзорная статья про построение событийно-ориентированной архитектуры

Разбор компонентов, преимущества и недостатки, а также пошаговый разбор перехода от синхронного взаимодействия к асинхронному

https://engineering.hashnode.com/building-an-event-driven-architecture-at-hashnode

#systemdesign

Hashnode Engineering
Building an Event-Driven Architecture at Hashnode

This post introduces you to the Event-Driven-Architecture at Hashnode. We build EDA with AWS Eventbridge, SQS, Lambda, and other serverless services.

06.09.2022 / 05:09

Статья про то, как можно быстро, при помощи фреймворка go-zero, сделать ваши gRPC-хэндлеры переиспользуемыми для REST-протокола без необходимости дублирования кода, при помощи декларативного описания и кодогенерации.

https://dev.to/kevwan/5-minutes-to-add-restful-apis-for-your-grpc-services-2dnl

#golang

DEV Community 👩‍💻👨‍💻
5 minutes to add RESTful APIs for your gRPC services

gRPC service with HTTP interface? While go-zero brought an excellent RESTful and gRPC...

02.09.2022 / 07:09
Отзывы: - 0
Поделитесь вашим мнением! Оставьте отзыв:

Похожие

Избранное