Как стать автором
Обновить

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

Как вариант, можно попытаться сменить протокол с HTTP на что-то с гарантированной доставкой (AMQP и т. д.).


А как, по вашему, гарантированная доставка в AMPQ работает, если не через retry? Звучит так, как будто вы предлагаете спрятать проблему ретраев на нагруженный сервис в черный ящик, и представить что таким образом всё само заработает.
Есть типовые решения для определенных сценариев. Пользоваться или нет это выбор каждого в каждом конткретном случаи. Будет ли это черным ящиком зависит от того насколько вы захотите разобраться в том как это работает.
В данном примере должен быть circuit breaker
Кажется, статья должна называться «Типовые ошибки на техническом собеседовании в ДомКлик».
Потому что иначе вообще непонятно, о чем речь, при чем тут типовое собеседование и, скажем, GIL (а что это, кстати?).
Наверное вы правы. Подумаю как изменить заголовок. Хотя тут скорее на собеседованиях python разработчиков, чем именно в ДоиКлик
>Я опишу специфические вопросы для Python, но в целом статья подойдет для любого собеседования.
Вряд ли. Для любого собеседования некоторые вопросы тут вообще не имеют смысла.
Я опишу специфические вопросы для Python

Отличие процессов от потоков в Linux

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

А ошибка-то в чём? В питоне или ДомКлике?

В том, что статья раньше немножко по-другому называлась, и потому когнитивный диссонанс вырабатывался в бóльших количествах.
НЛО прилетело и опубликовало эту надпись здесь
В ядре Linux потоки реализованы так же, как и обычные процессы. Поток— это просто процесс, который использует некоторые ресурсы совместно с другими процессами.
Глубоко копать в тему в рамках этой статьи не планировал.
НЛО прилетело и опубликовало эту надпись здесь
Нет. Это просто то, что часто проскакивает на собеседованиях
Я прочитал начало и выпал в осадок. Как знание Linux связано с Python? Это вообще из другой области. Читал дальше и падал все ниже. Как AMQP связан с Python? Это про архитектуру в целом, к языку не относится вообще никак. Вы уж определитесь, вам нужен DevOps, System Architect, Linux/System developer или таки пайтон разработчик?
Я очень надеюсь что вы не относитесь к той компании, в которой у разработчика на React спрашивают сколько регистров у 486 CPU
Есть вопросы на конкретный язык, есть вопросы на общие знания. По linux вопросы задаются не каждому кандидату и не у каждой команды, все зависит от позиции и специфики задач.
Что касается amqp, то в проектировании конечных решений участвует вся команда, а не 1 архитектор, поэтому мы и задаем такие вопросы.
Тогда статью следовало бы назвать как-то вроде «Мы собеседуем людей на весьма специфическую должность, и вот вопросы на которые они не отвечают».
ИМХО системные программисты вам подошли бы намного лучше. Особенности форков и прочего — это же родная для системных C++ разработчиков среда. Ну и плюс AMQP тут как пристройка какая-то сбоку. Пайтон — это высокоуровневый язык, он специально создавался чтобы не думать о том что там творится под капотом на уровне OS. Более того, часто такое знать даже вредно, ибо невозможно знать вообще всё в IT, и избыток непрофильных знаний у кандидатов довольно часто означает недостаток профильных.
Пайтон — это высокоуровневый язык, он специально создавался чтобы не думать о том что там творится под капотом на уровне OS

