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

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

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
По рекламе - @frontviewit
Download Telegram
__len__() — специальный метод, вызываемый функцией len(). Должен возвращать целое число ≥ 0, представляющее длину объекта.


class MyCollection:
def __len__(self):
return 10


Ключевые особенности:
- Обязателен для объектов, поддерживающих определение длины
- Вызывается автоматически при использовании len(obj)
- Должен возвращать только целое число (int)

Реализуется в коллекциях (list, dict), пользовательских контейнерах и итерируемых объектах.

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

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


for item in data:
try:
process(item)
except ValueError:
handle_error()


Особенности работы:
- Блок except перехватывает исключения только для текущей итерации
- Цикл продолжает работу со следующего элемента после обработки ошибки
- Позволяет реализовать устойчивую обработку данных с ошибками

Часто используется при обработке коллекций с потенциально проблемными элементами.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Самый простой способ — преобразовать список в множество (set), которое автоматически удаляет дубликаты, а затем обратно в список. Для сохранения порядка элементов можно использовать dict.fromkeys() или перебор с проверкой вхождения в новый список.

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

empty_tuple = ()  # Пустой кортеж
single_element_tuple = (42,) # Кортеж с одним элементом
multiple_elements_tuple = (1, 2, 3) # Кортеж с несколькими элементами


Кортеж также можно создать без скобок, просто перечислив элементы через запятую:
another_tuple = 4, 5, 6


Кортежи неизменяемы, поэтому после создания их элементы нельзя изменить.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Синтаксис среза: list[start:stop:step], где все параметры опциональны.


nums = [0, 1, 2, 3, 4]
nums[1:4] # [1, 2, 3] (элементы с 1 до 3 индекса)
nums[::2] # [0, 2, 4] (каждый второй элемент)


Особенности:
- start — включительно, stop — исключительно
- Отрицательные индексы отсчитываются с конца
- Возвращает новый список, не изменяя оригинал
- Работает аналогично для строк, кортежей и других последовательностей

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

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


task = asyncio.create_task(asyncio.shield(critical_operation()))


Основные особенности:
- Защищенная задача продолжит выполнение, но её await выбросит CancelledError
- Не предотвращает отмену самой защищаемой корутины, только внешней обёртки
- Полезен для обязательных операций (сохранение данных, закрытие соединений)

Используется в связке с try/except для обработки отмены.

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

✈️ 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
🔵Основные компоненты DRF:


from rest_framework import serializers, viewsets

class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'

class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer


Ключевые шаги:
1. Сериализаторы преобразуют модели в JSON и обратно
2. ViewSets объединяют логику для CRUD операций
3. Роутеры автоматически генерируют URL-адреса

Регистрация в urls.py:

router = DefaultRouter()
router.register(r'books', BookViewSet)


DRF добавляет авторизацию, пагинацию и документацию через Swagger.

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

✈️ 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
Конфликты возникают при изменении одних и тех же строк в разных ветках. Для разрешения нужно вручную отредактировать файлы, оставив нужные изменения, затем выполнить git add и завершить слияние коммитом.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 Основные криптографические библиотеки:


from cryptography.fernet import Fernet # Симметричное шифрование
from Crypto.PublicKey import RSA # Асимметричное шифрование
import hashlib # Хеширование


Популярные решения:
- cryptography — современный стандарт для шифрования
- pycryptodome — расширенная криптография (AES, RSA)
- hashlib — встроенный модуль для хешей (SHA-256, MD5)
- bcrypt — специализированная библиотека для хеширования паролей

Для TLS/SSL используется встроенный модуль ssl.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Классическая реализация предполагает Subject (наблюдаемый объект) и Observer (наблюдатели):


class Subject:
def __init__(self):
self._observers = []

def attach(self, observer):
self._observers.append(observer)

def notify(self, message):
for observer in self._observers:
observer.update(message)



class Observer:
def update(self, message):
print(f"Received: {message}")


