Python | Вопросы собесов
13.5K subscribers
37 photos
4 videos
1 file
1.22K links
Download Telegram
🤔 Зачем нужна конструкция yield from?

yield from используется в генераторах и позволяет:
- делегировать итерацию другому генератору или итерируемому объекту;
- упрощает код вложенных генераторов;
- эффективно используется в асинхронных корутинах до Python 3.5, до появления async/await.


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

Оконные функции (window functions) — это специальные функции в SQL, которые выполняют вычисления по строкам внутри "окна" (группы строк), но не агрегируют их.
SELECT 
id,
месяц,
продавец,
сумма,
SUM(сумма) OVER (PARTITION BY месяц) AS общий_доход_в_месяц
FROM sales;


🟠`ROW_NUMBER()` – Нумерация строк
Пронумеруем продажи каждого продавца в порядке убывания суммы.
SELECT 
id,
продавец,
сумма,
ROW_NUMBER() OVER (PARTITION BY продавец ORDER BY сумма DESC) AS номер
FROM sales;


🟠`RANK()` и `DENSE_RANK()` – Рейтинг с учётом одинаковых значений
Если два продавца получили одинаковую сумму, RANK() пропустит следующий номер, а DENSE_RANK() – нет.
SELECT 
продавец,
сумма,
RANK() OVER (ORDER BY сумма DESC) AS ранг_1,
DENSE_RANK() OVER (ORDER BY сумма DESC) AS ранг_2
FROM sales;