человек, который ограничивает свои знания такими заявлениями ограничивает себя и в профессиональном росте. Плох тот Junior, который не хочет стать Senior. Вы от Senior тоже такого ответа будете ждать?
От Senior кого? Senior питониста, или Senior системщика?
Senior Python Software Engineer
Писать макросы для Excel и оптимизировать SQL-запросы Senior Python Software Engineer тоже должен уметь?
Excel не входит в стек используемых технологий разработки ПО, по крайней мере не этого блога. Базы данных входят в стек и поэтому да должен. Если программист пишет SQL — запрос то интересоваться, что выводит explain и как долго исполняется запрос, какие индексы задействованы, его обязанность.
В какой такой стек входит SQL у питониста? Который, к примеру, кодит нейросети? Или который на бигдату собеседуется? Или который последние 5 лет работал только с ORM? Питон — это не только веб, уже давно не. То что там у кого-то в блоке\компании требуется, это их частный случай, и я бы очень посоветовал им обновить название вакансии, чтобы люди не тратили на неё время. Я об этом выше и написал.
Вы немного перепутали причинно-следственную связь. Питонист пришел на собеседование и на него там посыпались вопросы по особенностям реализации форков процессов в определенной операционной системе. Это НЕ его профильная область. Он может интересоваться ей, а может и не интересоваться, вместо этого интересуясь разведением хомячков в тундре или новыми фичами в Vue.JS (кстати, 2 последних также удалены от классической сферы питон-разраба, как и первое). Допустим вы его загрузили непрофильными вопросами и он ушел. Да, он может потом загуглить ваши форки в линуксе, но какой от этого толк? Он уже ушел, вы потратили время, он потратил время. Ситуация диаметрально противоположная от win-win
Это уже не диалог, а демагогия. У любой вакансии есть не только заголовок, но и список задач, стек используемых технологий.

Что вы мне хотите донести: что программист с БД не умеет работать? Увольте, в таком диалоге я не буду участвовать
Пытаюсь вспомнить, как мне пригодились таблицы прерываний Ральфа Брауна, а также функции C-WinAPI, которые я изучал 20 лет назад, при программировании на питоне…
Неужели это сениору так нужно?
абстрагироваться от темы, наверно вы правы, действительно, как знание принципов работы двигателей внутреннего сгорания, или электродвигателей связано с управлением средствами передвижения, на которых эти двигатели установлены.
Наверно просто время такое.
Честно говоря все это похоже на какой то сюр, заходишь почитать про специфику вкатывания в Python а тут с порога: нюансы GIL, кишки Линукса. Точно подходящий инструмент для хайлоада?
Смотря что считать хайлоадом. Большинству проектов хватит с запасом при правильном использовании. А с учетом удобства и скорости разработки, хороший инструмент для многих задач, выключая вполне нагруженные сервисы. Быстрее чем на go или c++ не будет работать.
НЛО прилетело и опубликовало эту надпись здесь
это очень спорный вопрос. все зависит от того чем вы привыкли пользоваться и задачи которую решаете.
НЛО прилетело и опубликовало эту надпись здесь
А именно? Чисто из любопытства
НЛО прилетело и опубликовало эту надпись здесь
ясно, спс, уж лучше сразу яву тогда или c#
НЛО прилетело и опубликовало эту надпись здесь

Чем она вам не нравится?

НЛО прилетело и опубликовало эту надпись здесь
Даже пришлось перейти на Iphone, потому что был Galaxy Note 10 и с нужными мне приложениями он постоянно перегревался и по сути не работал, беспроводная зарядка вообще не работала, она постоянно отключалась из-за перегрева

Ну 7е ноты вообще самопроизвольно возгорались, их даже запретили проносить на борт самолетов. Думаете дело в Java?

Конечно на regex-redux есть аномалия, но возможно код не очень оптимальный написали

Ничего страшного, ведь считать n-problem или рассчитывать множество мандельброта нужно гораздо чаще чем применять регеэкспы.

потому что во всех других сценариях мы видим что Java медленней

Особенно хорошо это видно в тестах binary-trees, k-nucleotide, fasta.
НЛО прилетело и опубликовало эту надпись здесь
1) так может galaxy note 10 греется из-за неудавной батареи/контроллера и процессора либо кривизны рук Samsung разработчиков/проектировщикова не из-за того используется Java?

