100+ вопросов по Python для Junior, Middle и Senior - Блог ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

Заказать звонок

Выбери свою IT специальность

Подписка

Заказать звонок

+38 099 757 27 82

100+ вопросов по Python для Junior, Middle и Senior

advertisement advertisement

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 30 сентября 2020 года. Оригинальная версия на украинском языке доступна по ссылке.

Редакция DOU пообщалась с разработчиками, которые проводят технические собеседования Python-специалистов для различных уровней, и собрала примерный список вопросов к кандидатам. Конечно, он не является исчерпывающим, однако содержит типичные вопросы.

 

Вопросы для Junior
 

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

Общее по Computer Science и Web Development:

1. Что такое инженерия и процесс разработки в целом?

2. Какие знаете принципы программирования?

3. Чем отличаются процедурная и объектов-ориентированная парадигмы программирования?

4. Какие основные принципы ООП (наследование, инкапсуляция, полиморфизм)?

5. Что такое множественное наследование?

6. Какие есть шесть этапов разработки продукта в Software Development lifecycle и какая разница между Agile и Kanban?

7. Какие есть методы HTTP-запросов и какая между ними разница?

8. Как выглядят HTTP-request / response?

9. Что такое авторизация и как она работает?

10. Что такое cookies?

11. Что такое веб уязвимость?

12. Какие знаете классические базы данных?

13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)?

14. Как происходит взаимодействие клиента и сервера?

15. Какие есть подходы к проектированию API?

16. Как использовать паттерны программирования?

17. Что такое Acceptance Testing и зачем его используют?

18. Что такое модульные и интеграционные тесты, API-тесты?

19. Как писать unit-тесты?

20. Какие есть best practices в написании автотестов?

21. Какие базовые команды системы контроля версий?

22. Как использовать Git?

23. В чем разница между хешированием и шифрованием?

Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Базовый, Python Углублённый, Основы работы с Git.

 

Python:

24. Python - интерпретируемый язык или компилируемый?

25. Какие есть меняющиеся и постоянные типы данных?

26. Что такое область видимости переменных?

27. Что такое introspection?

28. Разница между is и ==?

29. Разница между __init __ () и __new __ ()?

30. В чем разница между потоками и процессами?

31. Какие есть виды импорта?

32. Что такое класс, итератор, генератор?

33. Что такое метакласс, переменная цикла?

34. В чем разница между итераторами и генераторами?

35. В чем разница между staticmethod и classmethod?

36. Как работают декораторы, контекстные менеджеры?

37. Как работают dict comprehension, list comprehension и set comprehension?

38. Можно ли использовать несколько декораторов для одной функции?

39. Можно ли создать декоратор из класса?

40. Какие есть основные популярные пакеты (requests, pytest, etc)?

41. Что такое lambda-функции?

42. Что означает *args, **kwargs и как они используются?

43. Что такое exceptions, <try-except>?

44. Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)?

45. Напишите hello-world сервис, используя один из фреймворков.

46. Какие есть типы данных и какая разница между list и tuple, зачем они?

47. Как использовать встроенные коллекции (list, set, dictionary)?

48. В чем заключается сложность доступа к элементам dict?

49. Как создается объект в Python, для чего __new__, зачем __init__?

50. Что знаете из модуля collections, какими еще built-in модулями пользовались?

51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные с серверной стороны)?

52. Как Python работает с HTTP-сервером?

53. Что происходит, когда создается виртуальная среда?

Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Стартовый (урок 2, урок 4-8), Python Базовый (урок 1, урок 6, урок 7, урок 9), Python Углублённый (урок 1, урок 4).

 

Базы данных:

54. Какие есть базовые методы работы с SQL- базой данных в Python?

55. Что такое SQL-транзакция?

56. Как сделать выборку из SQL-базы с простой агрегацией?

57. Как выглядит запрос, который выполняет JOIN между таблицами и к самим себе?

58. Как отправлять запросы в SQL-базу данных без ORM?

Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.

 

Алгоритмы:

59. Что такое алгоритмы (например, Big-O notation)?

60. Какие есть базовые алгоритмы сортировки?

61. Что такое Bubble Sort и как это работает?

62. Что такое линейная сложность сортировки?

 

Вопросы для Middle
 

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

Обычно у мидлов спрашивают:

63. Ориентируетесь ли в *nix, можете ли написать скрипты/автоматизацию для себя и коллег?

64. Что такое многопоточность?

65. Что такое архитектура веб сервисов?

66. Как работает современное нагруженное веб приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)?

67. Что нужно для сайта / сервиса среднего размера (redis \ celery \ кэш \ логирование \ метрики)?

68. Как написать, задеплоить и поддерживать (микро) сервис?

69. Как масштабировать API?

70. Як проводить Code review?

71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют?

72. Что такое цикломатическая сложность?

 

Python:

73. Async Python: как работает, зачем, что под капотом?

