Forward from: Юрий Аверичев
Собес в Сбер:
Как параллельно выполнять задачи? Какой из них для какого класса задач сделан?
Ты говоришь, что потоки и асинхронность для IO-bound-задач, а можем мы все-таки как-то на потоках CPU-шку считать?
Есть 1000 процессов. Математика, складываем, умножаем. Есть тысяча первый процесс, главный, он эти таски плодит, рассовывает им данные, чтобы они считали. В такой архитектуре какие ты видишь подводные камни, которые могут бить по производительности?
Можем для простоты сравнить приложение на тысячу потоков и на тысячу процессов.
А какие у нас будут проблемы с передачей данных между главным процессом и воркерами?
Можем, например, произвольный объект туда отправить, какой-нибудь объект класса, модель из SQLalchemy, можем кинуть в другой дочерний процесс, чтобы он почитал атрибуты оттуда.
Можешь рассказать про словарик, как он внутри устроен, под капотом, и как решает коллизии?
А когда еще у нас вставка в словарик может стремиться к О(М)? Ну вот коллизий не происходит, но все равно вставка за О(М).
А вот в целом словарь, если с точки зрения памяти это непрерывная область или все-таки она может фрагментирована в памяти храниться?
Зачем нам в целом нужен генератор и как мы можем по виду функции понять, что вот это генератор?
Повлиять на созданный генератор, например, на генератор, который числа выдает, мы его сделали, пару раз next дернули, что-то получили, потом хотим сделать так, чтобы он переключил алгоритм на другой, по-другому начал формировать числа. Можем мы как-то уже с созданным генератором что-то сделать?
Можешь рассказать в целом про магические методы? Есть у класса магические методы New и Init. В чем они различаются?
Полгода нормально работало приложение, все с ним было хорошо, тут выкатили очередной релиз, и после релиза смотрим на метрики, там ЦПУ улетел в полку, там условно 20 ядер, например, на сервере, и он туда в двадцатку и улетел. На что будешь в первую очередь смотреть, как фиксить проблему?
Какие у нас есть индексы и зачем они нужны?
Как нам поможет индекс для операций записи на какой-нибудь таблице размером миллион строк?
Тогда для операции чтения, как понять, что есть смысл на колонку накидывать, что он даст какой-то прирост?
Представим таблицу, там фамилия, имя и город в России, где человек живет. Если у нас, например, Москва, Питер, Казань, еще 5 городов, есть смысл накидывать индекс? И если есть, то в каких случаях?
Если у нас есть тестовый стенд с подмножеством данных из PROD, можем ли мы сказать, что мы сделаем ExPlane Analyze на тестовой базе, перенесем на PROD и выводы сделанные на основе этого EXPlane будут валидны?
Можешь что-то про автовакуум рассказать, зачем он нужен?
Как параллельно выполнять задачи? Какой из них для какого класса задач сделан?
Ты говоришь, что потоки и асинхронность для IO-bound-задач, а можем мы все-таки как-то на потоках CPU-шку считать?
Есть 1000 процессов. Математика, складываем, умножаем. Есть тысяча первый процесс, главный, он эти таски плодит, рассовывает им данные, чтобы они считали. В такой архитектуре какие ты видишь подводные камни, которые могут бить по производительности?
Можем для простоты сравнить приложение на тысячу потоков и на тысячу процессов.
А какие у нас будут проблемы с передачей данных между главным процессом и воркерами?
Можем, например, произвольный объект туда отправить, какой-нибудь объект класса, модель из SQLalchemy, можем кинуть в другой дочерний процесс, чтобы он почитал атрибуты оттуда.
Можешь рассказать про словарик, как он внутри устроен, под капотом, и как решает коллизии?
А когда еще у нас вставка в словарик может стремиться к О(М)? Ну вот коллизий не происходит, но все равно вставка за О(М).
А вот в целом словарь, если с точки зрения памяти это непрерывная область или все-таки она может фрагментирована в памяти храниться?
Зачем нам в целом нужен генератор и как мы можем по виду функции понять, что вот это генератор?
Повлиять на созданный генератор, например, на генератор, который числа выдает, мы его сделали, пару раз next дернули, что-то получили, потом хотим сделать так, чтобы он переключил алгоритм на другой, по-другому начал формировать числа. Можем мы как-то уже с созданным генератором что-то сделать?
Можешь рассказать в целом про магические методы? Есть у класса магические методы New и Init. В чем они различаются?
Полгода нормально работало приложение, все с ним было хорошо, тут выкатили очередной релиз, и после релиза смотрим на метрики, там ЦПУ улетел в полку, там условно 20 ядер, например, на сервере, и он туда в двадцатку и улетел. На что будешь в первую очередь смотреть, как фиксить проблему?
Какие у нас есть индексы и зачем они нужны?
Как нам поможет индекс для операций записи на какой-нибудь таблице размером миллион строк?
Тогда для операции чтения, как понять, что есть смысл на колонку накидывать, что он даст какой-то прирост?
Представим таблицу, там фамилия, имя и город в России, где человек живет. Если у нас, например, Москва, Питер, Казань, еще 5 городов, есть смысл накидывать индекс? И если есть, то в каких случаях?
Если у нас есть тестовый стенд с подмножеством данных из PROD, можем ли мы сказать, что мы сделаем ExPlane Analyze на тестовой базе, перенесем на PROD и выводы сделанные на основе этого EXPlane будут валидны?
Можешь что-то про автовакуум рассказать, зачем он нужен?