Python | Вопросы собесов
13.6K subscribers
37 photos
2 videos
1 file
1.12K links
Download Telegram
🤔 Что такое диапазон?

Диапазон (range) — это ленивый объект, представляющий собой последовательность чисел. Он часто используется в циклах и экономит память по сравнению со списками.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊3👍1
🤔 Что такое циклы?

Циклы — это конструкции, которые позволяют многократно выполнять код, пока выполняется определённое условие.
В Python есть два типа циклов:

for — перебирает элементы последовательности (list, tuple, dict, range() и т. д.).
while — выполняется, пока условие True.

🚩Цикл `for` (перебор последовательностей)

Простой пример for
for i in range(5):
print(i)


Вывод
0
1
2
3
4


Перебор списка
names = ["Alice", "Bob", "Charlie"]
for name in names:
print(name)


Вывод
Alice
Bob
Charlie


Перебор словаря (dict)
user = {"name": "Alice", "age": 25}
for key, value in user.items():
print(f"{key}: {value}")


Вывод
name: Alice
age: 25


🚩Цикл `while` (работает, пока `True`)

Пример while
x = 0
while x < 5:
print(x)
x += 1


Вывод
0
1
2
3
4


*while с input() (бесконечный цикл)
while True:
command = input("Введите команду: ")
if command == "exit":
break # Выход из цикла
print(f"Вы ввели: {command}")


🚩3. Управление циклами (`break`, `continue`)

break — выход из цикла
for i in range(10):
if i == 5:
break # Прерывает цикл, если i == 5
print(i)


Вывод
0
1
2
3
4


continue — пропуск итерации
for i in range(5):
if i == 2:
continue # Пропускаем 2
print(i)


Вывод
0
1
3
4


🚩`else` в циклах (`for` / `while`)

else выполняется, если цикл завершился без break
for i in range(5):
print(i)
else:
print("Цикл завершён!")


Вывод
0
1
2
3
4
Цикл завершён!


Но если сработает break, else не выполняется
for i in range(5):
if i == 3:
break
print(i)
else:
print("Цикл завершён!") # Не выполнится!


Вывод
0
1
2


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
🤔 Когда выполняются аннотации типов?

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


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

Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начните получать больше предложений о работе.

🚀 Запуск занимаем всего 3 минуты, а экономит очень много времени
🛡 Это безопасно: easyoffer официально одобрен HeadHunter и прошел его модерацию.
🥷🏻 Автоотклик незаметен для рекртера. Автоотклик ничем не отличается от обычного отклика, который вы делаете вручную

Рекрутеры давно используют автоматизацию для поиска кандидатов. Так почему вы должны откликаться вручную?

💡Совет – Добавьте шаблон сопроводительного письма, чтобы откликаться на большее количество вакансий (на некоторые вакансии нельзя откликнуться без сопроводительного)

Попробовать бесплатно → https://easyoffer.ru/autoapply
💊1
🤔 Что такое GET?

GET — это HTTP-метод, который используется для запроса данных с сервера.
Когда ты открываешь веб-сайт или вводишь URL в браузере — это GET-запрос. Браузер запрашивает страницу у сервера, и сервер возвращает данные.

🚩Как работает GET-запрос?

1⃣Клиент (браузер, программа) отправляет GET-запрос на сервер.
2⃣Сервер обрабатывает запрос и возвращает ответ (HTML-страницу, JSON-данные, картинку и т. д.).
3⃣Данные отображаются пользователю.

🚩Пример GET-запроса

Когда ты заходишь на https://example.com/users, браузер отправляет:
GET /users HTTP/1.1
Host: example.com


Ответ сервера
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]


🚩Особенности GET-запроса

🟠Читаемый URL
параметры передаются в строке запроса (например, ?id=123).
🟠Безопасен
GET не изменяет данные на сервере.
🟠Можно кэшировать
браузеры и серверы могут сохранять результаты GET-запросов.
🟠Ограниченная длина URL
слишком длинные запросы могут не работать.
🟠Не подходит для конфиденциальных данных
передача пароля в URL (?password=123) небезопасна.

🚩GET-запрос с параметрами

Если нужно передать параметры, они добавляются в URL:
GET /search?q=python&page=2


В Python можно отправить GET-запрос с помощью библиотеки requests
import requests

response = requests.get("https://api.example.com/users", params={"id": 123})
print(response.json()) # Получаем ответ в JSON


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

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4💊1
🤔 В чем отличие текстовых и бинарных файлов?

Текстовые и бинарные файлы — это два типа файлов, которые хранят и обрабатывают данные по-разному. Разберем их отличия.

