CRUD — это набор базовых операций над данными:
C — Create (создание)
R — Read (чтение)
U — Update (обновление)
D — Delete (удаление)
Эти операции лежат в основе работы большинства приложений и баз данных.
🐍Вопросы с собесов -> ProstoPython
C — Create (создание)
R — Read (чтение)
U — Update (обновление)
D — Delete (удаление)
Эти операции лежат в основе работы большинства приложений и баз данных.
🐍Вопросы с собесов -> ProstoPython
👍4
⏱️ 1 минута о Python — setdefault()
Когда нужно добавить элемент в словарь, но при этом не перезаписать существующее значение — многие пишут вот так:
Работает, но выглядит громоздко.
Python умеет проще 😎
⭐️ setdefault()
Метод, который возвращает значение по ключу,
а если ключа нет — создаёт его с дефолтом.
⚡️ Пример
Результат:
🧠 Почему это удобно?
🔷Избавляет от лишних проверок
🔷Позволяет «лениво» создавать списки, словари и даже сложные структуры
🔷Снижает количество кода и повышает читаемость
🐍Вопросы с собесов -> ProstoPython
Когда нужно добавить элемент в словарь, но при этом не перезаписать существующее значение — многие пишут вот так:
if key not in data:
data[key] = []
data[key].append(value)
Работает, но выглядит громоздко.
Python умеет проще 😎
⭐️ setdefault()
Метод, который возвращает значение по ключу,
а если ключа нет — создаёт его с дефолтом.
⚡️ Пример
data = {}
data.setdefault("users", []).append("Alice")
data.setdefault("users", []).append("Bob")
print(data)Результат:
{"users": ["Alice", "Bob"]}🧠 Почему это удобно?
🔷Избавляет от лишних проверок
🔷Позволяет «лениво» создавать списки, словари и даже сложные структуры
🔷Снижает количество кода и повышает читаемость
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
❤6
GET не предназначен для передачи тела запроса, а значит отправить файл через GET невозможно.
Вот истинное положение дел:
❌ GET не может отправлять файл
У GET нет тела (body) — оно игнорируется большинством серверов и библиотек.
Поэтому файл нельзя вложить в GET так же, как в POST/PUT.
🐍Вопросы с собесов -> ProstoPython
Вот истинное положение дел:
❌ GET не может отправлять файл
У GET нет тела (body) — оно игнорируется большинством серверов и библиотек.
Поэтому файл нельзя вложить в GET так же, как в POST/PUT.
🐍Вопросы с собесов -> ProstoPython
🔥4
🧰 Code Cleanup — выпуск 4
Тема: избавляемся от лишних условий в return
Нередко можно встретить такой код — он работает, но выглядит как будто автор очень старался усложнить простую вещь 😅
❌ До (типичное "если да — верни True")
Работает? Да.
Но логика избыточная: Python умеет проще.
✅ После (коротко и по делу)
Почему так лучше:
🔹 меньше кода — меньше ошибок
🔹 читатель сразу видит условие, а не структуру из if/else
🔹 легче поддерживать и тестировать
🐍Вопросы с собесов -> ProstoPython
Тема: избавляемся от лишних условий в return
Нередко можно встретить такой код — он работает, но выглядит как будто автор очень старался усложнить простую вещь 😅
❌ До (типичное "если да — верни True")
def is_adult(age):
if age >= 18:
return True
else:
return False
Работает? Да.
Но логика избыточная: Python умеет проще.
✅ После (коротко и по делу)
def is_adult(age):
return age >= 18
Почему так лучше:
🔹 меньше кода — меньше ошибок
🔹 читатель сразу видит условие, а не структуру из if/else
🔹 легче поддерживать и тестировать
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
Apache Kafka — это платформа для потоковой передачи данных, которая используется для:
🔹 обмена сообщениями между сервисами
🔹 обработки данных в реальном времени
🔹 буферизации нагрузки
🔹 надёжного хранения и повторного чтения событий
Итог: обеспечивает быстрый, масштабируемый и устойчивый обмен данными.
🐍Вопросы с собесов -> ProstoPython
🔹 обмена сообщениями между сервисами
🔹 обработки данных в реальном времени
🔹 буферизации нагрузки
🔹 надёжного хранения и повторного чтения событий
Итог: обеспечивает быстрый, масштабируемый и устойчивый обмен данными.
🐍Вопросы с собесов -> ProstoPython
🔥3
🧰 Code Cleanup — выпуск 5
Тема: превращаем длинные проверки в понятные конструкции
Часто в коде встречаются такие монстры:
длинное условие, которое занимает три строки, и ты уже забыл, что проверяешь к концу выражения 😅
❌ До (условие, которое путает мозг):
Нет, оно не плохое.
Но читать такое — страдание.
✅ После (логика та же, читаемость лучше):
Что изменилось:
🔹 разбили логику на смысловые блоки
🔹 вынесли роли в отдельную структуру → проще поддерживать
🔹 избавились от «простыни» внутри одного if
🔹 вернули булево выражение напрямую (без громоздких if/else)
🐍Вопросы с собесов -> ProstoPython
Тема: превращаем длинные проверки в понятные конструкции
Часто в коде встречаются такие монстры:
длинное условие, которое занимает три строки, и ты уже забыл, что проверяешь к концу выражения 😅
❌ До (условие, которое путает мозг):
def can_access(user):
if user is not None and user.is_active and not user.is_banned and user.role in ["admin", "moderator"]:
return True
return False
Нет, оно не плохое.
Но читать такое — страдание.
✅ После (логика та же, читаемость лучше):
def can_access(user):
if not user:
return False
allowed_roles = {"admin", "moderator"}
return (
user.is_active
and not user.is_banned
and user.role in allowed_roles
)
Что изменилось:
🔹 разбили логику на смысловые блоки
🔹 вынесли роли в отдельную структуру → проще поддерживать
🔹 избавились от «простыни» внутри одного if
🔹 вернули булево выражение напрямую (без громоздких if/else)
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🏆4
🧰 Code Cleanup — выпуск 6
Тема: убираем дублирование и повторяющиеся конструкции
Один из частых анти-паттернов — одинаковые куски кода, разбросанные по функции.
Работает? Да.
Но поддерживать такое — мучение 😵💫
❌ До (копируем одну и ту же логику три раза):
Каждый блок делает одно и то же.
Это прямой сигнал: пора вынести повторение в отдельную функцию.
✅ После (коротко, чисто, понятно):
Что изменилось:
🔹 повторяющаяся логика вынесена в отдельную функцию
🔹 меньше кода — больше смысла
🔹 легко переиспользовать и расширять
🔹 структура format_user стала читабельной
🐍Вопросы с собесов -> ProstoPython
Тема: убираем дублирование и повторяющиеся конструкции
Один из частых анти-паттернов — одинаковые куски кода, разбросанные по функции.
Работает? Да.
Но поддерживать такое — мучение 😵💫
❌ До (копируем одну и ту же логику три раза):
def format_user(user):
if user.name:
name = user.name.strip().title()
else:
name = "Unknown"
if user.email:
email = user.email.strip().lower()
else:
email = "no-email"
if user.city:
city = user.city.strip().title()
else:
city = "N/A"
return {"name": name, "email": email, "city": city}
Каждый блок делает одно и то же.
Это прямой сигнал: пора вынести повторение в отдельную функцию.
✅ После (коротко, чисто, понятно):
def normalize(value, default, transform=str):
if not value:
return default
return transform(value.strip())
def format_user(user):
return {
"name": normalize(user.name, "Unknown", str.title),
"email": normalize(user.email, "no-email", str.lower),
"city": normalize(user.city, "N/A", str.title),
}
Что изменилось:
🔹 повторяющаяся логика вынесена в отдельную функцию
🔹 меньше кода — больше смысла
🔹 легко переиспользовать и расширять
🔹 структура format_user стала читабельной
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥3
В заголовках (headers) могут содержаться:
📌 Метаданные запроса и ответа
— тип контента (Content-Type)
— длина тела (Content-Length)
— кодировка (Content-Encoding)
📌 Информация о клиенте и сервере
— User-Agent
— Server
— Host
📌 Аутентификация и безопасность
— Authorization
— Cookie
— Set-Cookie
📌 Кэширование и контроль времени
— Cache-Control
— Expires
— ETag
📌 Параметры соединения
— Connection
— Keep-Alive
Заголовки передают служебную информацию, необходимую для корректной обработки HTTP-запросов и ответов.
🐍Вопросы с собесов -> ProstoPython
📌 Метаданные запроса и ответа
— тип контента (Content-Type)
— длина тела (Content-Length)
— кодировка (Content-Encoding)
📌 Информация о клиенте и сервере
— User-Agent
— Server
— Host
📌 Аутентификация и безопасность
— Authorization
— Cookie
— Set-Cookie
📌 Кэширование и контроль времени
— Cache-Control
— Expires
— ETag
📌 Параметры соединения
— Connection
— Keep-Alive
Заголовки передают служебную информацию, необходимую для корректной обработки HTTP-запросов и ответов.
🐍Вопросы с собесов -> ProstoPython
🔥4
🧰 Code Cleanup — выпуск 7
Тема: упрощаем вложенные условия
Часто можно встретить код с кучей вложенных if, который работает, но читается как лабиринт 😅
❌ До (слишком много уровней вложенности):
Работает? Да.
Но читается плохо и сложно поддерживать.
✅ После (питонично и читабельно):
Что изменилось:
🔹 убрали лишние уровни вложенности
🔹 сразу проверяем условия, при которых функция не должна работать (guard clause)
🔹 код стал компактным, читаемым и понятным с первого взгляда
🐍Вопросы с собесов -> ProstoPython
Тема: упрощаем вложенные условия
Часто можно встретить код с кучей вложенных if, который работает, но читается как лабиринт 😅
❌ До (слишком много уровней вложенности):
def process_order(order):
if order is not None:
if order.items:
if order.user.is_active:
print("Processing order")
Работает? Да.
Но читается плохо и сложно поддерживать.
✅ После (питонично и читабельно):
def process_order(order):
if not order or not order.items or not order.user.is_active:
return
print("Processing order")
Что изменилось:
🔹 убрали лишние уровни вложенности
🔹 сразу проверяем условия, при которых функция не должна работать (guard clause)
🔹 код стал компактным, читаемым и понятным с первого взгляда
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
Шардирование — это метод горизонтального масштабирования базы данных, при котором большая база данных разделяется на несколько более мелких, независимых частей (шардов), каждая из которых хранится на отдельном сервере.
Цель: распределить нагрузку, повысить производительность и обеспечить масштабируемость системы за счет добавления новых серверов вместо использования одного мощного.
🐍Вопросы с собесов -> ProstoPython
Цель: распределить нагрузку, повысить производительность и обеспечить масштабируемость системы за счет добавления новых серверов вместо использования одного мощного.
🐍Вопросы с собесов -> ProstoPython
🔥4
💬 Вопрос на собесе:
В чём разница между асинхронностью, многопоточностью и мультипроцессингом?
👶 Junior:
— Эм… ну… это всё про параллельность? Или что-то в этом духе?.. 😅
🧑💻 Middle:
— Многопоточность — это когда несколько потоков выполняются внутри одного процесса.
Асинхронность — когда задачи переключаются без блокировок, но не обязательно выполняются одновременно.
Мультипроцессинг — это запуск нескольких процессов, которые могут работать параллельно на разных ядрах.
🧙♂️ Senior:
— Эти три подхода решают разные задачи и работают по-разному:
🔹 Асинхронность (asyncio)
— основана на неблокирующем вводе-выводе и цикле событий.
— идеально для I/O-bound задач: сетевые запросы, файлы, БД.
— код выполняется поочерёдно, но эффективно переключается между задачами, не простаивая.
🔹 Многопоточность (threading)
— работает внутри одного процесса, создаёт несколько потоков.
— в Python ограничена GIL, поэтому не даёт реального параллелизма для CPU-bound задач.
— отлично подходит для I/O-bound задач и задач с большим числом ожиданий.
🔹 Мультипроцессинг (multiprocessing)
— создаёт несколько процессов, каждый со своим интерпретатором Python.
— обходит GIL, поэтому обеспечивает настоящий параллелизм.
— идеально для CPU-bound задач: вычисления, обработка изображений, ML, тяжёлые операции.
💡 Кратко:
Асинхронность — переключение между задачами.
Многопоточность — параллельная работа потоков в одном процессе (но GIL мешает).
Мультипроцессинг — настоящий параллелизм на уровне процессов.
🐍Вопросы с собесов -> ProstoPython
В чём разница между асинхронностью, многопоточностью и мультипроцессингом?
👶 Junior:
— Эм… ну… это всё про параллельность? Или что-то в этом духе?.. 😅
🧑💻 Middle:
— Многопоточность — это когда несколько потоков выполняются внутри одного процесса.
Асинхронность — когда задачи переключаются без блокировок, но не обязательно выполняются одновременно.
Мультипроцессинг — это запуск нескольких процессов, которые могут работать параллельно на разных ядрах.
🧙♂️ Senior:
— Эти три подхода решают разные задачи и работают по-разному:
🔹 Асинхронность (asyncio)
— основана на неблокирующем вводе-выводе и цикле событий.
— идеально для I/O-bound задач: сетевые запросы, файлы, БД.
— код выполняется поочерёдно, но эффективно переключается между задачами, не простаивая.
🔹 Многопоточность (threading)
— работает внутри одного процесса, создаёт несколько потоков.
— в Python ограничена GIL, поэтому не даёт реального параллелизма для CPU-bound задач.
— отлично подходит для I/O-bound задач и задач с большим числом ожиданий.
🔹 Мультипроцессинг (multiprocessing)
— создаёт несколько процессов, каждый со своим интерпретатором Python.
— обходит GIL, поэтому обеспечивает настоящий параллелизм.
— идеально для CPU-bound задач: вычисления, обработка изображений, ML, тяжёлые операции.
💡 Кратко:
Асинхронность — переключение между задачами.
Многопоточность — параллельная работа потоков в одном процессе (но GIL мешает).
Мультипроцессинг — настоящий параллелизм на уровне процессов.
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
Оптимистичная и пессимистичная блокировки — это два подхода к контролю конкурентного доступа к данным.
🔷 Пессимистичная блокировка
Считает, что конфликты обязательно произойдут.
Поэтому данные блокируются сразу, как только пользователь начинает их читать или изменять.
Другие запросы ждут освобождения блокировки.
Подходит для систем с высокой конкуренцией.
🔷 Оптимистичная блокировка
Считает, что конфликты редки.
Данные не блокируются заранее — каждый работает со своей копией.
Перед записью проверяется версия записи; если она изменилась, обновление отклоняется.
Подходит для масштабируемых систем с редкими конфликтами.
🐍Вопросы с собесов -> ProstoPython
🔷 Пессимистичная блокировка
Считает, что конфликты обязательно произойдут.
Поэтому данные блокируются сразу, как только пользователь начинает их читать или изменять.
Другие запросы ждут освобождения блокировки.
Подходит для систем с высокой конкуренцией.
🔷 Оптимистичная блокировка
Считает, что конфликты редки.
Данные не блокируются заранее — каждый работает со своей копией.
Перед записью проверяется версия записи; если она изменилась, обновление отклоняется.
Подходит для масштабируемых систем с редкими конфликтами.
🐍Вопросы с собесов -> ProstoPython
👍4
🧰 Code Cleanup — выпуск 8
Тема: избавляемся от лишних временных переменных
Иногда разработчики создают кучу временных переменных, чтобы просто вернуть результат.
Работает? Да.
Читается? Не всегда 😅
❌ До (много лишнего):
Здесь мы создаём две переменные, хотя можем обойтись одной.
✅ После (коротко и понятно):
Что изменилось:
🔹 убрали временные переменные
🔹 выражение стало сразу читабельным
🔹 код компактнее и проще поддерживать
🐍Вопросы с собесов -> ProstoPython
Тема: избавляемся от лишних временных переменных
Иногда разработчики создают кучу временных переменных, чтобы просто вернуть результат.
Работает? Да.
Читается? Не всегда 😅
❌ До (много лишнего):
def square_positive(x):
result = x * x
is_positive = result > 0
return is_positive
Здесь мы создаём две переменные, хотя можем обойтись одной.
✅ После (коротко и понятно):
def square_positive(x):
return x * x > 0
Что изменилось:
🔹 убрали временные переменные
🔹 выражение стало сразу читабельным
🔹 код компактнее и проще поддерживать
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
⏱️ 1 минута о Python
Тема: Что делает оператор walrus (:=)?
Оператор «морж» появился в Python 3.8 и позволяет присваивать значение прямо внутри выражения. Это уменьшает количество дублирующих вызовов и делает код компактнее 🦭💛
❌ До (длиннее):
✅ После (короче и элегантнее):
💡 Когда walrus полезен
🔷когда одно и то же выражение используется несколько раз
🔷когда нужно получить и проверить значение в одной строке
🔷когда хочется сделать цикл лаконичным
🐍Вопросы с собесов -> ProstoPython
Тема: Что делает оператор walrus (:=)?
Оператор «морж» появился в Python 3.8 и позволяет присваивать значение прямо внутри выражения. Это уменьшает количество дублирующих вызовов и делает код компактнее 🦭💛
❌ До (длиннее):
value = input("Введите число: ")
if value.isdigit():
print("Это число:", value)✅ После (короче и элегантнее):
if (value := input("Введите число: ")).isdigit():
print("Это число:", value)💡 Когда walrus полезен
🔷когда одно и то же выражение используется несколько раз
🔷когда нужно получить и проверить значение в одной строке
🔷когда хочется сделать цикл лаконичным
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥5
Ключом в словаре может быть любой неизменяемый (hashable) объект:
🔹 строки
🔹 числа
🔹 кортежи (если внутри тоже только неизменяемые объекты)
🔹 frozenset
🔹 булевые значения
❗️ Нельзя использовать изменяемые типы: список, словарь, множество.
🐍Вопросы с собесов -> ProstoPython
🔹 строки
🔹 числа
🔹 кортежи (если внутри тоже только неизменяемые объекты)
🔹 frozenset
🔹 булевые значения
❗️ Нельзя использовать изменяемые типы: список, словарь, множество.
🐍Вопросы с собесов -> ProstoPython
👍4
🧰 Code Cleanup — выпуск 9
Тема: избавляемся от лишних условий
Иногда в коде встречаются условные конструкции, которые по факту ничего не делают — просто оборачивают очевидный результат.
Работает? Конечно.
Но читаемость страдает 😅
❌ До (лишняя вложенность):
Здесь if/else возвращает булевое выражение, которое можно вернуть напрямую.
✅ После (коротко и очевидно):
Что изменилось:
🔹 убрали ненужный if/else
🔹 избавились от визуального шума
🔹 функция стала лаконичной и читабельной
🐍Вопросы с собесов -> ProstoPython
Тема: избавляемся от лишних условий
Иногда в коде встречаются условные конструкции, которые по факту ничего не делают — просто оборачивают очевидный результат.
Работает? Конечно.
Но читаемость страдает 😅
❌ До (лишняя вложенность):
def is_adult(age):
if age >= 18:
return True
else:
return False
Здесь if/else возвращает булевое выражение, которое можно вернуть напрямую.
✅ После (коротко и очевидно):
def is_adult(age):
return age >= 18
Что изменилось:
🔹 убрали ненужный if/else
🔹 избавились от визуального шума
🔹 функция стала лаконичной и читабельной
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥4
💬 Вопрос на собесе:
Как обеспечить бесперебойную работу сервиса CI/CD?
👶 Junior:
— Ну… надо, чтобы сервер не падал? И чтобы пайплайны сами запускались… 🤔
🧑💻 Middle:
— Нужно настроить резервирование, мониторинг и автоматический перезапуск пайплайнов.
Важно следить за нагрузкой, логами и быстро реагировать на сбои.
🧙♂️ Senior:
— Бесперебойная работа CI/CD — это не один инструмент, а набор практик и архитектурных решений:
🔹 Отказоустойчивость
— развёртывание CI/CD в нескольких инстансах или нодах
— использование load balancer’ов
— хранение состояния и артефактов во внешнем хранилище (S3, NFS, Artifactory)
🔹 Изоляция и масштабирование
— запуск билдов в контейнерах (Docker, Kubernetes)
— горизонтальное масштабирование executors/agents
— лимиты ресурсов для пайплайнов
🔹 Монинг и алерты
— метрики (CPU, память, очередь билдов, время выполнения)
— алерты на падения, зависшие джобы и рост очереди
— централизованные логи
🔹 Автовосстановление
— автоматический перезапуск агентов
— healthchecks
— инфраструктура как код (Terraform, Helm)
🔹 Минимизация single point of failure
— бэкапы конфигураций и secrets
— репликация БД
— независимость runners от master-узла
🐍Вопросы с собесов -> ProstoPython
Как обеспечить бесперебойную работу сервиса CI/CD?
👶 Junior:
— Ну… надо, чтобы сервер не падал? И чтобы пайплайны сами запускались… 🤔
🧑💻 Middle:
— Нужно настроить резервирование, мониторинг и автоматический перезапуск пайплайнов.
Важно следить за нагрузкой, логами и быстро реагировать на сбои.
🧙♂️ Senior:
— Бесперебойная работа CI/CD — это не один инструмент, а набор практик и архитектурных решений:
🔹 Отказоустойчивость
— развёртывание CI/CD в нескольких инстансах или нодах
— использование load balancer’ов
— хранение состояния и артефактов во внешнем хранилище (S3, NFS, Artifactory)
🔹 Изоляция и масштабирование
— запуск билдов в контейнерах (Docker, Kubernetes)
— горизонтальное масштабирование executors/agents
— лимиты ресурсов для пайплайнов
🔹 Монинг и алерты
— метрики (CPU, память, очередь билдов, время выполнения)
— алерты на падения, зависшие джобы и рост очереди
— централизованные логи
🔹 Автовосстановление
— автоматический перезапуск агентов
— healthchecks
— инфраструктура как код (Terraform, Helm)
🔹 Минимизация single point of failure
— бэкапы конфигураций и secrets
— репликация БД
— независимость runners от master-узла
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
✅ Да, классы можно декорировать.
🔹 Декоратор класса — это функция или объект, который принимает класс
🔹 Может изменять класс: добавлять методы и атрибуты
🔹 Возвращает тот же или новый класс
👉 Декораторы классов используются для расширения и настройки поведения класса без изменения его исходного кода.
🐍Вопросы с собесов -> ProstoPython
🔹 Декоратор класса — это функция или объект, который принимает класс
🔹 Может изменять класс: добавлять методы и атрибуты
🔹 Возвращает тот же или новый класс
👉 Декораторы классов используются для расширения и настройки поведения класса без изменения его исходного кода.
🐍Вопросы с собесов -> ProstoPython
🔥4
🧰 Code Cleanup — выпуск 10
Тема: убираем “магические числа” из кода
Если в коде встречается такое — стоит насторожиться 👇
Через месяц ты смотришь и думаешь:
почему 3? кто решил? это бизнес-логика или случайно? 😵💫
❌ До (магическое число прямо в коде):
✅ После (говорим кодом понятно):
🧹 Что улучшили:
🔹 код стал самодокументируемым
🔹 правка логики = изменение одной строки
🔹 меньше риска случайных ошибок
🔹 проще обсуждать бизнес-правила с командой
🐍Вопросы с собесов -> ProstoPython
Тема: убираем “магические числа” из кода
Если в коде встречается такое — стоит насторожиться 👇
if attempts > 3:
block_user()
Через месяц ты смотришь и думаешь:
почему 3? кто решил? это бизнес-логика или случайно? 😵💫
❌ До (магическое число прямо в коде):
def can_login(attempts):
return attempts <= 3
✅ После (говорим кодом понятно):
MAX_LOGIN_ATTEMPTS = 3
def can_login(attempts):
return attempts <= MAX_LOGIN_ATTEMPTS
🧹 Что улучшили:
🔹 код стал самодокументируемым
🔹 правка логики = изменение одной строки
🔹 меньше риска случайных ошибок
🔹 проще обсуждать бизнес-правила с командой
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍3🏆1
Чтобы собрать Docker-образ, используют команду:
🔹
🔹
🔹 Docker читает
В результате появляется готовый Docker-образ, который можно запускать.
🐍Вопросы с собесов -> ProstoPython
docker build -t имя_образа .
🔹
-t задаёт имя (и при желании тег) образа🔹
. указывает на каталог с Dockerfile🔹 Docker читает
Dockerfile, выполняет инструкции и создаёт образВ результате появляется готовый Docker-образ, который можно запускать.
🐍Вопросы с собесов -> ProstoPython
👍3🏆2