Собеседование Python Middle / Senior. Вопросы и ответы + разбор от Техлида (IVI, VK, Avito)
全トランスクリプト
Да, если в двух словах о себе
писал, да, работал в Иве в ВК и в Авито.
Вот потом работал ещё менеджером в
Яндексе МТСе. Правильно преподавал в
банке, преподал в Яндекс-практикуме.
Вот. И сейчас ещё в шорткате. Вот если
это кратко про опыт, про языки,
наверное, больше всего работал с
питоном, с го. Но там помимо языка ещё
работал с другими технологиями. Вот
сегодня как раз хочется провести
медловый собис на
на питон, да, наверное, верхоуровню
хотим обсудить следующий вопрос- это как
бы процесс потоки, да, в общем, в
операционной системе и как бы с м в
Питоне, как это работает. Хочется
сегодня ещё поговорим про постгрес, а
может быть немножко заденем очереди
каширование, наверное, вот как. И если
ещё время останется, как раз поговорим
про архитектуру кода, да, про чистую
архитектуру, экснальную архитектуру. Вот
это в двух словах обо мне и что сегодня
будем обсуждать. Вот. А, Тим, можно тоже
тебя попросить вкратце описать свой
опыт? Тогда и будем тоже переходить уже
к вопросику.
>> Супер, конечно. Э, меня зовут Тимофей.
Ээ разрабатываю уже 6 лет, работал в
разных областях, компаниях, странах и в
большей степени разрабатываю бэкэнд на
основу на Python и плюс с го часто
смешанный.
Кайф. Супер. О'кей. А что? Давай тогда
пойдём с каких-нибуд классических
вопросов, да? Процессы, потоки можно
сказать вообще, как это работает на
уровне операционной системы, а потом как
раз перейдём уже к имплементации на
уровне питона.
>> На уровне операционной системы. Ну,
во-первых, когда мы говорим о процессах,
как бы стандартное, что приходит на ум,
что как бы процесс - это по сути инстан
каждого приложения, которое мы запускаем
вместе со всей э статически, динамически
выделенной память и так далее. Аа что
касается потоков, у нас как бы
процессоры многоядерные, и они могут
одновременно выполнять как бы много
работы, распаралливать. Но если у нас
даже одно ядро есть на процессоре, то у
нас есть встроенные механизмы
многопоточности, которые нам позволяют
прыгать, свичить контекст между одним
потоком и другим настолько быстро, что
это становится незаметно и таким образом
давать нам возможность параллельно
прогрессировать по нашим одновременным
задачам в приложении или во многих
приложениях.
>> Угу. А как насчёт изоляции э в процессах
и в потоках?
В процессах процесса всегда выделяется
как бы отдельная область памяти, которая
как бы тоже может расширяться. По-моему,
там оно расширяется по постранично
как-то, когда не хватает памяти. А
в потоках в потоках у нас есть э как бы
общая память процессов. Она может также
пересекаться между несколькими потоками.
То есть в одном потоке мы можем
акцессить ээ какой-то адрес памяти,
который из другого потока к нам пришёл.
То есть них в этом пла па плане есть как
бы локальная память, которая им
выделяется. Чаще всего это просто как бы
какой-то стек небольшой, но и
динамическая память, которая обычно
выделяется, она как бы доступна всем
потокам внутри одного процесса.
>> Угу. А вот как так получается, что в
рамках одного процесса мы можем
обмениваться информацией, а, например,
если у нас с тобой два процесса, мы не
можем или всё равно можем? Вот как
происходит обмен данными между
процессами? Обмен данными между
процессами чаще всего через очереди
происходится. Это отдельный механизм и
как бы механизм самой операционной
системы, которая позволяет нам делать
interprococess communication как бы
задачи, что мы можем вызывать из
отдельного процесса какую-то задачу и
обращаться и так обмениваться данными,
но не напрямую ссылаться на адрес
памяти.
>> А под очередью, что ты имеешь в виду,
что там у каждого процесса запускается
кавка, и вот они через кавку
обмениваются информацией. А
>> не совсем, как бы я как себе это
визуализирую. Это просто какой-то
как бы
мм отдельное хранилище. Может быть на
диске, как бы я как бы себе это мог
визуализировать. Может быть на диске,
может ещё как-то как бы в виртуальном
плане. Просто как бы какое-то хранилище,
куда можно положить какое-то значение и
достать его из другого процесса. Это
можно делать через файлы, через
interpress, communication постоянными
запросами туда-обратно.
>> А вот этот вот как раз взаимодействие
между процессами. А давай помогу. А про
сокеты может быть, ты слышал и путать с
веб-сокетами. Просто классические сокеты
>> и файловые дескрипторы. Тоже, наверное,
хочется вот об этом поговорить. Что это
такое?
>> А сокеты и файловые дескрипторы - это
как бы отдельный формат файлов, куда мы
можем поточно как бы стримить данные и
оттуда одновременно читать. То есть, в
принципе, когда мы разрабатываем
веб-сервер, мы в первую очередь когда
принимаем какой-то запрос из дня, мы
читаем из из сокетов как раз-таки
получаемые запросы, получаемые данные.
>> Угу. А файловые дескрипторы зачем нам
нужны там во всей вот этой вот истории?
>> Насколько я знаю, файловый дескриптор -
это идентификатор конкретного сокета.
>> Угу. Бывали у тебя какие-нибудь
проблемы, что там файлов дескрипторов не
хватает вообще? Что это такое за штука?
>> Не сталкивался. Не сталкивался. Так не
вспомнил.
>> Ну вот если будешь писать свой engx и
будешь делать нагрузное тестирование,
вдруг случайно можешь в это и уткнуться.
О'кей, хорошо, понял тебя. А смотри, а
давай тогда поговорим про контекст
свичинг. Да. Почему-то все говорят, что
он дорогой, что как-то вот что-то как-то
там, что-то там. Что можешь об этом
рассказать?
>> Насколько я как бы как я себе
представляю сам процесс контекст
ссвичинга, то нам в самую большую часть
времени занимает именно выгрузка нужного
фрагмента памяти, который мы используем
в другом непосредственном потоке.
>> В процессе или потоке?
>> В процессе. Ой, нет, в потоке. В потоке.
В процессе или в потоке.
>> Понял. Первый вариант больше устраивал,
но я уже ошибся, поэтому
А почему дорого? А, ну ты сказал, да,
что у нас выгружается стек на самом
деле, да? О'кей.
>> Угу.
>> А вот давай пока отсюда далеко не ушли.
Вот смотри, например, у тебя есть,
например, там 16 ядер, да? И вот,
например, э-э, когда ты делаешь
например, конфигурируешь даже неважно
Python приложение, да, или какое-то
другое приложение, а сколько ты вот в
рамках доступного примерно можешь
запустить процессов, сколько ты можешь
запустить потоков или вот там даже
вопрос о звёздочка примерно в
классически вот у тебя, наверное,
MacBook, да, сколько у тебя сейчас
запущено процессов и потоков примерно и
как там вот это всё происходит?
процессов и потоков, я думаю, я так на
шестнадцатиядерном.
Мм,
>> давай, может быть, знаешь, чуть-чуть
по-другому переконфигурирую вопрос. Вот
смотри, тебе нужно как бы у тебя тебе
вот как разработчику дали компьютер, на
котором будет запущено твоё
веб-приложение, и тебе нужно указать,
какое количество процессов, в какое
количество процессов ты будешь это
запускать. У тебя есть 16 ядер. Вот
сколько бы ты указал?
>> Сколько бы я указал? Аэ стандартно
поставил бы просто 20, а там уже смотрел
по Maxwor с переменной из э из
стандартного,
где она у нас в трейдинге, в
трейдинг-модуле.
Maxwers переменная, там мы назначаем.
さらにアンロック
無料でサインアップしてプレミアム機能にアクセス
インタラクティブビューア
字幕を同期させ、オーバーレイを調整し、完全な再生コントロールでビデオを視聴できます。
AI要約
動画コンテンツ、キーポイント、および重要なポイントのAI生成された要約を即座に取得します。
翻訳
ワンクリックでトランスクリプトを100以上の言語に翻訳します。任意の形式でダウンロードできます。
マインドマップ
トランスクリプトをインタラクティブなマインドマップとして視覚化します。構造を一目で理解できます。
トランスクリプトとチャット
動画コンテンツについて質問します。AIを利用してトランスクリプトから直接回答を得られます。
トランスクリプトをもっと活用する
無料でサインアップして、インタラクティブビューア、AI要約、翻訳、マインドマップなどをアンロックしてください。クレジットカードは不要です。