Агрегация ежедневных сумм и числа платежей
Сгруппируйте payment по дате и вычислите SUM(sum) вместе с COUNT(*). COUNT(*) считает строки платежей, включая строки, где сумма NULL, тогда как SUM такие значения пропускает.
Читать ответПодготовка к интервью
625 вопросов с собеседований в МТС
Что проверяют на интервью
Подборка объединяет вопросы, отмеченные на этапах интервью в МТС. Здесь можно понять структуру технической проверки и заранее повторить связанные темы. В подборке чаще встречаются темы: python, backend, devops.
Каталог
Сгруппируйте payment по дате и вычислите SUM(sum) вместе с COUNT(*). COUNT(*) считает строки платежей, включая строки, где сумма NULL, тогда как SUM такие значения пропускает.
Читать ответprefetch_related('articles') загружает одну выборку, а последующий articles.filter(deleted=False) создаёт новые запросы. В результате предварительная загрузка не устраняет N+1 для используемого фильтра.
Читать ответИспользуйте heartbeat и срок действия присутствия, а не единственный флаг online. Пользователь online, пока хотя бы одно его соединение или устройство имеет актуальный heartbeat.
Читать ответДля равенства по firstName и lastName начните с составного B-tree индекса по этим двум полям. Лучший порядок выбирают с учётом остальных запросов, а пользу подтверждают планом выполнения.
Читать ответАнтисоединение через NOT EXISTS возвращает значения B, для которых в A нет равного id. В данном примере это 4, 5, 6 и 8.
Читать ответИспользуйте NOT EXISTS с сопоставлением id: он оставит строки B без соответствия в A. Для приведённых таблиц результат — 3 и 4.
Читать ответДля AND подходит составной B-tree индекс по имени и фамилии. Для OR обычно нужны индексы с каждым из полей первым; один (lastName, firstName) не гарантирует быстрый поиск по одному firstName.
Читать ответСравнивайте строки двумя указателями и разрешите одно несовпадение. При разной длине пропускайте символ только в более длинной строке, при равной — в обеих.
Читать ответНовый MessageDigest записывается в общее поле, поэтому два create могут использовать один экземпляр после гонки присваиваний. Создание объекта на каждый вызов помогает только при локальной переменной.
Читать ответОдного обратного порядка мониторов недостаточно для гарантии: один поток может успеть захватить оба. Барьер после первого захвата заставит оба потока удерживать по одному монитору.
Читать ответВыберите сотрудников с salary < 30000 и ненулевым manager_id, для которого нет строки руководителя. Условие manager_id IS NOT NULL исключит сотрудников без назначенного начальника.
Читать ответПервый вывод: ["One", "Two", "Three"]. Второй содержит (1, 1), (2, 2), (3, 4): массивы отдельные, но экземпляры MyView общие.
Читать ответ