Вопросы и ответы на собеседовании по Python 2021

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. Что такое авторизация и как она работает?

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:

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

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

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

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

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

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 и как они используются?

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

Базы данных:

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?

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

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

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

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. Джуниору можно предложить реализовать задачу FizzBuzz test.

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

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

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

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

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

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

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

Источник

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

Редакция 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:

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

Базы данных:

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

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

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

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

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

Алгоритмы:

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.

Базы данных:

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

На собеседованиях с 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.

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.

Источник

Топ 25 вопросов и ответов на собеседовании по Python

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

При этом Python — очень важный инструмент в арсенале любого разработчика. Для помощи вам я создал лучшее руководство по вопросам и ответам на собеседовании по Python, чтобы понять глубину и реальное их предназначение.

Помимо этих вопросов, вам также вероятно предоставят фрагменты кода, прочитав которые вы должны будете определить результирующее значение (или его отсутствие). Такие задания невозможно предсказать, и успешность их прохождения будет зависеть от вашего опыта программирования. Давайте начнем с самых популярных вопросов и ответов на собеседовании по Python.

Вопросы и ответы на собеседовании по Python 2021

1) В чем разница между модулем и пакетом в Python?

Каждый программный файл Python представляет собой модуль, который импортирует другие модули как объекты. Таким образом, модуль — это способ структурирования вашей программы. Папка с программой на Python называется пакетом модулей.

2) Какие встроенные типы доступны в Python?

Это один из наиболее распространенных вопросов на собеседовании. В Python есть изменяемые и неизменяемые встроенные типы.

К изменяемым относятся:

  • Списки,
  • Множества,
  • Словари.

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

  • Строки,
  • Кортежи,
  • Числа.

3) Что такое лямбда-функция в Python?

Лямбда часто используется как встраиваемая функция и представляет собой единственное анонимное функциональное выражение. Она применяется для создания нового объекта функции и его возврата во время выполнения.

Лямбда — это анонимная функция в Python, которая может принимать неограниченное количество аргументов и может иметь любое число параметров. Однако лямбда-функция может иметь только одно выражение или инструкцию. Обычно она используется в ситуациях, когда требуется анонимная функция в течение короткого периода времени. Лямбда-функции можно использовать одним из двух способов:

4) Что означает пространство имен?

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

Ниже приведены три типа пространств имен в Python:

  • Локальное пространство имен — включает локальные имена внутри функции. Локальное пространство имен временно создается во время вызова функции и очищается при возврате из нее.
  • Глобальное пространство имен — состоит из имен различных импортированных пакетов/модулей, которые в настоящее время используются в проекте. Глобальное пространство имен создается при импорте пакета в скрипт, и оно доступно до тех пор, пока скрипт не закончит выполнение.
  • Встроенное пространство имен — оно включает встроенные функции Python и встроенные имена для различных типов исключений.
Читайте также:  Народные восстания 17 века в России Таблица

5) Объясните разницу между списком и кортежем?

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

6) Чем отличается pickling от unpickling?

Любое руководство по вопросам и ответам на собеседовании по Python не будет полным без этого вопроса. В Python модуль pickle принимает любой объект Python, преобразует его в строковое представление и выгружает его в файл с помощью функции dump. Такой процесс известен как pickling. Для этого процесса используется функция pickle.dump() .

С другой стороны, процесс извлечения исходного объекта Python из сохраненного строкового представления называется unpickling. Для этого процесса используется функция pickle.load() .

7) Что такое декораторы в Python?

Декоратор Python — это некоторое обновление синтаксиса Python, сделанное для более простого изменения функций.

8) Разница между генераторами и итераторами?

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

9) Как преобразовать число в строку?

Один из самых распространенных вопросов на собеседовании. Мы можем использовать встроенную функцию str() . Для восьмеричного или шестнадцатеричного представления числа мы можем использовать другие встроенные функции, такие как oct() или hex() .

10) Как используется оператор // в Python?

Использование оператора // между двумя числами дает частное при делении числителя на знаменатель. Он также называется оператором деления без остатка.

11) Есть ли в Python инструкция Switch или Case, как в C?

