У студента-второкурсника сложные пет-проекты и уже 5 лет опыта??? / Техсобес Junior Python Developer

YOUTUBE · 22.11.2025 03:51

Ключевые темы и таймкоды

Введение

0:00
  • Сегодня проводится техническое собеседование на позицию джуниор-пайтон разработчик.
  • Собеседование проводят Артем и Виталий, а соискатель - Ринат.

Вопросы о проектах

3:19
  • Ринат рассказывает о своем проекте - магазине, где он был и фронтендером, и бэкендером.
  • Обсуждаются ошибки в проекте, связанные с динамическим отображением товаров и обработкой количества товаров.

Вопросы о других проектах

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

Заключение

11:43
  • Ринат объясняет, что его проекты были в основном учебными и интересными для него.
  • Собеседование завершается, и Ринат благодарит за возможность принять участие в собеседовании.

Анализ проблем с производительностью

12:36
  • Обсуждение проблем с производительностью и их возможных причин, таких как использование неподходящих операторов, отсутствие индексов и неэффективное использование ресурсов.
  • Обсуждение возможных решений, таких как использование деревьев выражений для оптимизации и представления декларативных инструкций, а также использование инструментов для анализа запросов и оптимизации.

Примеры практических задач

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

Обсуждение принципов объектно-ориентированного программирования

28:28
  • В видео обсуждаются три основных принципа объектно-ориентированного программирования: полиморфизм, инкапсуляция и наследование.
  • Полиморфизм позволяет использовать один и тот же интерфейс для разных сущностей, а инкапсуляция обеспечивает сокрытие логики работы с предметной областью.

Обучение и опыт

33:59
  • Автор обучается по книгам и статьям, а также смотрит видео на YouTube и читает статьи на Хабре.
  • Он также интересуется функциональным программированием и хотел бы изучить его подробнее.

Архитектура магазина

37:55
  • Проект был написан на FastAPI, с использованием роутеров, сервисов и паттерна репозитории.
  • Автор хотел бы добавить паттерн репозитории и абстрагировать работу с базой данных.

Обсуждение бизнес-логики и архитектуры

39:20
  • В видео обсуждается вопрос о том, как автор проекта инкапсулирует бизнес-логику и сценарии использования сущностей.
  • Обсуждается, что у автора есть сервисы, которые инкапсулируют работу с сущностями, но не все бизнес-логика и сценарии использования сущностей находятся в этих сервисах.
  • Автор также упоминает о том, что у него есть интерфейсы репозитория, но они не используются в проекте.

Обсуждение репозиториев и архитектурных границ

44:04
  • Автор объясняет, что он бы создал интерфейсы репозитория и конкретные реализации для работы с базами данных и ORM.
  • Он также говорит о том, что он бы поместил интерфейс репозитория на уровень моделей, а конкретную реализацию - на уровень контроллеров.
  • Автор также обсуждает закон Порета и его применение к солиду.

Принципы программирования

49:25
  • Обсуждаются принципы программирования, такие как разделение ответственности, открытость, и принцип инверсии зависимостей.
  • Упоминается, что автор не хочет использовать принцип имверсии зависимостей, так как считает его больше подходящим для инфраструктуры, а не для приложений.

Работа с базами данных

54:16
  • Обсуждается использование базы данных PostgreSQL с использованием транзакций и уровней изоляции.
  • Упоминается, что второй уровень изоляции не защищает от фантомных чтений и других эффектов, поэтому автор использует более высокий уровень изоляции.

Синхронность и Event Loop

59:33
  • Объясняется, что синхронность - это когда все операции выполняются последовательно, а Event Loop - это механизм, который позволяет выполнять операции асинхронно.
  • Автор объясняет, что Event Loop используется в языке программирования FastAPI для обработки запросов и ответов.

Синхронность и парсинг

59:47
  • Обсуждение использования синхронности для оптимизации парсинга сайта, где время обработки увеличилось с 3-5 минут до 5-10 секунд.

Декоратор "инжект"

1:06:28
  • Задача: написать декоратор, который автоматически передает переменные, переданные функции, в качестве аргументов.
  • Обсуждение использования инспектирования для определения количества аргументов и их типов.
  • Возможные проблемы с типами аргументов и зип-операциями.

Реализация декоратора

1:11:54
  • Создание функции, которая принимает аргументы и ссылку на функцию.
  • Определение количества аргументов и их типов с помощью инспектирования.
  • Решение о том, что делать, если типы аргументов не совпадают.