Ключевые моменты:
- Subject хранит список наблюдателей и уведомляет их при изменениях
- Observer определяет интерфейс для получения обновлений
- В Python часто реализуют через события или свойства (property)

Альтернативно можно использовать модуль observable из PyPI.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Использовать индексы для часто запрашиваемых полей, избегать N+1 проблемы через select_related или prefetch_related, ограничивать выборку только нужными полями через only() или defer(). Кэшировать результаты тяжелых запросов и анализ slow query log для выявления узких мест.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
asyncio.TimeoutError возникает при превышении времени выполнения асинхронной операции. Для обработки таймаутов используйте asyncio.wait_for():


try:
result = await asyncio.wait_for(coroutine(), timeout=5.0)
except asyncio.TimeoutError:
handle_timeout()


Ключевые моменты:
- Применяется для ограничения времени выполнения корутин
- Отличается от встроенного TimeoutError (синхронные операции)
- Вместе с asyncio.shield() позволяет контролировать прерывание

Таймауты особенно важны для сетевых запросов и внешних API.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
▶️ Python определяет типы переменных во время выполнения, а не компиляции. Одна переменная может менять тип при повторном присваивании:


value = 42 # int
value = "text" # str


Характеристики:
- Проверка типов происходит при выполнении операций
- Гибкость кода ценой возможных runtime-ошибок
- Использует duck typing

Отличается от статической типизации (C++, Java), где типы проверяются до запуска программы.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод close() принудительно останавливает выполнение генератора, вызывая GeneratorExit в точке его последней приостановки. После вызова close() генератор больше не может yield'ить значения и выбрасывает StopIteration при попытке итерации.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
__delattr__() вызывается при попытке удаления атрибута через оператор del. Позволяет кастомизировать поведение при удалении:


class Example:
def __delattr__(self, name):
print(f"Deleting {name}")
object.__delattr__(self, name)


Ключевые особенности:
- Требует явного вызова object.__delattr__() для реального удаления
- Может блокировать удаление критичных атрибутов
- Вызывается только для оператора del, не влияет на delattr()

Используется редко, в основном для сложных деструкторов или защиты атрибутов.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 Для слияния множеств используйте метод union() или оператор |:


set1 = {1, 2}
set2 = {2, 3}
merged = set1.union(set2) # {1, 2, 3}


Альтернативные варианты:
- update() модифицирует исходное множество
- | создает новое множество
- {*set1, *set2} работает с Python 3.5+

Все методы автоматически удаляют дубликаты.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция chr() принимает целое число (Unicode-код) и возвращает соответствующий символ в виде строки. Обратная операция выполняется функцией ord(), которая преобразует символ обратно в числовой код.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
git fetch загружает изменения из удаленного репозитория без слияния с локальной веткой, обновляя только ссылки в .git/refs/remotes.


git fetch origin # Загружает изменения без модификации рабочей директории


git pull = git fetch + git merge — автоматически сливает загруженные изменения с текущей веткой.

Ключевые отличия:
- fetch безопаснее — позволяет проверить изменения перед слиянием
- pull может создать конфликт слияния без предупреждения
- Для проверки изменений после fetch используйте git log origin/branch

Рекомендуется использовать fetch + ручное слияние в рабочих проектах.

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

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

Основные классы и функции:
- create_subprocess_exec — запускает процесс из переданных аргументов.
- create_subprocess_shell — запускает процесс через оболочку.

Процесс общается через стандартные потоки (stdin, stdout, stderr), доступные как асинхронные потоки.


import asyncio

async def run_command():
proc = await asyncio.create_subprocess_exec(
'echo', 'hello',
stdout=asyncio.subprocess.PIPE
)
stdout, _ = await proc.communicate()
print(stdout.decode())


Код запускает процесс echo и читает его вывод асинхронно. communicate() ожидает завершения процесса и возвращает вывод.

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

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