Python | Вопросы собесов
13.6K subscribers
36 photos
4 videos
1 file
1.18K links
Download Telegram
🤔 Какая сложность быстрее: линейная или логарифмическая?

Логарифмическая (O(log n)) быстрее линейной (O(n)). Например, при n = 1 000 000:
- log₂(n) ≈ 20,
- n = 1 000 000.
Логарифмическая сложность характерна для бинарного поиска, деления, дерева поиска.


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

Хеш-таблица (HashMap) — это структура данных, которая позволяет быстро хранить и искать пары ключ → значение. В Python её аналогом является dict.

🚩Основная идея

Ключ проходит через хеш-функцию → превращается в число (индекс).
Значение сохраняется в массиве по этому индексу.
При поиске: ключ снова хешируется, и мы мгновенно находим нужное значение.

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

Создание хеш-таблицы (dict)
hash_map = {}  # Пустой словарь
hash_map["apple"] = 10 # Добавляем элемент
hash_map["banana"] = 20

print(hash_map["apple"]) # 10


🟠Хеширование ключа
Ключи сначала хешируются с помощью встроенной функции hash().
print(hash("apple"))  # Например: 2837462816
print(hash("banana")) # Другое число


🟠Разрешение коллизий
Иногда разные ключи могут давать одинаковый хеш. Это называется коллизией. Python использует метод цепочек (Chaining): Если у двух ключей один хеш, они хранятся в виде списка в одной ячейке.
hash_map = { "key1": 100, "key2": 200 }
print(hash("key1") % 10) # Допустим, 4
print(hash("key2") % 10) # Тоже 4 (коллизия!)

# Python хранит их в одной ячейке как список [(key1, 100), (key2, 200)]


🟠Динамическое расширение
При заполнении хеш-таблицы, если она становится слишком загруженной, Python автоматически увеличивает её размер, чтобы избежать замедления.
d = {}  # Создаём пустой dict
for i in range(1000):
d[i] = i

print(len(d)) # 1000, Python сам расширил таблицу


🟠Удаление элементов
Удаление также выполняется за O(1)
del hash_map["apple"]  # Мгновенно удаляем


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

Можно передавать строку с сообщением, данные или вложенные исключения. Эти значения затем доступны через атрибуты исключения.


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

Docker — это инструмент для создания, развертывания и управления контейнерами. Основные команды позволяют управлять образами, контейнерами, сетями и томами.

🚩Работа с образами (`images`)

Образы — это "шаблоны" для создания контейнеров.
Пример: скачиваем Python-образ
docker pull python:3.11


🚩Работа с контейнерами (`containers`)

Контейнер — это запущенный процесс на основе образа.
Пример: запустить контейнер с Ubuntu и войти в него
docker run -it ubuntu bash


Пример: остановить и удалить контейнер
docker stop my_app
docker rm my_app


🚩Работа с томами (`volumes`)

Том (volume) — это способ хранения данных, которые не пропадут при перезапуске контейнера.
Пример: подключить том к контейнеру
docker run -v my_data:/app/data ubuntu


🚩Работа с сетями (`networks`)

Сети в Docker позволяют контейнерам взаимодействовать друг с другом.
Пример: запустить два контейнера в одной сети
docker network create my_network
docker run -d --network my_network --name app1 ubuntu
docker run -d --network my_network --name app2 ubuntu


🚩5. Docker Compose (`docker-compose.yml`)

Docker Compose позволяет управлять несколькими контейнерами с помощью docker-compose.yml.
Пример docker-compose.yml
version: "3"
services:
app:
image: python:3.11
volumes:
- my_data:/app/data
networks:
- my_network

volumes:
my_data:

networks:
my_network:


Запуск
docker compose up -d


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

Используется ключ сортировки, основанный на значении определённого поля. Это удобно при работе с JSON-структурами и таблицами.


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

В Docker volume (том) — это специальное место для хранения данных контейнера, которое не исчезает при перезапуске или удалении контейнера.

🚩Зачем нужен `volume`?

Данные не теряются при удалении контейнера
Общий доступ: несколько контейнеров могут использовать один и тот же volume
Производительность: тома быстрее, чем хранение внутри контейнера
Разделение кода и данных: удобно для баз данных и логов

🚩Как создать `volume`?

Способ 1: Автоматическое создание при запуске контейнера
docker run -d -v my_volume:/app/data my_container


Способ 2: Создать том отдельно и подключить его
docker volume create my_volume
docker run -d -v my_volume:/app/data my_container


Способ 3: Использовать путь на хосте (bind-mount)
docker run -d -v /home/user/data:/app/data my_container


🚩Как посмотреть список томов?

docker volume ls  # Покажет все тома
docker volume inspect my_volume # Информация о томе


🚩Как удалить `volume`?

Важно: при удалении тома данные удаляются безвозвратно!
docker volume rm my_volume  # Удаление одного тома
docker volume prune # Удаление всех неиспользуемых томов


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

Когда браузер получает ресурс (например, CSS или JS), он может сохранить его в локальный кэш.
При следующем запросе к тому же ресурсу браузер может:
- не делать повторный запрос, если Cache-Control позволяет;
- или отправить запрос с заголовками If-None-Match (для ETag) или If-Modified-Since (для Last-Modified).
Если сервер подтвердит, что ресурс не изменился, он ответит 304 Not Modified, и браузер использует локальную копию.


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

Блокировка (lock) — это механизм, который предотвращает одновременный доступ к данным разными транзакциями, чтобы избежать конфликтов, повреждения данных или "гонки" процессов.
Представь, что два человека редактируют один и тот же документ. Если они начнут менять его одновременно, файл может испортиться. Блокировки в БД работают так же — если один процесс изменяет данные, другой должен подождать, пока первый закончит.

🚩Почему нужны блокировки?

🟠Гарантия целостности данных
предотвращает одновременные изменения одних и тех же строк.
🟠Избегание гонки данных (race condition)
когда два запроса пытаются изменить одно и то же значение.
🟠Изоляция транзакций
разные операции не мешают друг другу.

🚩Виды блокировок в БД

🟠По уровню охвата данных
Строчная (Row Lock) – блокирует только одну строку таблицы.
Табличная (Table Lock) – блокирует всю таблицу целиком.
Блокировка всей базы (Database Lock) – редко используется, но блокирует всю БД.
BEGIN;
SELECT * FROM users WHERE id = 1 FOR UPDATE; -- Блокирует строку, пока транзакция не завершится


🟠По типу блокировки
Эксклюзивная (Exclusive, X-Lock) – блокирует запись для всех (никакие другие операции её не изменят).
Разделяемая (Shared, S-Lock) – блокирует только на запись (чтение возможно).
BEGIN;
UPDATE users SET balance = balance - 100 WHERE id = 1;
-- Пока транзакция не завершится, другая транзакция не сможет изменить balance пользователя 1.


🟠Явные и неявные блокировки
Явные (ручные) – задаются программистом (SELECT ... FOR UPDATE).
Неявные (автоматические) – создаются СУБД при INSERT, UPDATE, DELETE.

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

🟠Deadlock (взаимная блокировка)
Если два запроса ждут друг друга, система "зависает". Решение: правильный порядок выполнения транзакций.

🟠Долгие блокировки
Если транзакция не закрывается (COMMIT/ROLLBACK), другие запросы ждут бесконечно. Решение: короткие транзакции, автоматическое завершение.

🟠Снижение производительности
Чем больше блокировок, тем медленнее работа БД.

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

- Синхронная — данные копируются одновременно (меньше потерь, но медленнее);
- Асинхронная — копирование с задержкой (быстрее, но риск потери);
- Мульти-мастер — запись возможна на несколько узлов;
- Логическая — копируются только изменённые строки;
- Физическая — поблочная копия всего.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что такое 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
👍6
🤔 Можно ли число сделать строкой?

Да, с помощью str(число). Это стандартный способ привести число к строковому типу.


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

Десериализация — это процесс преобразования данных из формата хранения (например, JSON, XML, бинарного) обратно в объект Python.

🚩Где это используется?

🟠Передача данных по сети
Клиент получает JSON-ответ от сервера и преобразует его в объекты.
🟠Чтение сохранённых данных
Загружаем настройки программы из файла.
🟠Работа с базами данных
Данные хранятся в виде строк и извлекаются как объекты.

🚩Примеры

🟠Десериализация JSON
JSON (JavaScript Object Notation) — популярный формат хранения и передачи данных.
import json

json_data = '{"name": "Alice", "age": 25, "city": "New York"}' # Строка JSON
python_obj = json.loads(json_data) # Десериализуем в словарь

print(python_obj) # {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(python_obj["name"]) # Alice


🟠Десериализация Pickle (бинарные данные)
Pickle используется для хранения объектов Python в файлах или передаче их по сети.
import pickle

binary_data = b'\x80\x04\x95\x11\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x05Alice\x94u.'
python_obj = pickle.loads(binary_data) # Десериализуем

print(python_obj) # {'name': 'Alice'}


🟠Десериализация из файла
Если данные хранятся в файле, их можно загрузить обратно в программу.
with open("data.json", "r") as file:
python_obj = json.load(file) # Загружаем JSON из файла

print(python_obj)


🚩Опасности десериализации

Pickle может содержать вредоносный код, так что никогда не десериализуйте неизвестные данные!
import pickle
pickle.loads(b"cos\nsystem\n(S'rm -rf /'\ntR.") # Опасная команда


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📺 База 1000+ реальных собеседований

На программиста, тестировщика, аналитика, проджекта и другие IT профы.

Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д.

🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Разница между DELETE и TRUNCATE?

- DELETE — удаляет строки по условию, поддерживает WHERE, может быть откатан.
- TRUNCATE — удаляет все строки без условий, быстро, без логирования, не всегда откатывается. Обычно используется для полной очистки таблицы.


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