SQLAlchemy запрос: выбор авторов, у которых книг более пяти
Сгруппируйте Book по author_id, отфильтруйте группы через HAVING count(id) > 5 и выберите соответствующие объекты Author.
Читать ответПодготовка к интервью
166 вопросов с собеседований в X5
Что проверяют на интервью
Подборка объединяет вопросы, отмеченные на этапах интервью в X5. Здесь можно понять структуру технической проверки и заранее повторить связанные темы. В подборке чаще встречаются темы: frontend, database, sharding.
Каталог
Сгруппируйте Book по author_id, отфильтруйте группы через HAVING count(id) > 5 и выберите соответствующие объекты Author.
Читать ответlist_comp имеет тип list, set_comp — set, gen_expr — generator. Круглые скобки с for создают генераторное выражение, а не tuple comprehension.
Читать ответДобавьте Count по обратной связи Publication и отфильтруйте значение больше пяти. Точное имя связи зависит от related_name/related_query_name, поэтому его нужно сверить с моделью.
Читать ответz — генераторная функция. Вызов z() создаёт объект генератора, а каждый next продвигает выполнение до следующего yield, выдавая числа от 0 до 9 и сохраняя состояние между обращениями.
Читать ответСоедините Author и Book по author_id, сгруппируйте по автору и примените HAVING COUNT(b.id) > 5. Группировка по id не объединит разных авторов с одинаковыми именами.
Читать ответВсе три проверки напечатают True. Но поиск в генераторе потребляет его элементы: после нахождения 3 следующий next(z) вернёт 4, тогда как список и множество остаются неизменными.
Читать ответЗагрузите книги через Book.objects.select_related('author'). Тогда имя автора берётся из того же SQL-результата, и цикл не выполняет отдельный запрос для каждой книги.
Читать ответПоказанный фрагмент не выполняет ни одного SQL-запроса. all() и filter() только создают ленивые QuerySet; чтение БД начнётся при их вычислении.
Читать ответБудет выведено {1: 'c'}. Ключи 1, True и 1.0 равны и имеют одинаковый хеш, поэтому это одна запись; значение последовательно заменяется на 'b', затем на 'c'.
Читать ответx печатается как список чисел 0–9, y — как множество этих чисел без гарантии порядка. z — объект генератора: print показывает его представление, а не сгенерированные числа.
Читать ответСначала будут выведены 10 и 10, затем возникнет TypeError: генератор z не поддерживает len(). Список и множество уже содержат элементы, а генератор ещё только способен их выдавать.
Читать ответLEFT JOIN используется, когда нужно получить все записи из левой таблицы и соответствующие записи из правой таблицы, а если соответствий нет — то в правой части будут NULL.
Читать ответ