Информация предоставлена на основе последних 12 постов
Сравнительные показатели качества аккаунта
15.34%
2.82%
ENGAGEMENT RATE соответствует среднему
Активность в комментариях больше среднего в 1.3 раз
Активность подписчиков больше среднего в 2.9 раз
*
Показатели вычисляются относительно аналогичных аккаунтов
@it_knowledge_base — статистика по ER записей
12 / 01 / 2022, Среда
ER
15.18%
Реальный ER
14.14%
Лайков
27
всего, из них:
25 (93%)
от людей
2 (7%)
сомнительные
0
не от людей
Комментариев
2
всего, из них:
2 (100%)
хороших
0
сомнительных
СОСЕДНЯЯ ОЧЕРЕДЬ ВСЕГДА ДВИЖЕТСЯ БЫСТРЕЕ.
Перечислю в этом посте наиболее популярные брокеры сообщений.
Подробно их рассматривать будем позже, потому что все впихнуть в один пост нельзя :)
RabbitMQ - крутая маршрутизация.
Apache Kafka - огромная пропускная способность.
Redis - да, тут тоже есть очереди.
NATS - все чаще вижу эту систему.
Google PUB/SUB - говорят, что простой, но с багами.
Tarantool Queue - если кто что знает про это, отпишитесь, как вам :)
Yandex Message Queue - API сервиса совместим с Amazon SQS API.
HiveMQ - часто используется для IoT.
IBM MQ - если вы серьезная и приличная компания.
Alibaba Cloud Message Queue.
Apache ActiveMQ.
Amazon SNS.
Amazon SQS.
Iron MQ.
ZeroMQ.
#it #developer #development #coding #codinglife #selfdevelopment #selfimprovement #itgirl #womaninit #queue
30 / 12 / 2021, Четверг
ER
29.32%
Реальный ER
19.37%
Лайков
54
всего, из них:
35 (65%)
от людей
19 (35%)
сомнительные
0
не от людей
Комментариев
2
всего, из них:
2 (100%)
хороших
0
сомнительных
О чем стоит думать в 202[0-9] году при проектировании систем?🤔
1) Собственно основные сценарии работы сервиса.
Полезно знать :)
2) Какого маштаба планируется сервис?
Какой rps на CRUD? Все в цифорках.
Нужен ли load-balance? Где? Какой? Будет ли на какие-то данные больше нагрузка?
3) Какого маштаба хранилище потребуется? Какие требования к хранилищу?
Сколько будет данных? Сколько места они займут? Все в цифорках.
Репликация/Секционирование/Шардирование нужно?
Если у вас хранится фото и видео, то требования могут быть разными.
4) Какая нужна пропускная способность сети?
Считаем цифорки исходя из пунктов 2) и 3).
5) Нужен ли кеш?
Если нужен, то какого типа.
6) Схематично (ну или подробно) накидайте интерфейсы.
7) Опишите модель данных.
8) Нарисуйте высокоуровневый дизайн.
9) Нарисуйте детализированный дизайн.
10) Какие у системы точки отказа?
11) Как будете мониторить систему?
12) Покажите коллегам и подумайте над их замечаниями (мвахахах).
Теперь можно спать капельку спокойнее 😌
#developer #developerlife #code #girlwhocodes #selfdevelopment #software #softwaredeveloper #softwareengineer #softwarearchitecture #architecture #highload
25 / 12 / 2021, Суббота
ER
19.37%
Реальный ER
16.23%
Лайков
36
всего, из них:
30 (83%)
от людей
6 (17%)
сомнительные
0
не от людей
Комментариев
1
всего, из них:
1 (100%)
хороших
0
сомнительных
Строитель - порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. Может использовать разные комбинации методов, чтобы создавать разные представления объектов.
Положим, вам нужно создать машину. У машины есть мотор, руль, колеса и т. д. При этом у каких-то машин есть в комплекте зимние колеса или кузов. У какие-то машин комплектующие обшиты кожей и/или обладают дополнительными плюшками.
Чтобы учесть все это вы можете насоздавать кучу подклассов/mixin-ов для каждой комплектации каждой машины, но лучше подойдет шаблон Строитель.
Строитель выносит конструирование объекта за пределы его собственного класса и разбивает этот процесс на этапы.
Строителей может быть много. Они выполняют похожие действия (собрать мотор, вставить дверь), но у одного получается грузовик, а у другого Ламборгини.
Более того, у строителей может быть директор: он знает, какие методы вызывать у строителей :)
#it #developer #development #coding #codinglife #selfdevelopment #selfimprovement #itgirl #womaninit #girlswhocodes #algorithms #programming #designpatterns #patterns #builder #lamborghini
23 / 12 / 2021, Четверг
ER
24.08%
Реальный ER
16.23%
Лайков
40
всего, из них:
26 (65%)
от людей
14 (35%)
сомнительные
0
не от людей
Комментариев
6
всего, из них:
5 (83,3%)
хороших
1 (16,7%)
сомнительных
Golang - компилируемый язык от Google. Разрабатывался для замены c++, и становится все более популярным с каждым годом. В Golang небольшой порог входа (особенно для тех, кто писал на с, с++), высокая скорость исполнения кода, хороший сборщик мусора, строгая типизация и прочие плюшки. Golang умеет эффективно использовать ядра процессора. Но скорость написания кода, конечно, намного ниже, чем у более высокоуровневых языков (того же Python).
Напишите, пожалуйста, что думаете о Golang :) У меня нет с ним production-опыта :)
Golang is a compiled language from Google. Developed to replace c ++, and is becoming more popular every year. Golang has a small entry threshold (especially for those who wrote in C, C ++), high speed of code execution, a good garbage collector, strong typing and other goodies. Golang is good at using processor cores. But the speed of writing code, of course, is much lower than that of higher-level languages (like Python).
Please write what you think about Golang :) I have no production experience with it :)
#it #developer #development #coding #codinglife #selfdevelopment #selfimprovement #itgirl #womaninit #postgresql #postgres #partitioning #partitioningsystems #google #googledev #golang #girlwhocodes #googledevelopers
21 / 12 / 2021, Вторник
ER
23.56%
Реальный ER
11.52%
Лайков
40
всего, из них:
18 (45%)
от людей
22 (55%)
сомнительные
0
не от людей
Комментариев
5
всего, из них:
4 (80%)
хороших
1 (20%)
сомнительных
В языке Python динамическая типизация (тип переменной определяется в момент присваивания). В запутанном коде это приводит к ухудшению читаемости и ошибкам. Чтобы минимизировать эти проблемы в python есть аннотации типов, но они не обязательные, поэтому их наличие зависит от дисциплины разработчика.
При этом, если вы использовали в коде тип, противоречащий аннтоации, код все равно будет выполняться. Но на несоответствие вам укажет анализатор.
Есть простые типы int, str и т. д., и с ними все понятно (смотрите третий слайд).
Но бьывают ситуации, когда вы не знаете какой именно тип будет у параметра. Однако вы хотите, чтобы с момента инициализации у параметра был и дальше тот же тип. В данном случае вам не подойдет тип typing.Any. Вам нужны Generics. Высоздаете свой новый тип с помощью typing.TypeVar, и используете его для своего параметра (смотрите второй слайд).
Python is known to be dynamically typed (the type of a variable is determined at assignment time). In confusing code, this leads to poor readability and errors. To minimize these problems, python has type annotations, but they are not required, so it depends on the discipline of the developer.
At the same time, if you used a type in your code that contradicts the annotation, the code will still execute. But the analyzer will tell you an inaccuracy.
There are simple types int, str, etc., and everything is clear with them (see the third slide).
But there are situations when you don't know what type the parameter will have. However, you want the parameter to be of the same type from the time you initialize it. In this case, the type "typing.Any" will not work for you. You need generics. Create a new type using "typing.TypeVar" and use it as a parameter (see second slide).
#developer #developement #code #python #pythonprogramming #girlwhocodes
17 / 12 / 2021, Пятница
ER
27.75%
Реальный ER
15.71%
Лайков
48
всего, из них:
25 (52%)
от людей
23 (48%)
сомнительные
0
не от людей
Комментариев
5
всего, из них:
5 (100%)
хороших
0
сомнительных
ПРЕДПОЛОЖИМ, ВЫ УПРАВЛЯЕТЕ ЗАВОДОМ ПО ПРОИЗВОДСТВУ РАЗНЫХ МАШИН.
Все машины должны уметь ездить, при этом водителю не нужно знать, что происходит внутри машины, чтобы ехать. У машины должен быть руль, мотор, колеса, сиденье и т. д. Все эти комплектующие вы производите.
Но машины бывают разных марок, и мотор от Toyota не подойдет для машины BMW. Детали должны сочетаться.
Описать все это в коде поможет Абстрактная Фабрика. Это фабрика с изначально заложенным интерфейсом, которая будет создавать фабрики для производства машин конкретных марок. Смотрите второй слайд:)
@shshulka Я попыталась:)
LET'S SAY YOU RUN A FACTORY THAT PRODUCES VARIOUS MACHINES.
All cars must be able to drive, and the driver does not need to know what is happening inside the car in order to drive. The car must have a steering wheel, an engine, wheels, a seat, etc. All of these components are made by you.
But there are different brands of cars, and a Toyota engine will not fit a BMW car. The details must match.
Abstract Factory will help to describe all this in code. This is a Factory with an initially laid down interface, which will create Factories for the production of cars of specific brands. See the second slide :)
#it #developer #development #coding #codinglife #selfdevelopment #selfimprovement #itgirl #womaninit #girlswhocodes #algorithms #programming #designpatterns #patterns #toyota #bmw
15 / 12 / 2021, Среда
ER
30.37%
Реальный ER
19.9%
Лайков
55
всего, из них:
35 (64%)
от людей
20 (36%)
сомнительные
0
не от людей
Комментариев
3
всего, из них:
3 (100%)
хороших
0
сомнительных
ПОРОЖДАЮЩИЕ ПАТТЕРНЫ: ФАБРИЧНЫЙ МЕТОД (FACTORY METHOD)
Определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
Зачем создавать объекты с помощью другого класса?
Чтобы переопределять фабричный метод в подклассе и менять типы создаваемых классов (см. пример с транспортом на следующем слайде).
Пригодится, если типы объектов будут добавляться (к машине и байку добавится корабль). При этом у них остается один интерфейс (двигаться вперед, влево и т. д.)
Имеет смысл только если типов много.
CREATIONAL DESIGN PATTERNS: FACTORY METHOD
It provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.
Why create objects using another class?
To override the factory method in the subclass and change the types of the generated classes (see the example with transport on the next slide).
It will come in handy if the types of objects will be added (a ship will be added to the car and bike). At the same time, they have one interface (move forward, to the left, etc.)
It only makes sense if there are many types.
#development #programming #code #patterndesign #pattern #girlwhocodes
13 / 12 / 2021, Понедельник
ER
14.66%
Реальный ER
10.47%
Лайков
27
всего, из них:
19 (70%)
от людей
8 (30%)
сомнительные
0
не от людей
Комментариев
1
всего, из них:
1 (100%)
хороших
0
сомнительных
БЛОКИРОВКИ ТАБЛИЦ В POSTGRESQL
(Обещала @a_hjortron, что буду постить тексты под голыми задницами)
В большинстве случаев блокировки для таблиц в PostgreSQL применяются автоматически, но иногда с ними приходится сталкиваться, и вот тогда лучше понимать, что происходит.
Вообще один режим от другого отличается набором режимов блокировки, с которыми он конфликтует. Две транзакции не могут одновременно владеть блокировками конфликтующих режимов для одной и той же таблицы.
Вот существующие типы блокировок таблиц в PostgreSQL.
1. ACCESS SHARE
Используется при: SELECT.
Конфликтует с: ACCESS EXCLUSIVE.
2. ROW SHARE
Используется при: SELECT FOR UPDATE и SELECT FOR SHARE.
Конфликтует с: EXCLUSIVE и ACCESS EXCLUSIVE.
3. ROW EXCLUSIVE
Используется при: UPDATE, DELETE и INSERT
Конфликтует с: SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE и ACCESS EXCLUSIVE.
4. SHARE UPDATE EXCLUSIVE
Используется при: VACUUM (без FULL), ANALYZE, CREATE INDEX CONCURRENTLY, REINDEX CONCURRENTLY, CREATE STATISTICS и некоторыми формами ALTER INDEX и ALTER TABLE.
Конфликтует с: SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE и ACCESS EXCLUSIVE
Защищает таблицу от параллельного изменения схемы и запуска процесса VACUUM.
5. SHARE
Используется при: CREATE INDEX (без параметра CONCURRENTLY).
Конфликтует с: ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE и ACCESS EXCLUSIVE
6. SHARE ROW EXCLUSIVE
Используется при: CREATE TRIGGER и некоторыми формами ALTER TABLE
Конфликтует с: ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE и ACCESS EXCLUSIVE.
7. EXCLUSIVE
Используется при: CREATE TRIGGER и некоторыми формами ALTER TABLE
Конфликтует с: ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE и ACCESS EXCLUSIVE.
8. ACCESS EXCLUSIVE
Используется при: DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL и REFRESH MATERIALIZED VIEW (без CONCURRENTLY), а так же многие виды ALTER INDEX и ALTER TABLE
Конфликтует со всем :)
#it #developer #development #coding #codinglife #selfdevelopment #selfimprovement #itgirl #womaninit #postgresql #postgres