python junior что должен уметь и знать
Какие знания нужны для Python Junior-а?
Составляю план на год. Начал изучать Python.
Что ещё понадобиться, что бы удаленно работать без запинки уже.
Оценить 6 комментариев
Максим Чернятевич: Имеется ввиду компьютеры вообще?
Ну железо собрать/разобрать могу.
А программирование основы только, потому хочу сразу набросать план на год, что изучать.
Вот список знаний, которыми должен обладать потенциальный Junior Python developer:
Уметь самообучаться, находить нужную информацию.
Иметь общие представления о том, что такое ОС и зачем она появилась.
Понимать что такое процесс и как он “живёт” в ОС.
Понимать что такое поток.
Понимать что такое сокеты и зачем они нужны.
Иметь представление о том, как устроен стек протоколов TCP/IP.
Понимать что такое Linux.
Уметь работать в sh.
Понимать что такое виртуализация и знать какие бывают типы.
Уметь настраивать виртуальные машины через vagrant или подобные инструменты.
Уметь работать с GIT(создавать ветки, разрешать конфликты, etc)
Понимать что такое ООП, на чём он основан и почему им удобно пользоваться.
Понимать что такое императивный и декларативный стиль.
Понимать что такое MVC
Понимать что такое декоратор(стандартный вопрос на собеседовании) и зачем он нужен.
Понимать что такое замыкание.
Понимать что такое интроскпекция.
Понимать асинхронную концепцию программирования.
Уметь работать с БД(хотя бы CRUD, join)
Уметь работать с nginx(хотя бы проксирование настроить)
+ Уметь писать тесты, понимать зачем это нужно.
+ Практические и теоритические основы по framework.
+ выполнить норматив по ГТО
+ не пить и не курить.
Так же можешь потренироваться по заданиям Юры Юревича.
Что стоит знать junior developer’y (python)
Я тут в комментах предложил написать список того, что следует знать джуну-питонисту, ходя на собеседования. Получилось обширно, решил сделать пост. Сам я пишу под django, но его в этом посте не затрагиваю.
Данные собраны по посещению примерно 13 собеседований (включая по удаленке) в Питере за 2 последних года. (искал работу трижды, последний раз 3 недели назад)
Собственно, сам список:
2) Потом декораторы. Их любят вообще все. Советую не просто почитать что это, а написать парочку, а потом написать декоратор который еще и аргументы принимает)
3) Что такое итераторы и генераторы, чем отличаются и как задать и тот и другой
4) Знать что делают методы класса типа __call__, __srt__, __init__, __next__ и т.д.
Почитать про то, какие есть базовые декораторы (property, staticmethod..)
Дальше общие вопросы, не связанные с питоном.
5) Следует знать про асимптотику функций, уметь расчитывать сложность. Почитать про популярные алгоритмы сортировки, особенно про то, что есть базово в питоне)
4) Почитать про популярные способы хранения информации и как (и за сколько) в них совершается поиск
5) Любят спрашивать про SQL, особенно про индексы. Мне с SQL помогли разобраться задачки на составление запросов, гугл выдает много сайтов, найти что-нить для себя не трудно
6) Про ООП следует понимать как работает механизм наследования классов, знать что такое mixin и как это применить. Про инкапсуляцию/наследование/полиморфизм меня спрашивали только 1 раз, но знать будет не лишним)
Вроде ничего не забыл)
Несколько раз мне встречалась задачки про взвешивания (Что то типа даны весы с 2 чашами и 8 монеток. Одна из них фальшивая и легче. За сколько взвешеваний можно найти монетку?)
Еще было пару раз задание накодить следующее: дана строка, содержащая скобки (), <> и []. Необходимо определить валидна ли эта строка (т.е. (а+<в-с>) валидна, а <а×(в+с>) нет.)
С поездом первое, что пришло в голову:
1. Включаем свет в вагоне номер 1 (в том, в котором мы изначально).
2. Идем вперед до следующего горящего света. Допустим это Х вагонов.
я больше половины всего этого не знаю\не использую.
считаю себя джуном.
зарабатываю себе кусочек хлебушка, написанием python модов для игрушки средне-популярной. Что я делаю не так?
Автор, подскажи источники откуда ты черпал информацию. Книги/видео?
Естественный отбор
Английский для программирования не важен!©
Им лучше не знать своих кумиров
Не заметил подвоха
Сообщество не токсичное, токсичны языки
Team leader & Junior
Первый день джуном (и последний)
Всем привет, хочу поделиться своим первым опытом на позиции Junior программиста.
Пишет на днях HR: «Мы заинтересовались в вашем резюме, приходите на собеседование». Ну ок, заинтересовались и хорошо. Пришел. Вопросы были общие, немного по технологиям которые я использовал, по ЯП и что делал или умею делать, к слову опыта и пэт-проектов у меня нету. На собеседованиях, до этого, я был от силы пару раз. Длилось оно 45 минут, и оказалось это не так страшно как я думал. Удивительно то что в вакансии было указано только знание алгоритмов, структур данных и ЯП. Ну да ладно. Через пару дней пришел фидбэк и пообщавшись с работодателем я согласился на стажировку/испытательный срок (trainee), которые должны длиться 2-4 недели. А теперь собственно то что меня сподвигло написать данный пост.
Человек который писал проект до меня (а писал это точно не джун) уволен, проект, на сколько я понял, никто кроме него не знает. И весь мой первый день состоял в том что я сидел, читал документацию и читал про эти технологии. К слову документации на весь проект 100 строк и примерно столько же строк комментов в коде, всего кода в проекте 14000 строк. Возможно мне не показалось бы это таким сложным при наличии менторства, но его не было.
Я имею представление о 30% от стэка технологий (который естественно на собеседование никто мне не сообщил). Так что вечером, после этого всего, подумал и решил, что больше туда не вернусь. Действительно ли джуны и стажеры должны заниматься такими вещами или мне просто «повезло»?
Супер-недо Junior Python или история о переквалификации
Итак, доброго вам времени суток, усаживайтесь по удобнее, мы начинаем.
В посте будет описана попытка переквалификации из одной сферы в другую, разобрано что сделано, что находится в работе и какие сложности лично я испытываю в таких условиях.
Сначала будет минутка истории. Представьте самого обычного среднестатистического человека. У него нет высшего образования (бросил/выгнали/нет денег/не сложилось), работает на работе, приходит домой, кормит кошку.
Пьёт пиво по вечерам, ну и потихонечку деградирует как может.
Сначала я пошёл в интернеты и узнал, что такой язык программирования есть (уже маленький успех). Нашёл гайды, мануалы и начал читать. И сразу стоп.
Я начал проходить курс, решать задачи поставленные в нём и иногда проводил супер много времени за этим занятием.
Пройдя первый из курсов мне пришлось взять перерыв. Средства заканчивались, работа которая была найдена отнимала неимоверно много времени, но использовать полученный навыки там было никак нельзя.
Это была моя ОШИБКА НОМЕР 3. Готовясь к смене рабочего профиля, позаботьтесь о том, чтобы у вас была работа, на которой вам хватает денег для того чтобы жить и которая предоставляет достаточное количество свободного времени для изучения нового. Работать 6/1 по 14-16 часов в день явно не то, что вам нужно для самообразования.
Было заработано достаточно средств и я продолжил проходить курсы, приступил к более углублённому курсу в язык, более сложные задачи. Материал начал восприниматься тяжелее. Мозг который уже отвык думать воспринимал всё в штыки. Но «русские не сдаются», так что если не получается, слушаем/читаем/делаем ещё раз. Попутно узнаём, что часто проще найти информацию на английском и перевести, чем шерстить в поисках инфы на русском. Заводим гит и учимся с ним работать.
Сейчас я подхожу к концу изучения второго курса и так как средства скопленные на последней временной работе начинают петь самые грустные, снова пришлось искать работу. Тут было принято решение, что нужно искать оплачиваемые стажировки. И тут началась эпопея с поисками первой стажировки. (Которая продолжается и по сей час). Выбор языка мне приглянулся, но теперь я обратил внимание и на требования рынка.
И тут я думал, что всё. Ну как бы, где человеку входящему в сферу взять столько и сразу. На собеседования меня никто не приглашал. Потом начал шерстить знакомых, может у кого-то что-то есть связанное с вакансиями. Следующей ошибки я не совершил, но был близок.
ОШИБКА НОМЕР 5. Не пренебрегайте знакомствами при поиске работы. Даже если вам неудобно/стыдно, лучше воспользуйтесь возможностью. Так я попал на своё первое интервью.
В следующий раз перед интервью я обязательно выпью валерьяночки, потому-что трясло меня примерно как школьницу при виде Джареда Лето, и тёк я примерно так же (но не там).
На собеседовании я узнал в каких местах у меня есть информационные дыры, чего недодали мне курсы, что нужно залатать. Естественно меня не взяли, но опыт был полезным, за что компании я благодарен.
Наступило сегодня. Завтра собеседование на должность связанную с IT очень косвенно, потому что ждать неделями или месяцами у меня пока нет средств.
Что делать дальше? Пока планируется придумать какой нибудь полезный в быту проект и реализовать его, выложить на гит, закончить текущий курс и начать новый. Ознакомиться с математикой и её использовании в machine learning, пройти курсы по алгоритмизации и искать собеседования в удобное для меня время.
100+ вопросов по Python для Junior, Middle и Senior
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на 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:
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,
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 (опыт).
Видео курсы по схожей тематике:
Python 3.8.6 Базовый
Python 3.8.6 Стартовый
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).
9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему.
10. Задание, которое демонстрирует знание и понимание list и dict comprehensions.
Подготовка к техническому собеседованию по Python
Как стать Python разработчиком
То есть, на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно разбираться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.
12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40.
Как проходит собеседование Python-разработчика: вопросы для джуниоров и мидлов
Собеседование — одна из наиболее стрессовых тем для разработчиков, но только первые двадцать раз.
Привет! Меня зовут Руслан, я один из наставников курса «Мидл Python-разработчик» в Яндекс.Практикуме. Около 12 лет я занимаюсь разработкой, из них девять — на Python. За это время я собеседовался на разные позиции десятки раз и сам провёл примерно пару сотен собеседований. Не всегда успешно :/ В этой статье поговорим о том, как снизить вероятность провалов и к чему быть готовым.
Предположим, что вы уже определились с потенциальным работодателем и вам предстоит собеседование.
В посте я расскажу про три основных этапа:
Подготовка к собеседованию
Организационная подготовка
Изучите детальнее компанию, в которую собираетесь устраиваться. Всегда приятно впечатляет, когда человек провёл домашнюю работу, разузнал про компанию и принёс с собой что-то полезное на собеседование. Это может быть список ошибок и возможных улучшений для сайта, предложения по улучшению ПО или неточность в тексте вакансии.
Естественно, говорить про это нужно доброжелательно. Ваша цель — показать, что вы внимательно относитесь к компании и стремитесь её улучшить, как если бы уже были её сотрудником (я надеюсь, что такое намерение у вас действительно есть, иначе зачем всё это?)
Про это много раз сказано, но повторю. Если собеседование планируется онлайн, убедитесь, что у вас хороший интернет, что вы не будете в гостях, что к вам не должен прийти курьер или водопроводчик.
Протестируйте заранее программу, в которой будет проходить собеседование.
Если собеседование проходит в офисе, убедитесь, что знаете, как доехать до места, и заложите побольше времени, чтобы не пришлось спешить и нервничать.
Техническая подготовка
Предполагаю, что писать на Python вы уже умеете. Но рекомендую перед собеседованием повторить основные моменты:
Тема | Примеры вопросов для джуниор-разработчиков | Примеры вопросов для мидл-разработчиков |
Python | ||
Общее | Что такое list comprehension? Как работают декораторы? | Как работают декораторы? Что такое __slots__? Как во множественном наследовании отрабатывается поиск атрибута? |
Типы данных | Какие типы данных бывают? В чем отличие list от tuple? | Как реализован тайп-чекинг в Python? Какие библиотеки для этого знаете? Как хранятся в памяти list/tuple/dict/set? |
Тестирование | Что такое TDD? | Какие тесты приходилось писать? Что такое мок-объекты? Приходилось ли использовать? |
Асинхронный код | Какие знаете способы выполнять код параллельно/асинхронно? | В чём отличие асинхронности от многопоточности? В каких задачах использовать асинхронность необходимо? В каких бессмысленно? |
Django | Как работают сигналы? Как в request появляется атрибут user? Что такое дата-миграция? | В последние версии Django подвезли асинхронищу, как это работает? ORM тоже асинхронный? |
Алгоритмы, паттерны проектирования | ||
Общее | Как работает бинарный поиск? Сортировка вставками? | Как высчитывается сложность алгоритма? Что такое бинарное дерево? |
Паттерны, подходы | Что такое паттерны проектирования? Какие знаете? | Как считается расстояние Левенштейна? Как устроен паттерн PubSub? Где в Django применяется паттерн мост? |
Базы данных | ||
В целом | Что такое транзакция? Как работают JOIN-ы? Зачем нужны и как работают индексы? Напишите запрос с GROUP BY. | Как дебажить медленный запрос? (в ответе ожидаем услышать про EXPLAIN и план запроса). Как обслуживать PostgreSQL-базу? Как настраивать репликацию? |
NoSQL | С какими NoSQL работали? Как работает Redis? | Зачем нужен ElasticSearch? Что будет, если размер данных превысит размер ОЗУ при использовании Redis? |
Администрирование | ||
В целом | Как устроен DNS? Что такое nginx? Как установить nginx на linux? | Как устроен CI/CD в gitlab или github, либо любой знакомый вам? В чём отличие http от https? Чем обеспечить ротацию логов? |
Другие тулы | ||
Git | Что делает git cherry pick? | Что такое gitflow? Что делают команды rebase, fixup, stash, revert? |
Docker | Приходилось ли использовать docker/docker-compose? | Что такое и зачем нужен docker volumes? |
При подготовке рекомендую посмотреть неплохую подборку из 300 вопросов собеседований на Гитхабе.
Что будет на собеседовании
Обычно собеседование проходит так:
Рассказ о себе
В начале традиционно вас попросят рассказать о себе. Нужно будет рассказать о своём образовании, релевантном компании опыте, о проектах, в которых вы участвовали. Если таких проектов нет, стоит что-нибудь сделать хотя бы в учебных целях.
Тут рекомендация простая: подготовьте и потренируйте рассказ заранее, чтобы не забыть ничего важного из-за волнения.
Техническая часть собеседования
Иногда это просто теоретические вопросы подряд из серии тех, что показаны в примерах выше. Иногда (и я сейчас чаще предпочитаю такой вариант) вас попросят подробнее рассказать, как устроен ваш проект во всех деталях, начиная от технического стека, устройства базы и заканчивая методами деплоя и работы на продакшене. Если такого проекта у вас нет, могут попросить рассказать, как бы вы его делали.
Вопросы про проект, которые вам могут задать:
Помимо вопросов могут попросить решить задачу.
По Python я обычно даю такую:
Написать параметризированный декоратор, который печатает время выполнения декорированной функции. Параметр декоратора — печатать время выполнения в секундах или в миллисекундах.
Как хранить иерархическую структуру в базе (например, такую)?
Тут я рассчитываю услышать про parent_id, materialized path и, особенно круто, про nested sets. Естественно, важно, чтобы кандидат знал (или придумал на собеседовании) суть этих подходов, а не их правильные названия.
Пример задачи по архитектурным решениям:
У вас в базе данных есть список сотрудников. Нужно отдавать его в API фронтенду постранично. Какой API реализуете?
Решение этих задач обычно помогает понять уровень кандидата — джун перед вами или более-менее уверенный мидл.
В компаниях уровня FAANG (Facebook, Apple, Amazon, Netflix, Google), а также в российских ИТ-гигантах (Яндекс, Рамблер, Мейл) обычно есть секция про алгоритмы, в остальных компаниях это зависит от позиции и предпочтений интервьюера. Я, когда собеседую на позицию «делать веб-проекты на Django», обычно не особо затрагиваю алгоритмы, разве что могу спросить про принцип работы бинарного поиска.
Хорошая подборка алгоритмических задач, по которой можно готовиться, — проект Эйлер.
Если не знаете ответ
Важно помнить, что интервьюер будет повышать уровень сложности вопросов, чтобы упереться в ваши границы — и он так будет делать на каждом новом блоке (python, базы и т.д.), поэтому не нужно переживать, когда вы не знаете ответ. Лучше сразу явно сказать, что не знаете или знаете только в теории. Гораздо хуже, когда кандидат говорит, что что-то знает, но пара точных вопросов ставят его в тупик. Нормально, что вы не ответите на ряд вопросов, так должно быть, не стоит об этом переживать.
Иногда будут вопросы, ответы на которые вы вроде бы знаете, но нужно время, чтобы подумать. А иногда интервьюер может специально задать вопрос, на который нет правильного ответа. В таких случаях лучше рассуждать вслух. Редко когда молчание дольше 10 секунд уместно на собеседовании, кроме случаев, когда вам явно дали время на обдумывание задачи.
Может случиться так, что вы завалите целый блок вопросов, однако не факт, что это будет причиной отказа. Например, моя слабая сторона — это алгоритмы, в этой части я никогда не был хорош на собеседованиях. В одну из компаний у меня была серия интервью, одно из которых было по алгоритмам, и его я практически полностью завалил, однако меня всё равно наняли — затащили софт-скилы и опыт в других вопросах.
Вопросы, чтобы понять, подойдёте ли вы команде
Помимо технических вопросов будет ещё блок о том, насколько ваши ценности, подход к работе, софт-скилы соответствуют компании и вашей будущей позиции — то, что англоязычные эйчары называют «Culture Fit».
Я обычно задаю такие вопросы:
Как выступать на публичных мероприятиях — это отдельный навык и тема отдельной статьи, но короткий и 100% рабочий совет — делать больше итераций. Если первые два–три выступления могут оказаться провалом, то на пятый–шестой раз вы вполне можете сорвать овации (или несколько предложений от эйчаров интересных компаний =).
«Делать больше итераций» — это в целом хорошая практика, чтобы прокачаться в собеседованиях, а также лучше узнать рынок, на котором вы работаете.
Ваши вопросы
Обязательно задавайте свои вопросы собеседующим. Спросите про потенциальные задачи, стек, команду, например:
Если вам отказали
Если вы получили отказ, попросите фидбек и проработайте его. Потренируйтесь решать задачи, с которыми не справились, подумайте, что вам нужно изучить лучше к другим собеседованиям. Попросите собеседующего или HR посоветовать вам книгу, статью или какой-то материал для дальнейшей прокачки.
Участие в собеседованиях — это навык, которому нужно учиться. И этот навык, как любой другой, нарабатывается с опытом. Вы можете не пройти по скилам, и это нормально, но постарайтесь оставить о себе приятное впечатление и сохранить контакт.
Будет здорово, если поделитесь примерами хороших вопросов и задач, которые вам задавали или которые вы используете сами в своих интервью.