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
Для чтения файла с буферизацией можно использовать стандартную функцию open() без дополнительных параметров, так как буферизация включена по умолчанию. Размер буфера можно регулировать через аргумент buffering, задавая нужное значение в байтах.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод __iter__() возвращает сам итератор, а __next__() возвращает следующий элемент последовательности. При исчерпании элементов вызывается StopIteration.


class Counter:
def __init__(self, limit):
self.current = 0
self.limit = limit

def __iter__(self):
return self

def __next__(self):
if self.current < self.limit:
self.current += 1
return self.current
raise StopIteration


Класс Counter будет выдавать числа от 1 до указанного лимита.

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Для нахождения общих элементов двух множеств используется оператор & или метод intersection().


set1 = {1, 2, 3}
set2 = {2, 3, 4}
result = set1 & set2 # {2, 3}


Альтернативный вариант с методом:

result = set1.intersection(set2) # {2, 3}


Оба способа возвращают новое множество, содержащее только элементы, присутствующие в обоих исходных множествах. Метод intersection() может принимать несколько аргументов для поиска пересечения между несколькими множествами.

Операция выполняется за O(min(len(a), len(b))) в среднем случае.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция hex() преобразует целое число в строку с шестнадцатеричным представлением, начинающимся с префикса 0x. Часто используется для работы с низкоуровневыми данными, адресами памяти или выводом чисел в удобочитаемом HEX-формате.

✈️ 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
Модели создаются как подклассы declarative_base(), с атрибутами через Column(). Каждый атрибут соответствует полю таблицы с указанием типа и параметров.


from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)


- __tablename__ задает имя таблицы в БД
- Типы данных (`Integer`, `String`) определяют формат столбцов
- Параметры вроде primary_key и nullable настраивают ограничения

Модели автоматически создают таблицы при вызове Base.metadata.create_all().

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Тесты должны быть изолированными, предсказуемыми и проверять только одну логическую единицу функционала. Используйте clear naming, arrange-act-assert структуру и моки для внешних зависимостей, чтобы обеспечить стабильность и читаемость тестов.

Оптимальное покрытие включает unit, integration и e2e тесты в пропорции 70/20/10. Тест-кейсы должны быть максимально простыми, быстрыми и фокусироваться на поведении, а не на реализации.


✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Представления в Django — это Python-функции или классы, принимающие web-запросы и возвращающие ответы. Основные типы:


from django.http import HttpResponse
from django.views import View

# Function-based view
def simple_view(request):
return HttpResponse("Hello World")

# Class-based view
class MyView(View):
def get(self, request):
return HttpResponse("GET request")


- FBV (Function-Based Views): Простые функции с ручной обработкой методов запроса
- CBV (Class-Based Views): Переиспользуемые классы с методами для разных HTTP-методов (get, post)
- Всегда принимают request и возвращают HttpResponse (или подклассы)

Дополнительные возможности: декораторы, миксины, встроенные generic-классы для стандартных задач.

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

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


# Использование уникальных ключей идемпотентности
headers = {'Idempotency-Key': 'uuid-string'}
requests.post(url, headers=headers, json=data)


- Idempotency-Key: Клиент генерирует уникальный ключ для операций изменения (POST/PUT/PATCH)
- Серверная валидация: Сервер кеширует ответы по ключу и возвращает их при повторах
- HTTP-методы: GET, PUT, DELETE идемпотентны по спецификации, POST требует доп. обработки

Для критических операций (платежи, транзакции) рекомендуется реализовывать механизм проверки дубликатов на стороне сервера.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Установить пакет через pip install line_profiler, затем декорируйте целевую функцию с помощью @profile и запустите скрипт через kernprof -l -v script.py. Инструмент покажет время выполнения каждой строки кода, включая количество вызовов и время на строку.

Анализ результатов помогает выявить узкие места в производительности, показывая точное время выполнения отдельных операций внутри функции.


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


class Strategy:
def execute(self, data):
pass