Нет. Однако мы можем создать нашу собственную функцию Switch и использовать ее.

12) Что такое функция range() и каковы ее параметры?

Функция range() используется для создания списка из чисел. Разрешены только целые числа, поэтому переданные аргументы могут быть как отрицательными, так и положительными. Допустимы следующие параметры:

Где «stop» — это количество целых чисел для генерации, начиная с 0. Пример: list(range(5)) == [0,1,2,3,4]

Другие параметры: range([start], stop[, step]):

  • Start: устанавливает первое число в последовательности.
  • Stop: указывает верхний предел для последовательности.
  • Step: коэффициент приращения в последовательности.

13) Как используется %s?

%s — это спецификатор формата, который преобразует любое значение в строку.

14) Обязательно ли функция Python должна возвращать значение?

15) Есть ли в Python функция main()?

Да, есть. Она выполняется автоматически всякий раз, когда мы запускаем скрипт. Если вы хотите изменить этот естественный порядок вещей, используйте оператор if.

16) Что такое GIL?

GIL или Global Interpreter Lock — это мьютекс, используемый для ограничения доступа к объектам Python. Он синхронизирует потоки и предотвращает их одновременное выполнение.

17) Какой метод использовался до оператора «in» для проверки наличия ключа в словаре?

18) Как изменить тип данных списка?

Чтобы преобразовать список в кортеж, мы используем функцию tuple() .
Чтобы превратить его в множество — функцию set() .
Для преобразования в словарь — dict() .
Для превращения в строку — join() .

19) Каковы ключевые особенности Python?

Это один из распространенных вопросов на собеседовании. Python — это язык программирования общего назначения высокого уровня с открытым исходным кодом. Поскольку это язык программирования общего назначения, и он поставляется с большим набором библиотек, вы можете использовать Python для разработки практически любого типа приложений.

Некоторые из его ключевых особенностей:

  • Интерпретированный,
  • С динамической типизацией,
  • Объектно-ориентированный,
  • Англоязычный синтаксис.

20) Объясните управление памятью в Python.

В Python диспетчер памяти заботится об управлении памятью. Он выделяет ее в виде пространства в куче, в которой хранятся все объекты Python и структуры данных. В языке существуют 4 встроенных структуры данных. Данное пространство недоступно для программиста напрямую. Однако базовый API позволяет разработчику получить доступ к некоторым инструментам для написания кода.

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

21) Что такое PYTHONPATH?

PYTHONPATH — это переменная окружения, которая используется для включения дополнительных каталогов при импорте модуля/пакета. Каждый раз, когда модуль/пакет импортируется, PYTHONPATH используется для проверки наличия добавляемых модулей в существующих каталогах. Обычно интерпретатор использует PYTHONPATH, чтобы определить, какой модуль загрузить.

22) Чувствителен ли Python к регистру?

Язык программирования считается чувствительным к регистру, если он различает такие идентификаторы, как «myname» и «Myname». Проще говоря, он заботится, являются ли символы строчными или прописными.
Давайте посмотрим на пример:

Возникновение ошибки NameError означает, что Python чувствителен к регистру.

23) Объясните использование функций help() и dir() .

В Python функция help() используется для отображения документации по модулям, классам, функциям, ключевым словам и так далее. Если help() не получает параметров, она запускает интерактивную справочную утилиту на консоли.

Функция dir() возвращает допустимый список атрибутов и методов объекта, к которому она вызывается. Поскольку функция предназначена для получения наиболее релевантных данных (вместо отображения полной информации), она ведет себя по-разному с разными объектами:

  • Для модулей/библиотек функция dir() возвращает список всех атрибутов, содержащихся в этом модуле.
  • Для объектов класса dir() вернет список всех допустимых атрибутов и базовых атрибутов.
  • Когда ей не передаются никакие параметры, функция dir() возвращает список атрибутов в текущей области видимости.

24) Что такое модули Python?
Назовите некоторые наиболее часто используемые встроенные модули в Python?

Модули Python — это файлы, содержащие код на Python, который представляет собой либо функциональные классы, либо переменные. Модули являются файлами Python с расширением .py. Они могут включать в себя набор функций, классов или переменных, которые определены и реализованы. Вы можете импортировать и инициализировать модуль с помощью инструкции import . Изучив руководство по Python, вы можете узнать больше о модулях в Python.

