Обширный обзор собеседований по Python. Советы и подсказки

Всем привет!


Кратко о себе. По образованию я математик, а вот по профессии — программист. В сфере разработки с 2006 года. Хотя, поскольку программирование начали изучать ещё в школе, свои первые программки и игры я начал писать ещё в школе (примерно, с 2003). Так сложилось, что пришлось выучить и поработать на нескольких языках. Если не брать во внимание ВУЗ-овские лекции по С, С++, Бэйсику, Паскалю и Фортрану, то реально я работал с Delphi (более 6 лет), PHP (более 5 лет), Embedded (Atmel + PIC около 2.5 лет) и последним временем Python + чуть-чуть Scala. Конечно же без баз данных тоже никак не обойтись.


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


Как появилась эта статья? После 3-х недель собеседований, поисков, учёбы, бессонных ночей (часто прокручивал в голове возможные повороты событий, варианты ответов и т.д.) я получил достаточно много предложений. Первые два пришлось отклонить, поскольку закончился deadline по принятию решения, а я ждал предложений от других контор. В результате я принял для себя конкретный день, чтобы определиться и ждал результатов текущих и пройденных собеседований. Честно говоря, выбор у меня был достаточно сложный, поскольку варианты, между которыми я выбирал, в целом были очень привлекательными. В общем я решил поставить для себя приоритетом направление развития, а не условия и проект. Даже после принятия решения (и предложения) другие продолжали приходить (но для меня это уже было неважно).


Перед каждым собеседованием я довольно основательно готовился + подчитывал те места, ответы на вопросы по которых я либо не знал, либо не помнил, либо же не разобрался до конца.


Я ценил вопросы, которые могли реально показать моё понимание (либо непонимание) некоторых фундаментальных концепций. К большому сожалению такие вопросы можно было сосчитать на пальцах обеих рук.


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


Конечно же, этими вопросами не исчерпываются знания, которые должен иметь каждый опытный разработчик. Мне кажется, что некоторые вещи на практике уж очень редко используются, чтобы о них постоянно спрашивать. Более того, наверное я не ошибусь, если скажу, что 90+% вопросов элементарно гуглятся за 10-30 сек.


Некоторые вопросы я объединил в один — для экономии времени и пространства.
Также в конце статьи я дам ссылки, которые мне показались самыми интересными.


Содержание


Общая теория
  • Первый вопрос на большинстве собеседований: "Что такое SOLID?" Честно признаюсь, никогда не мог запомнить полную расшифровку этой аббревиатуры, поэтому либо объяснял своими словами, либо просил собеседника подсказывать хотя бы англоязычные названия, а я тогда смогу расшифровать. Мне поначалу казалось, что собеседник меня поймёт и примет такой вариант ответов, но почему-то в двух случаях ребята решили, что ответ на этот вопрос я не знал (лучше я не буду дальше это комментировать (рукалицо)). Лично я однажды перепутал Dependency Injection с Dependency Inversion.


  • Второй типичный вопрос: "Что такое REST?" а потом вдогонку "Что такое Restfull?" либо "Какие тут основные условия".
    Вы можете найти свой ответ. Лично я предпочитаю этот вариант.


  • Что такое HTTP? Какие у него есть методы?


  • Какие методы в HTTP идемпотентные, а какие — нет?


  • Понравился мне один вопрос про HTTP, с которым я никогда не сталкивался на практике, поэтому и не знал. Пускай у Вас есть довольно большой список URL страниц (например аудио или видео), которые нужно скачать на диск. Но для каждой из них нужно проверить, хватит ли на компе места для этих файлов. Как тут использовать HTTP (какие методы)?
    Правильный ответ — метод HEAD (прочитайте о нём). Лично я дал ответ, о котором собеседник даже не слышал (либо забыл) и быстрый поиск показал, что я был тоже прав (как вариант). Я указал, что воспользуюсь методом GET, но чтобы не качать весь файл укажу параметр Range с минимальным шагом. Хотя это будет работать только если сервер пришлёт в ответе ненулевой параметр Accept-Ranges. Я это пишу к тому, что этот вопрос только показывает, работал ли я с такой задачей или нет. Секундный поиск даст исчерпывающий ответ.


  • Какая разница между аутентификацией и авторизацией? Честно говоря, я сразу задал риторический вопрос: "а почему Вы упустили ещё идентификацию?". Этим я аккуратно пытался дать понять собеседнику, что осведомлён в этих вопросах.


  • Чем отличаются HTTP и HTTPS?


  • Что такое CSRF-token?


  • Какие форматы данных Вы знаете, кроме JSON, XML?
    Их слишком много, поэтому не буду ограничиваться конкретным списком.


  • Что такое SOAP?
    Дурацкий вопрос. Не люблю таких. Зачем спрашивать то, что используется раз в никогда, либо же точно не на моём проекте?


  • Какие шаблоны проектирования Вы знаете?
    Гугл Вам в помощь;)


  • На одном из собеседований по низкоуровневой разработке много спрашивали про алгоритмы.
    В общем желательно хотя бы примерно понимать что такое О-большое при оценке сложности алгоритмов. Так же, наверное, желательно знать базовые алгоритмы: простой поиск, бинарный поиск, сортировка, быстрая сортировка, работа с деревьями (обход в ширину и глубину). Один знакомый посоветовал мне прочитать замечательную книгу "Грокаем алгоритмы. Адитья Бхаргава". Не думал, что можно так красиво и просто объяснить достаточно сложные вещи. Читается на одном дыхании (честное слово)! Настоятельно рекомендую всем, кто, как и я, не считает себя алгоритмистом. Просто слов нету!



