Python | Вопросы собесов
13.9K subscribers
35 photos
1 file
922 links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky
Download Telegram
🤔 Встроенные функции Python

В Python есть встроенные функции (built-in functions) — это функции, которые можно использовать без импорта. Они делают код проще и удобнее.
Полный список встроенных функций можно посмотреть так:
print(dir(__builtins__))


🚩Основные категории встроенных функций

Работа с числами
print(abs(-5))  # 5
print(round(3.14159, 2)) # 3.14
print(pow(2, 3)) # 8
print(min([3, 1, 4])) # 1


Работа со строками
print(len("hello"))  # 5
print(str(123)) # '123'
print(ord('A')) # 65
print(chr(65)) # 'A'


Работа с коллекциями (списки, кортежи, множества)
a = [3, 1, 2]
print(sorted(a)) # [1, 2, 3]

nums = [1, 2, 3]
names = ["Alice", "Bob", "Charlie"]
print(list(zip(nums, names))) # [(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')]


Работа с логикой и проверками
print(bool(""))  # False
print(all([True, 1, "Hello"])) # True
print(any([0, "", None, 5])) # True (есть хотя бы один True)


Работа с функциями
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, nums))
print(squared) # [1, 4, 9, 16]

evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4]


Работа с файлами
with open("file.txt", "w") as f:
f.write("Hello, world!")

name = input("Введите имя: ")
print("Привет,", name)


Работа с объектами и атрибутами
print(type(42))  # <class 'int'>
print(isinstance(42, int)) # True
print(dir([])) # Методы списка


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151
🤔 Что такое толстые модели в Django?

Это подход в Django, когда бизнес-логика приложения хранится в моделях. Вместо того, чтобы помещать логику в представления (views) или сериализаторы (serializers), её выносят в модели, добавляя:
- Методы для обработки данных
- Логику валидации и вычислений
- Кастомные save() методы


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍2
🤔 Для чего могут применять конструкцию try finally без except?

Конструкция try...finally используется в случаях, когда нужно гарантировать выполнение кода в finally, независимо от того, возникло исключение или нет.

🟠Закрытие файла
Если файл открыт, его нужно закрыть в любом случае, даже если в процессе работы произойдёт ошибка.
try:
file = open("data.txt", "r")
data = file.read()
finally:
print("Закрываем файл...")
file.close() # Файл закроется даже при ошибке


🟠Освобождение ресурсов (например, соединение с базой данных)
Если программа работает с базой данных, соединение нужно закрыть, даже если произошла ошибка.
import sqlite3

conn = sqlite3.connect("database.db")

try:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users") # Ошибка, если таблицы нет
finally:
print("Закрываем соединение с БД...")
conn.close() # Закроет соединение в любом случае


🟠Разблокировка ресурсов (например, файл или поток)
Допустим, есть блокировка файла, которую нужно снять в любом случае.
import threading

lock = threading.Lock()

try:
lock.acquire()
print("Ресурс заблокирован")
# Код, который использует ресурс
finally:
print("Разблокируем ресурс")
lock.release() # Освободит блокировку даже при ошибке


Пример 4: Остановка таймера, даже если произошла ошибка
import time

try:
start_time = time.time()
x = 1 / 0 # Ошибка деления на ноль
finally:
elapsed_time = time.time() - start_time
print(f"Программа выполнялась {elapsed_time:.2f} секунд")


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🤔 Где лучше расположить логику — в моделях или сериализаторе?

Выбор зависит от типа логики:
- В моделях хранят бизнес-логику, связанную с данными (валидация, вычисления, обработка)
- В сериализаторах хранят логику, связанную с API (конвертация данных, валидация полей)
Если логика нужна в нескольких местах, лучше разместить её в моделях.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊10👍3
🤔 В чем отличия pytz от datetime?

🟠`datetime` – встроенный модуль Python
Модуль datetime позволяет работать с датами и временем, но по умолчанию он не поддерживает часовые пояса.
from datetime import datetime

dt = datetime.now() # Получаем текущую дату и время
print(dt) # Например: 2024-02-28 14:30:00.123456
print(dt.tzinfo) # None (нет информации о часовом поясе)


🟠`pytz` – внешний модуль для работы с часовыми поясами
Библиотека pytz добавляет поддержку часовых поясов и позволяет работать с разными временными зонами.
from datetime import datetime
import pytz

tz = pytz.timezone("Europe/Moscow") # Часовой пояс Москвы
dt = datetime.now(tz) # Получаем текущее время с учетом часового пояса

print(dt) # Например: 2024-02-28 17:30:00+03:00
print(dt.tzinfo) # Europe/Moscow


🚩Как работать с часовыми поясами правильно?