Вот некоторые из наиболее часто используемых встроенных модулей в Python:
Операционные системы

  • os,
  • sys,
  • math,
  • random,
  • datetime,
  • JSON.

25) Объясните, что означает «self» в Python.

В Python «self» — это ключевое слово, применяемое для определения экземпляра или объекта класса. В отличие от Java, где self не является обязательным, в Python он используется как первый параметр. Self помогает отличать методы и атрибуты класса от его локальных переменных.

Переменная self в методе __init__ ссылается к созданному объекту или экземпляру, тогда как в других методах она указывает на объект или экземпляр, метод которого был вызван.

Хотите получить работу Python-разработчика?

Тогда вам нужно выполнить следующий алгоритм:

  1. Записаться на курс от Skillbox «Профессия Python-разработчик»;
  2. Познакомиться с индивидуальным наставником, который поможет вам создать свою первую программу на Python и получить реальный опыт разработки;
  3. Пройти 7 блоков обучения с разным уровнем сложности, знание которых можно приравнять к году работы;
  4. Защитить диплом перед реальными заказчиками. Это не сложно, так как к концу обучения у вас будет 2 проекта на Github и глубокое понимание Python;
  5. Вместе с опытными HR-специалистами составить резюме и подготовится к собеседованию;
  6. Пройти собеседования на подобранные для вас вакансии Центром карьеры Skillbox.

Переходите по ссылке и перенимайте знания у профи: Профессия Python-разработчик.

Источник

Как собеседовать Python-разработчика. Самые популярные вопросы

Python надежно занял третье место в списке наиболее популярных языков программирования (это подтверждает, например, рейтинг Stack Overflow 2020 года). В ближайшие годы сдавать свои позиции язык не собирается. И нужно понимать, как подбирать таких сотрудников к себе в IT-команду.

Язык повсеместно используют в Data Science, машинном обучении и при создании веб-приложений. В том числе такие лидеры, как Google, Facebook и Dropbox. Количество вакансий на том же HeadHunter постоянно растет, и сейчас уже достигло больше четырех тысяч.

Число рабочих мест для Python пока что растет быстрее, чем количество достойных программистов. Поэтому IT-рекрутерам, неизбежно, приходится брать в том числе и пока что не слишком «доросший» материал. Мы встречали такое даже у зарубежных стартапов: если команда крупная, приходится в том числе и выращивать новый капитал.

Работодатели берут только недавно выпустившихся студентов. Или тех, кто ещё только учится. А иногда на позицию джунов кандидаты попадают даже без релевантного высшего образования. Для таких кандидатов, как правило, проводят дополнительные испытания, и разбираются, понимают ли они вообще, куда идут.

Разумеется, основное требование — знание языка Python. Но на собеседованиях, особенно предварительных, нередко приходится проверять общую IT-грамотность соискателя: понимание им алгоритмов, технологий и структур данных.

И менеджерам, и ИТ-рекрутерам, и руководителям нужно уметь быстро отделить зерна от плевел. В этой статье мы попытаемся с этим помочь.

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