🚩**Текстовые файлы

Текстовые файлы хранят данные в виде обычного текста, используя кодировку (например, UTF-8, ASCII). Они читаются и редактируются текстовыми редакторами (Notepad, VS Code).
- .txt — обычный текстовый файл
- .csv — таблица в текстовом формате
- .json, .xml, .html — текстовые форматы данных
Каждый символ в файле представлен в кодировке (например, в UTF-8 буква "А" занимает 1 байт).
В Python текстовые файлы открываются в режиме t (text mode).
# Запись в текстовый файл
with open("example.txt", "w", encoding="utf-8") as file:
file.write("Привет, мир!")

# Чтение текстового файла
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content) # Выведет: Привет, мир!


🚩Бинарные файлы

Бинарные файлы хранят данные в машинном формате (набор байтов). Они не предназначены для чтения человеком и требуют специальных программ для обработки.
- .exe — исполняемый файл
- .png, .jpg — изображения
- .mp3, .mp4 — аудио и видео файлы
- .dat, .bin — файлы с произвольными данными
Байты записываются напрямую без конвертации в текст. Например, число 123 может храниться в 4-байтовом формате (например, 01111011 в двоичном коде).
В Python бинарные файлы открываются в режиме b (binary mode).
# Запись бинарных данных
data = b'\x48\x65\x6C\x6C\x6F' # "Hello" в байтах
with open("example.bin", "wb") as file:
file.write(data)

# Чтение бинарных данных
with open("example.bin", "rb") as file:
content = file.read()
print(content) # Выведет: b'Hello'


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4💊3
🤔 Название переменных?

Должны начинаться с буквы или подчёркивания, содержать только буквы, цифры и подчёркивания. Не допускается совпадение с ключевыми словами.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Почему плохо хранить данные SQL в Docker контейнере?

Хранение данных базы данных (SQL) внутри Docker-контейнера не рекомендуется, потому что контейнеры являются временными и одноразовыми. При удалении или пересоздании контейнера все данные внутри него теряются.

🚩Данные удаляются при удалении контейнера
Контейнеры в Docker спроектированы так, чтобы их можно было легко пересоздавать. Если удалить контейнер (docker rm), все данные, хранящиеся внутри него, исчезнут навсегда.
docker run --name mydb -e MYSQL_ROOT_PASSWORD=secret -d mysql
docker stop mydb
docker rm mydb # Удаляем контейнер – все данные пропали!


🚩Проблемы с обновлением и масштабированием

Если база данных хранится внутри контейнера, обновить версию MySQL/PostgreSQL будет сложно. При пересоздании контейнера все данные потеряются, и их придется восстанавливать из резервной копии.

🚩Низкая производительность I/O

Хранение данных внутри контейнера может снизить скорость работы базы, потому что Docker использует копию на запись (Copy-on-Write, CoW).
Решение — использовать прямые тома (volumes) или монтировать каталог хоста.
docker run --name mydb -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql


🚩Проблемы с резервным копированием

Если база находится внутри контейнера, то сделать бэкап или восстановить данные сложно.
Лучшее решение: использовать volumes + делать бэкапы через mysqldump или pg_dump.
docker exec mydb mysqldump -u root -psecret mydatabase > backup.sql


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔3💊3🔥1
🤔 Как пропустить заблокированные поля в БД при использовании SELECT?

Обычно это реализуется:
- через явное указание только нужных колонок в SELECT;
- через вьюшки, скрывающие чувствительные поля;
- или через ORM с указанием полей defer/load_only (например, в SQLAlchemy).
Также можно настроить права доступа (GRANT/REVOKE).


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

В Python пакетирование библиотек — это процесс создания, распространения и установки пакетов (модулей) с кодом. Это позволяет разработчикам легко устанавливать и переиспользовать чужие библиотеки.

🚩Что такое пакет Python?

Пакет — это набор модулей, объединенных в одну структуру (обычно это папка с файлом __init__.py).
mypackage/
│── mymodule.py
│── __init__.py
└── utils.py


🚩Как создать свой пакет?

Допустим, у нас есть пакет mypackage, в котором есть функция say_hello().

Структура проекта
mypackage/
│── mymodule.py
│── __init__.py
└── setup.py


Файл mypackage/mymodule.py
def say_hello():
return "Привет, мир!"


Файл mypackage/__init__.py (он делает папку пакетом)
from .mymodule import say_hello


Теперь можно использовать mypackage в коде
import mypackage

print(mypackage.say_hello()) # Выведет: Привет, мир!


🚩Как установить стороннюю библиотеку?

Чтобы установить готовую библиотеку из PyPI, используем pip
pip install requests  # Установка библиотеки requests


