Задачи собеседования python junior

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

Представляем перевод списка типичных вопросов по Python, которые задают на собеседованиях кандидатам. Этот список собрала редакция сайта DOU.UA, пообщавшись с разработчиками, которые проводят технические собеседования Python-специалистов.

Вопросы для Junior-разработчика

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

Общее для Computer Science и Web Development:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Python:

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

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

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

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

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

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

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

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

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

35. Чем отличаются друг от друга staticmethod и classmethod?

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

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

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

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

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

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

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

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. Что происходит, когда создается виртуальное окружение?

Базы данных:

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

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

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

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

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

Алгоритмы:

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

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

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

Вопросы для Middle-разработчика

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

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

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

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

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

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

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

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

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

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

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

Python:

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

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

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

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

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

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

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

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

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

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

Базы данных:

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 и другие)?

Вопросы для Senior

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8. Для сеньора — игра «спроектировать за 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 = 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

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

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

Источник

Python: вопросы на собеседовании. Часть I. Junior

Начинаем серию статей со списками вопросов, которые задают на технических собеседованиях питонистам. Разумеется, в эти списки войдут не все возможные вопросы, а некоторые из них могут показаться странными или даже тупыми, но все же стоит быть готовым к тому, что вам их зададут.

Вопросы

  1. Что такое Python?
  2. Что такое lambda в Python?
  3. Что означает pass в Python?
  4. Что обозначают *args и **kwargs при определении функции в Python?
  5. Что такое docstring в Python?
  6. Какие в Python существуют встроенные типы данных? Какие из них изменяемые, а какие неизменяемые?
  7. В чем разница между списками и кортежами?
  8. Какие ключевые слова могут быть использованы вместе с ключевым словом for ?
  9. Какие могут быть ключи в словарях Python?
  10. В чем разница между globals() , locals() , и vars() ?
  11. Что такое PEP8?
  12. Как работают срезы в Python?
  13. Что значит отрицательный индекс в Python?
  14. Что такое модуль __init__.py ? Для чего он нужен?
  15. Как можно поменять значения двух переменных в Python?
  16. Как можно посмотреть все методы объекта?
  17. Как можно получить документацию по методам объекта Python?
  18. Что такое модуль в Python? Что такое пакет в Python? В чем разница между пакетом и модулем?
  19. Можете ли вы написать многопоточное приложение в Python? В чем разница между мнгопоточностью (multithreading) и многопроцессностью (multiprocessing)?
  20. Что такое декораторы в Python? Как создать свой собственный декоратор?
  21. Что такое @classmethod , @staticmethod , @property ?
  22. В чем разница между @classmethod и @staticmethod ?
  23. Поддерживает ли Python в полной мере объектно-ориентированное программирование?
  24. Что такое атрибут __dict__ объекта Python?
  25. Что значит self ?
  26. Что делают функции __init__ ?
  27. Расскажите, как сделать исполняемый скрипт Python в операционной системе Unix.
  28. Что такое сериализация (pickling) и десериализация (unpickling) в Python?

Вопросы с кодом

  1. Как преобразовать строку, содержащую бинарный код ( 0 или 1 ), в число (целого типа)? Напишите программу, которая будет это делать.
  2. Как проверить, что кортеж A содержит в себе все элементы кортежа B? Напишите программу, которая это будет выполнять.
  3. Какой будет результат выполнения следующего кода:
def f(): x = 15 print(x) x = 12 f()
  1. Как преобразовать строку в число, состоящее из ASCII-кодов? Напишите программу для этой операции.
  2. Как удалить пустые строки (длиной 0) из списка строк? Напишите программу для этого.
  3. Создайте строку из чисел от 0 до 100 следующего вида: "0123456789101112. "
  4. Преобразуйте список, где есть повторяющиеся элементы, в список, где все элементы уникальны.
  5. Создайте список всех простых чисел, лежащих в диапазоне от 0 до 100 .

Источник

Читайте также:  Расчет интеграла в питоне
Оцените статью