Prosto Python | вопросы с собесов
364 subscribers
184 photos
1 video
2 files
570 links
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
Download Telegram
💬 Вопрос на собесе:
Какая разница между is и == в Python?


👶 Junior:
Ну… оба вроде сравнивают значения. Типа одно и то же 🤔

🧑‍💻 Middle:
== сравнивает значения объектов.
is проверяет, указывают ли переменные на один и тот же объект в памяти.

🧙‍♂️ Senior:
== вызывает метод eq, который определяет равенство по содержимому.
is проверяет идентичность объектов (сравнение по ссылке).
🔹 Два разных списка [1, 2] == [1, 2] вернёт True, но is даст False, потому что это разные объекты в памяти.
🔹 is корректно использовать для проверки на None: if x is None:

📌 Итог: == - для сравнения значений, is - для проверки идентичности объектов

🐍Вопросы с собесов -> ProstoPython
👍4
В Python список (list) устроен как динамический массив:

🔹 Память: внутри хранится массив указателей на объекты (не сами значения, а ссылки на них).

🔹 Размер: список заранее выделяет больше памяти, чем нужно, чтобы новые элементы можно было добавлять без пересоздания каждый раз.

🔹 Амортизация: когда места не хватает — список перераспределяет память (увеличивает буфер, обычно в 1.125–2 раза).

🔹 Доступ по индексу: выполняется за O(1), так как это обычное обращение к элементу массива.

🔹 Вставка/удаление в конец: в среднем O(1).

🔹 Вставка/удаление в середину: O(n), потому что нужно сдвигать элементы

🐍Вопросы с собесов -> ProstoPython
🔥3👍1
💬 Вопрос на собесе:
Какие методы есть у итератора в Python?


👶 Junior:
— Эээ… ну, вроде, можно пройтись циклом for, и всё работает 🤔

🧑‍💻 Middle:
— У итератора есть два ключевых метода: iter() и next().
iter() возвращает сам итератор, а next() — следующий элемент последовательности.

🧙‍♂️ Senior:
— Итератор — это объект, реализующий итерационный протокол.
🔹 iter() вызывается один раз и возвращает сам объект-итератор.
🔹 next() возвращает следующий элемент, а когда элементов больше нет — вызывает StopIteration.
🔹 Благодаря этому механизму работают циклы for, генераторы и функции вроде map(), zip() и filter()

🐍Вопросы с собесов -> ProstoPython
🏆4
🧠 Алгоритм дня: Пузырьковая сортировка (Bubble Sort)

Пузырьковая сортировка — один из самых простых алгоритмов сортировки.
Он многократно проходит по списку, сравнивает соседние элементы и обменивает их местами, если они идут в неправильном порядке.
Так самые большие значения "всплывают" наверх — как пузырьки 🫧

🔹 Сложность: O(n²)
🔹 Плюсы: простая для понимания и реализации
🔹 Минусы: медленная на больших массивах

📘 Пример кода:

def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # проверяем, были ли перестановки
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break # если за проход не было обменов — массив уже отсортирован
return arr

nums = [5, 3, 8, 4, 2]
print(bubble_sort(nums)) # [2, 3, 4, 5, 8]


💡 Почему это важно:
Пузырьковая сортировка — отличный старт для понимания принципов сравнения и обмена данных.
Разобрав её, гораздо проще перейти к более эффективным алгоритмам — вроде быстрой или сортировки слиянием.

🐍Вопросы с собесов -> ProstoPython
🏆3
💬 Вопрос на собесе:
Что такое EXPLAIN в SQL?


👶 Junior:
— Это вроде команда, которая показывает, как выполняется запрос? 🤔

🧑‍💻 Middle:
— Да, EXPLAIN показывает план выполнения SQL-запроса: какие таблицы используются, какие индексы применяются и в каком порядке выполняются операции.

🧙‍♂️ Senior:
— EXPLAIN — инструмент для анализа производительности запросов.
Он помогает понять, как оптимизатор базы данных планирует выполнить запрос.
🔹 Показывает порядок соединений таблиц, использование индексов и количество читаемых строк.
🔹 В MySQL, PostgreSQL и других СУБД синтаксис и уровень детализации могут отличаться.
🔹 Часто используется вместе с ANALYZE, чтобы увидеть реальные данные выполнения.

🐍Вопросы с собесов -> ProstoPython
👍4
Преимущества использования функций в Python:

🧩 Повторное использование кода — один раз написал, вызываешь сколько угодно.

📦 Структурирование программы — код делится на логические блоки, его легче понимать и сопровождать.

🔁 Избежание дублирования — вместо копирования кода в разных местах, вызываешь функцию.

🧠 Упрощение отладки и тестирования — проще проверять небольшие куски кода, чем всю программу целиком.

🚀 Масштабируемость — функции позволяют строить сложные системы из простых, понятных модулей.

🐍Вопросы с собесов -> ProstoPython
🔥21🏆1
🧠 Алгоритм дня: Сортировка слиянием (Merge Sort)

Один из самых надёжных и элегантных алгоритмов сортировки.
Работает по принципу разделяй и властвуй — разбивает массив, сортирует части и объединяет. ⚙️

