Собеседование бекенда на 260к, с разбором всех вопросов по типу дискуссии , рекомендую послушать 👇
https://youtu.be/uYRKxWh_ku8
Введение и подготовка
• Автор планирует потратить 3-4 часа на монтаж видео.
• Будет вставлять звук “бусте” при необходимости.
• Приветствие и знакомство с Иваном.
00:00:58
Опыт работы и стек
• Иван рассказывает о своем опыте работы в аутсорс-конторе и геодезической компании.
• Работа с LMS-системами и банковскими проектами.
• Опыт работы в компании с динамичным бизнесом и большим количеством сотрудников.
00:03:44
Текущая работа и проекты
• Работа в компании, занимающейся анализом продаж на маркетплейсах.
• Разработка PIM-системы для фармацевтической компании.
• Использование Symphony PHP, RabbitMQ, Kafka и Docker.
00:06:48
Базы данных и архитектура
• Использование PostgreSQL на последнем проекте.
• Опыт работы с MySQL, MongoDB и Redis.
• Выбор между RabbitMQ и Kafka в зависимости от архитектуры и задач.
00:08:08
Технические кейсы и ревью
• Решение технического кейса на тендерной площадке.
• Неправильная оценка задачи и необходимость рефакторинга.
• Система ревью с несколькими уровнями и нестандартными требованиями.
00:10:59
Заключение и обсуждение системы ревью
• Обсуждение логичности системы ревью.
• Тестеры играют важную роль в процессе, но их задачи могут быть перегружены.
• Предложение по улучшению системы ревью.
00:12:02
Введение в дискуссии
• Обсуждение процедур разработки и переход к более интересным дискуссиям.
• Вопросы не предполагают единственно правильного ответа, приветствуется спор и рассуждения.
00:12:27
Проблемы с производительностью сервиса
• Пример с сервисом, который падает при 10 RPS из-за большого количества чтений.
• Рекомендации по анализу запросов и индексов для улучшения производительности.
00:13:16
Оптимизация запросов и индексов
• Анализ запросов и индексов для оптимизации производительности.
• Важность оценки селективности запросов для улучшения производительности.
00:15:13
Расширение и репликация
• Обсуждение методов расширения сервиса, включая баусер и репликацию.
• Преимущества и недостатки каждого метода, включая программистские и денежные затраты.
00:17:06
Де-нормализация и горизонтальное масштабирование
• Обсуждение де-нормализации для больших баз данных и больших нагрузок.
• Горизонтальное масштабирование через реплику как способ увеличения пропускной способности.
00:20:33
Транзакции и очереди
• Проблемы с транзакциями и необходимость очередей для записи.
• Вложенные транзакции как возможное решение, но с усложнением записи и блокировок.
00:22:32
Шардирование и репликация
• Обсуждение шардирования и репликации как возможных решений для масштабирования.
• Важность правильного подхода к делению базы данных для улучшения производительности.
00:22:44
Шаринг и его применение
• Шаринг – это способ масштабирования записей.
• Используется для распределения данных между несколькими мастерами.
• Применяется, когда производительность дисков достигает предела.
00:23:36
Различия между pub/sub и push
• Pub/sub – это подписчик и сабскрайбер.
• Push – это когда очередь сама присылает данные.
• Пример: RabbitMQ и Kafka.
00:26:06
Асинхронное программирование и многопоточность
• Асинхронное программирование и многопоточность – разные вещи.
• В PHP асинхронные библиотеки работают однопоточно.
• Многопоточность в PHP специфична, но возможна.
00:28:58
Обработка запросов в PHP
• Обработка долгих и быстрых запросов на одном инстансе.
• Использование сервисов и шины данных для разделения задач.
• Пример с тендерами и большими транзакциями.
00:31:56
Использование роудраннера
• Роудраннер позволяет обрабатывать запросы в потоке.
• Это предотвращает выключение основного процесса.
• Пример из практики в крупном банке.
00:32:14
Преимущества GRPC
• GRPC работает без него, но через него проще.
• GRPC быстрее, чем FPM пул, и позволяет сохранять поток выполнения.
• GRPC может принимать HTTP и HTTPS, в отличие от FPM, который медленнее.
00:33:12
Проблемы с FPM и планы на будущее
• FPM медленнее, чем GRPC, и менее удобен для контейнеризации.
• В проекте планируется использовать GRPC для контейнеризации.
• Опыт с FPM показал, что он медленный и неудобный.
00:35:11
Абстрактные классы и интерфейсы
• Абстрактный класс может содержать реализации методов, но не может быть создан объект.
• Интерфейс может быть реализован от нескольких интерфейсов.
• Фабрика создает объекты на основе параметров, передаваемых ей.
00:36:10
Сервис локатор и DI контейнеры
• Сервис локатор используется для хранения сервисов в контейнере.
• DI контейнеры позволяют легко внедрять зависимости.
• Паттерн сервис локатор используется в DI контейнерах.
00:37:06
Low-coupling и High-cohesion
• Low-coupling снижает связанность между сервисами.
• High-cohesion повышает когерентность и нацеленность на одну задачу.
• Эти принципы важны для инверсии зависимостей.
00:39:28
Абстрагирование и индексы
• Абстрагирование выделяет ключевые параметры объекта.
• Хэш-индексы используются для уникальных значений, но имеют константную сложность.
• B-деревья имеют логарифмическую сложность, но оптимизируют данные при каждом инсерте.
00:44:13
Рекурсия и бесконечные циклы
• Рекурсия может создать бесконечный цикл.
• Пример: функция, которая печатает время и вызывает себя, может создать бесконечный цикл.
00:44:40
Проблемы с памятью и сборщиком мусора
• Память может заполниться, что приведет к краху программы.
• В современных языках есть ограничения на количество рекурсий.
• Рекурсия всегда кладет вызовы в стек, что может привести к переполнению стека.
00:45:39
Хакерские методы и трейсы
• Можно переназначить счетчик рекурсий, но это приведет к краху.
• Трейс можно чистить, но это ломает программу.
• Бесконечный цикл можно создать, подставляя одни и те же адреса в стек.
00:47:25
Работа с шестнадцатеричной системой
• Вопрос о работе с шестнадцатеричной системой на собеседовании.
• Шестнадцатеричная система удобна для хранения матриц и хэшей.
• Это может быть полезно для уменьшения занимаемого места.
00:48:26
Оригинальный ответ на вопрос
• Можно использовать бесконечный сферический компьютер в вакууме.
• В этом случае память будет бесконечной, и программа будет работать.
• Это философский вопрос, на который можно дать разные ответы.
00:50:41
Принцип открытости-закрытости кода
• В некоторых случаях лучше не соблюдать принцип открытости-закрытости.
• При обновлении API или изменении бизнес-требований проще переписать код.
• Регрессионное тестирование всегда требует времени и усилий.
00:53:03
Генеративные модели и юнит-тесты
• Генеративные модели могут помочь в создании юнит-тестов.
• ChatGPT может генерировать тесты, но это требует контроля.
• Проблемы могут возникнуть, если модели начинают выдумывать несуществующие библиотеки и методы.
00:54:58
Вопрос о проекте без фреймворка
• Обсуждение проекта без развитой библиотеки и фреймворка.
• Вхождение в контекст проекта может занять больше времени.
• Важно изучать бизнес-область, а не только реализацию.
00:55:59
Политика открытости и процессы в команде
• Компания проповедует политику открытости и готова отвечать на вопросы.
• Ежедневные встречи для обсуждения задач, которые могут длиться от 5 до 30 минут.
• Команда состоит из программистов, аналитиков, тестировщиков и бэкендеров.
00:57:54
Канбан-доска и оценка задач
• Работа по канбану, задачи приоритизированы.
• Задачи не оцениваются в стори пойнтах, а в часах.
• Оценка задач в часах помогает лучше понять, сколько времени нужно на выполнение.
00:59:52
Оценка разработчиков и метрики
• Обсуждение методов оценки разработчиков.
• Пример с разными темпами выполнения задач у двух разработчиков.
• Важно, чтобы работа была понятной и интересной, а не только организационные аспекты.
01:01:06
Предложение работы и условия
• Предложение работы с испытательным сроком и возможностью получения до двух окладов в год.
• Возможность получения до 100% дохода в зависимости от личных показателей и показателей команды.
• Заполнение анкеты для получения предложения.
Пересказ YandexGPT
Нет Ответов