Python собеседования
2.01K subscribers
338 photos
451 links
Подготовка к собеседованиям на позицию Python-разработчик

Еще больше на сайте https://frontview-it.ru

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
По рекламе - @frontviewit
Download Telegram
Библиотека redis-py предоставляет клиент для взаимодействия с Redis. Основные операции выполняются через класс Redis.


import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('key', 'value') # Запись строки
print(r.get('key')) # Чтение значения


Поддерживает различные типы данных: строки, хеши, списки, множества.


r.hset('user', 'name', 'Alice') # Хеш-таблица
r.lpush('list', 1, 2, 3) # Список


Для транзакций используется pipeline(), для Pub/Sub — отдельный API.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Сигналы в Django позволяют выполнять действия при возникновении определенных событий (например, сохранение модели). Для их использования нужно импортировать нужный сигнал из django.db.models.signals, создать функцию-обработчик и подключить ее через декоратор @receiver или метод connect().

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Для установки конкретной версии пакета используется синтаксис == в команде pip install.


pip install package_name==1.2.3 # Точно указанная версия
pip install package_name>=1.2.0 # Минимальная версия


Можно задать диапазон версий с помощью дополнительных операторов:

pip install "package_name>=1.0.0,<2.0.0" # Версии от 1.0.0 до 2.0.0 (исключая 2.0.0)


Допустимы модификаторы ~= (совместимые версии) и != (исключение версии).

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда git reset отменяет изменения, возвращая репозиторий к указанному коммиту.


git reset --soft HEAD~1 # Отмена последнего коммита с сохранением изменений в индексе
git reset --mixed HEAD~1 # Отмена коммита и индекса (изменения остаются в рабочей директории)
git reset --hard HEAD~1 # Полная отмена коммита и всех изменений (осторожно!)


Для отмены изменений в конкретном файле:

git reset HEAD file.txt # Удаление файла из индекса


Флаг --hard необратимо удаляет изменения, --soft и --mixed оставляют возможность повтора коммита.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Кэширование в RESTful API можно реализовать через HTTP-заголовки (Cache-Control, ETag) для клиентского кэширования или серверные решения (Redis, Memcached) для хранения часто запрашиваемых данных. Стратегии кэширования включают TTL (время жизни кэша), инвалидацию при изменении данных и кэширование ответов целиком или отдельных ресурсов.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Django предоставляет встроенную защиту от CSRF через middleware django.middleware.csrf.CsrfViewMiddleware.


# В форме добавляется CSRF-токен
<form method="POST">
{% csrf_token %}
</form>


Для AJAX-запросов токен передается в заголовке X-CSRFToken.


headers: {'X-CSRFToken': getCookie('csrftoken')}


Отключение защиты (не рекомендуется) делается декоратором @csrf_exempt. Проверка токена происходит автоматически для POST, PUT, DELETE запросов.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция asyncio.all_tasks() возвращает множество всех выполняющихся задач в текущем цикле событий.


import asyncio

async def example():
await asyncio.sleep(1)

tasks = asyncio.all_tasks() # Получение всех активных задач


Полезно для мониторинга или отладки асинхронного кода. Если передать аргумент loop, вернет задачи конкретного цикла.


current_loop = asyncio.get_running_loop()
tasks = asyncio.all_tasks(current_loop)


Не включает завершенные или отмененные задачи.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция print() выводит переданные объекты в стандартный поток вывода, преобразуя их в строки. Основные параметры: sep (разделитель между аргументами), end (символ в конце вывода), file (объект для вывода, по умолчанию sys.stdout) и flush (принудительный сброс буфера).

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод keys() возвращает представление всех ключей в словаре.


d = {'a': 1, 'b': 2}
print(d.keys()) # dict_keys(['a', 'b'])


Результат динамически связан с исходным словарем — изменения отражаются сразу.


d['c'] = 3
print(d.keys()) # dict_keys(['a', 'b', 'c'])


Можно преобразовать в список: list(d.keys()). Работает за O(1), не создает копию данных.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн State позволяет объекту изменять поведение при смене внутреннего состояния. Реализуется через отдельные классы-состояния и контекст, который делегирует им работу.


class State:
def handle(self, context):
pass

class ConcreteStateA(State):
def handle(self, context):
context.state = ConcreteStateB()

class ConcreteStateB(State):
def handle(self, context):
context.state = ConcreteStateA()

class Context:
def __init__(self):
self.state = ConcreteStateA()

def request(self):
self.state.handle(self)