2) Как только тесты перешли от написания кода в С стиле(посмотрите свифтовые исходники первых трех с UnsafeMutablePointer) к использованию регеэксп либы то почему то Swift резко ударил лицом в грязь.

3) В fasta разница мизерная зато в binary-trees она пятикратная а в k-nucleotide трехкратная. Их вы предпочли проигнорировать. В чем же возможная причина? Общего между ними — использована пакетная либа платформы Foundation для многопоточности, а в Java аналогичные пакеты.

Итого в сухом остатке — если использовать встроеные в плаформы либы то почему то пропадает куда-то вся дутая производительность.
памяти Swift'ом съедено заметно меньше

Это да, есть такая беда у Java — съедать всю доступную память. С другой стороны выбирая между временем выполнения и памятью лучше выбрать время, оно стоит дороже.

PS Прекрасно представляю что из себя представляет Android изнутри и именно поэтому считаю что превзойти iOS по производительности это несбыточная задача.

Apple контролирует абсолютно все этапы работы приложения:
1) они задизайнили процессор на котором он будет работать и остальное железо
2) они целиком создали тулчейн на котором приложение будет собираться и разрабатываться
3) все драйвера и ядро операционной системы написаны ими же.
4) системные библиотеки платформы(рантайм языка приложений) точно так же полностью сделаны Apple
5) жестокий фильтр приложений, в том числе по признаку user experience и производительности.
У Google как «владельца» Android из этого есть контроль только над п4 и отчасти п2.
Железо клепают производители, они же пишут драйвера кто во что горазд. В сторе миллион приложений совершенно разного качества, практически без всякого контроля UX.
Я совершенно уверен что если бы Android использовал swift(go,c++,rust) для написаний приложений а iOS Java, то все равно ситуация была бы точно такой же.
НЛО прилетело и опубликовало эту надпись здесь
За большие приложения на go лучше тогда сразу убивать. За приложения реального времени на php -тоже.
НЛО прилетело и опубликовало эту надпись здесь
Ага ну да конечно, user space они же green треды из коробки(смысл вопроса про разницу kernel thread vs kernel process пропадает), внятная и стандартизированная memory model безо всяких GIL уже 20 лет как, неблокирующий IO из коробки(NIO), netty сервер для хайлоада(уже даже поддержку io_uring запилили), тонны потокобезопасных коллекций и примитивов синхронизации на любой вкус, огромное количество экспертизы размазанной по не менее огромному комьюнити, требования по знанию многопоточности предъявляются к разработчикам начиная еще с джуниор уровня.

Ну да Python прям смотрится на фоне Java явным фаворитом для highload.
НЛО прилетело и опубликовало эту надпись здесь
На Java написано огромное количество отличного софта, от Cassandra до много чего в экосистеме того же Hadoop. Помимо очевидных минусов, у нее огромное количество плюсов, включая библиотеки на любой вкус, большое количество кандидатов на рынке труда и так далее.
НЛО прилетело и опубликовало эту надпись здесь
>>Поток— это просто процесс, который использует некоторые ресурсы совместно с другими >>процессами.
Э-э… Это шутка такая, да?
В первую очередь (помимо других ресурсов), процесс обладает набором страниц памяти, он предоставляет «песочницу» для исполнения приложения. А поток — это, в первую очередь, контекст исполнения, предоставляет регистры процессора и стек. Это как-бы общепринятая терминология, в подавляющем большинстве ОС это так, и Linux тут не исключение.
В ядре Linux потоки реализованы так же, как и обычные процессы. Поток— это просто процесс, который использует некоторые ресурсы совместно с другими процессами.

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

Аж захотелось устроиться в домклик. встретимся через год)

Я правильно понимаю, что знание особенности «подкапотной» реализации потоков питона на Linux важно только, если создаёшь глобальные объекты на сотни мегабайт?
если создаете процессы/потоки в программе, то некоторые детали их работы знать полезно.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий