Python
Какие подходы к координации действий между микросервисами существуют? Назови два основных вида.
Слышал ли ты про чистую архитектуру и DDD?
# Описание задачи # Дана отсортированная по возрастанию последовательность целых чисел. # Необходимо реализовать функцию, выполняющую бинарный поиск элемента в этой последовательности. # Функция должна: # 1. Принимать два аргумента: # - отсортированный список чисел, # - целевое значение для поиска. # 2. Возвращать индекс найденного элемента, если элемент присутствует. # 3. Возвращать -1, если элемент отсутствует в списке. # Требования # - Решение должно быть итеративным. # - Важно соблюсти сложность O(log n). # - Код должен быть написан на Python 3 и соответствовать базовым принципам чистоты кода.
Почему рекурсивный бинарный поиск хуже и почему лучше итеративного?
Расскажи про себя и свой опыт
Как вы будете выбирать между несколькими офферами? Что для вас важно?
Расскажите про вашу текущую команду и проекты в [банке/компании]
Можно ли создать бесконечный итератор и генератор? Что для этого нужно?
Объясните поведение функции с mutable default argument (изменяемым аргументом по умолчанию). Что выведут принты?
Расскажите про декораторы в Python: что это за паттерн и как реализовать декоратор с аргументами?
Расскажите про принципы ООП: инкапсуляция, наследование, полиморфизм, абстракция
Расскажите про использование датаклассов в вашем проекте и почему вы их выбрали
Принцип Liskov Substitution — расскажите подробнее
Расскажи про свой основной стек, в котором больше всего опыта.
Какие в целом есть в Python способы многозадачно делать работу и для чего каждый из них нужен?
Зачем нужна многопоточность с GIL, если это не настоящий параллелизм? В чём смысл GIL?
Analyze the following Python code that uses threading to increment a counter variable: ```python import threading import time counter = 0 def increment(): global counter for _ in range(100000): current = counter counter = current + 1 thread1 = threading.Thread(target=increment) thread2 = threading.Thread(target=increment) thread1.start() thread2.start() thread1.join() thread2.join() print(f"Итоговое значение счетчика: {counter}") ``` Explain what the expected output is and discuss any potential issues with this code when using threads.
import threading import time counter = 0 def increment(): global counter for _ in range(100): current = counter time.sleep(0.000001) counter = current + 1 thread1 = threading.Thread(target=increment) thread2 = threading.Thread(target=increment) thread1.start() thread2.start() thread1.join() thread2.join() print(f"Итоговое значение счетчика: {counter}") 150-200
Какие проблемы при использовании ProcessPool? Какие есть нюансы работы с процессами?
Есть ли проблемы с передачей объектов по Unix-сокету между процессами? Как избавиться от сериализации?