Aston · июнь 2024

Тех собес на middle-senior Python Разработчик в Aston

middle-senior Тех собес 30 вопросов

Условие

Провести код-ревью следующего фрагмента:

Base = declarative_base()
engine = createengine(DBURL)
Session = sessionmaker(bind=engine)

class Order(Base):
    tablename = 'orders'
    id = Column(Integer, primary_key=True)
    name = Column(String)

class OrderRetrieveSchema(BaseModel):
    id: int
    name: str
    items: list[ItemRetrieveSchema] | None = None

class Item(Base):
    tablename = 'items'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    order_id = Column(Integer, ForeignKey('orders.id'))

class ItemRetrieveSchema(BaseModel):
    id: int
    name: str

router = APIRouter(
    prefix="/orders",
    tags=["orders"],
    dependencies=[🔎
)

@router.get("/{order_id}/retrieve", description="Получение информации о конкретном заказе.")
async def getorderretrieve(order_id: int):
    query = (
        select(Order)
        .where(Order.id == order_id)
    )
    with Session() as session:
        order = session.execute(query).one()

    query = (
        select(Item, Item.name)
        .where(Item.orderid == orderid)
    )
    with Session() as session:
        items = session.execute(query).all()
1

Архитектура и миграция

1. Как вы организовывали процесс миграции с монолитной архитектуры на микросервисы с использованием FastAPI? Проводили ли вы полный перезапуск системы или делали это постепенно, минимизируя простои?

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

3. Какие сложности возникали при переходе с Django на FastAPI, особенно в части работы с ORM? В чём заключались основные различия между этими фреймворками в вашем опыте?

4. Какую технологию — Django или FastAPI — вы бы выбрали для нового проекта, и в каких ситуациях каждая из них предпочтительнее?

2

Код-ревью и оптимизация

5. Какие проблемы вы видите в предоставленном коде? Какие конкретные улучшения можно внедрить для повышения его качества и читаемости?

6. Как можно оптимизировать связи между моделями в SQLAlchemy, чтобы сделать работу с данными более эффективной? Использовали ли вы Relationships для этого?

7. Как лучше обрабатывать случаи, когда запрашиваемые данные, например, заказ по ID, не найдены в базе? Какие методы или подходы вы бы применили?

8. Какие улучшения в форматировании или структуре кода вы бы предложили, чтобы он стал более читаемым и поддерживаемым?

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

10. Как бы вы переработали endpoint’ы в коде, чтобы сделать их более структурированными и удобными для поддержки? Какие архитектурные подходы вы бы применили?

11. Как бы вы назвали endpoint в предоставленном коде, чтобы сделать его более понятным? Можно ли упростить его структуру?

12. Какие ещё недостатки в предоставленном коде вы бы выделили, если не ограничивать фантазию? Какие глобальные изменения могли бы улучшить архитектуру?

13. Какие ещё улучшения в работе с SQLAlchemy вы бы предложили, например, в аннотациях или настройке моделей?

14. Как вы организовывали работу с зависимостями в endpoint’ах? Есть ли способы сделать это более эффективно?

3

Теория Python

15. Какие ресурсы или материалы вы использовали для самостоятельного изучения Python до прохождения курсов, таких как Яндекс.Практикум?

16. Что такое декоратор в Python, и как он помогает расширять функциональность функций или методов?

17. Как реализовать декоратор, принимающий параметры? Какой паттерн проектирования используется в этом случае?

18. Чем отличается асинхронный декоратор от синхронного, и какие изменения нужно внести для его реализации?

19. Что такое генераторы в Python, и чем они отличаются от итераторов? Как работает ключевое слово yield, и в чём его преимущества?

20. Что такое контекстные менеджеры в Python, и как они обрабатывают исключения? Какие методы входят в их протокол?

21. Как работают блоки try, except, else и finally в обработке исключений? Что произойдёт, если в блоках try и finally есть операторы return?

22. Что такое принципы SOLID? Перечислите и кратко опишите каждый из них.

23. Какие материалы или книги вы использовали для изучения Python на начальном этапе? Были ли какие-то из них особенно полезными?

24. Использовали ли вы библиотеку EtherTools? Знаете ли вы о бесконечных итераторах и их особенностях в сравнении с генераторами?

25. Какой опыт у вас есть с написанием собственных декораторов? Приходилось ли создавать параметризированные декораторы?

26. Если бы вам пришлось написать асинхронный декоратор, как бы вы это сделали? Какие ключевые аспекты нужно учесть?

27. Как вы обходите проблему циклических ссылок в аннотациях, например, когда классы ссылаются друг на друга? Использовали ли вы Import Annotations для этого?

28. Какие преимущества даёт использование Pydantic моделей для валидации данных в коде? Как это может улучшить работу с базой данных?

29. Как вы оцениваете использование устаревших методов, таких как parse_obj в Pydantic? Какие современные альтернативы вы бы порекомендовали?

4

Процессы

30. Что происходит, если проект, на котором вы работаете, закрывается по причинам, не связанным с вашей деятельностью, во время действия контракта? Как устроен процесс в таких случаях?

Дополнительно

Собеседование включало в себя секцию код-ревью представленного фрагмента кода на FastAPI/SQLAlchemy, вопросы по архитектурному переходу с монолита на микросервисы, глубокие вопросы по теории Python и процессам разработки.