Создание инжектора зависимостей

1:14:57
  • Обсуждается создание функции, которая будет генерировать значения по типу.
  • Рассматривается использование декоратора для инжекции зависимостей.

Хранение и регистрация зависимостей

1:21:01
  • Обсуждается необходимость создания и хранения зависимостей, а также их регистрации для использования декоратором.
  • Рассматривается идея создания реестра зависимостей, который будет доступен декоратору.

Реализация реестра зависимостей

1:23:19
  • Создается класс, который будет хранить типы и дефолтные значения зависимостей.
  • Обсуждается вопрос о том, где заспавнить этот класс: внутри декоратора или глобально.
  • Рассматривается пример использования реестра для инжекции зависимостей в функцию.

Проблемы с декоратором

1:27:08
  • Автор обсуждает проблемы с декоратором, который не может обрабатывать разные типы аргументов и их количество.
  • Обсуждается вопрос о том, как хранить состояние для разных функций и как сделать его динамическим.

Решение проблемы

1:32:15
  • Автор предлагает использовать стейт в виде словаря, который будет хранить информацию о зависимостях для каждой функции.
  • Обсуждается вопрос о том, как передать объект, который будет содержать зависимости для каждой функции.

Обсуждение с заказчиком

1:35:45
  • Автор обсуждает с заказчиком, что он хочет иметь возможность регистрировать зависимости для каждой функции, используя декоратор инжект.
  • Заказчик предлагает использовать фабрику для регистрации зависимостей, но автор считает, что пользователи библиотеки не захотят работать с рейджист, а только с инжектом.

Обсуждение декораторов и провайдеров

1:39:06
  • В видео обсуждается использование декораторов и провайдеров для инжектирования зависимостей в функции.
  • Обсуждается, что декоратор инжект должен иметь возможность заинжектить любые зависимости в любую функцию, а декоратор провайдер должен принимать зависимости и возвращать функцию, которая будет генерировать эти зависимости.

Регистрация провайдеров и использование декораторов

1:40:29
  • Обсуждается, как зарегистрировать функцию провайдера зависимостей в библиотеке и как использовать декораторы для инжектирования и регистрации зависимостей.
  • Отмечается, что это очень понятный и узкий интерфейс взаимодействия с библиотекой.

Фидбеки и предложения по развитию

1:41:26
  • Автор предлагает перейти к фидбекам и предлагает Виталию начать обсуждение.
  • Отмечается, что Виталий уже решил половину задачи и без подсказок автора смог бы решить все самостоятельно.

Обсуждение навыков программиста

1:41:50
  • В видео обсуждается, что программирование становится все более разнообразным, и хорошие программисты получаются из увлеченных людей.
  • Упоминается пример Рената, который показывает уровень программирования, несмотря на то, что у него мало коммерческого опыта.

Советы для начинающих программистов

1:50:55
  • Рекомендация искать метловскую позицию сразу после обучения, так как вакансий джунов меньше, и ожидается более высокий уровень.
  • Советы по улучшению навыков: привести в порядок описание проектов, добавить демо, инструкции по развертыванию и избегать избыточного использования терминов.

Обсуждение личного бренда

1:53:58
  • Рекомендация развивать личный бренд, например, через YouTube.

Советы по резюме и собеседованию

1:54:55
  • Разработчики, стримеры и учителя - это разные сферы деятельности, и важно понимать, в какой из них вы хотите развиваться.
  • Если у вас не получается много стримить, это не значит, что вы что-то делаете неправильно.
  • Важно осознавать, что у каждого свои способности и возможности, и не стоит сравнивать себя с другими.

Советы по общению и резюме

1:58:05
  • Старайтесь не упоминать термины, которые не относятся к вопросу, чтобы не увести разговор в другое русло.
  • Важно уметь задавать вопросы и выяснять требования к задаче, а не сразу начинать ее решать.
  • В резюме стоит добавить больше достижений и достижений, чтобы показать свой уровень знаний и опыта.
  • Улучшить свой гитхаб профиль, добавив демки и достижения.

Фидбек и пожелания

2:02:44
  • Если бы автор видео был рекрутером, он бы взял автора на работу, несмотря на его уровень и опыт.
  • Важно продолжать развиваться и не останавливаться на достигнутом.
  • Автор видео рекомендует продолжать смотреть их видео и развиваться в своей сфере.