🟠3. `LAG()` и `LEAD()` – Доступ к предыдущей и следующей строке
LAG() даёт предыдущее значение, LEAD() – следующее.
SELECT 
месяц,
продавец,
сумма,
LAG(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS предыдущий_месяц,
LEAD(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS следующий_месяц
FROM sales;


🟠Использование оконных функций с `FRAME` (ограничение окна)
Иногда нужно анализировать не всю группу, а только несколько соседних строк.
SELECT 
месяц,
продавец,
сумма,
AVG(сумма) OVER (PARTITION BY продавец ORDER BY месяц ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS скользящее_среднее
FROM sales;


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

Makefile используется для автоматизации задач: сборки программ, компиляции, тестирования, упаковки. Это особенно удобно в больших проектах, где одна команда make может запускать цепочку действий с зависимостями.


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

Существует несколько видов тестов, каждый из которых имеет свою цель и особенности.

🚩Виды

🟠Юнит-тесты (Unit Tests)
Проверка работы отдельных модулей или функций в изоляции от других частей системы.
Ориентированы на минимальные части кода (функции, методы, классы).
Высокая скорость выполнения.
Простота написания и отладки.
Обычно пишутся разработчиками.
def add(a, b):
return a + b

def test_add():
assert add(1, 2) == 3


🟠Интеграционные тесты (Integration Tests)
Проверка взаимодействия между различными модулями или компонентами системы.
Тестируют комбинации модулей и их взаимодействие.
Более сложные и медленные по сравнению с юнит-тестами.
Могут выявить проблемы в интерфейсах между модулями.
def fetch_data_from_api():
response = requests.get('https://api.example.com/data')
return response.json()

def test_fetch_data_from_api():
data = fetch_data_from_api()
assert 'key' in data


🟠Системные тесты (System Tests)
Проверка всей системы целиком на соответствие требованиям.
Тестируют систему в рабочей среде.
Включают проверку всех функциональных и нефункциональных требований.
Могут включать пользовательские сценарии.
Тестирование веб-приложения на основе реальных пользовательских сценариев, включая проверку интерфейса, баз данных и API.

🟠Приемочные тесты (Acceptance Tests)
Проверка соответствия системы требованиям и ожиданиям заказчика или конечного пользователя.
Часто выполняются вместе с заказчиком или пользователем.
Фокусируются на бизнес-требованиях и пользовательских сценариях.
Успешное прохождение приемочных тестов является критерием готовности системы к выпуску.
Тестирование нового функционала с участием конечных пользователей для проверки его удобства и соответствия их ожиданиям.

🟠Регрессионные тесты (Regression Tests)
Убедиться, что изменения в коде не вызвали новых ошибок в уже работающем функционале.
Выполняются после внесения изменений в код.
Обычно автоматизируются и включают повторное выполнение всех или части существующих тестов.
Повторное выполнение всех юнит-тестов и интеграционных тестов после рефакторинга кода.

🟠Нефункциональные тесты (Non-functional Tests)
Проверка нефункциональных аспектов системы, таких как производительность, безопасность, удобство использования и др.

🚩Основные виды:

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 В каких случаях можно обработать SyntaxError?

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


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

Циклы — это конструкции, которые позволяют многократно выполнять код, пока выполняется определённое условие.
В 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
👍7
🤔 Что такое REST?

REST (Representational State Transfer) — это архитектурный стиль, используемый при разработке API.
Он основывается на принципах HTTP и работе с ресурсами, которые доступны по URL.
Каждый запрос клиента должен быть самодостаточным (stateless), а взаимодействие строится с использованием стандартных HTTP-методов.


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

Когда в проекте много файлов, могут возникать конфликты импортов. Python ищет модули в определённом порядке, и если несколько файлов имеют одинаковые имена или неправильные пути, может возникнуть ошибка.

🚩Способы избежать конфликтов при импорте

🟠Используйте явные пути импорта
Вместо
import mymodule  # Может вызвать конфликт, если есть несколько файлов с таким именем


Лучше указывать полный путь в пакетах
from myproject.utils.mymodule import my_function


🟠Избегайте конфликтов имён файлов
Если у вас есть файл math.py, импорт import math будет загружать ваш файл, а не стандартный модуль math из Python.
- Не называйте файлы именами стандартных модулей: math.py, sys.py, json.py.
- Проверьте, какой именно модуль загружается:

  import math
print(math.__file__) # Путь к загруженному модулю


🟠Добавьте `__init__.py` в пакеты
Если у вас есть структура
/myproject
/utils
mymodule.py


Решение
Добавьте пустой __init__.py в utils/:
/myproject
/utils
__init__.py # Делаем utils пакетом
mymodule.py


Теперь импорт будет работать
from utils import mymodule


🟠Используйте `sys.path.append()` для указания путей
Иногда Python не находит модуль, если он находится вне стандартных путей. Решение
Добавьте путь вручную:
import sys
sys.path.append("/path/to/directory")

import mymodule # Теперь импорт будет работать


🟠Используйте `absolute` и `relative` импорт в пакетах
Абсолютный импорт (рекомендуется)
from myproject.utils.mymodule import my_function


Относительный импорт (используется внутри пакетов):
from .mymodule import my_function


🟠Проверяйте `sys.modules` и `sys.path`
Если импорт не работает, проверьте, какие модули загружены и где Python ищет файлы
import sys
print(sys.modules.keys()) # Список загруженных модулей
print(sys.path) # Пути, где Python ищет модули


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

Актуальные версии:
- HTTP/1.1 — долгое время был основным стандартом.
- HTTP/2 — быстрее, поддерживает параллельную загрузку, используется в большинстве современных сайтов.
- HTTP/3 — новейшая версия, работает поверх QUIC (а не TCP), быстрее и безопаснее.
HTTP/2 и HTTP/3 — будущее веба, и большинство крупных сервисов уже их применяют.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Рынок труда в IT в 2026 году это уже не вопрос знаний, а вопрос стратегии.

Если ты ищешь работу или думаешь о смене компании, стоит отметить канал DevReady.

Его ведут инженеры и нанимающие менеджеры из бигтеха. Люди, которые каждый день смотрят резюме и проводят технические интервью.

На канале:
• разборы реальных резюме и типовых ошибок кандидатов
• вопросы с технических интервью и как на них отвечают сильные кандидаты
• как использовать AI-инструменты при поиске работы
• честный взгляд на рынок и требования компаний в 2026 году

Полезные материалы для старта:

➡️ Базовый минимум сильного резюме
➡️ Как отличить хорошую компанию от плохой
➡️ Компания мечты в 2026 году
➡️ Найди работу за 100 рублей

👉 Обязательно подпишись DevReady
🔥2👍1💊1
🤔 Какая сложность у пузырьковой сортировки?

Пузырьковая сортировка (Bubble Sort) — это один из самых простых, но неэффективных алгоритмов сортировки.

🚩Как работает пузырьковая сортировка?

1. Проходим по массиву несколько раз.
2. На каждой итерации сравниваем соседние элементы и меняем их местами, если они идут не в том порядке.
3. После первого прохода наибольший элемент оказывается в конце массива.
4. Повторяем процесс, пока массив не отсортируется.

🚩Рассчёт сложности (`O(n²)`)

Количество сравнений в худшем случае:
- На первой итерации: n-1 сравнений
- На второй: n-2 сравнений
- На третьей: n-3 сравнений
- …
- Всего: (n-1) + (n-2) + ... + 1 = O(n²)
Количество обменов (swap) в худшем случае:
- Если массив полностью перевёрнут, на каждой итерации будет максимальное количество перестановок → O(n²).

🚩Оптимизированная пузырьковая сортировка (`O(n)`)
Если на проходе по массиву не было перестановок, значит массив уже отсортирован.
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # Флаг, отслеживающий перестановки
for j in range(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 # Если перестановок не было, завершаем сортировку

arr = [1, 2, 3, 4, 5] # Уже отсортированный массив
bubble_sort(arr)
print(arr) # [1, 2, 3, 4, 5]


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что возвращают операторы and, or, not?

Они возвращают не обязательно логическое значение, а сам объект, участвующий в выражении. Например, оператор or вернёт первый "правдивый" объект, а and — последний, если все "правдивые". Это поведение используется, например, для задания значений по умолчанию.


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