100+ вопросов Python для младших, средних и старших классов | Журнал "Вольт"
Вт. Окт 20th, 2020


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

Вопросы младшего разработчика

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

Общее для компьютерных наук и веб-разработки:

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

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

3. В чем разница между парадигмами процедурного и объектно-ориентированного программирования?

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

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

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

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

8. Как выглядит HTTP-запрос / ответ?

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

10. Что такое куки?

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

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

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

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

15. Каковы подходы к разработке API?

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

17. Что такое приемочное тестирование и почему оно используется?

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

19. Как писать модульные тесты?

20. Как лучше всего писать автотесты?

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

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

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

Python:

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

25. Что такое изменяемые и неизменяемые типы данных?

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

27. Что такое интроспекция?

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

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

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

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

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

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

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

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

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

37. Как работает понимание диктовки, понимание списка и понимание набора?

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

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

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

41. Что такое лямбда-функции?

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

43. Какие бывают исключения, ?

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

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

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

47. Как пользоваться встроенными коллекциями (список, набор, словарь)?

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

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

50. Что вы знаете из модуля коллекций, какие еще встроенные модули вы использовали?

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

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

53. Что происходит при создании виртуальной среды?

База данных:

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

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

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

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

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

Алгоритмы:

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

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

61. Что такое пузырьковая сортировка и как она работает?

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

Вопросы для среднего разработчика

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

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

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

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

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

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

67. Что вам нужно для сайта / сервиса среднего размера (redis celery cache logging metrics)?

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

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

70. Как провести обзор Кодекса?

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

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

Python:

73. Асинхронный Python: как это работает, почему, что находится под капотом?

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

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

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

77. Принципы работы и механизм сборки мусора, подсчет ссылок?

78. Как работают местные жители веток?

79. Что такое _слоты_?

80. Как аргументы функции передаются в Python (по значению или по ссылке)?

81. Что такое аннотация типа?

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

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

База данных:

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

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

86. Каковы уровни изоляции транзакции?

87. Какие бывают типы индексов?

88. Точечные вопросы по выбору двигателей OBD, OBD.

89. Внешний интерфейс: есть ли опыт работы с “современным” JS (Babel, Webpack, TS, ES)?

90. DevOps: вы работали с контейнерами Docker? Объясните основные термины K8s (кластер, модуль, узел, развертывание, обслуживание). Что такое кибана?

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

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

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

Вопросы для сеньоров

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

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

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

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

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

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

99. Знание языков, отличных от Python (опыт).

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

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

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

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

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

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

3. Существует база данных из трех таблиц – стандартная схема «многие ко многим». Вам нужно написать запрос, который объединяет три таблицы и возвращает определенный результат.

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

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

6. Младшему может быть предложено выполнить тестовое задание FizzBuzz.

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

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

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

10. Задание, демонстрирующее знание и понимание списков и толкований.

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)]

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

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



Source link

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *