Видосы / Каналы про собесы
Смысл
- Собрать каналы чтоб в будущем можно было глянуть кого-нить и иметь актуальную инфу по собесам
Кабанчик-кор + System design
- https://www.youtube.com/@sukhoa - кабанчик-кор
- https://www.youtube.com/@vladimir_balun_programming - кабанчик-кор + system design
- https://www.youtube.com/watch?v=QgIWHeNy8fA
- Оптимизло бд
- Индексы
- Запросы переписать
- Explain - показывает поля / план запроса - че происходит во время запроса
- Индекс сделали, но запросы по-прежнему тормозят - индекс еще не создался
- b-tree - дефолт pdql
- bitmax?
- spartial?
- Репликация - масштабирование чтения
- vs Бекапы - бекапы это не быстро не реалтайм, реплика более свежая
- Синхронная / асинхронная репликация
- Синхронная - убеждаемся что данные доставились
- асинхронная -
- Мастер сломался - Выбор лидера - консесус
- Мастер-мастер
- Больше записи, гео-распределенность
- Больше конфликтов
- Шардирование - масштабир. на запись
- Шардирование по айди / хешу / полю / хардкод
- Минус индекса: Добавление шардов - нужен баланс
- Консистентное хеширование
- Перенос шарда
- перенос записи
- Партиционирование - шардирование на 1 серве; то есть разрезали табличку на старые и новые записи
- Балансировка нагрузки
- Весы
- По айди, ну как шарды
- Кеширование
- Разгрузка бд
- LRU - алгоритм кеша
- Очереди
- Расхожение кешей - тегирование
- Уровни кеширования
- Клиент
- CDN
- pull / push модели?
- Распределенные транзакции
- 2PC - 2 phase commit
- Опрашиваем учасников о фиксации
- Изолированная запись
- Saga - сейм?
- 2PC - 2 phase commit
- Событийная архитектура
- CAP-теорема
- cons - консистенс
- avail - доступность
- partition - всегда есть -
- Мониторинг
- Прометеус, графана
- рпс, латенси, ошибки, хардваре-метрики
- Логгирование
- Трассировка
- Профиллирование
- Оптимизло бд
- https://www.youtube.com/watch?v=mdhaRpJ-7X0
- Цели компании
- Достижения компании
- Мои достижения
- Рост
- Команда
- Стек
- Процессы
- Проблемы
- Код:
- Почему ищите чела
- Цели компании
- https://www.youtube.com/watch?v=QgIWHeNy8fA
- https://www.youtube.com/@mezhdu_skobok - system design
- https://www.youtube.com/watch?v=NhVnJAmeHf0
- Лайв-кодинг
- https://www.youtube.com/watch?v=NhVnJAmeHf0
- https://www.youtube.com/@system-design-notes - system design
- https://www.youtube.com/watch?v=LYuwGuejtDI
- Функционал: загрузка и просмотр
- MAU: 2.5ккк
- DAU: 50кк
- Загрузка видео: 5кк / день ⇒ 60 RPS
- Просмотр: 5ккк / день ⇒ 60K RPS
- Размер 1 видео: 100 Мб
- Объем хранилища: 100 Мб * 5 (форматов) * 5кк = 2.5 Пб / день ⇒ 900 Пб / год
- Пропускная способность: загрузка - 6 Гб / с; просмотр =RPS * Размер - 6 Пб / с
- Флоу - рисуем архитектуру
- Узкие места
-
https://www.youtube.com/@otsobes - C# ddd / cqrs / бд / очереди / архитектура
-
13 Собеседование Middle Backend разработчика - YouTube
https://www.youtube.com/watch?v=0QwxcSAzEQw- Абстр. классы vs Интерфейсы
- Абстр. классы для исключений
- DDD: Страна это Value Object или Entity
- It depends
- Целостность данных: Как получить юзера с заполненными полями
- Сделаем дто с обяз. полями
- Микросервисы: Отчеты по данным из нескольким сервисам
- Кроны, очереди с обновлениями
- Rabbit vs Kafka
- Rabbit:
- 1 продьюсер - 1 очередь / n очередей
- При 500 возвращаем задачу в очередь, очередь накапливается, но выполнение продолжается
- Kafka:
- Журнал-бд, гориз. масштабирование
- При 500 вся очередь встает, нужно перекладывать сообщения в другой топик, потом заретраем
- Гарантия доставки
- ???
- Rabbit:
- Тестирование микросервисов
- Моки
- SQL vs NoSql
- sql: Таблицы
- nosql: json/kv/etc.
- Много данных
- Партициниунируем + реплицируем
- Реплика неактуальная че делать: Идти в мастер
- Доступность: реплики делаем
- Денормалиция зач
- Для оптимизла скорости вместо джоинов
- Вьюхи
- Развитие
- Статьи
- Ютуб
- Книги
- Абстр. классы vs Интерфейсы
-
15 Full-stack безопасник на собеседовании Backend Middle - YouTube
https://www.youtube.com/watch?v=wOe0UF_5S7k- Связанность vs Связность
- Связанность - использование классов в классах
- Связность - сколько ответственностей у класса
- Транзакции
- Serializable - последовательно
- Snapshot - блокировка строк
- Read Commited - commited
- Read Uncommited - грязные чтения
- Оптимизация запросов
- В иде
- Индексы
- Связанность vs Связность
-
18 Сеньор в 23? Собеседование Middle Backend разработчика - YouTube
https://www.youtube.com/watch?v=SR7S5NeJ_JYсистем-диз
-
-
https://www.youtube.com/@itkrasavchik - кабанчик-кор + go
Чел затирает про собесы на go и валютную удаленку
- https://www.youtube.com/watch?v=MtYfRrQ33gI&list=WL&index=109
- СберМаркет
- Индексы в Postgres
- BTree
- Hash
- GIS
- Сбалансированное дерево vs Бинарное
- Explain vs Analyze vs Explain-Analyze
- Explain: Как понять че медленно, быстро
- ACID
- Транзакции
- Уровни изоляций
- Аномалии и блокировки
- Блокировки пессимистичные оптимистичные
- Select for update
- Kafka
- Топики, консьюмеры
- Партишены: убавить / уменьшить можно?
- Топик-груп
- Виды гарантий доставки сообщений
- Как обеспечить
- Параметры иденпотенсий
- Паттерны инбокс аутбокс
- Паттерны микросервисов
- Saga
- Gateway
- Database per service / Shared database
- Кубер
- Обсервабилити: Prometheus, Grafana
- Задача: Потоко-безопасный кеш на go
- СберМаркет
- https://www.youtube.com/watch?v=MtYfRrQ33gI&list=WL&index=109
БД
- Ваня Ио - бд + go
- https://www.youtube.com/watch?v=DyqtBiDrz3g
select * from employee where sex = 'female' and salary > 150 and age = 50 order by created_at
- Составные индексы - по нескольким колонкам
- Сначала Равенство, затем неравенство (в тч
order by
) - Если после первого равенства - неравенство, то индекс прекратит работу на первом неравенстве
- То есть для запроса выше индекс
sex, age, created_at
будет только поsex, age
- потому чтоsalary
- неравенство
- Сначала Равенство, затем неравенство (в тч
explain alanyze
- показывает план запроса со временемSeq Scan
- полный перебор
- Индекс на флаг - бесполезен, будет использован
Seq Scan
- плохая селективность индекса - Так что при создании индекса в первую очередь лучше выбирать колонку более селективную (напр.
salary
) - Частичный индекс - индекс на колонку + условие:
(salary) salary > N
- https://www.youtube.com/watch?v=e9a4ESSHQ74
- https://www.youtube.com/watch?v=DyqtBiDrz3g
-
EngineerSpock - бд
-
https://www.youtube.com/watch?v=lAWQNcAEiKw
https://www.youtube.com/watch?v=4HZl-PkFTbA
https://www.youtube.com/watch?v=bzCqU1gSsM0&t=4s
Виды индексов
- b-tree = сбалансированное дерево
- По-умолчанию
- O(log N)
- Hash-Index
- Только по
=
- Нет поддержки wal - индекс будет часто перестраиваться
- O(1)
- Только по
- Gist - геом, текст
- Gin - массивы, json, текст
- Sp-gist - телефон-номера
- Brin - почтовые индексы, таймстампы
Scan
- Index Scan - это про селективность
- Index Only Scan - читаем из индекса
- Bitmap Index Scan - сложнааа
- Seq scan - последовательное
Explain
- Explain - Не выполняет запросы
- Expain Analyze - выполняет запрос
- Analyze - строит стату по табл, чтобы планировщик лучше робил
- b-tree = сбалансированное дерево
-
-
Over Engineer - бд
- https://www.youtube.com/watch?v=gOB3hpAVIIQ
- ACID
- Atomicity - все или ничего
- Consistency - данные должны быть в good-state (здравый смысл) до и после транзакции, но это обязанность аппа
- Isolation - защита от race condition ака isolation levels
- Serializable - последовательное выполнение
- Read Uncommited - возможность Dirty Read
- Dirty Read - когда можем читать данные из другой транзакции не дожидаясь коммита
- Read Commited - защита от Dirty Read
- Проблема Read Commited - данные изменились в другой транзакции, но первая транзакция, которая делает 2 селекта по одной табл. еще работает
- Snapshot Isolation = Reapeatable Read - на время выполнения запросов берется слепок бд, так что параллельные изменения будут заигнорены
- Lost Update - конкурентная запись
- Решения
- Атомарные операции
- Select for update - эксклюзивная блокировка
- Lost Update Detection - авто-откат
- Durability - сохранение в бд
- CAP
- Consistency immediate - при чтении из двух реплик данные актуальные везде
- A
- ACID
- https://www.youtube.com/watch?v=gOB3hpAVIIQ
Python
- https://www.youtube.com/@python_interview/videos - python backend
- https://www.youtube.com/watch?v=7JCf77NZRm0&t=74s
- Redis - нет гарантии доставки
- Rabbit - гарантии доставки
- Kafka - журнальный подход
- celery - для отложенных и периодических задач
- оптимизация запросов
- код
- кеш
- денормализация
- индекс
- g-index - поиск по тексту
- большая миграция
- Сделать fk интом потом сиквенс сбросить
- https://www.youtube.com/watch?v=7JCf77NZRm0&t=74s
- https://www.youtube.com/@pymentor - python backend & core
- https://www.youtube.com/watch?v=qdH2ccjjT4w&list=WL&index=106
- Память
- Счет Ссылок
- WeakRef
- Слабые ссылки
- Объект Удаляется если все ссылки слабые
- Garbage Collector
- Циклические ссылки
- Поколения
- GIL
- Mutex
- Зач надо?
- Избегание Race Condition
- Проблема Вытесняющая многозадачность???
- Перезапись данных крч из-за контекст свитчинга
- Упрощение мемори-менеджмента / gc
- ООП
- Отношение Генерализации
- Классы = состояние
- GRASP
- Связанность
- Паттерны
- Абстр. фабрика: завод мебели в разных стилях
- Память
- https://www.youtube.com/watch?v=CZ-dueDo46I
- gil не держит тред долго, чтоб не было зависаний и был контекст свич
- serializable - при конкурентной записи будет ошибка
- https://www.youtube.com/watch?v=-NyCXiq5wak
- SAGA - координатор микросервисов распределенной транзакции
- https://www.youtube.com/watch?v=qdH2ccjjT4w&list=WL&index=106
-
https://www.youtube.com/@moscowdjangoru - python backend & core
https://www.youtube.com/watch?v=YJiQ-TBb9po
- ⌛⌛⌛ https://www.youtube.com/watch?v=Ey6872lyRO4
- Интерпретир - компиляция
- collectons
- gc
__new__
- перед__init__
- выставление переменных классу?
- сеттер - проперти-сеттер
__slots__
- ограничение аттрибутов- async-primitives
- coroutine
- future
- task
- gil
- консистентность ссылок
- BaseExecption vs Exception
- bd
- constrains
- sub-select
- join
- inner - без null
- outer - null если не удалось
- cross-join -
- full-join -
- fk
- cascade / protect
- select for update
- truncate / delete - ???
- index field order resolution
- explain
- explain analyze - time
- fastapi
- https://www.youtube.com/@rineisky - python core + interview
- https://www.youtube.com/watch?v=6Ony27gzDHo
- Бюрократия
- Бумажная работаэ
- Лог времени
- Образование внутри комп
- Структура и Босс
- Оформление
- График + Переработки?
- Обязанности?
- Планы ака Чем буду заниматься
- Процесс ака Типичный рабочий день
- Эффективность/KPI
- Состав команды
- Легаси или новый продукт
- Суть вакансии: расширение штата или замена сотрудника + поч ушел
- Отвественность: Кто тестирует? Кто за инфру отвечает?
- Code Review
- SDLC: Scrum? Митинги?
- CI/CD
- Соц-пакет: Качалка / Жрачка / …
- Sick Day - 1-2 больничный за счет компании
- Bench - ебланинг за счет компании (в идеале)
- Отпуск - за месяц боссу
- Лояльность?
- Повышение / Рост
- Когда Ответ после собеса
- Бюрократия
- https://www.youtube.com/watch?v=BoazgBZ4D7k
- Стресс
- Больше знаний
- Отдохнувший
- Опытный на собесах
- Типы данных
- mutuble, immutable, str, int, tuple, list, …
- == vs is
- == - по значению
- is - по памяти
- Изменение строки по индексу - ошибка
- copy
- copy - не дип копирование
- deepcopy - дип-копирование, включая списки и дикты
- big o
- for - n
- recur - log
- for for - n^n
- list
- search - n
- append / pop - 1
- append / pop index - n
- set
- search - 1
- set
- hash-table
- collision
- hash-chain: list of similar hashes
- линейное разрешение хешей
- [python default] квадратичное пробивание хешей
- двойное хеширование
- Доступ к приватным
a._A__private
- Декоратор с параметрами
- Просто еще один слой враппинга
- Метакласс
- Класс для класса с магическими методами
- Ооп
- Абстракция - используем только нужные данные
- Наследование - пон
- Инкапсуляция - сокрытие инфы, публичные методы
- Полиморф - чтоб параметры реализовывали интерфейс который нам нужен / наследование
- Миксин - расширение классов
- Diamond Problem:
ACls, BCls(ACls), CCls(ACls), D(B, C)
- MRO:
D > B, C > A
- Итератор:
__iter__
,__next__
- GIL:
- 1 тред в 1 момент времени
- Плюсы: С-расширения, безопасное управление памятью, скорость
- SOLID
- Single Resp - 1 класс - 1 функция
- Open Closed - открыт для расширения, закрыт для модификации
- Liskov - дочерний должен реализовывать родителя
- Interface Seg - много маленьких интерфейсов
- Dep. Inversion - классы принимают зависимости
- Паттерны
- Порождающие
- Поведенческие
- Структурные
- Фабрика
- Прокси
- Медиатор
- Прототипы
- Мемо
- Фасад
- refactoring.guru
- SDLC: Agile, Scrum, …
- ACID
- Atom - все либо ничего
- Consist - ???
- Isolation - сериализуемость
- Durabil - данные сохраняются
- Уровни изоляции
- Read Uncommitted
- Read Committed
- Read Snapshots
- Synchronized
- REST
- Клиент - Сервер
- Кеширование
- Стейтлесс
- Код по требованию - ???
- Единообразие
- Слои
- Стресс
- https://www.youtube.com/@ArtemLevkivskyi - python backend
- https://www.youtube.com/watch?v=62aiHYLhonI
- PUT vs PATCH
- SerializerMethodField - read-only поля
- Cookie
- Rest
- gc
- циклические ссылки
- генерации - по времени
- csfr
- django auth
- user
- content-type
- select-related - join
- fetch-related - неск. запросов
- multiprocess
- fork
- patterns
- https://www.youtube.com/watch?v=r24Pe81QYs4
- пустая трата времени
- Андрей += Пронин - python-core
- https://www.youtube.com/watch?v=eUVgbXot5B0
python -m example
- Какой
python
:PATH
- Что запускается:
__main__
- Какой
- Где аттрибуты класса?:
__dict__
- Что происходит при создании класса?: метаклассы?
- ⌛⌛⌛ https://www.youtube.com/watch?v=Ey6872lyRO4