Создание datetime с часовым поясом pytz
dt = datetime(2024, 2, 28, 15, 0)  # Наивная дата
tz = pytz.timezone("Europe/Moscow")
dt = tz.localize(dt) # Присваиваем часовой пояс
print(dt) # 2024-02-28 15:00:00+03:00


Конвертация времени между часовыми поясами
ny_tz = pytz.timezone("America/New_York")
ny_time = dt.astimezone(ny_tz)
print(ny_time) # Конвертированное время в Нью-Йорке


Использование UTC (лучший подход для серверов)
utc_now = datetime.now(pytz.UTC)  # Текущее время в UTC
print(utc_now) # Например: 2024-02-28 14:30:00+00:00


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💊3
🤔 Какие есть модели в Django?

Модели представляют структуру базы данных. Основные типы моделей:
- Обычные (models.Model) — стандартные таблицы базы
- Абстрактные (AbstractModel) — базовые классы без создания таблиц
- Proxy-модели — позволяют изменять поведение без изменения схемы
- Many-to-Many модели — используются для связи ManyToManyField
Каждая модель соответствует одной таблице в базе.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍2
🤔 Какие ограничения есть у рекурсии в Python?

Рекурсия — это мощный инструмент, но в Python она имеет ограничения, которые нужно учитывать при написании кода.

🟠Ограничение на глубину рекурсии (`sys.getrecursionlimit()`)
В Python по умолчанию рекурсия ограничена 1000 вызовами, чтобы избежать переполнения стека.
import sys
print(sys.getrecursionlimit()) # 1000 (обычное значение)


Если превысить этот лимит, программа вызовет ошибку
def recursive():
return recursive()

recursive() # RecursionError: maximum recursion depth exceeded


🚩Как изменить лимит?

Можно увеличить глубину рекурсии, но это небезопасно
sys.setrecursionlimit(2000)  # Увеличиваем до 2000


🟠Рекурсия требует много памяти
Каждый рекурсивный вызов создаёт новый фрейм в стеке вызовов.
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)

print(factorial(10000)) # Ошибка из-за переполнения стека


🟠Отсутствие оптимизации хвостовой рекурсии
Другие языки (например, Lisp, JavaScript) автоматически оптимизируют хвостовую рекурсию (Tail Call Optimization, TCO).
Python не делает этого, поэтому даже "идеальная" рекурсия всё равно переполняет стек.
def tail_recursive(n, acc=1):
if n == 1:
return acc
return tail_recursive(n - 1, n * acc)

print(tail_recursive(1000)) # Всё равно вызовет RecursionError


🟠Рекурсия медленнее цикла
Рекурсивный вызов требует больше накладных расходов (создание стек-фреймов), чем обычный for или while.
# Итеративный вариант (быстрее)
def factorial_iter(n):
result = 1
for i in range(1, n + 1):
result *= i
return result

# Рекурсивный вариант (медленнее)
def factorial_rec(n):
if n == 1:
return 1
return n * factorial_rec(n - 1)


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💊2
🤔 Что такое models в Django?

Это основа Django ORM. Это Python-классы, которые представляют таблицы базы данных. Внутри моделей определяются поля, методы и связи между объектами. Django автоматически создаёт SQL-запросы на основе моделей.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2
🤔 В чем отличие @foobar от @foobar()?

В Python @ используется для декораторов, и разница между @foobar и @foobar() заключается в том, вызывается ли сам декоратор с параметрами или без.

🟠`@foobar` — декоратор без вызова
Если мы пишем @foobar, то используется сам декоратор как есть, без передачи аргументов.
def foobar(func):
def wrapper():
print("Декоратор вызван!")
return func()
return wrapper

@foobar # Просто передаём функцию в декоратор
def hello():
print("Hello, world!")

hello()


Вывод
Декоратор вызван!
Hello, world!


🟠`@foobar()` — декоратор с вызовом (и параметрами)
Если декоратор принимает параметры, то он сначала вызывается (foobar()), а потом возвращает сам декоратор.
def foobar(arg):
def decorator(func):
def wrapper():
print(f"Декоратор вызван с аргументом: {arg}")
return func()
return wrapper
return decorator

@foobar("Привет") # Вызываем foobar("Привет"), который вернёт реальный декоратор
def hello():
print("Hello, world!")

hello()


Вывод
Декоратор вызван с аргументом: Привет
Hello, world!


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13💊6
🤔 Как создать объект в Django ORM?