74. Сравнить асинхронные web-фреймворки.

75. Что такое модель памяти Python?

76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы?

77. Принципы работы и механизм Garbage collection, reference counting?

78. Как работает thread locals?

79. Что такое _slots_?

80. Как передаются аргументы функций в Python (by value or reference)?

81. Что такое type annotation?

82. Для чего используют нижние подчеркивания в именах классов?

83. Статические анализаторы: Flake8, Pylint, Radon.

Ответы на некоторые из этих вопросов вы можете найти в видео курсе Python Углублённый (урок 3).

 

Базы данных:

84. Разница между SQL и NoSQL?

85. Как оптимизировать SQL-запросы?

86. Какие есть уровни изоляции транзакций?

87. Какие есть виды индексов?

88. Точечные вопросы по выбору БД, движков БД?

89. Front-end: есть ли опыт работы с «современным» JS (Babel, Webpack, TS, ES)?

90. DevOps: работали ли с Docker-контейнерами, объяснить основные термины K8s (кластер, pod, node, deployment, service), что такое Kibana?

91. Алгоритмы: что такое временная сложность алгоритма (time complexity)?

92. Углубленные знания Linux: как зайти на внешний сервер, работать с пакетами, настроить среду и выполнять операции?

93. Специфично для Data Science: как работать с пакетами для обработки и визуализации данных (NumPy, Pandas и другие)?

Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.

 

Вопросы для Senior
 

На собеседованиях с Senior`ами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика. Поэтому формализованных вопросов здесь нет. Однако, примером могут быть:

94. Что такое @property?

95. Каким образом можно запустить код на Python параллельно?

96. Как работать с stdlib?

97. Какие задачи решали с помощью метаклассов?

98. Что такое дескрипторы?

99. Знания других языков, кроме Python (опыт).

100. Какие технологические особенности реализации распределенных систем?

101. Какие есть низкоуровневые особенности языков и фреймворков?

102. Способы и методы управления памятью.

 

Бонус. Практические задания

 

1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высшие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное.

2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение.

3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат.

4. Даем ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, насколько глубоко он знает и понимает различные технологии.

5. Написать какой-то несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция).

6. Junior`у можно предложить реализовать задачу FizzBuzz test.

7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также, можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph).

8. Для Senior - игра «спроектировать за 5 минут...». Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли он отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»).

9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему.

10. Задание, которое демонстрирует знание и понимание list и dict comprehensions.

Looking at the below code, write down the final values of A0, A1, ...An.
            A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
            A1 = range(10)
            A2 = sorted([i for i in A1 if i in A0])
            A3 = sorted([A0[s] for s in A0])
            A4 = [i for i in A1 if i in A3]
            A5 = {i:i*i for i in A1}
            A6 = [[i,i*i] for i in A1]
            A7 = [i if i%2 else 0 for i in A1 if 2 < i < 8]
            ','.join(str(j**2) for j in range(10)) – what is this object ?

 

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

Place the following functions below in order of their efficiency. They all take in a list of numbers between 0 and 1. The list can be quite long. An example input list would be [random.random () for i in range (100000)]. How would you prove that your answer is correct? - profiling?
def f1 (lIn):
            l1 = sorted (lIn)
            l2 = [i for i in l1 if i <0.5]
            return [i * i for i in l2]

def f2 (lIn):
            l1 = [i for i in lIn if i <0.5]
            l2 = sorted (l1)
            return [i * i for i in l2]

def f3 (lIn):
            l1 = [i * i for i in lIn]
            l2 = sorted (l1)
            return [i for i in l1 if i <(0.5 * 0.5)]

 

То есть, на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно разбираться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.

 

12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40.

За подготовку материала редакция DOU выражает благодарность Михаилу Кашкину (Founder в Okumy и курсов по Python), Руслану Скире (Python Developer в CodeIT LLC), Бориславу Ларину (Python Developer в Prom.ua), Владимиру Обризану (Director в Design and Test Lab), Виктору Свирскому (Senior Developer в DataArt), Николаю Зорину (CTO в Jiji, проект Genesis), Владимиру Селюху (Team Lead в Prom.ua), Сергею Галабурде (Software Engineer в N-iX), Алексею Чуприкову (Lead Python Engineer в EPAM), Ивану Лучку (TL Data Science Specialist в Boosta), Олегу Новикову, Владимиру Щербинину, Роману Могилатову (Technical Leader в SoftServe), Вадиму Рудю, Натальи Кушнир, Андрею Лейцюсю, Роману Луцю и другим.

Перевел на русский язык Владислав Сверчков

КОММЕНТАРИИ И ОБСУЖДЕНИЯ
advertisement advertisement

Покупай подпискус доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

Стартовый
  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
59.99 $
Оформить подписку
Базовый
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
89.99 $
Оформить подписку
Премиум
  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
169.99 $
Оформить подписку
Notification success