Итак, на собеседовании, особенно на должность джуна, на наш взгляд, стоит спросить про:

  1. Алгоритмы и структуры данных (в общем). Человек, разумеется, должен знать, как работают и что содержат массивы, связные списки, графы. В идеале — понимать, какая временная сложность алгоритмов при работе с ними. Знать бинарный поиск, алгоритмы сортировки.
  2. Структуры данных конкретно в Python. Какие есть, как используются, какие плюсы-минусы у каждой. Кортежи, строки, множества. Классно, если он знает структуры данных, встроенные непосредственно в язык. К примеру, defaultdict или OrderedDict.
  3. Изменяемые/неизменяемые типы данных. Чем отличаются, как можно использовать. Можно хотя бы просто попросить перечислить те, которые кандидат знает. В идеале — дать несложную задачу и спросить, какой тип данных лучше было бы использовать для ее решения.
  4. GIL. Что это, как работает. Если вы проводите собеседование на позицию junior developer, ответы на такие вопросы о потоках у него будут вряд ли. Но если знает — ему отдельный большой плюс.
  5. Как устроен Django/Flask. Соискатель должен быть знаком хотя бы с одним из популярных фреймворков. Уметь создать базу данных, написать пару запросов. Python — довольно простой язык, если люди с ним сталкивались, и относятся к делу серьезно, с такими вопросами не должно быть проблемы.
  6. Что такое декораторы, итераторы, генераторы, контекстные менеджеры. Для чего их используют и как они устроены. Отдельно — о functools.wraps.
  7. Основы работы интернета. Понимание основных протоколов, моделей OSI/TCP IP. Чаще всего можно задать «простой» вопрос — что происходит «за ширмой», когда в поиске вбиваешь Google.com.
  8. Асинхронное программирование. В чем заключается разница между процессами и потоками; какие существуют способы межпроцессорного взаимодействия.
  9. Утилиты командной строки. Можно попросить назвать несколько команд (до десятка), которыми кандидат пользуется чаще всего.Логические и математические задачи. Если вы хотите нанять разработчика с потенциалом, проверьте, чтобы кандидат по крайней мере знал теорию вероятностей и основы комбинаторики, а также умел работать числами в различных системах счисления. Хороший программист, который хочет расти, всегда будет рад решить что-нибудь новое и интересное.
Читайте также:  Как организовать отдел продаж типы структур и функции

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

Давайте конкретику. Какие вещи можно спросить, и какие ответы на них хочется ожидать.

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

Что такое хеширование? Хеш-таблицы представляют собой важные структуры данных, напоминающие ассоциативные массивы. В качестве ключей в таких структурах могут выступать не только числа, но и различные иные объекты. При этом существует важное условие: для получения каждого ключа требуется рассчитать особый код. Подобным действием занимаются особые функции, которые называют хеш-функциями. Им «кормят» на входе различные данные, и на выходе они возвращают уникальный хеш определенной длины. Даже если один набор данных пройдет через хеш-функцию много раз, результат будет тем же. А если набор отличается хотя бы на один символ, код получится совершенно другой. Хеширование защищает данные, и, к тому же, сокращает текст, и позволяет хранить его более компактно.

Любые ли данные можно хешировать? Конечно, нет. К примеру, не стоит хешировать список, имеющий свойство изменяться во время работы программы. В разные моменты его хеш будет отличаться, и система работать не будет. В общем случае говорят, что изменяемые объекты в Python не хешируются, а вот неизменяемые хешировать можно. Хотя это не совсем верно (понятия разные, хотя между ними и есть корреляция).

Язык предлагает много отличных методов для работы со строками, работать с ними в Python — сплошное удовольствие. В языке есть поддержка строковых литералов и «сырых» строк.

Строковые литералы — позволяют быстро обрабатывать/выводить крупные и многострочные блоки текста. Это удобно, к примеру, при работе с кодом HTML. В Python литералы строк заключаются в апострофы или кавычки (‘text235′ или «text235″). Это позволяет компилятору знать, что перед ним действительно стоит строка. При этом для длинных строк рекомендуется использовать тройные апострофы или кавычки (»’text235»’ или «»»text235″»»). В таком случае нам можно не вводить все непечатаемые символы вручную, мы можем набирать текст так, как нам удобно, спокойно используя клавиши Enter и Tab.

Сырые строки — отключают механизм экранирования. Что удобно, например, при работе с регулярными выражениями. Чтобы любая строка превратилась в сырую, достаточно указать перед ней символ ‘r’. Например:

Источник



1. Что такое WSGI?

WSGI — это метод обработки, предписанный Python при обработке HTTP-запросов. Если приходит HTTP-запрос, есть соответствующая функция обработки для обработки и возврата результата. WSGI указывает, как выглядят параметры этой функции обработки и как выглядит результат ее возврата? Что касается имени и логики обработки функции обработки, это не имеет значения. Проще говоря, WSGI определяет формат ввода и вывода функции обработки.