Каждое состояние инкапсулирует свою логику, а переходы между состояниями выполняются внутри методов handle(). Контекст хранит текущее состояние и вызывает его методы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция asyncio.gather() запускает несколько корутин конкурентно и возвращает их результаты в порядке передачи. Принимает корутины или задачи как позиционные аргументы, поддерживает параметр return_exceptions для контроля обработки ошибок.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Для получения значения по ключу в словаре используется синтаксис dict[key] или метод dict.get().


d = {'a': 1, 'b': 2}
print(d['a']) # 1 (KeyError если ключа нет)
print(d.get('c', 0)) # 0 (возвращает default вместо ошибки)


Метод setdefault() возвращает значение и добавляет ключ с default-значением, если его нет.


value = d.setdefault('c', 3) # Возвращает 3, добавляет 'c': 3 в словарь


Для проверки наличия ключа используется оператор in.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Генераторы позволяют загружать данные по требованию через yield, экономя память.


def lazy_load(file_path):
with open(file_path) as file:
for line in file:
yield line.strip() # Постепенная обработка


Каждый вызов next() или итерация возвращает очередной элемент без загрузки всего набора.


data_loader = lazy_load('large_file.txt')
print(next(data_loader)) # Только первая строка в памяти


Подходит для обработки больших файлов, потоковых данных и бесконечных последовательностей.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Переменная __version__ в модулях хранит строку с номером версии для удобного отслеживания совместимости. Обычно определяется в __init__.py модуля или импортируется из отдельного файла version.py, чтобы ее можно было получить через import module; print(module.__version__).

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция all() возвращает True, если все элементы итерируемого объекта истинны (или если он пуст).

python  
data = [True, 1, 'text']
print(all(data)) # True


Функция any() возвращает True, если хотя бы один элемент истинный.

python  
data = [False, 0, '']
print(any(data)) # False


Обе функции работают с любыми итерируемыми объектами (списки, кортежи, генераторы). Лениво вычисляются до первого False (для all) или True (для any).

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Очередь asyncio.Queue предоставляет потокобезопасный механизм для передачи сообщений между асинхронными задачами. Основные методы:

queue = asyncio.Queue(maxsize=10)
await queue.put(item) # Добавление элемента
item = await queue.get() # Извлечение элемента


- put() блокирует корутину при заполненной очереди (если задан maxsize)
- get() ожидает появления элементов в пустой очереди
- Поддерживает методы join(), task_done() для отслеживания завершения обработки

Используется для организации асинхронных конвейеров обработки данных, где производители и потребители работают в разных корутинах.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
exec() выполняет переданную строку как код Python (может содержать выражения, циклы, объявления), не возвращая результат. eval() вычисляет только одиночное выражение и возвращает его значение. Обе функции представляют угрозу безопасности при использовании с непроверенными данными.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Для обновления конкретного пакета:
pip install --upgrade package_name


Обновление всех устаревших пакетов:
pip list --outdated  # Просмотр устаревших пакетов
pip install --upgrade $(pip list --outdated | awk 'NR>2 {print $1}')


Особенности:
- Флаг --upgrade можно сократить до -U
- Рекомендуется использовать в виртуальном окружении
- Для системных пакетов может потребоваться sudo (не рекомендуется)

Перед обновлением лучше проверить совместимость версий.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Оператор or в условных выражениях возвращает первый операнд, который оценивается как True, или последний операнд, если все значения False. Логическое ИЛИ вычисляется по короткому циклу: если первый операнд True, второй не проверяется.


x = 0
y = 5
result = x or y # 5, так как x == 0 (False), возвращается y


Если оба операнда False, возвращается последний:


a = None
b = 0
res = a or b # 0, оба значения False, возвращается b


Часто используется для задания значений по умолчанию:


value = user_input or "default" # если user_input пустой, вернется "default"


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
При работе с файлами ошибки обрабатываются через блок try-except, перехватывая исключения типа FileNotFoundError, PermissionError или IOError. Использование контекстного менеджера with гарантирует корректное закрытие файла даже при возникновении ошибки.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Полиморфизм через наследование позволяет разным классам использовать методы с одинаковыми именами, но разной реализацией. Для этого базовый класс определяет интерфейс, а дочерние классы переопределяют методы.


class Animal:
def make_sound(self):
raise NotImplementedError("Subclasses must implement this method")

class Dog(Animal):
def make_sound(self):
return "Woof!"

class Cat(Animal):
def make_sound(self):
return "Meow!"


При вызове make_sound() у объекта Dog или Cat выполняется соответствующая реализация, несмотря на одинаковый метод в базовом классе.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM