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
NoSQL базы данных делятся на четыре основные категории: документоориентированные (MongoDB, CouchDB), ключ-значение (Redis, DynamoDB), колоночные (Cassandra, HBase) и графовые (Neo4j, ArangoDB). Каждый тип оптимизирован под конкретные сценарии использования, такие как гибкость структуры, высокая скорость чтения/записи или работа со связанными данными.

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


git stash save "Work in progress" # Сохраняет изменения в stash


Основные команды:
- git stash list — показывает список сохранённых stash
- git stash apply — восстанавливает последний stash (без удаления)
- git stash pop — применяет и удаляет последний stash


git stash drop stash@{1} # Удаляет конкретный stash


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

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

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

Получение версии пакета:

import pkg_resources
version = pkg_resources.get_distribution("requests").version


Возвращает текущую версию установленного пакета.

Чтение файлов из пакета:
python  
data = pkg_resources.resource_string("my_package", "data/file.txt")


Загружает содержимое файла file.txt из пакета my_package.

Проверка зависимостей:
python  
dependencies = pkg_resources.require("requests")


Возвращает список зависимостей для указанного пакета.

Модуль полезен для управления ресурсами и зависимостями в проектах.

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Модуль pickle позволяет сериализовать и десериализовать объекты в байтовый поток для сохранения или передачи.

Сериализация объекта в файл:
python  
import pickle

data = {"key": "value"}
with open("data.pkl", "wb") as file:
pickle.dump(data, file)


Записывает объект data в файл в бинарном режиме.

Десериализация из файла:
python  
with open("data.pkl", "rb") as file:
loaded_data = pickle.load(file)


Восстанавливает объект из файла.

Сериализация в строку байт:
python  
bytes_data = pickle.dumps(data)
restored_data = pickle.loads(bytes_data)


Преобразует объект в байты и обратно.

Используется для сохранения состояния объектов или передачи между процессами.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Переменная __all__ в модуле определяет, какие имена будут экспортированы при импорте через from module import *.


__all__ = ['public_func', 'PublicClass']

def public_func():
pass

def _private_func():
pass

class PublicClass:
pass

Только public_func и PublicClass будут доступны при звездочном импорте.

Важные особенности:
- Если __all__ не указан, import * включает все имена, кроме начинающихся с _.
- Влияет только на звездочный импорт, явный импорт (import module) игнорирует __all__.

Полезен для явного контроля публичного API модуля.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN 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