2. Каков жизненный цикл запросов Django?

  • . Когда пользователь вводит URL-адрес в браузере, браузер генерирует заголовок запроса и тело запроса и отправляет его на сервер.
    Заголовок и тело запроса будут содержать действие (действие) браузера, которым обычно является получение или публикация, которое отражено в URL-адресе.
  • URL-адрес проходит через wsgi в Django, затем проходит через промежуточное ПО Django, и, наконец, URL-адрес проходит через таблицу сопоставления маршрутизации и совпадает по одному в маршруте.
    После успешного совпадения одного из совпадений выполняется соответствующая функция просмотра, и последующие маршруты больше не будут соответствовать.
  • Функция просмотра запрашивает соответствующие данные в соответствии с запросом клиента. Вернитесь в Django, а затем Django вернет клиенту данные, которые хочет клиент, в виде строки.
  • Клиентский браузер получает возвращенные данные и отображает их пользователю после рендеринга.

3. Перечислите встроенные компоненты django?

  • .Admin — это компонент, предоставляемый путем добавления, удаления, изменения и проверки соответствующей таблицы данных в модели.
  • Компонент .model: отвечает за работу с базой данных
  • Компонент .form: 1. Генерация HTML-кода 2. Проверка достоверности данных 3 Проверка информации возвращается и отображается
  • Компонент .ModelForm используется для операций с базой данных, а также может использоваться для проверки запроса пользователя.

4. Перечислите 5 методов промежуточного программного обеспечения django? А сценарии применения промежуточного программного обеспечения django?

  • .process_request: при поступлении запроса авторизация аутентификации
  • .process_view: после сопоставления маршрута можно получить функцию просмотра
  • .process_exception: Выполнить, когда исключение
  • .process_template_responseprocess: выполняется при рендеринге шаблона.
  • .process_response: Выполняется, когда на запрос есть ответ

5. Кратко опишите, что такое FBV и CBV?

FBV и CBV, по сути, одно и то же: представление на основе функций называется FBV, а представление на основе классов — CBV.
Преимущества использования CBV в Python:
-. Повысьте возможность повторного использования кода, вы можете использовать объектно-ориентированные технологии, например Mixin (множественное наследование)
-. Для улучшения читаемости кода можно использовать разные функции для обработки разных HTTP-методов вместо того, чтобы судить по множеству «если».

6. Когда был создан объект запроса Django?

class WSGIHandler(base.BaseHandler):
——-request = self.request_class(environ)
Когда запрос переходит в класс WSGIHandler, выполнитьcellМетод, инкапсулируйте среду в запрос

7. Как добавить декоратор в программу CBV?

8. Перечислите все методы в django orm (все методы объекта QuerySet)

9. В чем разница между select_related и prefetch_related?

Предварительное условие: наличие внешних ключей может уменьшить количество запросов к базе данных и повысить производительность.
select_related получает все данные за один раз с помощью запроса, связанного с объединением нескольких таблиц, и выполняет запрос SQL только один раз
prefetch_related запрашивает каждую таблицу отдельно, а затем обрабатывает их в соответствии с отношениями между ними и выполняет два запроса.

10. В чем разница между фильтром и исключением?

Значения, полученные обоими способами, являются объектами QuerySet, фильтр выбирает те, которые соответствуют условиям, а exclude: исключает те, которые соответствуют условиям.

11. Перечислите три способа написания операторов SQL в django orm.

12. В чем разница между значениями и списком значений?

  • значения: список типов запросов — это словарь
  • values_list: список типа запроса — кортеж

13. Разница между файлом cookie и сеансом:

  • .cookie:
    cookie — это пара "ключ-значение", хранящаяся в браузере, которая может использоваться для аутентификации пользователя.
  • .session:
    сохранить информацию о сеансе пользователя на сервере, значение ключа — это случайно сгенерированная строка, а значение value — это содержимое сеанса.
    использует файлы cookie для сохранения случайной строки каждого пользователя в браузере пользователя.
  • Сессия в Django по умолчанию сохраняется в базе данных: таблица django_session
  • Flask и сессия по умолчанию записывают зашифрованные данные в cookie пользователя.

14. Как использовать django orm для создания данных партиями?