Python
  • Что такое PEP8? Как Вы к нему относитесь?


  • Какие шаблоны программирования Вам известны и как их можно реализовать?


  • Какие варианты реализации шаблона Singleton на питоне?
    Советую также понимать недостатки реализации через декоратор (особенно для тестирования). Самый элегантный и универсальный способ, конечно же через метаклассы.


  • Декораторы.
    Думаю, будет полезно прочитать и понять:



  • Как в питоне реализованы public, private, static методы?


  • Что такое Метаклассы?
    Советую полностью прочитать это либо это.


  • Не спрашивали, но я советую почитать про принципиальные отличия 2-й и 3-й версий (хотя бы 2.7 и 3.4).


  • Что такое new()? И чем он отличается от init()? В какой последовательности они выполняются?


  • Какие Вы знаете программы для проверки code style? Какие плюсы и минусы у них?
    Лично я работал с pylint, pychecker, но назвал три основные: pychecker, pylint, pyflakes, поскольку перед этим про них прочитал=) Кстати, вот свежий выпуск, где подробно рассказывается про инструменты для анализа кода Python.


  • Как Вы тестируете код? Что такое mocking?
    Лично я использую tox, unittest, nose, либо же смотрю, что скажет Travis. Про mock лучше погуглите.


  • Касательно тестов мне понравились такие вопросы:


    • что делать, если тестируемая функция использует удалённое подключение к внешним сервисам, которое иногда видает ошибку таймаута, 404 и им подобные?
    • что делать, если тестируемая функция занимает много времени на выполнение повторяющихся операций внутри неё? Например, внутри цикл от 1..1000000, где что-то считывается, записывается, рассчитывается.
      Советую прочитать про патчинг.

  • Какие Вы знаете структуры данных в пайтоне? Какие из них являются mutable/immutable?
    Лично я тепер знаю, что их достаточно много. Кроме типичных (dict, list, set, tuple) обязательно прочитайте про frozen_set, default_dict, ordered_dict (для новых версий уже не актуально) ну и то, что ещё будет в оф. доке (да-да, начните именно с неё).


  • Как работает хэш-таблица (словарь)? Что такое коллизии и как с ними бороться?
    Думаю, что для высоких позиций это имеет смысл знать.


  • Где будет быстрее поиск, а где перебор и почему: dict, list, set, tuple?


  • Как передаются значения аргументов в функцию или метод?


  • Что такое генератор? Чем он отличается от итератора?
    Есть статьи покороче, но мне понравилась вот эта. Тут есть много вещей, которые в коротких ответах на stackoverflow невозможно полностью раскрыть.


  • Что такое list/dict comprehension?


  • Конкретного вопроса не могу сформулировать, поэтому советую прочитать про introspection (использование dir(), dir, hasattr(), getattr()), name mangling.


  • Какая разница между одинарным (_) и двойным (__) подчеркиванием?
    Исчерпывающий ответ здесь.


  • Что такое GIL? Какие у него есть проблемы?


  • Что такое MRO? Какая разница между MRO2 и MR3 (diamond problem)?
    Начните гуглить и Вы сами всё поймёте.


  • Что такое и чем отличается old-style от new-style classes?


  • Что Вы знаете о Threading. Threading vs Multiprocessing?
    Советую прочитать и самому попробовать — http://effbot.org/zone/thread-synchronization.htm. Статья немножко старенькая, но дает хорошее понимание.


  • Работали ли Вы с asyncio? В чём его особенность?
    Рекомендую прочитать статьи про асинхронный пайтон и самим пощупать его.


  • Что такое garbage collector (gc)? В чём его плюсы и минусы?
    Думаю всё, что нужно для ответа, описано здесь.


  • Зачем нужен Celery?


  • Что такое async/await, для чего они нужны и как их использовать?


  • Есть функция:


    def f(sum, l=[]):
    l.append(sum)
    print(l)

    Что будет выведено на экран:


    l = [1]
    f(10)       // [10]
    f(10)       // [10, 10]
    f(10, l)    // [1, 10]
    f(10)       // [10, 10, 10]
    print(l)    // [1, 10]


Django/Flask
  • Как работает Serializer в Django REST Framework?
  • За что отвечает Meta в сериализаторе?
  • Какая разница в быстродействии между django и Flask (и почему)?
  • Какое предназначение этих фреймворков?
  • Как в django работает система аутентификации?
  • Как в django обрабатывается (и генерируется) CSRF-token?

Frontend
  • Что такое куки? Зачем они, как с ними работать и где они сохраняются?
  • Может ли сервер изменить (добавить, удалить) куки?
  • Что такое JWT (JSON Web Token)?

SDLC
  • Agile\scrum: все что необходимо знать
  • Какая разница между CI и CD? Для тех, кто в танке: CI — continuous integration, CD — continuous delivery
  • Какая разница между Scrum и Kanban?
  • Какие Вы знаете виды тестов?
    Гуглить в сторону: юнит-тесты, интеграционные тесты, приёмочные тесты и т.д.
  • Вопрос для тим-лидов (скорее всего): Что Вы будете делать, если на проекте нет тестов и заказчик не хочет тратить на их разработку время и деньги?
    Лично я апелирую к прибыльности для бизнеса заказчика.
  • Что такое Code Debt и как с ним быть (жить, любить, бороться)?

Git, Versioning, Refactoring
  • Какие системы контроля версий Вы знаете (используете)?
  • Что такое Git Flow?
    Советую просто почитать, поскольку это документированная вещь.
  • Что такое Git Rebase?
  • Что такое Git Cherry pick?
  • Какие инструменты Вы используете для code review?
    Лично я любитель гитхабовского веб-клиента (там полно интересных и удобных плюшек). Но мой собеседник решил, что я лопух и поставил мне "минус". Дома я погуглил и увидел, что есть много специализированного софта, который ну уж слишком похож на то, что я использовал более 3-х лет. Софт как софт — на любителя.
    П.С. Этот момент мне не понравился, поскольку стаж по code review у меня достаточно большой + приходилось постоянно читать коммиты длиной от 500 до 3000 изменений (да-да, на одном из моих крупных проектов такие комиты были нормой), а чел решил, что раз уж я не знаю других утилит — значит лопух.
  • Что такое форсированный push?
  • Что такое precommit check?
  • Что такое code cohesion & code coupling?

Базы данных

К моему удивлению, вопросы по этой теме мне показались уж слишком простыми (прям как для школы), кроме буквально 2-3-х.


  • Что такое транзакция? Какие у неё есть свойства?
  • Что такое уровни изолированности транзакций? Какие они бывают?
    Советую внимательно это прочитать, поскольку это фундаментальные вещи.
  • Что такое вложенные транзакции?
  • Что такое курсор и зачем он нужен?
  • Какая разница между PostgreSQL и MySQL?
  • Что такое VACUUM в PostgreSQL?
  • Что такое EXPLAIN? Какая разница между ним и EXPLAIN ANALYZE?