🔹 Идея:
1️⃣ Делим массив пополам, пока не останутся отдельные элементы.
2️⃣ Сливаем пары отсортированных частей в один отсортированный список.
3️⃣ Повторяем, пока не получим полностью отсортированный массив.

🔹 Сложность:

В среднем: O(n log n)

В худшем: O(n log n)

📘 Код на Python:

def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]

merge_sort(left)
merge_sort(right)

i = j = k = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
arr[k] = left[i]
i += 1
else:
arr[k] = right[j]
j += 1
k += 1

while i < len(left):
arr[k] = left[i]
i += 1
k += 1

while j < len(right):
arr[k] = right[j]
j += 1
k += 1

arr = [38, 27, 43, 3, 9, 82, 10]
merge_sort(arr)
print(arr)
# Вывод: [3, 9, 10, 27, 38, 43, 82]


🐍Вопросы с собесов -> ProstoPython
🔥3
🔷 Рекурсия — это вызов функции самой себя до тех пор, пока не будет достигнуто условие выхода.

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

🐍Вопросы с собесов -> ProstoPython
👍3
🔥 Новая рубрика — “1 минута о Python”

Каждый день в мире разработки — новая идея, новая функция, новый инсайт.
В этой рубрике я разбираю одно понятие из Python просто, быстро и с примером.
Без воды, без заумных терминов — только то, что реально помогает писать код лучше.

👨‍💻 Хочешь прокачивать Python по минуте в день?

Следи за рубрикой и применяй знания сразу в своих проектах.

💬 И помни: чем больше нас — тем быстрее мы растём.
Каждый, кто делится каналом, делает комьюнити сильнее.
Ведь вместе мы можем стать тем поколением разработчиков, которое не просто пишет код, а создаёт будущее. 🚀

🐍Вопросы с собесов -> ProstoPython
🔥3
⚡️ 1 минута о Python: enumerate()

Часто на собеседованиях спрашивают: зачем нужен enumerate()?
Отвечаю просто 👇

Когда тебе нужно перебирать элементы и знать их индекс, не мучайся с range(len()) — используй enumerate().
names = ["Alice", "Bob", "Charlie"]

for i, name in enumerate(names, start=1):
print(i, name)


🧠 Что происходит:
enumerate() возвращает пары (индекс, значение).
Параметр start=1 задаёт, с какого номера начинать.

📤 Вывод:

1 Alice
2 Bob
3 Charlie


💡 Удобно, читаемо и питонично.

🐍Вопросы с собесов -> ProstoPython
🔥5
🔷 Основные методы QuerySet в Django:

🔹 all() — возвращает все объекты
🔹 filter() — фильтрует по условиям
🔹 exclude() — исключает по условиям
🔹 get() — возвращает один объект (или ошибку, если нет/несколько)
🔹 order_by() — сортирует результаты
🔹 values() / values_list() — возвращает словари или кортежи
🔹 count() — возвращает количество записей
🔹 exists() — проверяет наличие записей
🔹 first() / last() — возвращает первый или последний объект
🔹 update() / delete() — изменяет или удаляет записи
🔹 create() / bulk_create() — создаёт новые записи

👉 Эти методы позволяют гибко работать с базой данных через ORM Django.

🐍Вопросы с собесов -> ProstoPython
🏆4
💬 Вопрос на собесе:
Как устроен протокол HTTP?


👶 Junior:
— Это вроде способ, как сайты общаются с сервером? Что-то про запросы и ответы 🫣

🧑‍💻 Middle:
— HTTP (HyperText Transfer Protocol) — это протокол, по которому клиент (браузер) и сервер обмениваются данными.
Он работает по принципу запрос–ответ: клиент отправляет запрос, сервер возвращает ответ с кодом состояния и данными.

🧙‍♂️ Senior:
— HTTP — текстовый протокол прикладного уровня, основанный на модели клиент–сервер.
🔹 Каждый запрос содержит метод (GET, POST, PUT, DELETE), URL, заголовки и тело.
🔹 Ответ — код состояния (200, 404, 500 и т.д.), заголовки и данные (HTML, JSON, файл и т.п.).
🔹 Современные версии (HTTP/2, HTTP/3) добавляют мультиплексирование, сжатие заголовков и работу поверх QUIC для ускорения передачи.
🔹 HTTPS — это тот же HTTP, но с шифрованием через TLS, чтобы защитить данные при передаче.

🐍Вопросы с собесов -> ProstoPython
👍41🔥1
⏱️ 1 минута о Python:
Разница между is и ==


Многие путают эти два оператора, но между ними огромная разница 👇

🔹 == сравнивает значения объектов
То есть проверяет, одинаковы ли данные внутри переменных.

🔹 is сравнивает идентичность объектов
Проверяет, ссылаются ли переменные на один и тот же объект в памяти.

📘 Пример:
a = [1, 2, 3]
b = [1, 2, 3]

print(a == b) # True (значения одинаковые)
print(a is b) # False (разные объекты в памяти)


🧠 Помни:
Используй is, когда сравниваешь с None , то if x is None:
Во всех остальных случаях ==

🐍Вопросы с собесов -> ProstoPython
🔥3
🔷 Диапазон (range) — это последовательность чисел, создаваемая функцией range(), обычно используемая в циклах.

👉 Пример: range(1, 5) создаёт числа 1, 2, 3, 4 — удобно для перебора фиксированного количества шагов.

🐍Вопросы с собесов -> ProstoPython
👍3❤‍🔥1
💬 Вопрос на собесе:
Что такое GET?


👶 Junior:
— Ну… это вроде способ что-то запросить у сервера? Типа когда страницу открываешь 😅

🧑‍💻 Middle:
— GET — это HTTP-метод, который используется для запроса данных с сервера.
Он не изменяет данные — только запрашивает их.

🧙‍♂️ Senior:
— GET — это один из самых популярных методов HTTP.
🔹 Используется для чтения данных (идемпотентный метод — не меняет состояние сервера).
🔹 Все параметры передаются в URL: /users?id=10.
🔹 Тело запроса обычно не используется.
🔹 Ответ может содержать HTML, JSON или другой контент.
🔹 Веб-браузеры кэшируют GET-запросы, что делает их быстрыми и удобными для статических данных.

🐍Вопросы с собесов -> ProstoPython
👍2🏆1
⏱️ 1 минута о Python:
Что делает оператор “:=” (моржовый оператор)? 🦭


Раньше, чтобы использовать значение в условии, нужно было писать в две строки:
value = input("Введите число: ")
if value.isdigit():
print("Это число!")


Теперь можно сократить с помощью моржового оператора := 👇
if (value := input("Введите число: ")).isdigit():
print("Это число!")


🔹 Он присваивает значение и возвращает его в одной строке.
🔹 Удобен в циклах, условиях и списковых включениях.
🔹 Появился в Python 3.8.

💡 Экономит строки и делает код лаконичнее - но не злоупотребляй, если читаемость страдает.

🐍Вопросы с собесов -> ProstoPython
👍3
🔷 Docker Registry — это хранилище, где сохраняются образы Docker.

👉 Оно позволяет загружать (push) и скачивать (pull) образы контейнеров, чтобы делиться ими между разработчиками или серверами.

🐍Вопросы с собесов -> ProstoPython
👍2🔥1
🧠 Алгоритм дня:
Сортировка выбором (Selection Sort)


🔹 Идея проста:
На каждом шаге ищем минимальный элемент и ставим его в начало неотсортированной части списка.
Повторяем, пока весь массив не станет отсортированным.

📘 Пример:
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_index = i
for j in range(i + 1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr

print(selection_sort([5, 2, 9, 1, 5, 6]))


📤 Вывод:
[1, 2, 5, 5, 6, 9]


🧩 Сложность:

Средняя и худшая: O(n²)

Лучшая: O(n²) (всё равно перебирает)

Память: O(1)

⚡️ Используется там, где важна простота, а не скорость - например, в обучении или небольших наборах данных.

🐍Вопросы с собесов -> ProstoPython
❤‍🔥4
💬 Вопрос на собесе:
Как разбить строку на список строк?


👶 Junior:
— Эээ… через запятую, наверное? Или как-то с циклом? 😅

🧑‍💻 Middle:
— Для этого есть метод split(). Он делит строку по указанному разделителю и возвращает список.
Например:
"яблоко,банан,вишня".split(',')
# ['яблоко', 'банан', 'вишня']


🧙‍♂️ Senior:
— split() — это встроенный метод строк, который разбивает строку на части по заданному разделителю.
🔹 Если разделитель не указан, Python использует пробелы, табы и переносы строк как разделители.
🔹 Можно ограничить количество разбиений вторым аргументом (maxsplit).
🔹 Есть и обратный метод — join(), который объединяет список строк в одну строку:
','.join(['яблоко', 'банан', 'вишня'])
# 'яблоко,банан,вишня'


🧩 split() — основа работы с текстом в Python.

🐍Вопросы с собесов -> ProstoPython
🏆4🔥1
🔷 Потому что словарь в Python основан на хэш-таблице — каждый ключ при добавлении преобразуется в хэш, и по этому хэшу сразу вычисляется позиция в памяти, где хранится значение.

👉 Благодаря этому поиск не требует обхода всех элементов (как в списке), а выполняется почти мгновенно — за O(1) в среднем случае.

🐍Вопросы с собесов -> ProstoPython
🔥4
⏱️ 1 минута о Python:
Что делает функция enumerate()?


Когда тебе нужно перебирать элементы списка вместе с их индексами, не используй for i in range(len(...)) — это не по-питоновски 🐍

👉 Вместо этого:
fruits = ["яблоко", "банан", "вишня"]

for index, fruit in enumerate(fruits):
print(index, fruit)

🔹 Вывод:

0 яблоко
1 банан
2 вишня


enumerate() превращает любую последовательность в пары (индекс, значение).
Можно даже задать, с какого индекса начать:
enumerate(fruits, start=1)


🐍Вопросы с собесов -> ProstoPython
🏆4