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

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

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
Download 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
👍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
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
👍4
▶️ Python определяет типы переменных во время выполнения, а не компиляции. Одна переменная может менять тип при повторном присваивании:


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


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

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

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
__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
👍4
👉 Для слияния множеств используйте метод 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
👍5
Функция chr() принимает целое число (Unicode-код) и возвращает соответствующий символ в виде строки. Обратная операция выполняется функцией ord(), которая преобразует символ обратно в числовой код.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
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
👍6
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
👍3
Чтение файла в обратном порядке можно выполнить, загрузив его содержимое в память и развернув строки или используя перемещение указателя файла с конца. Для больших файлов эффективнее читать блоки с конца, избегая загрузки всего файла в память.

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