Создание объекта можно выполнить через:
- Метод create() — Model.objects.create(name="Example")
- Создание экземпляра и save() —
- obj = Model(name="Example")
-
obj.save()
- Использование get_or_create() — создаёт объект, если он отсутствует
ORM Django упрощает взаимодействие с базой, используя Python-классы вместо SQL-запросов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Forwarded from easyoffer
На easyoffer 2.0 появится:
🎯 Тренажер "Проработка вопросов"

Метод интервальных повторений и флеш-карточки
Персональный подход изучения на основе ваших ответов
Упор на самые частые вопросы

📌 Интервальные повторения по карточкам это научно доказанный метод эффективного обучения. Каждая карточка – это вопрос, который задают на собеседовании, вы можете выбрать "Не знаю", "Знаю", "Не спрашивать". После ответа вам показывается правильный ответ и возможность изучить вопрос подробнее (примеры ответов других людей). От ваших ответов зависит то, как часто карточки будут показываться на следующей тренировке. Трудные вопросы показываются чаще, простые – реже. Это позволяет бить в слабые места. Кроме того, изначальный порядок карточек зависит от частотности (вероятности встретить вопрос).

🚀 Благодаря этому тренажеру вы сможете очень быстро подготовиться к собеседованию, т.к. фокусируетесь отвечать на самые частые вопросы. Именно так готовился я сам, когда искал первую работу программистом.

Уже в течение недели я объявлю о старте краудфандинговой кампании на сбор финансирования, чтобы ускорить разработку сайта. Все кто поддержит проект до официального релиза получат самые выгодные условия пользования сервисом. А именно 1 год доступа к сайту по цене месячной подписки.

‼️ Очень важно, чтобы как можно больше людей поддержали проект в первые дни, по-этому те кто окажет поддержку первыми получат еще более выгодную стоимость на годовую подписку и существенный 💎 бонус о котором я позже расскажу в этом телеграм канале. Подписывайтесь, чтобы узнать о старте проекта раньше других и воспользоваться лимитированными вознаграждениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое type?

В Python type — это встроенная функция и метакласс, который:
Определяет тип объекта (type(obj)).
Создаёт новые классы динамически (type(name, bases, attrs)).

🟠1. `type(obj)`: Определение типа объекта
Функция type(obj) возвращает класс (тип) объекта.
print(type(42))         # <class 'int'>
print(type("hello")) # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>

if type(42) is int:
print("Это целое число!")


🟠`type(name, bases, attrs)`: Создание класса динамически
Функция type может создавать новые классы "на лету".
MyClass = type("MyClass", (object,), {"x": 10, "hello": lambda self: "Hello!"})

obj = MyClass()
print(obj.x) # 10
print(obj.hello()) # Hello!


🟠`type` как метакласс
В Python type — это метакласс для всех классов, то есть классы тоже являются объектами type.
class A:
pass

print(type(A)) # <class 'type'>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какая разница в быстродействии между Django и Flask (и почему)?

Flask обычно быстрее Django, потому что он легковеснее и не имеет встроенных "тяжелых" компонентов (ORM, middleware, шаблонизатора). Django включает больше абстракций, что замедляет работу, но облегчает разработку.
Однако на больших проектах разница минимальна, так как основной фактор скорости – база данных, кэширование и архитектура.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3💊2
🤔 Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение?

Если нужно:
Перехватить исключение
Выполнить какие-то действия (лог, очистка, уведомление и т. д.)
Снова выбросить это же исключение
try:
x = 1 / 0 # Ошибка деления на ноль
except ZeroDivisionError:
print("Ошибка! Записываем в лог...")
raise # Повторно выбрасываем то же исключение


Вывод
Ошибка! Записываем в лог...
Traceback (most recent call last):
File "script.py", line 2, in <module>
x = 1 / 0
ZeroDivisionError: division by zero


Пример: Логирование перед повторным выбросом
import logging

logging.basicConfig(filename="errors.log", level=logging.ERROR)

try:
user_input = int("abc") # Ошибка ValueError
except ValueError as e:
logging.error(f"Ошибка: {e}") # Записываем в лог
raise # Повторно выбрасываем исключение


Пример: Очистка ресурсов перед выбросом исключения
try:
file = open("data.txt", "r")
data = file.read()
except FileNotFoundError:
print("Файл не найден. Освобождаем ресурсы...")
raise # Снова выбрасываем исключение
finally:
file.close() # Гарантированно закроет файл


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Как в Django работает система аутентификации?

Имеет встроенную систему аутентификации, которая:
- Управляет пользователями, группами, разрешениями.
- Использует User-модель, которую можно расширять (AbstractUser, AbstractBaseUser).
- Поддерживает аутентификацию по паролю, cookies, токенам (DRF), соцсетям (OAuth).
- Предоставляет login, logout, authenticate, is_authenticated.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6
🤔 Что такое многопоточность/многопроцессорность?

В программировании многопоточность и многопроцессорность помогают выполнять задачи параллельно, но работают по-разному.

🟠Многопоточность (Multithreading)
Многопоточность позволяет одной программе запускать несколько потоков (threads), которые работают одновременно.
import threading
import time

def task(name):
print(f"{name} начал работу")
time.sleep(2)
print(f"{name} завершил работу")

# Создаём два потока
t1 = threading.Thread(target=task, args=("Поток 1",))
t2 = threading.Thread(target=task, args=("Поток 2",))

t1.start()
t2.start()

t1.join()
t2.join()
print("Все потоки завершены")


Вывод
Поток 1 начал работу
Поток 2 начал работу
Поток 1 завершил работу
Поток 2 завершил работу
Все потоки завершены


🟠2. Многопроцессорность (Multiprocessing)
Многопроцессорность запускает отдельные процессы, которые работают полностью независимо и могут использовать разные ядра процессора.
import multiprocessing
import time

def task(name):
print(f"{name} начал работу")
time.sleep(2)
print(f"{name} завершил работу")

if __name__ == "__main__":
p1 = multiprocessing.Process(target=task, args=("Процесс 1",))
p2 = multiprocessing.Process(target=task, args=("Процесс 2",))

p1.start()
p2.start()

p1.join()
p2.join()
print("Все процессы завершены")


Вывод (процессы действительно работают параллельно)
Процесс 1 начал работу
Процесс 2 начал работу
Процесс 1 завершил работу
Процесс 2 завершил работу
Все процессы завершены


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13💊1
🤔 Для чего используют Pydantic в FastAPI?

Pydantic в FastAPI используется для:
- Валидации данных – автоматически проверяет и преобразует входные данные.
- Автоматической генерации OpenAPI-схем.
- Удобного управления моделями – типизация улучшает читаемость и отладку.
Он заменяет Django Forms/Serializers, но работает быстрее благодаря Cython.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2
Forwarded from easyoffer
На easyoffer 2.0 появится новый раздел:
Задачи с собеседований

🟠Задачи на Алгоритмические, Live-coding и System Design из реальных собеседований
🟠Вероятность встретить ту или иную задачу
🟠Возможность подготовиться к задачам конкретной компании

Есть много сайтов, на которых можно тренироваться решать задачи, но у них у всех одна проблема – сами задачи люди просто выдумывают. На easyoffer 2.0 вы сможете готовиться к live-coding и system design секциям на основе задач из реальных собеседований. Вы можете найдете самые частые задачи и сделаете упор на их решение.

Считаные дни остались до старта краудфандинговой кампании, чтобы ускорить разработку easyoffer 2.0. Все кто, поддержал проект на этом этапе смогу получить 1 год доступа к сайту по цене месячной подписки, а те кто поддержат проект раньше других ито дешевле + получат существенный бонус. Следите за стартом 👉 в этом телеграм канале.
Please open Telegram to view this post
VIEW IN TELEGRAM
2💊2🤔1
🤔 Что такое git stash?

git stash — это команда в Git, которая сохраняет незакоммиченные изменения во временное хранилище (stash) и очищает рабочую директорию.

🚩Когда это полезно?

Нужно переключиться на другую ветку, но есть незаконченные изменения. Хочешь сохранить текущую работу, но не коммитить её. Нужно экспериментировать, но без риска потерять код.

🚩Как использовать `git stash`?

Сохранить изменения в stash
git stash


Посмотреть список сохранённых изменений
git stash list


Выведет список всех stash-ов
stash@{0}: WIP on main: 1234567 Добавил новую фичу
stash@{1}: WIP on dev: 89abcde Исправил баг


Восстановить сохранённые изменения
git stash pop  # Восстановит изменения и удалит stash


ИЛИ
git stash apply  # Восстановит, но stash останется в списке


Удалить stash после применения
git stash drop stash@{0}  # Удалит конкретный stash
git stash clear # Удалит все stash'и


🚩Пример использования

Сценарий
- Ты работаешь в ветке main, но нужно срочно переключиться на dev.
- У тебя есть изменения, которые ты не хочешь коммитить.
Решение
git stash          # Сохраняем изменения
git checkout dev # Переключаемся на другую ветку
# Делаем нужную работу...
git checkout main # Возвращаемся в основную ветку
git stash pop # Восстанавливаем изменения


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥4
🤔 Как бы отнесся к смене Django на Flask?

Зависит от задачи. Flask хорош для легковесных API, но Django упрощает разработку полноценных приложений благодаря встроенным компонентам (ORM, Admin, Auth). Если нужен гибкий API, Flask – отличная альтернатива.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7🤯2💊2