Чтобы посмотреть установленные пакеты
pip list


Чтобы удалить пакет
pip uninstall requests


Чтобы обновить пакет
pip install requests --upgrade


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

Это репозиторий для Docker-образов. Сюда можно загружать (push) образы и загружать (pull) их на другие машины. Может быть публичным (например, Docker Hub) или приватным (например, self-hosted Harbor).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что такое клиент-серверная архитектура?

Клиент-серверная архитектура – это модель взаимодействия устройств, где клиент запрашивает данные или услуги, а сервер их предоставляет.

🚩Как это работает?

Клиент – это программа или устройство, которое отправляет запросы (например, браузер).
Сервер – это программа или устройство, которое обрабатывает запросы и отправляет ответ (например, веб-сервер).

Сервер (сервер.py)
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("localhost", 8080)) # Привязываем сервер к адресу и порту
server.listen(1) # Ожидаем подключения одного клиента
print("Сервер запущен и ждёт подключения...")

conn, addr = server.accept() # Принимаем подключение
print(f"Подключен клиент: {addr}")

data = conn.recv(1024).decode() # Читаем данные от клиента
print(f"Клиент прислал: {data}")

conn.send("Привет от сервера!".encode()) # Отправляем ответ клиенту
conn.close()


Клиент (клиент.py)
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost", 8080)) # Подключаемся к серверу

client.send("Привет, сервер!".encode()) # Отправляем сообщение
response = client.recv(1024).decode() # Получаем ответ от сервера

print(f"Ответ сервера: {response}")
client.close()


🚩Как это работает?

1⃣Запускаем сервер.py. Он ждёт подключения.
2⃣Запускаем клиент.py. Клиент подключается к серверу и отправляет сообщение.
3⃣Сервер получает сообщение, отвечает клиенту и закрывает соединение.
4⃣Клиент принимает ответ и завершает работу.

🚩Типы клиент-серверных архитектур

Одноуровневая – клиент общается напрямую с сервером.
Двухуровневая – классическая схема "клиент сервер" (например, браузер веб-сервер).
Трёхуровневая – добавляется база данных (например, клиент сервер БД).
Многоуровневая – сложные распределённые системы с несколькими серверами (например, микросервисы).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Какие плюсы и минусы у Python?

Плюсы: читаемость, лаконичность, огромная стандартная библиотека, поддержка разных парадигм, большое сообщество, широкое применение от науки до DevOps.
Минусы: медленнее компилируемых языков, GIL ограничивает многопоточность, динамическая типизация может вести к ошибкам в рантайме, не лучшая среда для задач с высокой производительностью на уровне железа.


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

В Python декораторы — это функции, которые оборачивают другие функции. Они добавляют или изменяют поведение функции без изменения её кода.

🟠Реализация простого декоратора вручную
Простейший декоратор, который добавляет текст перед выполнением функции
def my_decorator(func):  
def wrapper():
print("Декоратор сработал!")
return func() # Вызываем исходную функцию
return wrapper # Возвращаем обёрнутую функцию

def say_hello():
print("Hello!")

say_hello = my_decorator(say_hello) # Оборачиваем вручную
say_hello()


Вывод
Декоратор сработал!
Hello!


🟠Реализация декоратора через `@`
Python позволяет упрощённый синтаксис через @
def my_decorator(func):
def wrapper():
print("Декоратор сработал!")
return func()
return wrapper

@my_decorator # Эквивалентно say_hello = my_decorator(say_hello)
def say_hello():
print("Hello!")

say_hello()


🟠Декоратор с `args` и `kwargs` (универсальный вариант)
Если функция принимает аргументы, их нужно передавать через args и kwargs
def my_decorator(func):
def wrapper(*args, **kwargs): # Поддержка любых аргументов
print(f"Вызываем {func.__name__} с аргументами: {args}, {kwargs}")
return func(*args, **kwargs) # Вызываем оригинальную функцию
return wrapper

@my_decorator
def greet(name):
print(f"Привет, {name}!")

greet("Alice")


Вывод
Вызываем greet с аргументами: ('Alice',), {}
Привет, Alice!


🟠Декоратор с параметрами (фабрика декораторов)
Чтобы передавать параметры в декоратор, создаём функцию, которая возвращает декоратор
def repeat(times):  # Функция с параметром
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times): # Повторяем вызов функции
func(*args, **kwargs)
return wrapper
return decorator # Возвращаем декоратор

@repeat(3) # Передаём 3 → `repeat(3)` вернёт `decorator`
def hello():
print("Hello!")

hello()


Вывод
Hello!
Hello!
Hello!