15. В компоненте формы django, если поле содержит параметр выбора, используйте два метода для обновления источника данных в реальном времени.

  • 1. Перепишите конструктор.
  • 2. С помощью поля ModelChoiceField параметром является объект набора запросов.
    авторы = form_model.ModelMultipleChoiceField (queryset = models.NNewType.objects.all ()) // множественный выбор

16. Какова функция параметра on_delete в поле ForeignKey модели django?

  • При удалении данных в связанной таблице работа текущей таблицы и связанного с ней поля
  • После django2.0, когда таблица связана с таблицей, необходимо записать параметр on_delete, иначе будет сообщено об исключении

17. В чем разница между настраиваемым фильтром и simple_tag в шаблоне django?

  • Пользовательский фильтр: <<параметр 1 | имя функции фильтра: параметр 2>>
    1. Может использоваться с тегом if
    2. Необходимо указать два формальных параметра при настройке
  • simple_tag: <% simple_tag имя функции параметр 1 параметр 2%>
    1. Можно передавать несколько параметров без ограничений.
    2. Не может использоваться с тегом if

18. Механизм реализации csrf в django

  • Шаг 1. Когда Django впервые отвечает на запрос от клиента, серверная часть случайным образом генерирует значение токена и сохраняет токен в состоянии SESSION; в то же время серверная часть помещает токен в cookie и передает его передняя страница;
  • Шаг 2. В следующий раз, когда интерфейсной части потребуется инициировать запрос (например, публикацию), добавьте значение токена к данным запроса или информации заголовка и вместе передайте их в серверную часть; файлы cookie:
  • Шаг 3. Серверная часть проверяет, соответствует ли токен, полученный в результате внешнего запроса, токену в SESSION.

19. Какой метод можно использовать для передачи токена csrf на основе django, использующего Ajax для отправки почтового запроса?

  • 1. Бэкэнд передает csrftoken во внешний интерфейс и отправляет это значение при отправке почтового запроса.
  • 2. Получите значение csrftoken скрытого тега в форме, добавьте его в данные запроса и передайте в бэкэнд.
  • 3. В cookie есть csrftoken, поместите значение csrftoken в заголовок запроса.

20. Сам Django предоставляет сервер запуска, почему его нельзя использовать для развертывания? (Разница между runserver и uWSGI)

  • 1. Метод runserver — это запущенный метод, который часто используется при отладке Django. Он использует собственный метод Django.
    Сервер WSGI запущен, в основном используется для тестирования и разработки, и способ запуска сервера запуска также представляет собой единый процесс.
  • 2. uWSGI — это веб-сервер, реализующий протокол WSGI, uwsgi, http и другие протоколы. Обратите внимание, что uwsgi — это протокол связи, а uWSGI — это веб-сервер, реализующий протокол uwsgi и протокол WSGI. uWSGI обладает такими преимуществами, как сверхбыстрая производительность, малый объем памяти и управление несколькими приложениями, и это производственная среда с Nginx, которая может изолировать запросы доступа пользователей от приложений приложений и реализовать реальное развертывание. Для сравнения, объем поддерживаемого параллелизма выше, что облегчает управление несколькими процессами, использует преимущества многоядерности и повышает производительность.

21. Как Django реализует веб-сокет?

  • Django реализует веб-сокет и официально рекомендует всем использовать каналы. Каналы обновляются до протокола websocket путем обновления протокола http. Гарантия связи в реальном времени. Другими словами, мы можем использовать каналы для обмена мгновенными сообщениями. Вместо использования длительных опросов и таймеров для обеспечения связи в псевдореальном времени. Он преобразовал структуру django таким образом, чтобы django поддерживал как протокол http, так и протокол websocket.
  • Официальный адрес документа:https://channels.readthedocs.io/en/stable/

Интеллектуальная рекомендация

Глава 6 Математические задачи ——— 6.14 [Fast Power] Последовательность Фибоначчи

Быстрое возведение в степень: Цель быстрого возведения в степень — добиться быстрого возведения в степень. Предполагая, что нам требуется a ^ b, согласно наивному алгоритму, мы умножаем a на b раз, та.

Используйте Python Mountination Sympy Algebrain операции символа

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

Источник