Моковое собеседование на позицию Django Junior | Solvery + Django [ru]

Подготовка к собеседованию на Python Developer

Транскрипция видео:

  • так это вот супер китайский появилась надпись о том что мы начали и Тогда погнали Всем привет меня зовут Антон я основатель проекта solvery и рад вас всех здесь сегодня приветствовать потому что здесь не будет классно полезное событие сегодня проходит партнерский Стрим и классного сообщества Telegram канала джару где большое количество разработчиков находят себе ответы На многие вопросы и вместе мы решили Провести такой мокрый streams смог Вам собеседованием мог собеседование это как настоящая только такое тренировочное И

    00:00:19 - 00:01:35

  • сегодня у нас два участника Дмитрий Сергеев менторство вот классный Эксперт который уже более 7 лет коммерческого разработки много различных проектов сделал много ребят от меня интервал и Он сегодня пришел чтобы провести собеседование с другой стороны у нас один из участников сообщества к нам прилетел довольно большое количество заявок ему отобрали одного участника и это Лев вот собственно мы тогда будем стартовать я сейчас передам слово Диме Но немного перед этим расскажу как все пройдет у нас примерно час полтора часа на все про

    00:00:57 - 00:02:09

  • все первый час это как раз само проведение собеседования здесь будут множество различных вопросов разберемся какие темы пообщаемся и так далее помимо этого будет часть фидбэком где разберем вообще сам Собес разберем какие-то вопросы моменты и вы участники зрители также можете задавать свои вопросы в YouTube они будут прилетать нам сюда все происходит и во второй части стрима уже отвечаем на всякие вопросы вот Можно спрашивать что угодно по теме джанга желательно Вот но можно что-нибудь еще в принципе вопросы можно генерить и в

    00:01:35 - 00:02:48

  • процессе если они возникают Ну ответь отвечать на них будем уже в конце вот поэтому Давайте все дружно поддержим льва в чатике и Дмитрия тоже поддержим и всех поддержим вот так Что классного просмотра думаю всем кто сейчас на этапе подготовки К объектам поиска первой работы будет очень полезно чтобы посмотреть понять чем вы непосредственно можете столкнуться и на этом я передаю слово Диме Спасибо так Лев привет придется Как настроение готов отлично Надеюсь что да Хорошо Давай начнем с того что ты расскажешь про себя вот о

    00:02:12 - 00:03:37

  • свой опыт в программировании Как откуда ты пришел в программирование чем занимался Ну и что уже успел сделать скажи пожалуйста Ну значит 2007 года Я работаю в области АСУ т.п нефтегазового отрасли сначала начинал как инженер из 12 года работы руководителем отдела разработки спецпола у меня в подчинении находится два шар разработчика мы пилим 4 от 4 до 6 продуктов их поддерживаем 4-6 продуктов в год выпускаем их естественно поддерживаем и на пост гарантийное обслуживание берем ну и плюс сейчас оставшиеся люди у меня программи утп

    00:02:54 - 00:04:28

  • очень многие много у нас автоматизации на вба написано то есть как бы я и сам нам выбор очень много писал что-то писал на сишарпе приходилось вот собственно где-то около года назад пришло понимание что вот хочется как-то развиваться дальше Потому что вас утп Ну и в части нефти газа технологий он очень ограничен и ты шаг влево шаг вправо расстрел А хочется как-то развиваться и базы данных и поэтому почему-то выбор вот я не помню почему вот решил что по этому Вот Почему попробовал Джанго потому что

    00:03:41 - 00:05:10

  • начал смотреть резюме вакансии на HeadHunter и везде было прописано Джанго Ну вот собственно Почему и Джан решил попробовать достаточно интересно Много много не изученного Вот и в процессе обучения как непонятно Если ты просто читаешь непонятно нужно что-то делать У меня есть проектик который была необходимость связать данные из двух веб-сервисов мой склад и контур Маркет вот для розничного магазина Ну и собственно я решил что почему бы и нет написал его ну сейчас это Рабочая версия я потихонечку его развиваю допиливаю вот

    00:04:25 - 00:06:07

  • ну функционал там сильно ограничен не вьюшки я не использовал вот а и Да И вот еще один проект недавно решил попробовать нашел тестовый задание в интернете нужно было со стриппе связать стрипей дрф попробовал ну интересно тоже сделал проект выжил на github вот ну то есть ты получается не не с нуля все равно понимание Как работать языки программирования есть основа Да я в институте на третьем курсе купил книжку C плюс для чайников и на лекции по экологии сидел читал было капец как интересно вот собственно Ну да

    00:05:16 - 00:06:44

  • с институт плюс еще у меня образование техническое радиотехник вот поэтому программирование нам так или иначе преподавали в институте и собственно институтские какие-то Ну и я всю жизнь работаю войти в области АСУ т.п поэтому много мне знакомо то есть не с нуля отлично Ну смотри тогда мы сейчас будем обсуждать некую некоторые вопросы они изъезженные то есть на многих собеседованиях эти вопросы будут повторяться особенно на Junior то есть такие базовые Даже если ты немножко готовился то в принципе

    00:06:03 - 00:07:22

  • опять же без проблем Я думаю Хорошо как бы ты охарактеризовал язык программирования поэтому характеристики не компилируемый язык высокого уровня Вот наверное с динамической типизацией чтобы очень непривычно Что такое динамическая типизация Но если я вся прописываю объявляю переменную сразу прописываю тип на этот самый базы поэта не я в одну и ту же переменную могу положить и int могу положить и флот могу положить и строку вот поэтому строго динамическая типизация строгая Что значит [музыка] Нет есть понятно хорошо Как ты понимаешь

    00:06:42 - 00:08:29

  • ссылочную модель которая на которой построен поэтому а у нас каждая переменная не хранит значение само значение а хранит ссылку на ссылку на это значение в памяти на объекта то есть всех это указатели были здесь вот смотри например если мы создадим условно перемены мы будем так назвать это привычно создадим переменную А в неё значим значение единица далее мы создадим переменную B ей назначим значение переменной А то сколько объектов у нас будет И того сколько объекта будет создано два А и Б ну две ссылки объекта сколько

    00:07:42 - 00:09:24

  • будет 1 1 Для чего нужен счетчик ссылок не отвечу я если не буду знать ответ на вопрос сразу буду говорить что не знаю хорошо счетчик ссылок нужен для того чтобы сборщик мусора понимал Какие объекта уже не нужны в памяти можно выгрузить если мы создаем переменную ссылку на объект то у этого объекта счетчик добавляется как только она становится ссылок активных нету то сборщик мусора понимает что объект можно выгрузить освободить память хорошо Какие категории две больших категории типов есть в Python

    00:08:37 - 00:10:15

  • изменяемые не изменяемыми хорошо что можно отнести к неизменяемым а что к изменяемым Так давай неизменяемые int Ну стандартный тип infloat string Frozen Set и так изменяемые ну список список словарь сет нот все что в голову приходит сейчас хорошо а если мы сделаем это все правильно отлично если мы например переменная она значим значение строки значение единица переменная B назначение значение двойка и потом значение а назначим значение а плюс б что произойдет значение а единица значения B2 потом A +

    00:09:33 - 00:11:29

  • B затрудняюсь ответить станет ли единица тройкой или что-то другое произойдет Да вряд ли станет Нет не думаю что станет произойдет что-то другое другое на самом деле просто создан другой объект в соответствии с правилом который мы назначаем единица плюс двойка будут работать методы некоторые магические и будет просто создан Новый объект в виде тройки хорошо Как мы можем создавать функцию как можем показать что какой аргумент Какого типа через аннотации [музыка] но и также возвращаем значение тоже

    00:10:41 - 00:12:14

  • через нотацию [музыка] Какие типы данных мы можем использовать в виде ключей словаря ключей любые наверное кроме Но кроме списков Ну то есть in flot string можем использовать как-то это можно Ну вот как-то это конкретизировать Какие типы данных мы можем использовать базу базовые типы так ближе и если мы вернемся к двум категориям неизменяемым изменяемые То есть если говорить о базовых типах то мы можем использовать только неизменяемые вот Можем ли мы свой объект объект какой-то создать и его использовать в

    00:11:37 - 00:13:10

  • виде ключа нет так Что такое генераторы и итераторы сложно мне словами могу написать генератор но как он выглядит генератор списка квадратный скобочки и in Range вот генератор [музыка] тогда затрудняюсь ответить Хорошо ну давай тогда сделаем так что какие вопросы Мы останутся у нас подвешены да мы в конце обсудим Хорошо я постараюсь дать ответ что такое магические методы магические методы те которые у нас начинаются точечки через при обращении с точечной нотации двойной подчеркивание [музыка] и для чего они нужны

    00:12:32 - 00:14:40

  • были работы ну для использования не знаю как ответить на этот вопрос хорошо такой магический метод как инит наверное встречал Ну да конструктор так подробнее Ну если мы хотим при создании класса инициализировать его поля то в принципе мы можем это через конструктор сделать но ты правильный слова сказал инициализировать было бы наверное правильно говорить про метод и нет как инициализация Да смотри метод енид в первом аргументом принимает в себя аргумент селф получается это у нас что ну сам объект

    00:14:03 - 00:15:40

  • ссылка на самого себя ссылка на самого себя то есть на готовый объект то есть на инстанции класса правильно смотри тогда когда сделать можно такой вывод что это не конструктор потому что конструктор на выходе дает instance класс правильно Да я прошу прощения конструктор я привык всех там вот вот поэтому есть такой метод New встречал сначала работал видел пару раз встречал пару встречал чем Ну давайте такой образ задам нет Чем отличается от нее Ну New возвращает судьи из того что мы говорили New

    00:15:05 - 00:16:41

  • возвращает объект и нет не возвращает будет конструктором у нас да Ну то есть грубо говоря New нам даст какой-то материал абстрактно да А в инит мы уже там длину например добавим цвет Он уже станет вас более персонализированной Ну то есть тот объект с которым мы можем работать такие декораторы есть поэтому как Статик метод и Статик класс метод и Статик метод встречал причал Да ничего не нужны их разница Ну статический имеет насколько я понимаю это тот метод который можно можно использовать без не через базовый

    00:15:57 - 00:17:42

  • класс класс метод lasmeted он обращается к данным самого экземпляра статический метод работает насколько я понимаю с самим классом а чем тогда обычный метод отличается от квас метод Но если вот немножко уточнить обычно метод работает с инстансом а класс метод тогда чем отличается от обычного метода Какой первый аргумент принимает в себя класс метод [музыка] еще подумать не вспомню [музыка] так Статик метод Какие аргументы принимает да Какие параметры которые в самом методе входные параметры или

    00:16:58 - 00:18:47

  • [музыка] нет не принимает хорошо так [музыка] поэтому тогда пропустим Хорошо давай тогда Джанго уже будем переходить Да хорошо как бы ты описал модель проектирования джанга какие там основные конструкции имеются основные конструкции 3 конструкции которые используют Джанго модель вьюшка и и да как реализуется связь многие ко многим [музыка] можешь уточнить ну реально есть такое поле Да а как она реализуется на скажем так в разрезе базы данных через промежуточную таблицу как мы до можем добавить поля в это

    00:18:19 - 00:20:29

  • промежуточную таблицу Вот такая мы когда описываем модели и указываем связь мы не тумане при Make migrations примиграции при применении миграции таблица автоматически создается Да это все верно она создатель создается автоматически но например нам нужно хранить какие-то еще дополнительные данные в этой промежуточной таблице как мы можем это сделать не задавался таким вопросом Ну есть такой атрибут с RAW и мы в него Передаем отдельную модель которая создаем и не можем использовать хорошо что такое

    00:19:38 - 00:20:53

  • контекстные процессор и где мы их используем [музыка] Что такое сигналы сигналами я не работал единственное что я знаю это что-то наподобие вебхуков Ну примерно хотя бы вещи которые позволяют организовать событийную модель поведения вот если моими Какие события Там могут быть Ну скорее всего я бы смог предположить что вплоть до подключения к базе данных отключение от базы данных Ну вот что-то подобное Я не сталкивался с ним еще Давай тогда мы посмотрим [музыка] Но это вот в принципе все документация

    00:20:23 - 00:22:04

  • Какие есть способы расширить модель пользователя тоже не знаю я не с пользователями не вьюшки особо не сталкивался хорошо Что такое класс bassview в Джанги есть возможность описать View как функцию А можно описать как на основе класса с каких-то версий в документации написано что рекомендуется использовать класс bestview и в общем вот Юшка описывается классом Почему их удобнее использовать я так думаю что переиспользование Ну то есть удобство использования классов и классов вообще и удобство использования

    00:21:28 - 00:23:29

  • например Какие базовые классы Джанго нам предоставляет Мы про вьюшки сейчас говорим базовые классы вот классе есть некоторые классы уже сгенерированные Но это то что я помню detail если я не говорил deleteview использовал нет хорошо тут много поджига конечно нужно будет обсудить а давай к базам данных тогда перейдем Какие есть способы получить конкретный набор данных конкретный набор полей и в то же время в то же время использовать квас то есть модель Вот например есть такой метод есть такой метод как valuest

    00:22:42 - 00:24:30

  • который мы Передаем списки полей на выходе мы получаем список списков да то есть мы получаем на выходе не модель а просто данные Можем ли мы тоже можем ли мы использовать обычный обычную модель но в то же время не грузить все данные с базы данных То есть например нам description не нужен картинку не нужно загружать Мы вот только name title еще что-то какие-то поля просто ограничить количество получаемых данных [музыка] я сумею предположить что это должно быть это можно описать во Вью и по-моему

    00:24:10 - 00:25:37

  • через можно определить какой рецепт и поля которые мы запрашиваем я этим не пользовался Мне кажется что так а как мы можем реализовать или спор Как мы можем добавить ор Здесь нам нужно сравнить или или это значение какую конструкции Орф джанга это реализуется там есть точно такие конструкции Для таких случаев которыми я точно не пользовался к сожалению хорошо конструкция есть Единственное чем я пользовался это вот точные соответствия неточные соответствия исключить это то что я в своем проекте использовал но фильтр Да

    00:24:54 - 00:26:34

  • запятая в принципе интерпретируется как поэтому Что такое ленивый запросы от корресс это ленивый Запрос к базе данных что это означает а я наверное не совсем точно смогу ответить насколько я помню читал все запросы к базе данных Джанго не особо выгребает все что может выгрести если ему не указано из таблицы Ну это не совсем про это вот смотри [музыка] Ты когда создаешь этот он не всегда выполняется сразу то есть Ну я тоже отвечаю на вопрос по сути есть сеты которые выполняются сразу а есть которые не сразу Что значит они

    00:25:59 - 00:27:40

  • выполняются не сразу и какие такой рецепт Ну вот смотри есть такие методы как Get Create Count First Да это как раз таки методы которые не возвращают то есть есть методы которые возвращают калорисет то есть мы как claris эту добавляем метод и он же возвращает коврисет новый А есть методы которые не возвращают qr-сет например агрегации они возвращают уже готовое выражение вот как есть и здесь и сейчас но мы можем создать correset прописать его в нашем коде нигде его не вызвать и он не будет выполнить обращение к базе данных не

    00:27:01 - 00:28:24

  • произойдет Вот например фильтр он не выполняет не выполнять запрос базе данных он создает подготавливает запрос но запрос будет выполнен только когда тогда когда нам понадобятся эти данные То есть например когда мы запрашиваем список Мы хотим вывести их какую-то таблицу и исполнение этого запроса произведет только тогда когда мы уже будем рендерить таблицу не раньше то есть в любой момент кода он не будет выполнен Но только если мы его принудительно в лист не сохраним например как мы можем минимизировать количество

    00:27:48 - 00:29:05

  • запросов связанные таблицы минимизировать количество запросов связанные таблицы связанные таблицы Ну я так понимаю есть через Селект related и prefetchery lated как примерно работает ты понимаешь я могу попробовать объяснить мы поймем [музыка] исходя из примеров документации Джанги если на примере начинок и пиццы то они у нас имеют связь многие ко многим потому что начинки могут быть во многих пиццах в одной пицце может быть много начинок если мы будем запрашивать тыкве например все пиццы и начинки к ним тогда мы

    00:28:31 - 00:30:25

  • сначала мы получим такая проблема N + 1 то есть мы сначала запросим все пиццы а потом если перебирать будем пиццы в цикле как раз и будем создавать дополнительные запросы к связанной таблице с начинками Вот и то есть это будет много вопросов но если мы используем при обращении при вызове пицц запрос пресечь related с указанием таблицы начинок тогда мы сможем это выгрести но не мы Джанго выглядит это то есть мы укажем что нам нужно Какие данные нужны и мы выгребем это за два запроса Сначала мы получим

    00:29:34 - 00:30:59

  • все пиццы а потом данные связанных таблиц как я это понимаю [музыка] смотри я тебе задам вопрос Если ты принципе Попробуй на него ответить Давай представим что у нас базе данных 1 миллион там один миллиард записи Да и мы делаем например ордер object при фачери Уайт там ордер айтом точка О мы хотим получить в quare setty все миллион строк и можно добавлять как какой проблеме это может привести Но если миллион строк наверно мы сразу будем выгребать сразу скажем так это такая сделали небольшую оплошность то есть мы

    00:30:20 - 00:32:08

  • не планировали так делать но вот так сделали не обратили на это внимание что может произойти мы просто очень долго Наверное я сразу говорю не знаю но предполагаю что мы просто очень долго будем получать эти данные вообще приходили в этот работает таким образом что сначала мы делаем цикл по всему по всей выборке а как правило привычный в этот мы используем припагинации То есть например на странице мы выводим 25 значений то при этом будет доставать 25 связанных значений на каждую запись создаст свой

    00:31:25 - 00:32:49

  • с 25 ключами смотри как это работает Сначала мы проходимся в цикле по всем 25 записям мы создаем словарь в котором ключом будет первичный ключ каждая запись из 25 а значение будет индекс то есть мы Обращаемся к этому словарю мы будем точно знать в каком месте листа находится под каким первичным ключом запись Понятно объясню да Ну объяснил конечно понятно но и Смотри дальше получается мы делаем по префекцию этой таблицам запрос Select где первичный ключ входит в список этих значений 25 значений и он нам достает например там 150 строк

    00:32:08 - 00:33:56

  • далее мы пробегаемся по этим 150 строкам и просто закидываем разные объекты соответствующие значения и если мы например сделаем ковер сет из миллиона строк то у нас получится такой запрос где мы будем проверять Входит ли первичный ключ в список из миллиона айтишников то есть вот такой огромный запрос у нас получится и обрабатывается на Бэн Конечно будет очень долго то есть Нам нужно будет сначала миллион миллионному списку сделать цикл и далее потом еще из этого миллиона мы получим допустим 7-8

    00:33:02 - 00:34:30

  • миллионов записей ордер это их нужно будет раскидать по всем заказом Ладно давай тогда немножко чистого SQL Как нам получить Как нам проверить что в таблице есть данные через Count а еще как мы можем сделать возможно используя аккаунт затрудняюсь Ну ты же наверное понимаешь что аккаунт это не самая простая операция то есть Нам нужно в принципе посчитать количество всех записей правильно если их очень много тока он будет выполняться не сразу не мгновенно а нам нужно всего-то простая операцию знать если

    00:33:46 - 00:35:07

  • данные или нет Как мы можем это сделать очень быстро таблица У нас существует Да конечно не знаю не сталкивался Ну например такое выражение Select единица From там таблица лимит один сработает но Согласись каунт будет работать намного дольше чем лимит один но соглашаюсь да то есть Нам нужно мы получаем одну запись если она есть значит данные в ней есть если мы ничего не получаем то да Хорошо что такое транзакции транзакции гарантированные В общем гарантированная гарантии того что операцию которую мы записываем в

    00:34:48 - 00:36:23

  • транзакцию будет совершена она либо закончится успехом либо изменений не будут вкатываться в базу А если несколько запросов у нас находится внутри транзакции все будут Ну либо выполнится все либо не выполнится ни один [музыка] Что такое индексы в базе данных И как мы их применяем как применяем не скажу мы их используем для чего они вообще принципе нужно для насколько я знаю для ускоренного поиска для ускорения работы [музыка] так принципе с джанга с базы данных все немножко http у нас будет Какие категории статусов ответа

    00:35:52 - 00:37:32

  • существуют Я помню попробую по диапазонам значит 200 одну 200 можно 200 Значит у нас все хорошо 300 редиректы 400 это по-моему ошибка на стороне клиента 500 это ошибка на стороне сервак а что-то я не помню информационные хорошо запомнил Спасибо В чем отличие Get и пост запросов в Гете мы Передаем открыто все впустишь ровно еще гет на получение пост на запись так на записи значит что у нас есть внутри запроса что-то что мы записываем как это называется Ну тело запроса Ну да нет запроса хорошо Как мы можем

    00:36:50 - 00:38:53

  • [музыка] Ну вот это принципе ответить на вопрос как передавать данные Какие еще методы передают тело запроса какие методы еще тело запрос вот дед не передает тело запросы у него нет тела просто есть тело Какие еще методы передают тело апдейт чуть-чуть чуть-чуть Джанго ушли возвращаемся почти Ну какие какие Давай перечислим Какие еще методы запросов У нас есть Delete так но там тоже должны передаваться данные Мы же должны что-то удалить Ну насчет делиться это такое как бы в документации об описании протокола

    00:38:05 - 00:39:50

  • написано что возможно возможно передавать данные Но как правило никто не пользуется этим то есть в этом нет необходимости то есть тело мы можем передать Но не обязаны его обрабатывать скажем так хорошо делит Какие еще есть [музыка] на этом еще путь передает тело запросы почитать как мы в методах Гетто можем передавать данные в методе Get передавать данные тело запроса у нас нету но данные нам надо как-то отправить заголовок вариант но не очень удобно тогда не знаю такой такая вещь как correstring

    00:39:13 - 00:40:50

  • а ну да Можем ли мы в методе Get Отправить файл я ни разу так не делал наверное предположу что Нет раз я так не делал Ну вообще чисто теоретически мы можем Вот но на практике никогда скорее всего это не пригодится то есть мы можем закодировать файл base64 например стринг его передать но размер такого файла будет ничтожным скажем так и длина строки мы должны понимать что есть ограничение не практическое но допустим сервера некоторых некоторые могут настроены быть на конкретную длину стринга и она

    00:40:18 - 00:42:01

  • 2048 символов там рекомендованы Хорошо ну давай тогда мы попробуем сформулировать некоторые простой функционал для джанга какого-нибудь проекта суждение как принципе ты будешь реализовывать допустим у нас есть некоторые магазин у него есть продукты и мы хотим добавить в эту систему избранное Ну то есть такой функционал как избранное Как как бы ты это делал у каждого пользователя должен быть список избранного там нажимать допустим на сердечко и у него его профиль показывается именно те товары которые он добавил в Избранные

    00:41:11 - 00:42:40

  • как бы ты это реализовывал но и ходу Конечно давай подумай но наверное бы я бы завел попробовал завести новую модель избранного Какие бы в нем поля были значит там должен быть айдишни но избранный должно ссылаться на какого-то пользователя которому относится и на какой-то товар [музыка] То есть это минимум что должно быть [музыка] Как нам как нам сделать например [музыка] чтобы мы открывали список товаров любую категорию открываем и у нас то тот товар который избранный помечался что вот он нас добавлен в Избранное

    00:41:59 - 00:43:54

  • Как мы можем это сделать что товар добавлен в Избранное Понятное дело что у некоторых будет стоять например сердечко у других не будет стоять сердечко Наверное ты понимаешь что каждый товар проверять добавлен в Избранное или нет не очень быстро скажем так не очень эффективно Ну то есть нам где-то это же нужно хранить Какие товары мы добавим вот мы уже завели модель избранного у нас уже добавляется он попал запись пользователь такой продукт такой все в таблице данные у нас появилась Как мы можем эти данные применить на список

    00:43:06 - 00:44:35

  • товаров список товаров Как мы можем эти сердечки проставить одним запросом как проставить Но нам нужно выбрать то есть нам это через электролей Ты наверное если мы про запросы не сложно если честно там у нас получается модель монитомы нет поэтому мы на продукт не можем применить но если мы используем конкретно мы не можем так сделать То есть мы не можем сделать чтобы он проверял и по продукту и по пользователю То есть он только по продукту свежий например а у продукта могут несколько пользователей могут добавить товар в

    00:43:58 - 00:45:36

  • продукт поэтому получится один магнитным если у нас между ними связь многие ко многим тогда мы в этом случае Должны мы можем использовать Только пресетчере лэйты я не [музыка] смотрели этот Но вообще в принципе а сам механизм при фачевой этот вот я немножко его коснулся он в этом если его понимать как он работает то мы можем сделать это одним запросом реализовать в нашем списке то есть мы рендерим список продуктов те же 25 записи Да берем их айтишники берем айтишник пользователя и запрашиваем все записи из таблицы

    00:45:00 - 00:46:41

  • избранного по этим айтишникам и этого пользователя получаем некоторые список из не более 25 записей и далее мы просто пробегаемся по этому списку И проставляем сердечки грубо говоря на тех записях которые совпали То есть у нас избранного не может быть в этом случае больше чем товаров если мы если мы будем использовать prefetchuated то у нас единственный механизм будет проверки это мы будем проверять на All то есть этот Он еще работает на несколько фильтров можно туда добавить и мы добавляем по продукту это у нас

    00:45:54 - 00:47:18

  • внутренний механизм припячивает и добавляем туда ID пользователя Но тогда нам нужно будет Такую конструкцию делать что Каждый каждый продукт Когда мы будем дарить мы будем вызывать продукт избранное точка О если он возвращает что-то то это будет добавлен в Избранное что как бы не очень красиво скажем так вот проще будет просто сделать один запрос получить не более 25 записей не более чем продуктов у нас от рендерина на странице и просто пробежаться по этому по этому запросу по результату этого запроса и

    00:46:41 - 00:48:02

  • где у нас совпадение получается там и избранные Вот Но это механизм преподчиво это очень удобно его много где можно использовать вот принципе у меня вопросы Все вот мы можем сейчас быстро пробежаться по этим вопросам на который ты затруднялся ответить Вот я думаю тебе будет полезно конечно так Ну давай сначала поднимусь посмотрю что тут у нас есть Опа это Ну значит смотри что мы можем использовать в качестве ключей словаря ты правильно сказал что простые типы данных неизменяемые мы можем использовать

    00:47:25 - 00:48:43

  • Однако есть такой тип как Table Вот но внутри него могут быть находиться изменяемые типы данных То есть например могут быть может быть список когда мы такой так он не сможем использовать в виде ключа А мы можем создавать собственные объекты которые мы сможем использовать в виде ключа Однако они должны будут реализовать магический метод Хеш вот и он должен будет возвращать всегда один тот же результат независимо от того какие изменения там произошли Вот то есть метод так генераторы итераторы генераторы

    00:48:07 - 00:49:31

  • например мы можем реализовать в виде функции вот которая будет возвращать йода такое место Return и он наверное ты встречал Да это конструкция которая возвращает генератор вот у которого уже не реализованный метод Next вот метод Next это такой метод который [музыка] нужен для того чтобы сделать оператор итераторы обязательно должен иметь магический метод Next вот эта конструкция сразу возвращаем генератор который есть индекс и Интер магический метод магический метод это магический метод Вот но в большинстве случаев конструкцию

    00:48:54 - 00:50:30

  • с функцией намного проще использовать чем скажем так простой разработки конструкцию с функцией и возвратом yelt намного проще использовать чем свой итератор писать значит дальше магические методы это методы они нужны для того чтобы реализовать системную логику То есть например если мы хотим сложить два объекта друг с другом то есть использовать плюс то мы должны реализовать магические методы у этих двух двух объектов Ну и там много других методов тот же Next eater New и нет это все магические методы они реализуют

    00:49:47 - 00:51:18

  • системную логику Вот и кажется я пропустил один вопрос Что такое динамическая типизация а нет динамический это сказал строгая типизация строго типизация означает то что мы не сможем сложить строку и а если например в Ява скрипте мы попробуем это сделать то мы на выходе получим строку единица строка плюс единица на выходе мы получим 11 в поэтоме мы получим ошибку что мы не можем сложить эти два типа Статик метод и класс метод немножко проясню квас метод на себя принимает первым аргументом CLS то есть сам объект

    00:50:34 - 00:52:04

  • класса вот и он взаимодействует только С атрибутами класса не атрибутами инстанции То есть если мы создадим объект назначим ему какой-то атрибут то вызов метода вызов класс метода не получит там не получит доступа к этому атрибуту если мы переопределяем атрибут класс то есть там какой-нибудь допустим вылью мы определили в классе назначили ему единицу а потом создали инстанс переопределили эту единицу там написали а точка В равно 8 то вызов метода класс метод внутри него мы вызовем там мы получим ответ единицу а не восьмерку

    00:51:27 - 00:53:00

  • Хотя вроде как мы работаем только С атрибутами класса кстати метод не принимает себя аргументов это неправильно ответил так контекстный процессор используется для того чтобы расширять контекст контекст знаешь что такое Да ну то есть то что мы в шаблоны Передаем Да вот иногда нам нужно например контекст который используется везде на всех страницах на всех формах и так далее так далее вот там например какой-нибудь там надо рендерить [музыка] навигация например навигация мы на всех страницах выводим глупо было бы нам на

    00:52:16 - 00:53:55

  • каждой странице реализовывать механизм получения дерева навигации намного проще было закинуть его в контекст процессор и он бы всегда нам в контексте был доступен сигнал как ты правильно сказал это событие которое происходит в некоторых в некоторых некоторых событиях То есть например сохранение Модели там есть два события до сохранения после сохранения удаления до и после [музыка] миграция и ну подключение к базе данных даты тоже сказал правильно есть такой так рассказывать про некоторые нюансы гому нет смысла

    00:53:06 - 00:54:42

  • и во многих проектах Нам нужно будет реализовывать переопределение или расширение модели User модель User она там все механизмы есть которые могут потребоваться для авторизации проверки логин и паролей и так далее так далее хранение какие-то данных Вот и Джанго предоставляет механизмы для того чтобы расширить эту модель первый механизм это если мы переопределим модель из расширив ее таким классом как абстракт юзер Вот и тогда это будет модель полностью Мы полностью контролируем весь процесс авторизации

    00:53:57 - 00:55:33

  • хранение полей мы можем какие-то добавить какие-то удалить поля и так далее вот мы можем переопределить метод точнее Нет это поле по которому мы будем идентифицировать пользователя например не использовать юзерней а использовать e-mail вот мы можем простой реализации без костылей только вот в этом механизме далее мы можем создать профиль отдельную модель один к одному и связать и там хранить дополнительные поля Вот и самая простая которая дает наименьшее количество преимуществ это прокси модель

    00:54:46 - 00:56:07

  • Вот она просто реализует дополнительные методы внутри пользователя но не расширяет ее там по полям по [музыка] например мы не можем уже переопределить юзернейм на e-mail так класс бы тогда не будем рассматривать есть такие методы о Coris это как Only и deford То есть он ли мы можем указать Какие поля мы только хотим загружать то есть мы пишем например ордер object Only там Number Да мы получим мы получим на выходе модели у которых заполнена только два поля ID и Number все остальные поля будут пустые

    00:55:26 - 00:57:06

  • вот или дефор мы можем использовать исключить какой-то конкретное поле например поле с каким-то большим набором данных мы не хотим его грузить Да мы можем вас просто одно добавить а ор реализуется через Класс Q и символ пайпа называется такая вертикальная черта то есть мы можем Q написать там скобочках имя поле Pipe Q в скобочках еще одно имя Поля и он будет проверять или это или это значение вот End в таком случае квасом используется символ [музыка] есть еще такой класс F Но это немножко не про это

    00:56:19 - 00:57:48

  • Ну когда ты будешь больше погружаться принципе изучишь этот вопрос ленивый запросы Это я объяснил Да что есть ленивые которые возвращают методы которые методы Core Сета которые возвращают они не они считаются ленивыми то есть они не выполняются сразу Селект превращается мы обсудили индекс принципе вроде бы на все вопросы ответил который у нас такие остались открытыми вот собственно все на меня по вопросам так Антон [музыка] смотрите мы сейчас можем ответить на вопросы с чадом и они у нас в Зуме

    00:57:12 - 00:58:46

  • так Лев давай вообще Расскажи как ощущение как ты считаешь свой скилл по вопросам что думаешь вообще как дальше двигаться Нет во-первых с учетом того что это вообще первое собеседование Пусть и такое тестовое было интересно вопросы но я понимаю что у меня есть огромные Дыры в знаниях которые которые нужно изучить закрыть вот понимаю что нужно учиться дальше не сильно страшно было да нет нет в целом не страшно хорошо супер но да скажу что в принципе [музыка] ну вот давать некоторые напутствие тебе

    00:58:17 - 00:59:56

  • дам конечно разобраться с пайтоном это в любом случае джанга скажем так если ты смотришь на него Да и хочешь работать именно в Джанго то нужно Конечно будет его изучить Но это в первую очередь потому что фреймворки приходят и уходят Хотя Джанг это сильный сама достаточно фреймворк в принципе зная его и хорошо в него разбирается ты можешь переключаться другие фреймворки уже более проще Просто тебе будет вот базы основы поэтому конечно нужно оттягивать при любом раскладе Потому что если ты будешь

    00:59:15 - 01:00:35

  • концентрироваться только на Джанго то ты себя ограничишь количество вакансий сейчас очень популярный иногда требуется например кто-то берет асинхронный фреймворки это очень сейчас популярное направление асинхронных фреймворков Но для Junior конечно асинхронное программирование это будет потяжелее Вот Но хотя ты пришел уже с низкоуровневых языков тебе Ну все равно эта тема будет легче даваться чем человек который с нуля приходит вот по джанга конечно Ну если ты хочешь дальше развиваться хорошо его знать в принципе он много где

    00:59:54 - 01:01:20

  • годится для простых реализации быстро что-то какой-то прототип накрутить что-то быстро сделать какой-то сайт допустим да если не хочется прям сильно заморачиваться то Джанго отлично Подойдет она все в себе имеет любые много очень много библиотек которые я сильно расширяют То есть если ты свой что Никакой она принципе не покажется тебе нереально вот по ну поиск Это само собой разумеющееся Ты никакой веб-разработки никанд разработки без знания SQL конечно не бывает вот а по что касается http и rest rest

    01:00:37 - 01:02:03

  • то да наверное Я думаю что нужно будет тебе изучить как строится rest API вот нужно будет изучить вот эти пост гет запросы какими с ними работать как данные передать файлы и так далее его освоить потому что конечно не так много не так много вакансий где требуется чисто Джанго то есть ну примитивное его реализация Вот идет страница статичные которые мы рендерим на ВК Индии потом их отдаем клиенту это же скажем так но не перспективное развитие здесь если ты будешь это в этом углубляться то немножко

    01:01:23 - 01:02:54

  • немножко отстанешь от рынка лучше разбираться с Pi постройкой правильно архитектура в принципе Вот это более более перспективно для бэк-энд-разработчиков Вот и Ну конечно пока у тебя допустим есть время читать книги по алгоритму решать задачки это всегда будет большим плюсом среди программистов которые только знают язык и какой-то фреймворк но такие напутствие Наверное мне будут хорошо спасибо Вот круто Мне все понравилось ты молодец тебя видно что есть желание развиваться дальше дальше расти То есть ты не пасуешь Перед

    01:02:11 - 01:03:56

  • трудностями не боишься сказать что вот я не знаю это круто то есть тебе поможет в прохождение собеседований и Ну когда ты будешь проходить собеседование не забывай записывать например вопросы то что не всегда бывает так что в конце собеседования тебе на них на Все ответят вот запоминай их как-то там пометочки сидеть делать Где ты Когда после собеседования Сможешь их скажем так наверстать упущенное где-то изучить материалы дальше хорошо спасибо тебе спасибо Так теперь вопросики из чата мы можем почитать

    01:03:09 - 01:04:29

  • Вопрос такой Насколько часто спрашивают джинов от жанга ченнелс честно сказать не часто я встречал такие вопросы вот ну то есть если нужна синхронная асинхронная какая-то программирование то наверное сразу лучше отместить Джанго использовать что-то более подходящее для этого Поэтому вопросов про Дженга скорее всего не будет на собеседованиях Хотя не знаю всякое бывает так реально на собеседование таким вопросом могут быть я плотно работаю с Джанго но не на один вопрос не могу ответить даже примерно

    01:03:56 - 01:05:15

  • не сможете объяснить что такое prefetch lited selectriated Ну вообще как бы вопросы разные могут быть по конкретно по джанга наверное вопросов не так много то есть в основном требуется поэтому разработчики Вот И там пишут что желательно желательно знание там фреймворка джанга так пишет не так много вакансии где пишут ищут непосредственно Джанго разработчиков Вот то есть вы должны понимать что поэтому прежде всего то есть вы должны уметь переключиться с одного фреймворка на другой и не должно это создать вас какие-то критичных

    01:04:39 - 01:06:06

  • критических трудностей вот поэтому [музыка] и поэтому Ну вот так как у нас собеседование было больше на джанга разработчика поэтому больше вопросов непосредственно по Джанго по его внутренней архитектуре что как там работает вот то есть если вы будете собеседование собеседоваться конкретно на Джанго разработчика то вопросы такие действительно могут быть Как работает на самом деле очень все просто разобраться Вы можете открыть Исходный код посмотреть эту функцию как она работает вот на самом деле очень Простая история

    01:05:23 - 01:06:44

  • и очень хороший алгоритм для решения многих задач то есть где вы не сможете использовать Но где вам нужно минимизировать количество запросов на какую-то ограниченную ограниченную выборку то есть на какую-то на одну страницу накатить какие-то аналитические данные вы сможете отсечь все аналитику кроме вот этих 25 значений про которые мы говорили и сделать аналитику только для 25 Ну не более 25 получается и их применить потом к этой странице просто в одном цикле пробежаться и проставить нужное значение

    01:06:04 - 01:07:21

  • так вопрос А где все это изучать если одна компактная книжка с ответом на подобный вопрос на самом деле вообще наверное я не рекомендовал бы читать книги по джанга потому что все быстро устаревает вот новая версия джанга выходит каждые два года Ну то есть стабильная и книги о фреймворком устаревают слишком быстро поэтому основной основной источник информации о фреймворках это их Исходный код То есть если вам нужно понять как что-то работает вы открываете гитхаб или ваш IDE и проваливайтесь внутри библиотеки

    01:06:46 - 01:08:06

  • смотрите как там все работает Это намного лучше чем читать книги так вопрос Следующий вообще мне кажется что если выкатить достойный пэт-проект и понятно объяснить как он работает то неумение отвечать на такие вопросы не будет иметь никакого значения но смотрите у меня лично по отношению к проектам такое что многие программисты которые начинающие они ну не буду говорить за всех но некоторые недостаточно амбициозный Вот и берут проекты Ну недостаточно сложные вот поэтому ну лично мое мнение если Pad Pack Pad

    01:07:27 - 01:08:56

  • проект Это какой-то интернет-магазин блог тудулист то он никакого Ну ничего программиста не скажет кроме там ставил например и все вот поэтому проект Если вы решите делать то ставьте себе амбициозные задачи чтобы Вы могли действительно какие-то Новые Новые грани фреймворка Новые грани разработки изучить новые технологии То есть если вы не работали то Придумайте проект и вы будете использовать если вы не работали с A5 не делали 5 разработка то Оставьте себе задачу Чтобы у вас было два приложения Back and

    01:08:19 - 01:09:46

  • frontent То есть фронтенд вы где-нибудь найдете какой-нибудь или кто-то там вам поможет написать если вы не не можете Например я вас крипте писать Вот но ставьте себе цели которые вы сейчас не можете Выполнять достигайте их тогда под проекты будут полезными и в качестве обучающего материала Ну и в качестве какой-то презентации для людей которые проводят с вами технической собеседование Вот Но конечно да не умение отвечать на вопросы То есть стрессовая ситуация Может конечно многих ввести в ступор и не

    01:09:02 - 01:10:21

  • смогут ответить на какие-то вопросы Хотя даже знают на них ответы Вот Но чем больше вы собеседование будете проходить тем больше знания вы будете накапливать то есть какие-то области у вас будут закрываться и рано или поздно принципе на вопросы вы будете отвечать Быстро и ну правильный ответ давать так Ну тут мне написали что вопросы закончились Вот Всем спасибо что задавали вопросы классные вопросы на самом деле полезно Да всем привет еще раз в общем вопросики вроде как закончились если что еще можно там минутку закидывать вот так

    01:09:42 - 01:11:04

  • в целом прям Прикольно спасибо всем Лев большой молодец Давайте в чатик закинем каких-нибудь смайликов Льву вот Храбрый Лев сегодня пришел на первый Собес сразу публичный сразу с зрителями Вот это прям Здорово нужно иметь определенную смелость один тоже спасибо Вот что прикольно так все темы разобрал тоже все моменты подсветил вам будет ли мог совместно метла тут спрашивают в чатике тут я отвечу мы чуть позже вернемся к этому формату сейчас мы в первую очередь по джунам пробежали пробегаемся вот далее тоже для миглов Я

    01:10:30 - 01:11:49

  • думаю что не сделала Кстати в комментариях интересно услышать ваше мнение как вам формат вот чтобы вам было интереснее услышать Я вижу Смайлик со Львом если в комментариях закиньте любые моменты там точки роста для проведения подобных собесов которые вам видятся или что было бы интересно посвятить Какие вещи увидеть тоже не стесняйтесь для нас очень ценная обратная связь Чтобы в дальнейшем какие-то прикольные механики или вещи добавлять вот а так наверное [музыка] наверное все

    01:11:12 - 01:12:25