🟠Декораторы классов (`functools.wraps`)
Обычные декораторы ломают метаданные функции (__name__, __doc__).
import functools

def my_decorator(func):
@functools.wraps(func) # Сохраняем метаданные
def wrapper(*args, **kwargs):
print("Декоратор сработал!")
return func(*args, **kwargs)
return wrapper

@my_decorator
def greet():
"""Функция приветствия"""
print("Hello!")

print(greet.__name__) # greet (без wraps было бы wrapper)
print(greet.__doc__) # Функция приветствия


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊5👍3
🤔 Что известно про арифметический оператор //?

// — это оператор целочисленного деления. Он возвращает только целую часть результата, отбрасывая дробную. Это удобно, когда нужно делить и получить результат без остатка, особенно в индексах или циклах.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что можете сказать о конструкции import package.item?

Конструкция import package.item используется для импорта конкретного подмодуля или элемента из пакета в Python.

🚩Пакеты и Подмодули

Пакет — это каталог, который содержит файл __init__.py и может содержать подкаталоги и модули. Подкаталоги в пакете также могут содержать файлыия import py, что делает их под-пакетами. Пример структуры пакета:
package/


вероятность
py
item.py
subpackage/


Конструкции
py
subitem.py


🚩Импорт Подмодуля

Конструкция import package.item позволяет импортировать подмодуль item из пакета package. Например:
import package.item

# Теперь вы можете использовать функции и классы из package.item
package.item.some_function()


🚩Почему это важно?

🟠Организация кода
Пакеты позволяют структурировать код в иерархическую систему, что делает его более организованным и модульным.

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

🟠Управление зависимостями
Пакеты упрощают управление зависимостями между различными частями кода.

Структура каталога
math_operations/


init.
py
addition.py
subtraction.py


Код вort package.ite
def add(a, b):
return a + b


Код вport package.item
def subtract(a, b):
return a - b


Использование в скрипте
import math_operations.addition
import math_operations.subtraction

result_add = math_operations.addition.add(5, 3)
result_subtract = math_operations.subtraction.subtract(5, 3)

print("Addition:", result_add) # Выведет: Addition: 8
print("Subtraction:", result_subtract) # Выведет: Subtraction: 2


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊2
🤔 Как разбить строку на список строк?

Для этого применяется метод split, который разделяет строку по пробелу или другому указанному символу. Результатом будет список строк, полученных из исходной.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Почему поиск по ключам в словаре работает быстро?

В Python словари (dict) работают очень быстро, потому что они используют хеш-таблицы. Это позволяет находить значения по ключу в константное время O(1) в большинстве случаев. Давайте разберемся, как это работает.

🟠Как устроен словарь в Python?
Словарь (dict) — это структура данных, которая хранит пары ключ → значение. Например:
data = {"name": "Alice", "age": 25, "city": "New York"}
print(data["age"]) # 25


🟠Как работает хеш-таблица?
Основной принцип:
Хеш-функция (hash()) вычисляет уникальное число (хеш) для ключа.
Используется массив (таблица), где данные хранятся по индексам, связанным с хешем.
Поиск по ключу — это просто вычисление хеша и обращение к нужному индексу.
print(hash("age"))  # Например, вернет 328847234 (будет разным при каждом запуске)


Когда мы пишем
value = data["age"]


🟠Почему поиск занимает O(1)?
Нет линейного поиска: вместо перебора всех элементов Python сразу вычисляет, где находится нужное значение.
Операция доступа занимает фиксированное время: hash() + обращение по индексу.
Даже при большом количестве элементов скорость остается высокой.
Добавим 1 миллион элементов и посмотрим скорость поиска:
import time

data = {i: i * 2 for i in range(1_000_000)}

start = time.time()
print(data[999_999]) # Быстро находит ключ!
end = time.time()

print("Время поиска:", end - start) # Около 0.000001 сек


🟠Что если хеши совпадут? (Коллизии)
Иногда два разных ключа могут иметь одинаковый хеш (редко, но возможно). Тогда Python использует связанный список (chaining) или перехеширование.
print(hash("abc") % 10)  # Например, 5
print(hash("xyz") % 10) # Тоже 5 (редко, но бывает)


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Мультипроцессинг — что это

Мультипроцессинг — это подход, при котором для выполнения задач создаются отдельные процессы, а не потоки. В Python это полезно для обхода ограничения GIL (Global Interpreter Lock), позволяя исполнять код параллельно на нескольких ядрах процессора. Модуль multiprocessing позволяет создавать независимые процессы, каждый из которых выполняет свою копию интерпретатора Python.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🤔3👍1