class ConcreteStrategyA(Strategy):
def execute(self, data):
return sorted(data)

class Context:
def __init__(self, strategy):
self._strategy = strategy

def execute_strategy(self, data):
return self._strategy.execute(data)


- Strategy: Интерфейс для всех алгоритмов
- ConcreteStrategy: Конкретные реализации алгоритмов
- Context: Класс, использующий стратегию через композицию

Позволяет легко добавлять новые алгоритмы без изменения основного кода.

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

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


max_iterations = 1000
counter = 0
while condition and counter < max_iterations:
counter += 1
# Логика цикла


- Счетчик итераций: Ограничивает максимальное количество выполнений
- Изменяемое условие: Гарантирует выход при изменении ключевых переменных
- Таймаут: Для долгих операций добавляется проверка времени выполнения

Рекомендуется всегда предусматривать четкий критерий завершения и тестировать граничные условия.

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

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

Кортежи занимают меньше памяти и работают быстрее, что делает их предпочтительными для фиксированных данных, а списки лучше подходят для динамических коллекций.


✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Замыкание — это функция, которая запоминает значения из enclosing scope даже после завершения работы внешней функции.


def outer_func(x):
def inner_func(y):
return x + y
return inner_func

closure = outer_func(10)
result = closure(5) # 15


- Внешняя функция (outer_func) принимает параметр x и возвращает вложенную функцию (inner_func)
- Вложенная функция сохраняет доступ к переменной x даже после завершения outer_func
- При вызове closure(5) она использует запомненное значение x=10

Замыкания полезны для создания фабрик функций и сохранения состояния между вызовами.

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

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


class CustomError(Exception):
"""Базовое пользовательское исключение"""
pass

class ValidationError(CustomError):
"""Ошибка валидации с дополнительными атрибутами"""
def __init__(self, message, code):
super().__init__(message)
self.code = code


- Наследование от Exception делает класс полноценным исключением
- Дополнительные параметры (например, code) добавляют контекст обработчику
- Документация (docstring) поясняет назначение исключения

Используется для точной обработки специфичных ошибок приложения.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Для удаления файла используется функция os.remove(), передавая ей путь к файлу в виде строки. Предварительно стоит проверить существование файла через os.path.exists(), чтобы избежать ошибок.

Альтернативно можно использовать pathlib.Path.unlink() для более объектно-ориентированного подхода. Оба метода permanently удаляют файл, поэтому следует соблюдать осторожность.


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


from package.subpackage import module
from package.subpackage.module import specific_function


- Абсолютный импорт указывает полный путь от корня проекта
- Относительный импорт (через точки) возможен внутри пакета:

from .sibling_module import helper


Пакет должен содержать файл __init__.py (может быть пустым) для распознавания его как python-пакета. Импорт выполняется через поиск в sys.path.

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

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


x = False
if not x:
print("Условие выполнено")


Здесь not x превращает False в True, и блок кода выполняется.


value = 10
if not value > 20:
print("Значение не больше 20")


Оператор not применяется к результату сравнения value > 20 (который False), делая условие истинным.


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

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

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


pip install package_name # Установка пакета
pip install package==1.0.0 # Установка конкретной версии
pip uninstall package_name # Удаление пакета
pip list # Список установленных пакетов
pip show package_name # Информация о пакете


Для работы с зависимостями проекта:


pip freeze > requirements.txt # Экспорт зависимостей
pip install -r requirements.txt # Установка из файла


Можно указывать дополнительные опции, например --user для установки в домашнюю директорию или -U для обновления пакета.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод __contains__() определяет поведение оператора in для пользовательских объектов. При вызове x in obj интерпретатор ищет obj.__contains__(x) и возвращает True или False.


class MyContainer:
def __contains__(self, item):
return item in [1, 2, 3]

container = MyContainer()
print(3 in container) # True
print(5 in container) # False


Если __contains__() не реализован, Python использует __iter__() и поочередное сравнение элементов. Метод полезен для создания контейнеров с оптимизированной проверкой вхождения.

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