Big Data

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


  • Что такое Hadoop?… и HDFS?
  • Что такое MapReduce и как он работает?
  • Можно ли создавать много mappers и reducers (или указать их число)?
  • Какая разница между Hive и HBase
  • Можно ли создавать индекс в HBase?
  • Что такое repartition?
  • Какая разница между repartition и coalesce?
    Очень просто и доступно описано тут.
  • Что такое master election в Zookeeper?

Задачки

Удивительно, но только на одном из десятка собеседований меня просили написать код. Наверное потому, что на всех других хотели проверять код после теоретической части. А поскольку собеседования длились не менее часа (самое длинное — три часа!), а все вопросы так и не были заданы, то у ребят просто физически не оставалось времени на проверку кода.
Кроме практики ничего больше не посоветую.


  1. Есть файл, в котором содержаться слова разделённые пробелом. Например: "abba com mother bill mother com abba dog abba mother com". Нужно найти и вывести тройку слов, которые чаще всего встречаются вместе (порядок не имеет значения). То есть в моём примере тройки слов это "abba com mother", "com mother bill", "mother bill mother" и т.д. Тут правильным ответом должно быть "abba com mother" (частота — 3 раза).
  2. Напишите функцию обхода дерева в глубину (в ширину).
    Чтобы Вы не тратили время — приведу ссылку, где очень красиво и просто реализованы обе функции.
    Была ещё одна несложная задачка: написать генератор.

Вопросы и ссылки от меня

Для общеобразовательных целей стоит прочитатать следующие статьи:


  • "Вопросы на собеседование по питону". Я разные прочитал, но почему-то в закладки добавил только эти две — 1 и 2. Но советую погуглить ещё.
  • Ликбез по типизации в языках программирования.
  • Жаль что при обсуждении баз данных не было вопросов по САР-теоремме. Узнать больше можно здесь, более подробно.
  • Не знаю, почему не была затронута тема про микросервисы. Могу лишь предположить, что те, кто меня собеседовал, мало с ними работал либо уделял им должное внимание. Впрочем, если Вам будет интересно — вот хорошая статейка.
  • Также к моему удивлению, никто даже не задал вопросов об виртуализации, докере, контейнерах, Kubernetes. Советую хотя бы разобраться с докером, благо сейчас есть масса простых пошаговых инструкций с объяснениями.
  • Супер полезные ссылки по Python.
  • Дзен Питона в примерах.
  • Всем, кто работает с питоном думаю, стоит знать про классные нововведения.
  • Немногие из собеседников знали про словари в питоне то, что сам соавтор рассказывает здесь.
  • Никто не спрашивал про Lambda в питоне, но лучше понимать что это такое и с чем его едят.
  • Типы и трюки в питоне. Статья старенькая, но большинство "трюков" актуальны и сейчас.
  • Кстати, для любителей питона — дайджест самых свежих новостей и пр. материалов.
  • По фронту советую посмотреть краткую лекцию про цикл событий в JavaScript. Не думаю, что Вы знаете, как он работает на самом деле. ОЧЕНЬ рекомендую.
  • Касательно серверной части желательно понимать разницу между nginx и apache. В интернете полно статей. Если уж реально интересно, в чём там разница под капотом — вот статейка с примерами.

Совет всем, кто действительно желает достичь мастерства — не ленитесь повторять код в консоли (будь то питон, БД либо другие вещи). НЕ копировать, а именно повторять. Конечно имеется ввиду новый материал, а не тот, который Вы давно пишите вслепую.


На самом деле вопросов было раза в 3-4 больше. Кое что позабылось. Но самые главные я всё же привёл.


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


Кстати, вот неплохая матрица компетенций по различным областям в ИТ. Если Вам выпадет возможность проводить интервью, советую хотя бы понимать что нужно спрашивать и на какой левел, а не грести всех под одну планку (как это часто сейчас делается) — слишком уж много разных областей накопилось. Лично я не понимаю, зачем требовать от senior front-end отменного понимания работы БД, либо от senior back-end глубокого понимания работы движка браузера либо взаимодействия Event loop с renderer-ом браузера, или же вот от тестера — умения найти кратчайший путь во взвешенном графе и т.д. Надеюсь, смотря на эту матрицу, Вы понимаете, что я имею ввиду.


