Теория
1. Какие базовые типы данных есть в Python? Как они делятся на категории?
2. Является ли строка изменяемым типом? Что происходит при попытке изменить строку?
3. Чем отличаются кортежи от списков в Python?
4. Какие плюсы и минусы у кортежей и списков?
5. Знаешь ли ты что-нибудь о повторном использовании памяти кортежами?
6. Какая алгоритмическая сложность получения длины списка?
7. Какие атрибуты есть у списков, кроме длины?
8. В чём сложность доступа к элементу списка по индексу и почему?
9. Какова сложность добавления элемента в конец списка? А в начало?
10. Что такое множество (set) в Python и как оно устроено?
11. Сохраняет ли set порядок элементов?
12. Расскажи, как устроен словарь (dict) и как он работает под капотом.
13. Что такое хеш-функция и как работает механизм коллизий?
14. Что используется для разрешения коллизий в Python?
15. Какими могут быть ключи в словаре? Что значит "объект должен быть хешируемым"?
16. Какая структура данных используется под капотом словаря в Python?
17. Какой метод используется для линейной адресации при коллизиях?
18. Расскажи о сложности операций поиска, вставки и удаления в dict.
19. Напиши функцию, которая возвращает список студентов, сдавших курс, учитывая проходной процент.
20. Напиши функцию, которая проверяет, образуют ли два списка последовательность без пропусков.
21. Что такое MRO (Method Resolution Order) и как он работает?
22. Чем отличается старый порядок разрешения методов от нового (алгоритм C3)?
23. Что такое интерфейс и абстрактный класс? В чём разница?
24. Знаешь ли ты паттерны проектирования? Например, Singleton, Factory, Decorator.
25. Расскажи, что такое декоратор в Python и для чего он может быть полезен.
26. Что такое итератор и итерируемый объект в Python?
27. В чём связь между итераторами и паттернами проектирования?
28. Что такое генераторы и как они связаны с итераторами?
29. В чём плюсы использования генераторов?
30. Что такое контекстный менеджер в Python? Как он работает?
31. Что делает метод exit в контекстном менеджере?
32. Какие способы параллельного выполнения кода есть в Python?
33. Чем потоки отличаются от процессов?
34. В каких случаях стоит использовать потоки, а в каких — процессы?
35. Что такое GIL и как он влияет на многопоточность?
36. Что произойдёт, если в Python два потока выполняют CPU-bound задачи?
37. Как потоки ведут себя при I/O-bound задачах?
38. Какие есть способы параллелить код на уровне асинхронности? Что такое asyncio, coroutine, event loop?
39. Что такое Task, Future, и как они взаимодействуют с корутинами?
40. Как работает event loop и как в него возвращается поток управления?
41. Каким образом корутина приостанавливается и возобновляется?
42. Как можно выполнить две асинхронные функции параллельно и сократить время выполнения?
43. Что такое Pytest и что такое фикстуры?
44. Что такое мок и зачем он нужен в тестировании?
45. Какие есть типы индексов в PostgreSQL и зачем они нужны?
46. Что такое B-дерево и чем оно хорошо?
47. В чём отличие хеш-индексов от B-tree?
48. Что такое foreign key и зачем он нужен?
49. Какие есть типы JOIN в SQL?
50. Что такое GROUP BY, HAVING, и чем они отличаются от WHERE?
51. Что такое нормализация и нормальные формы в базах данных?
52. Влияют ли нормальные формы на бизнес? Где граница между технической необходимостью и избыточностью?
Лайвкодинг
53. Задача: Написать функцию, которая возвращает список студентов, сдавших курс, учитывая проходной процент.
student_results = {
"John": ["5/5", "50/50", "10/10", "10/10"],
"Sarah": ["4/8", "50/57", "7/10", "10/18"],
"Adam": ["8/10", "22/25", "3/5", "5/5"],
"Barry": ["3/3", "20/20"]
}54. Задача: Написать функцию, которая возвращает True, если два списка при объединении образуют последовательность без пробелов.
# consecutive_combo([7, 4, 5, 1], [2, 3, 6]) → True
# consecutive_combo([1, 4, 6, 5], [2, 7, 8, 9]) → False
# consecutive_combo([1, 4, 5, 6], [2, 3, 7, 8, 10]) → False
# consecutive_combo([44, 46], [45]) → True55. Задача: Оценить время выполнения функции.
async def get_data():
await get_users() # execution ~ 0.5 seconds
await get_orders() # execution ~ 1.0 seconds56. Задача: Написать SQL-запросы для таблицы "Продукты".
-- Таблица "Продукты"
-- id (int), name (varchar), company (varchar), product_count (int), price (int), is_discounted (int)
-- 1. Сгруппировать продукты по производителям, у которых цена выше 30000 рублей.
-- 2. Сгруппировать по производителям и найти группы, где более 1 модели и общая стоимость товаров выше 80000 рублей.