Само собой, родился из ограничений, так что по сути консенсус из того что важно командам и мне с адаптацией под текущий процесс хайринга (:
-
с чем работал
-
что делал, какие проблемы запомнились
-
что хочется, что не хочется от работы (почему мы видим тебя на собеседовании)
-
версия питона
-
что нра/ненра в питоне
-
что нра/ненра в свежих релизах
-
когда может пригодиться знание про мутабельность/немутабельность типов
-
зачем могут понадобиться генераторы
-
зачем могут понадобиться контекстные менеджеры.
-
... контекст варсы?
-
зачем придумали GIL
-
чем мешает и когда
-
что делают @classmethod, @staticmethod, @property
-
как тестировать привык
-
задача: придумать такую функцию, которую я запарюсь покрывать юнитами. Хочу список её "фич"
-
как хорошо зафиксировать зависимости в свежем проекте на питоне
-
что внутри, как работает
-
чем лучше тредов/процессов и лучше ли
-
чего юзал из асинк фреймворков
-
как быть с транзакционными операциями в асинхронном сервисе
- задача: опиши идеальный паплайн деплоя на прод веб приложения на питоне
-
что юзал и зачем
-
зачем придумали индексы
-
а как они работают в постгре
-
а почему на все стобцы не навесить
-
что такого страшного ты можешь увидеть в выводе EXPLAIN
-
зачем настраивал уровни изоляции транзакций
-
опиши принцип работы MVCC для Васяна
-
сколько слоёв должно быть и почему
-
опиши слои веб-приложения на питоне (любого из практики)
-
какие сущности юзал
-
сервис vs ингрес
-
configmap vs secret
-
hpa
-
affinity
-
писал руками ямлики или шаблонизировал чем
-
а секреты как хранил
-
что юзал
-
нра/не нра и почему
-
а как это бекапить
-
а как не "вендорлочить"
-
как юзали
-
какие проблемы поймали
-
как мониторили и кто админил
-
что расскажешь про XSS
-
... про CSRF
- развернуть список в питоне - несколько способов и тест на это
def reverse(list):
"""Реализуйте функцию максимально production-ready.
Использовать можно всё что угодно.
Менять можно всё что угодно.
Главное чтобы ассерты внизу проходили.
"""
# todo impl (u turn)
pass
assert reverse([1, 2, 3]) == [3, 2, 1]
assert reverse(['1', None, '', 'A', 'a']) == ['a', 'A', '', None, '1']
source_list = [1, 2]
assert reverse(source_list) == [2, 1]
assert source_list == [1, 2], source_list
- отфильтровть список и тест на это
from typing import Any, List
def filter_list(source_list: List[Any]) -> List[Any]:
"""Реализуйте функцию максимально production-ready.
Использовать можно всё что угодно.
Менять можно всё что угодно.
Главное чтобы ассерты внизу проходили.
"""
# todo impl (u turn)
pass
assert filter_list([0, 1, 2]) == [1, 2]
assert filter_list([1, 2, 3, '', None, '1', -1]) == [1, 2, 3, '1']
- кодоревью таски стажёров
"""@see <https://github.com/esemi/python_intern>"""
import requests
from fastapi import FastAPI
from requests.exceptions import ConnectionError, InvalidURL
app = FastAPI()
@app.get("/healthz")
async def healthz(hostname) -> dict:
"""
Checks if the host is up or down.
:param hostname: The name of the host being checked.
"""
status = 'up' if is_alive_host(hostname) else 'down'
return {'status': status}
def is_alive_host(h):
"""Проверить, что запрашиваемый хост возвращает http status 100<=x<400."""
url = 'http://' + h
try:
response = requests.get(url)
status_code = response.status_code
if 100 <= status_code < 400:
return True
return False
except ConnectionError:
return False
except InvalidURL:
return False
-
хочу автотаску на каждые 10 минут - что делать
-
хочу автотаску на каждую секунду - что делать
-
один запрос с UI, за ним инфа от десятка сервисов, на беке фляжка, работает долго
-
асинк фреймворк, внутри критичная транзакция, падает на запросе во внешний сервис
-
DDD
-
луковая/слоистая/дядя Боб