Искренне желаю успехов всем, кто решиться закрепить для себя и продемонстрировать другим свои знания с целью получить хорошее интересное предложение!


UPD:
Тут можно попрактиковаться проходить собеседования, если 4то — pramp.com. Спасибо non_smile за ссылку.

Поделиться публикацией

Комментарии 54

    +4
    Без лишней скоромности можно сказать, что ваш обзор шикарен по своей полноте

    Spoiler header
    Хотя конечно найдутся недовольные
      +1
      Спасибо за хорошие слова! Рад, что Вам понравилось.
      +1
      Отличная статья, спасибо.
      Не думал, что можно так красиво и просто объяснить достаточно сложные вещи. Читается на одном дыхании (честное слово)!

      Один в один слова моей супруги после прочтения данной книги, её восторгу не было предела, пришлось тоже прочесть и… нисколько не пожалел. Кстати книга не слишком объемная, прочел за пару вечеров.
        0

        Многие переходят с php на phyton. Как вам помог бэкграунд php? Понятно что бд, http одно и то же по сути

          0
          Думаю, мне найбольше помог опыт работы с Delphi (я на нём написал свою первую платформу по документообороту), а уж потом php (поскольку для него изучил 90% все основных шаблонов программирования). Для меня любознательность + интерес к своему делу — основные мотиваторы (наряду или после ЗП).
          Мне также помог знакомый, который показал все прелести работы на питоне=)
          0

          Ну, вопросы это хорошо, но только не по огромному кол-ву теории по языку, лучше дать задачу по типу Knight's Dial, ведь большая часть вопросов выше не дает гарантии на то, что вы сумеете решать задачи, а не собирать решение из коструктора лего. Дали бы ДО по Декартачам, что-нибудь аккуратно закодить — и уже ясно, что такой человек нуден компании, а вот человек который не имеет представление о всем этом, а только собирает из лего — бесполезен.

            0
            Личный опыт или просто предположение?
              0
              Всё вместе :)
              0
              1. У меня была цель не обучить других языку, а помочь при подготовке к собеседованиям.
              2. Я с Вами полностью согласен! Мне тоже непонятно зачем искать «швейцарский нож» для 2-3 задач. Разве что в долгосрочной перспективе такого сотрудника можно кидать на разные проекты.
              3. Из моей практики чаще полезно знать теорию и понимать, как оно работает под капотом. Это все зависит от Вашых обязаностей и проблем на проекте.
              0
              На какую зп в мск можно рассчитывать зная всё это?
                0
                К сожалению, это вопрос больше к рекрутеру, Вам и той фирме, куда Вы хотите попасть.
                +2
                Какая разница между аутентификацией и авторизацией? Честно говоря, я сразу задал риторический вопрос: «а почему Вы упустили ещё идентификацию?». Этим я аккуратно пытался дать понять собеседнику, что осведомлён в этих вопросах.

                Кричал
                  0
                  Агонь :D 3A оно такое...))
                    +1
                    Почему? Все должны знать разницу между идентификацией, аутентификацией и авторизацией — ничего необычного вроде нет, это базовые вещи.
                      0
                      Упустили там не идентификацию а accounting and auditing, по крайней мере так выходит из контекста. Буду благодарен если кто-то мне расскажет что такое идентификация и ее отличии от аутентификации. И как все это соотносится например с этим:
                      tools.ietf.org/html/rfc2904

                      Так или иначе, спасибо за статью!
                        0
                        Нет, из контекста следует только идентификация, аутентификация и авторизация — это стадии логина в любую систему, откуда вдруг взялся «accounting and auditing»?
                          0
                          Три стадии логина в любую систему это Authentication, Authorization and Accounting; если есть общепринятый стандарт, который описывает стадии логина в любую систему как
                          идентификация, аутентификация и авторизация
                          — буду признателен за ссылку.
                            0
                            Вот цытата с Википедии
                            Аутентификацию не следует путать с авторизацией (процедурой предоставления субъекту определённых прав) и идентификацией (процедурой распознавания субъекта по его идентификатору).

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

                            За ссылку спасибо. Век живи — век учись!
                      0
                      Дело в том, что между аутентификацией и идентификацией более тонкая грань, нежели между аутентификацией и авторизацией.
                      П.С. Этот вопрос был вырван из контекста вопросов по безопасности. Некоторые из них я тут упустил. Поэтому со стороны могло показаться некоторое задротство.
                      +1
                      Автор, ты красава !)
                        0
                        Спасибо за тёплые слова! Рад, что Вам понравилось!
                        +2

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

                          0
                          У Вас много терпения!
                          Такой детальный мануал получился! Кратко, внятно обо всём самом нужном.
                          +1

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

                            0
                            А есть нечто подобное для PHP?
                              0
                              В одно время я хотел написать что-то подобное, но, во-первых, таких статей очень много, а во-вторых, опираясь на свой пред. опыт могу уверенно сказать, что РНР не сравниться с питоном (даже не смотря на замечательные фреймворки типа Laravel и последний Zend). Хотя в седьмой версии и внесли много полезных правок, лично в моих глазах он не дотягивает до питона.
                                0
                                могу уверенно сказать, что РНР не сравниться с питоном

                                Не сравниться в чем?
                                  0
                                  Первым делом в глаза кинулась елегантность и простота языка Python. Более-менее чёткая и понятная стандартизация во многих вещах.

                                  Конечно, после использования некоторых шаблонов из GoF или из J2EE на РНР у меня был некий шок, ведь public/private/protected в чистом виде в питоне отсутствуют.
                                  Но благо, есть бенчмарки, где можно сравнить скорость работы, расход памяти и пр. для разных языков. В конечном итоге мой выбор пал на питон.

                                  П.С. Не хочу холиварить. Сам достаточно долго проработал на РНР и до сих пор считаю, что на нём можно реализовать 80-90% того. что нужно для веба. Остальное — через обходные пути.
                                  НО усилия, которые нужны для написания кода на РНР и аналогичного на питоне очень разные.
                                    0
                                    Первым делом в глаза кинулась елегантность и простота языка Python.

                                    Т.е. примитивность?

                                    Более-менее чёткая и понятная стандартизация во многих вещах.

                                    В каких, только опять же конкретно.

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

                                    Да, питон медленнее PHP в зависимости от задач в среднем в 3-10 раз.

                                    Сам достаточно долго проработал на РНР и до сих пор считаю, что на нём можно реализовать 80-90% того. что нужно для веба.

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

                                    НО усилия, которые нужны для написания кода на РНР и аналогичного на питоне очень разные.

                                    Справедливости ради стоит отметить, что питон сам по себе с вебом вообще работать не умеет, правда ведь? Или вы сейчас на полном серьезе сравнили какой-нибудь django/flask с vanilla PHP?

                                    П.С. Я не холиварю, просто немножко в недоумении с ваших оценок.
                              0

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

                                0
                                100%! Без практики вся теория — в топку!
                                0
                                JWT (Jason Web Token)

                                А не JSON-ли?
                                  0
                                  Спасибо, поправил очипатку=)
                                  +1
                                  Интересная и очень познавательная статья. С удовольствием прочитал. Сколько у вас ушло примерно времени на изучение самого языка Phyton?
                                  PS. У вас опечатка:
                                  про цикл событий в JavaScriptю
                                    0
                                    Спасибо, поправил.
                                    П.С. Очень много правок было=)

                                    Сам синтаксис язика очень приятный и учиться за пару недель.
                                    На практику у меня ушло около полугода. Теорию подтянул за 2-3 месяца. Благо, мой бэкграунд это позволил мне сделать с найменьшими усилиями. Также интересно и полезно было сравнивать уже известные язики с питоном.
                                    +1
                                    > По образованию я математик, а вот по профессии — программист.
                                    Так пишите, как будто здесь противоречие. У Вас как раз-то отличное образование для IT.
                                      0
                                      Вот бы про Java что-то подобное почитать и изучить.
                                        0
                                        Если доберусь к ней — озвучу;)
                                        +1
                                        pramp.com вот тут можно попрактиковаться проходить собеседования, если 4то
                                          0
                                          Спасибо за подсказку! Уже добавил в статью=)
                                          +1
                                          Спасибо, отличная идея и ее реализация!
                                            +1

                                            Честно говоря, секция по Python могла бы быть и лучше. Вопросов мало, и многие из них носят поверхностный характер.


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


                                            Что такое list/dict comprehension?

                                            Почему опущен set comprehension? Почему бы не рассказать про generator expressions? Как себя ведут такие выражения в 2 и 3 версии (скоуп наружу у list comprehension)?


                                            Как работает хэш-таблица (словарь)? Что такое коллизии и как с ними бороться?

                                            Почему бы не рассказать тогда и про то, как устроены list и tuple? Близость set к dict по внутреннему устройству?


                                            Кроме типичных (dict, list, set, tuple) обязательно прочитайте про frozen_set, default_dict, ordered_dict...

                                            Почему именно про них, а не рассказать про иерархию типов начиная с синглтонов и примитивов? Как устроены строки, почему отсутствует char и что, например, bool это подтипint? И, кстати, пишутся указанные вами структуры данных как frozenset, defaultdict и OrderedDict, без андерскоров.




                                            Ну и первая фраза тоже смущает


                                            Первый вопрос на большинстве собеседований: "Что такое SOLID?"

                                            Первый вопрос на собеседовании зависит от многих факторов — профиль работы компании, позиция, бекграунд ваш и вашего собеседника, внутренних правил и стиля внутри команды итд.


                                            Конкретно SOLID спрашивают в тех командах, где сильна парадигма настоящего ООП (а не простых вещей типа наследования, миксинов и абстрактных классов). В особенности в тех, где используются инверсия контроля/инъекция зависимостей/инверсия зависимостей/IoC-контейнеры.


                                            Тем не менее, немало компаний не спрашивают SOLID вовсе, и предпочитают сосредоточиться на внутренностях питона или на решении задач.

                                              0
                                              Спасибо за комментарий!

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

                                              3.
                                              Почему бы не рассказать про generator expressions?
                                              Почему именно про frozen_set, default_dict, ordered_dict, а не рассказать про иерархию типов начиная с синглтонов и примитивов

                                              Хорошая идея. Позже добавлю.

                                              4.
                                              Тем не менее, немало компаний не спрашивают SOLID вовсе, и предпочитают сосредоточиться на внутренностях питона или на решении задач.

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

                                              5.
                                              Честно говоря, секция по Python могла бы быть и лучше. Вопросов мало, и многие из них носят поверхностный характер.

                                              Я заметил, что это зависит от уровня знаний собеседника. Никто не будет спрашывать, какая разница между версиями MRO или работу garbage collector не зная ответа. Возможно, мне попадались собеседники, которым было интересно именно то, что я описал в статье.
                                              +1
                                              Как вы сами написали — ЗП по мотивации стоит не на последнем месте. И если абстрагироваться от конкретных цифр (их можно на hh посмотреть), то все-равно возникает вопрос — что часто квалификация и ЗП не связаны. Я знаю примеры очень дорогих и успешных компаний, где web-разработка базируется на php и уровень разработчиков невысокий, но ЗП там будут по рынку, а может быть и выше.
                                              Возникает некоторый диссонанс, что можно зарабатывать прилично (может даже больше) лабая на php и не зная большинства перечисленных вами вещей. И следовательно, работая в таких компаниях и получая хорошую ЗП, врядли получится сильно повысить квалификацию.
                                              Лично я стремлюсь к новым знаниям, постоянно изучаю, но все-равно чувствую, что до идеала еще далеко, даже если оставаться в рамках web-разработки на Python.

                                              Какого ваше мнение по данному вопросу, как вы выбирали работодателей, везде ли был высокий уровень и как вы это определяли?
                                                0
                                                1. К сожалению, сам неоднократно стыкался с несоответствием оплаты — знаниям. Как по мне, тут несколько факторов: как ты себя оцениваешь, за сколько готов себя продать, сколько стоит проект и сколько фирма готова тебе отстегнуть. После общения с соотв. ребятами просто стал понимать, что рынок диктует условия. Лично я видел проекты, где мидлу (по знаниям) платили как синьйору (по ЗП). Раз даже видел и наоборот.

                                                2. Вы очень хорошо описали причины, по которым я перешёл с Делфи а позже и РНР на питон и двигался дальше. Я тоже стремлюсь к новым знаниям. П.С. Я даже поэтому теперь чуть сместился с веб-разработки на питоне — в БигДату.

                                                3. А вот к подбору работодателей я подходил очень аккуратно. Для себя сложил матрицу, где выписал главные для меня параметры, а потом ставил очки после прохождения собеседования. Также у каждого параметра был свой вес (приоритет для меня). По итоговой оценке я выбирал.
                                                Среди главных параметров были такие (по убыванию приоритетов):
                                                — технологии используемые на проекте
                                                — состав комманды
                                                — ЗП
                                                — среднее время добирания
                                                — моя оценка уровня собеседования
                                                — размер фирмы
                                                и несколько других

                                                Для меня главное работать в хорошей комманде, у кого есть чему-то новому поучиться, перспективные технологии и пр., а уже потом ЗП (ней я могу пожертвовать)
                                                +1
                                                Как работает Serializer в django?

                                                Всё-таки в самой джанго нет сериализаторов. Они есть в библиотеке Django REST Framework
                                                0
                                                Не удивлюсь, если читатели потом сами будут проводить собеседования, опираясь на ваш материал. Получится автофокусировка внимания интервьюеров и респондентов на перечисленных вопросах.
                                                  0
                                                  Не вижу ничего плохого в этом. Сейчас «автофокусировка» на 10-ке не слишком нужных (или практичных) вопросах. Пускай их будет побольше=) В любом случае многое зависит от собеседников и их опыта.
                                                  Вы же сами понимаете, что такие обзоры только поднимают планку в требованиях к знаниям и опыту для обоих собеседников.
                                                  П.С. Описанные выше вопросы применимы в основном к уровням синьйор (макс. тим лид) и ниже. Для более высоких уровней они будут другими.
                                                  0
                                                  Поскольку статья понравилась, прочитал рекомендуемую книгу Грокаем Алгоритмы.

                                                  При осознании смысловой составляющей волосы зашевелились. Огромное количество ошибок как в повествовании, так и в приведенных алгоритмах, о которых рассказывает автор. С 6 главы (там где графы) автор явно начинает плавать в теории, и к 8 главе полностью перестает понимать, о чем это, собственно, он пишет. Второе переиздание не исправило положение.
                                                  Почитал первоисточник, вижу, что перевод великолепен, насчитал всего несколько ошибок перевода. Переводчик Е.Матвеев здорово поработал, но спасти эту книгу от провала только хорошим переводом — невозможно. На хабре есть отзывы про первое русское издание этой книги.

                                                  pawlissimo спасибо за сборник, только мне кажется, восторженная рекомендация подобной литературы не играет тебе на руку.
                                                    0
                                                    Спасибо за отзыв!
                                                    Вы правы, в книге есть опечатки (у меня в планах написать автору письмо). Я в восторге от того, каким образом автору удалось (как на мой взгляд) обьяснить суть работы некоторых алгоритмов и дать общее представление о них и о реализации. Согласен — последние главы ни о чём, НО цель ведь была немного в другом. Обьяснить нематематику алгоритмы, про которые ему на лекциях сказали по пару предложений, не очень простая задача. Конечно, для работы с алгоритмами нужно читать совсем другие книги. Да и цель моего обзора немного другая.
                                                      +1
                                                      Уже написал. Он очень переживает в комментариях на Амазоне, а на его собственном сайте adit.io оставить комментарий нельзя, только письмо. В errata.html он извиняется за ошибки, но там исправлены только базовые погрешности (типа 0.7 вместо 0.07 на 94 странице). Сами алгоритмы лежат на GIT неисправленными.
                                                      Цели каждой главы приведены в начале каждой главы книги, я наивно полагал, что именно эти цели планировалось достичь. :(
                                                        0
                                                        На гит-репозиторий не смотрел, поскольку все алгоритмы набирал вручную. Да и не вижу смысла копировать такие кусочки кода. Касательно тех, что были в книге, кажется. я только 3 очипатки нашёл. Возможно, мне (как математику, который учил фундамент и доказательства всех изложенных алгоритмов) всё показалось не таким страшным?
                                                        В любом случае, он попытался изложыть доступным язиком=) Надеюсь, желающие помочь исправят его ошибки.

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

                                                  Самое читаемое