Как передать аргументы в PythonOperator?
В PythonOperator позиционные аргументы передают через op_args, именованные — через op_kwargs. В python_callable указывают функцию, а не результат её вызова.
Читать ответПодготовка к интервью
881 вопрос с собеседований в Ozon
Что проверяют на интервью
Подборка объединяет вопросы, отмеченные на этапах интервью в Ozon. Здесь можно понять структуру технической проверки и заранее повторить связанные темы. В подборке чаще встречаются темы: database, backend, sql.
Каталог
В PythonOperator позиционные аргументы передают через op_args, именованные — через op_kwargs. В python_callable указывают функцию, а не результат её вызова.
Читать ответPythonOperator вызывает Python-функцию, BashOperator запускает команду через shell. Выбор зависит от того, где находится логика задачи и какое окружение ей нужно.
Читать ответPythonOperator выполняет переданный Python callable как задачу Airflow, а не автоматически запускает отдельный .py-файл или Spark-приложение.
Читать ответВ Python переменное число позиционных аргументов собирают через *args, именованных — через **kwargs. Внутри это tuple и dict соответственно.
Читать ответСначала оставьте числа, встречающиеся ровно один раз, затем возьмите MAX. Внешняя агрегация вернёт NULL, если подходящих чисел нет.
Читать ответПартицию выбирает producer: явно указанная partition, настроенный partitioner либо стандартная логика по ключу/балансировке. Брокер не распределяет каждую запись произвольно заново.
Читать ответВ Airflow 2 задайте email_on_failure=True и email_on_retry=False для нужной задачи, укажите получателя и настройте почтовый backend. Успешное выполнение само по себе письмо не отправляет.
Читать ответTopic — логическое имя потока Kafka, partition — отдельный упорядоченный журнал внутри него. Topic может иметь несколько партиций для параллельной записи и чтения.
Читать ответСначала оцените размер массива в байтах и срок его жизни: 100 000 элементов могут занимать очень разный объём. Избегайте лишних копий и повторных выделений больших буферов.
Читать ответMVCC позволяет транзакциям читать подходящие версии строк, уменьшая конфликты чтения и записи. VACUUM освобождает место от версий, больше не нужных ни одной транзакции.
Читать ответlock обеспечивает взаимное исключение, для простого счётчика подходит Interlocked.Increment. Await внутри lock запрещён; для асинхронного ожидания обычно используют SemaphoreSlim.WaitAsync.
Читать ответСтандартный DI-контейнер .NET поддерживает Transient, Scoped и Singleton: новый объект на разрешение, один объект на scope и один объект на контейнер соответственно.
Читать ответ