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

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

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Стандартные инструменты профилирования включают встроенный модуль cProfile для детального анализа времени выполнения и timeit для измерения коротких участков кода. Сторонние решения типа Py-Spy, memory_profiler и line_profiler предоставляют дополнительную информацию о потреблении памяти и построчном выполнении.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔹Паттерн Facade предоставляет упрощённый интерфейс к сложной системе классов. Реализуется через класс-обёртку, который инкапсулирует взаимодействие с подсистемами.


class SubsystemA:
def operation_a(self):
return "Subsystem A"

class Facade:
def __init__(self):
self._subsystem_a = SubsystemA()

def operation(self):
return f"Facade: {self._subsystem_a.operation_a()}"


Клиент работает только с Facade, не зная о внутренней реализации. Упрощает использование сложных систем.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
➡️ Для реализации OAuth в Python API используются библиотеки authlib или oauthlib, интегрирующиеся с популярными фреймворками.


from authlib.integrations.flask_client import OAuth

oauth = OAuth(app)
oauth.register(name='google', client_id='...', client_secret='...')


Настройка включает регистрацию приложения у провайдера, обработку callback-URL и проверку токенов. Для FastAPI/Django существуют аналогичные решения.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Метод __call__() позволяет экземпляру класса вести себя как функция, вызываясь при обращении к объекту с круглыми скобками. Часто используется для создания вызываемых объектов с сохранением состояния между вызовами.

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


import asyncio

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

task = asyncio.create_task(background_task())


Задачи автоматически добавляются в цикл событий и выполняются без блокировки основного потока.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
👉 Для документации используется docstring — многострочная строка под объявлением функции. Применяют форматы Google, NumPy или reST.


def calculate_sum(a, b):
"""
Adds two numbers and returns the result.

Args:
a (int): First number
b (int): Second number

Returns:
int: Sum of a and b
"""
return a + b


Особенности:
- Доступна через help(calculate_sum) или __doc__
- Автоматически подхватывается IDE и генераторами документации
- Рекомендуется для публичных API и сложной логики

PEP 257 описывает стандарты оформления docstrings.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Локальные переменные объявляются внутри функции и доступны только в её области видимости. Глобальные переменные определяются вне функций, доступны во всем модуле, но для изменения внутри функции требуется ключевое слово global.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
__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
👍7
👉 При использовании 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
👍6
Самый простой способ — преобразовать список в множество (set), которое автоматически удаляет дубликаты, а затем обратно в список. Для сохранения порядка элементов можно использовать dict.fromkeys() или перебор с проверкой вхождения в новый список.

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

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
👍6
➡️ Синтаксис среза: 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
👍9
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
👍7
exec() выполняет переданную строку как код Python (может содержать выражения, циклы, объявления), не возвращая результат. eval() вычисляет только одиночное выражение и возвращает его значение. Обе функции представляют угрозу безопасности при использовании с непроверенными данными.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔵Основные компоненты 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
👍4
Для обновления конкретного пакета:

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

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


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
👍4
Классическая реализация предполагает 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
👍72🔥2
Использовать индексы для часто запрашиваемых полей, избегать N+1 проблемы через select_related или prefetch_related, ограничивать выборку только нужными полями через only() или defer(). Кэшировать результаты тяжелых запросов и анализ slow query log для выявления узких мест.

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