Подготовка к собеседованию на Python Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
Ну тогда можно перейти к практическим немножко вопросам начав с пост можно как мы можем селекнуть из двух таблиц одним запросом например данные звонить Окей А можем ли как-нибудь это сделать без джоина сейчас помню Union Select по моему есть Да есть есть еще на самом деле пара способов один совсем экзотические встроен наоборот достаточно часто используется Ну а какой интересно кроме Джона часто используется Ну под запрос можно под запрос вас написать сходу не вспомню Но точно Бывает такое что нужно вытащить табличек и не
00:00:00 - 00:01:45
подходит Ну на самом деле я тоже вспомню у меня один раз точно был кейс когда запросом прямо капец ничего не поделаешь Ok что такое индекс как он работает своими словами индекс это мы берем Хеш от значения и потом получается ищем уже как по хэшмапу то есть более оптимизированный поиск места перебора всего по порядку идет как там сбалансированное дерево по моему строится ну и соответственно оптимизация поиска а минус есть какие-нибудь наличии индексов да ну главный минус это если у нас с базой мало запросов на чтение больше там на
00:01:08 - 00:02:46
вставку обновление и так далее то это будет медленнее работать Чем без индекса так как их каждый раз нужно будет перестраивать плюс бывают случаи что переиндексировать все равно приходится раз какое-то время потому что индексы устаревают и потом начинают много места занимать вот а какие есть какой путь скажем так поискать медленный запрос и проанализировать его если мы чувствуем Что нас какие-то проблемы с базой мы сейчас про Познер часто говорим Да без рамок Explay взять explanet запроса и смотреть
00:02:09 - 00:03:34
там по стрелочкам по схеме где медленно где лишний Join где зацикливается и так далее а именно найти не знаю какой именно запросов у нас тормозит Как мы можем найти можно влогах посмотреть в этой не влогах профилирование посмотреть какие все запросы базе и какие Сколько времени висят Сколько времени выполняется отдельно я не помню Если сразу в пасторсе или какая-то идеально туза Но точно помню что можно зайти посмотреть прям весь список Какие запросы летят И сколько времени они отрабатывают Ну в принципе там можно посмотреть
00:02:55 - 00:04:40
А что такое транзакция это набор операций которые что-то делают с базой Ну и чем это характеризуется просто от набора операции отличается нас так набор операции можно три запроса выполнить вот набор то что этот набор как бы действует как единое целое Например если одна из этих операций не выполнила что все транзакции должны откатываться то есть либо атомарность либо все либо ничего ну и плюс этими транзакциям можно там как-нибудь вертеть изолировать их вот Что такое блокировки или Локи базе Ок это получается когда к
00:03:59 - 00:05:44
[музыка] когда транзакция работает с каким-то отдельным значением она может его улучшить Чтобы другие параллельно не начали его изменять или читать Пока она с ним работает а какие бывают блоки например что мы можем заучить можем залочить получается значение в поле каком-нибудь само поле не знаю что еще можно залочить но таблицу целиком наверное а как можно заблокировать конкретные конкретные поля специально заблокировать типа не на уровне изолированности [музыка] Ну мы хотим просто скажем так Селект
00:05:00 - 00:06:43
какие-то значения чтобы пока мы с ними что-то делаем Это другое не поменял просто вот из таблицы нам надо на первые 5 заблокировать запись как это можно сделать Я чисто соски L уже очень давно не работал у нас во всех была рынка если мы говорим о Джанго рента есть специальный метод Select for rapdate если чисто на уровне SQL Я не знаю Ну тоже что-то такого есть какое-нибудь специальный ключевое слово Ну кей на самом деле такое же то есть аналоги которые есть сколько рублей называлась там а если мы хотим как бы скипнуть часть
00:06:17 - 00:07:37
отпустить которые заблокированы то есть интеллект базы заблокированные инстинкт какой-нибудь можно поставить ну скажем в той же Джан есть такая операция вернее тем же самым Путем так говорить не офсет Ну а сет это просто когда мы сдвигаемся Ну да ну то есть мы взяли Там первые три заблокировали Ну да Ну мы можем Не первый же ты мы можем что-то заблокировать а потом другой процесс другой запрос вообще селекции туда же но он хочет пропустить заблокированные записи их не знаю Ну окей Ну там на самом деле просто есть
00:07:08 - 00:08:41
такая опция как steplock при запросе она имитируется и в Джанги просто иначе как бы смысл что-то блокируем как правило ради того что кто-то другой может по Селект соответственно с другой стороны обычно используем что-то подобное вот [музыка] тогда немножко вопросов про миксы приходилось в принципе работать что-нибудь делать Налим целой машине Ну у меня рабочая машина Ubuntu Так что приходилось Ну из такого разряда как например список запущенных процессов посмотреть htop а если нет И что можно Это чисто на freebasd куда-то зайти там
00:08:09 - 00:09:54
посмотреть такое бывает Тогда придется гуглить как на определенной системе посмотреть у меня всегда был Ну на самом деле есть просто топ встроенная клитор стандартная Хорошо если мы посмотрели процесс вот тем же стопом список там есть такое Что это такое Это ешника этого процесса что мы можем его найти там остановить например становиться с процессом можно сделать интересно на Как мы можем как найти вот этот самый пик процесса Просто зная запущенный исполняемый файл который запущен был и нам надо пить понять вот этого
00:09:10 - 00:10:52
запущенного процесса Но мы же можем и посмотреть в таблице найти этот процесс слева будет написан Ну да что топ получается тоже можно и тоже можно так дальше такой вопрос Какая существует разница между процессом и потоком процесс в одном процессе может быть несколько потоков то есть процессы они работают отдельно на разных ядрах [музыка] внутри процесса создается потоки если надо обмен данных между процессами Более сложный потому что их нужно стерилизовать здесь реализовать между потоками это все проще потому что они в
00:10:26 - 00:12:05
одном процессе находятся [музыка] распределение по разным процессам решает задачи там с пивом который у нас процесс сразу есть распределение между потоками операции ввода вывода где нужно просто подождать пока что-то выполняется и чтобы не висеть вот такие вот основные различия а как можно посмотреть количество там свободно оперативки там всё написано Ну соглашусь Ну то есть кроме и что по приходилось предположим Я так понимаю что загрузка проца тоже Вычитать но свободное место например на свободное место на диске
00:11:36 - 00:13:16
свободное место на диске можно зайти в пакет управление файлами нажать на любую папочку правой кнопкой в свойства посмотреть например в консоли просто залогинились не знаю понял Я не сталкивался такими моментами если столкнулся бы загуглил там Хаус и команду бы с первой строчки окей Ну не знаю есть еще такие вопросы разряда но я так понимаю в принципе то не приходилось вот в каком-то инновационном окружении что-то делать где нету графической оболочки где может быть нельзя поставить но и что ok примеру сетевые задачи Мы
00:12:36 - 00:14:28
хотим просто посмотреть типа у нас сервис упал или не упал и непонятно чем это заходим Хотим посмотреть А вообще он порты открыл слушает их или нет Как можно такое сделать порты через голосов по моему можно посмотреть а можем как-нибудь проверить доступен ли порт на какой-то машине определенный открытый мне как-то можно проверить Да можно команду не помню я у меня нет ежедневно таких задач Так что не держу в голове все эти команды Тогда вопрос про контейнеры Что такое докер вообще как бы что это такое докер это
00:13:36 - 00:15:09
контейнеры есть где не знаю как это писать контейнер где развернут какая-то среда и соответственно Да Unic иониксовая на что тут добавить можно если не лезть его в терминологии делали терминологии А именно как бы своими словами что нам дает брокер Зачем как бы контейнер Окей ну изолированное пространство изолированное пространство Где мы можем настроить одинаково написать контейнер что развернуто и быть уверенным что развернув этот контейнер на других системах все пользователи не знаю пользователи не пользователи получат
00:14:28 - 00:16:10
одинаковую систему и смогу с ней работать что это будет предсказуемо то что один сидит на винде у него там по одному способу разворачиваться на Ну или докер compose это набор контейнеров докер контейнеров Ну да ну как бы не совсем набор Это можно сказать Типа некая технология которая тоже что-то позволяет нам получить кроме как просто некий набор Ну да Опять требованиями несколько докер контейнерами которые работают в одной сети и могут взаимодействовать друг с другом общаться Ну там грубо говоря один докер контейнер
00:15:25 - 00:17:03
база другой Application и вот третий радиус и так далее Окей тогда можно перейти к непосредственно поэтому и ну начать такой вопрос Какие например есть логические операторы логические операторы это все все побитого сложения умножения ор или а какие есть типы данных тонет встроенные все перечислять Ну например мы встроенных не так и много но числовые примерно числовые int float что там еще все вроде до 7 уже не встроенный Да инфлот числовые скажем тогда так а последовательности какие есть список
00:16:18 - 00:18:19
Table множество сет Frozen Set неизменяемый что там пропустил что-то какая есть разница между изменением что это для нас означает в принципе в вопросе и кроется ответ изменяемые можно изменять неизменяемые нельзя изменять что Для нас это кроется как минимум неизменяемые меньше весят потому что меньше память под них нужно выделять тут разные принципе можно Отвлечь сравнивать то что например неизменяемые могут быть ключами словаря Потому что от них можно Хеш взять изменяемый не могут Потому что нельзя
00:17:37 - 00:19:16
конечно взять изменяемых типов вот OK Так что там типы типы типы изменяем не изменяем ну не знаю есть такая классическая на самом деле история если мы возьмем функцию определим и скажем у нее дефолтным параметром пустой лист создадим что это так что будет там лучше так не делать потому что при вызове несколько раз этой функции список не будет обновляться он будет указывать на одно и то же область памяти и Например если мы в этой функции будем добавлять значения то каждый раз при вызове функции этот список будет
00:18:30 - 00:19:55
увеличиваться и не обновляться по дефолту Ну то есть передача значения передача параметров посылки по значению будет по ссылке а со строками еще есть допустим есть такая фича как строки в Strings приходилось чем да для форматирования чтобы не использовать старомодные форматы или проценты строка более понятная а есть еще Такой тип как байк сам актуально Особенно с переходом там как Допустим мы строки в байты можем перевести обратно и что это вообще значит через энкод по моему пин-код decode [музыка]
00:19:14 - 00:21:04
упоминал про Децл А вот как раз таки это да это стройная же библиотека строим тип то есть для чего Почему используют для точности больше точность количество знаков после запятой Ну там не то что большее количество знаков после точность смысле что мы Почему не можем флот использовать то есть там Но если проблема система связана всяких банковских расчетах то у нас будут теряться значения будут лишние копейки появляются при сложении Там и так далее и соответственно вот лишние округление не туда вот проблема
00:20:24 - 00:22:03
еще можно тогда по поводу встроенных встроенной библиотеки есть есть какой-то тип для работы со временем Со временем смысле Дай тайм Что такое тайм-зоны тайм-зоны например Московская зона 12 часов Екатеринбург 10 часов соответственно у каждого жителя разные части планеты своя зоны свое время Ну да это как бы Понятно тайм-зоны В плане в Python То есть как с ними работать вот что нам вернет ну к примеру есть метод Да и там да и тайм-аут который защищает текущие время он вернет его нам зоны или без зоны если
00:21:22 - 00:23:13
надо добавлять Тайсон то есть пиццы по-моему библиотека которая позволяет тем зоной работать и со всеми операциями со временем мы приводим там qtc какой-нибудь там звони и в ней считаем а пользователь можем отдавать уже в его тензоне окей а как нам посчитать если какие-то инструменты чтобы например получить дату время там через сколько часов вперед да не помню Какая именно ты тутил точно есть какой именно метод забыл там по моему Можно даже найти на складывать ли там Дельта либо через Time Delta
00:22:24 - 00:23:59
либо уже обертки всякие библиотеки я где-то проще с этим работать знаком такой тип данных какие нам да это перечисление а приходилось его использовать для чего Да приходилось сейчас пытаюсь вспомнить для чего что-то подзабыл что-то он дает А точно он же дает это получается у нас есть какое-то значение там строки и еще порядковый номер то есть можем работать одновременно с номером и со значением вот тогда еще вопрос по поводу исключений если там 5 иерархия этих исключений Да есть и что можно про не сказать своими
00:23:18 - 00:25:10
словами наследование получается есть основной типа исключение общее Exception и дальше уже идут на нижние строчки там уже иерархия не помню там Zero division от какого-то другого зависит и так далее и лучше в коде обрабатывать Как можно более низкое более Более точная исключение чтобы не задевать какую-то группу Чем точнее мы будем знать какое исключение тем очевидно будет поведение системы то есть обрабатывать везде acceptx epsion не очень хороший подход потому что да что угодно полетит лучше обрабатывать точно и можно еще
00:24:26 - 00:26:05
через перечисление Окей есть Ну то есть у нас есть какая-то логическая конструкция для обработки исключений вот мы можем как-то выполнить код только в случае если исключение вообще не произошло Да элса есть траи Accept LS в конце в любом случае выполнится els и sts ли не произошло если в блок except не попали Окей согласен [музыка] насчет типизации то есть вопрос Что такое например динамическая эстетическое какая разница между эти статическая типизация это на этапе компиляции получается уже у каждого
00:25:15 - 00:27:07
значения мы знаем о типом там не знаю какой-нибудь Java C Sharp мы пишем там string или char и этот тип будет у перемены его нельзя менять а динамическая Мы можем написать а равно 1 и потом а присвоить там какой-то текст идти будет меняться а какая в питоне используется динамическая Ну такая либо My Pay Для чего она может быть не приходилось то есть не приходилось Я что-то читал и подзабыл по моему там как раз вот что-то степи зации что строгая типизация и что-то со строго типизацией связано если
00:26:21 - 00:27:48
ничего не путаю Ну она этот Чекер доверял по сути на как мы приходится сейчас использовать вообще типизацию да аннотирование используем плюс Black flake для проверки кода для чего для чистоты кода мы можем прописать аннотацию такую что у нас функция возвращает может вернуть либо интриго строк либо на то есть какие-то варианты У нас есть Да йони он либо в последних версиях через вертикальный слэш можно а такой вопрос по питону про магические методы зачем они нужны Что такое Как сказать каждый магический метод нужен для
00:27:15 - 00:29:10
определенного действия Это определенный набор для Как сказать для каких-то классов которые выполняют свою функцию не знаю там пример магический метод STR возвращает строковое представление экземпляра класса методы получения атрибута восстановление атрибута конструкторы нет создания экземпляра класса управление и так далее базовый набор какой-то с определенными свойствами Ну согласен Только немного сам не понимаю насчет то что базовый набор Что это значит То есть но определенных типа можем сделать с
00:28:24 - 00:30:03
помощью этих методов будем так говорить Мы же можем использовать можем не использовать если захотим Да но это прописанные функционал у каждого то есть там например у словаря есть магические методы через которые мы можем устанавливать атрибут и получай значение по ключу и менять значение чтобы мы не описали обертка Мы можем написать ЛСД диктор в скобочках там а равно и присылать какое-то значение чтобы мы не писали словарь точка С это атрибут вызывать метод и прописывает туда какое-то значение Окей
00:29:18 - 00:31:01
вот такой вопрос из простых Как можно проверить что значение есть словаря in а как можно протезироваться по листу и вывести некий следовательности и номер Рейд а как можно проверить что объект класса является потомком какого-то другого [музыка] вот я не помню насчет потомков из и свернет именно конкретно свой класс или потомков тоже проверит не помнят тут вообще из но возможно что-то другое если именно мы говорим с наследованием Почему из инстанции OK [музыка] Как можно словаря сделать копи точка копии
00:30:09 - 00:32:01
а еще какой-то вариант есть они отличаются есть еще один копия сыном нужно вложенность сохранить можем через равно просто сделать но тогда это будет ссылаться на одно и то же область памяти если мы будем менять один словарь будет меняться и второй тоже еще какой-то способ есть по-моему через Две звездочки если мы не помню какие-то Еще такие экзотические если такая у нас задача допустим есть словарь с Каким ключом ключ а и там в качестве значения мы ожидаем Что может быть еще один словарь вложенный то есть
00:31:23 - 00:32:51
а там лежит еще один словарь и вот мы хотим обратиться включу б во вложенным словаре то есть а и б мы не уверены что у нас есть первый словарь вообще что там не на не уверены что в следующем словаре ключ тоже есть Как мы можем например через год Да ну через год А что мы сделаем Get чтобы нас этой конструкции дефолтное значение можно через запятую вторым параметром указать но плюс если мы не уверен что даже 1 есть нужно проверять первое на NAN если оно не надо тогда можно брать следующее я сидефолт она мне подходит
00:32:13 - 00:33:39
Ну ну как бы в целом Да просто я опять под конец немножко смутился на тему того что мы будем проверять на нам вот если мы используем две Ну вот условно У нас есть дикт в котором есть или нет ключа в ключе А есть или нет ключ бы как мы где-то напишем Так мы напишем наш словарь.гет А если это значение не NAN то тогда можем брать следующий Get на б Ну мы в одну строку не проверим же там в одну в одну Нет не проверим на самом деле Ну на самом деле можно в Get как раз таки дефолтом передавать просто пустой словарь и тогда не пойдем
00:33:09 - 00:34:44
просто следующим еще раз вызовем Get то есть Get а слова можно так сделать и тогда немножко еще вопросов про объект ориентированную сторону Чем отличается класс от объекта класса Ну не знаю классно так класс объект Это его конкретный экземпляр этого класса у этого класса может быть несколько объектов через Ну вот Вполне себе отличие Что может быть несколько экземпляров но это не совсем отличается совершенно разные сущности хорошо допустим Может ли метод объекта классно вернуть класс может Окей А какой метод используется при
00:34:04 - 00:35:46
инициализации класса и нет OK А что будет если вот есть родительский класс так скажем если наследование от него классы Мы в нем в Наследники определим метод точно такой же до который есть уже родители если мы не и у нас экземпляр дочернего класса да Да ну то есть если нет в котором который наследуется от класса А и мы в нем пишем метод какой-нибудь такой же который уже есть в родительском классе переопределиться я сама через супер не будем вызывать цепочку родительский класс это просто вызовется
00:35:08 - 00:36:36
дочерний метод а можем мы как в питоне написать там интерфейс например да Но самое если мы говорим стандартный метод это через абстрактный классы можем создать абстрактный класс абстрактные методы и соответственно нужно будет их реализовать если не брать абстрактный класс можно просто в методах рейс на комплимент делать чтобы заставить потомков реализовывать но плюс еще есть всякие библиотеки которые прям и помню как называется какая-то то есть интерфейс питон интерфейс и там прям можно как не знаю шарпе каком-нибудь
00:35:59 - 00:37:27
интерфейсами сидеть Ну обертка сахар будет по поводу множественного наследования то есть что такое миксины зачем их такой типичный чем использовать миксейн это класс у которого есть чисто какие-то вспомогательные методы и которые не должен иметь своих экземпляров соответственно для чего это используется чтобы не было сложных понятной была структура наследования и не было сложных цепочек вызова и решения там через МРОТ то есть хорошая практика когда мы с понимал что наследовать наследование следует только от одного
00:36:50 - 00:38:20
конкретного класса остальные должны быть чисто мексинами уже то есть вспомогательные методы [музыка] а так скажем если вот у нас есть миксин один и другой Да там которые они приобретают один и тот же метод то если мы от них унаследуемся скажем так какой будет сбиваться какой будет использоваться непосредственно который первым стоит ну и сейчас тогда пару еще вопросов даже не пару по поводу Джанги Что такое query Set жанги кларисет это набор объектов стерилизованных данных из какой-то таблицы то есть там таблица у него
00:37:39 - 00:39:26
несколько записей и естественно clariset это набор этих записей набор записи из таблицы уже Да только стерилизованных тогда такой вопрос вот есть такое понятие что курицы это ленивые то есть что это означает это означает то что Запрос к базе будет происходить только тогда когда мы будем с этим какие-то действия производить То есть у нас там какой-то фильтр туда прилетает клорисет ЕС мы там поставим Break Point на этом фильтре точнее какие-то логика там не знаю Один плюс один и так далее В конце что-то делается
00:38:41 - 00:40:17
то пока не дойдет до самого детства рисетом Запрос к БД не полетит Ну то есть в принципе то получает Что такое ресет это не набор записи из базы это набор запросов в базу вначале можно так сказать Ну а какие есть методы пересеты как бы который можно перечислить не обязательно Все носить просто такие есть что они делают фильтр какое-нибудь там Селект итератор [музыка] что там еще А как можно количество каунт учить аккаунт а как проверить что вообще такая Данные есть базе такая запись Exist а если мы хотим ограничить количество
00:39:39 - 00:41:25
выборку через срез можно Ну квадратная скобочки двоеточие сколько число ограничений Ну насколько помню про Как заблокировать вроде бы уже была речь через именно Джанго Select for rapdate а есть такие еще такие объекты укладки Короче говоря [музыка] зачем чтобы мы могли комбинировать фильтра всякие end or значение Окей и такой вопрос как ну как в View создать представление не очень Понял Вопрос написать класс View реализовать его методы указать Смотря какой объем говорим о пиву или там Это вопрос просто понимание
00:40:47 - 00:42:37
что там есть Ну да взаимодействие с каким-то корисетом стерилизация данных и возвращения ответа не обязательно фронту Возвращение ответа А если совсем классическая история например какому-то подсоединить Ну вообще роутер если мы говорим о класс bestview если мы говорим о функциях то там прямо функция можно через не помню через функцию вообще по моему не писал через декоратор там по моему прописывается да Если не ошибаюсь Но обычно роутер Ну на самом деле есть самый базовый способ как вообще вьюшки строятся что они смотрят
00:42:02 - 00:44:05
как Как указать что по данному будет встречать вот эту Ну через декоратор сверху но если мы говорим о методе говорим или О класс bestview ну а методе смысле есть просто старый способ описания вьюшек это просто функциями есть с помощью вас Я говорю о каком говорим Они коныкаются одинаково класс bestview ты пишешь в юшку пишешь worlds.pi там свой роутер передаешь туда название и твоя ложка там это просто был просто говорил роутер Ну не обязательно же URL спай называть Можно же как угодно назвать Главное
00:43:21 - 00:45:13
чтобы роутер был Ну можно все как угодно назвать Джанги на самом деле есть соглашение Ну окей а такой Тогда вопрос по поводу пластбэштю вот если мы возьмем и сделаем реализуем класс bestview какой-то простой и при каждом Ну когда у нас метод определим Метод Get например когда обрабатываем запрос мы будем какое-то значение получать и записывать его в Property просто этого класс и там сохранять Если кто-то еще раз обрабатывает мы смотрим сначала в Property если там есть значение то сразу его возвращаем Будет ли работать вот это
00:44:22 - 00:45:51
такая реализация как некое интересно вопрос я с таким подходом не сталкивался но скорее всего это не будет работать потому что странно если нам нужно что-то кэшировать мы можем использовать кэширование записывать наверное будет обновляться вряд ли как типа каждый раз же когда мы стучимся на And Point вьюшка же заново отрабатывает она не помнит класса что там было в его Property Ну да самом деле просто именно об этом так действительно работать не будет несколько вопросов насчет миграции то есть что такое миграция Как можно
00:45:21 - 00:46:50
писать миграция это набор правил по изменению схемы базы данных а как их сгенерировать и как применить менедж пальмы к мигрейшен смены шпаем играет есть порядок которым не применяется Да по порядку То есть у каждой новой миграции ссылка на предыдущую миграцию предстать что угодно можно писать какая будет там привез на твой будет смотреть но есть допустим в самих миграциях такая штука там где Пенса если открыть миграции Ну да я же тоже сказал что ссылка на предыдущую миграцию ну почти Я не совсем понял там потому
00:46:10 - 00:47:44
что на несколько может быть ссылка несколько миграций если нам надо конь Поэтому вот выполнить момент миграции привязать так сказать можем это сделать какая-то логика У нас есть применение миграции нужно что-то сделать Да можно иммиграцию написать метод который что-то будет делать и в операциях перечислить его Ну а прям в самой миграции можем писать но это можно прям с ума миграции Да написать а что такое видел вейр Джан чем это такое промежуточной обработчик который обрабатывает запрос до того как
00:47:07 - 00:48:37
он попал браузер и до того как он вернулся до того как он из браузера пришел на перед тем как он вернулся обратно между реквестом и response получается Ну да Понятно а немножко вопросов по поводу питомских пакетов Слышал про такое как питон Wheels X Раньше было такое Нет не слышал Окей бывает пакеты которые надо собирать такое встречается бывало или нет Окей короче это миллс это уже собранный хищный код чтобы компиляторы всегда не и он есть иногда когда мы пи-пан стал сделаем такого нет Ну графическое либо она начинает
00:48:03 - 00:49:46
копиться у нас некоторых пакетах есть собраны уже динамики под разные системы Вот это про Вот это ну такой как как можно конкретно версия пакета поставить через пип через двойное равно и указано указание версии Окей честно говоря сам забыл приходилось по этой использовал В чем отличие чем что он дает Ну легче управлять То есть можно задавать версии Ну и самое главное плюс Это то что он разруливает конфликты если какие-то версии несовместимы он сам порешает и прорастает всем нужна версия особенно когда много различных пакетов
00:49:12 - 00:51:07
какой-то обновился и у тебя там делаешь Не своими система и вся решать Какая с кем не Какая какой пакет которому не подходит проще через портрет это сделать Ну кстати говоря заходила речь про из и какой вопрос Если сравнить В чем разница если мы будем сравнивать через их и через двойное равно 2 переменные из проверяет айдишники то есть ID объекта а двойное равно сравнивает значение такой вопрос термин или нет пару слов что это мог им какие-то действия Например у нас есть тесты в котором обращение в
00:50:17 - 00:52:00
сторонний сервис и чтобы нам каждый раз запускает тесты не стучаться куда-то там делать запрос мы можем замокнуть ответ который оттуда придет а какие есть скажем так у этого подхода минусы Если прямо пользоваться этим не в тестах не в тестах Ну Взять за манки пачи там где-то что-нибудь никто не мешает не знаю где можно заманки патч можно тогда и хардкодить просто в чем смысл Ну все это не тесты Ну как смысл Смысл вот есть какая-либо или чужой кусочек кода который мы просто импортнули из того что переписать это же
00:51:19 - 00:52:49
быстрее не знаю работает-то будет почему тогда на какой-нибудь опишке просто не сделать везде Возвращение одинакового Джейсон потому что кому это надо Зачем неработающая программа которая будет все одно и то же делать странно Нет ну там всем так ну просто что мы можем за манки патчики потом с этим сложно разобраться в таких случаях Но это Окей в общем вопрос такой по поводу мета-классов приходилось просто понимаете что такое Зачем нарезать конечно да это класса создающие другие классы Джанго в дереве
00:52:12 - 00:53:44
много классов все-таки реализаторы и так далее встроены на этом мы можем наверное перейти к ревью Окей это докер компост и вопрос тут просто как бы рассказать что тут чтобы есть что-то Происходит что здесь написано получается у нас есть контейнеры несколько сервисов с базой данных на пост грассе версия and File то есть указан с которым будет работать куда будут в переменные браться команда соответственно запуска этого сервиса Health Check проверить что база доступна интервал Количество попыток 10
00:53:06 - 00:54:55
еще один сервис Это я так понимаю наверное Application сам да Ну это просто название сервиса Да дальше от чего следующий зависит То есть он должен работать вместе с BD вместе с предыдущим порты которым открыт которым можно стучаться тоже сам файлом и последний еще один сервис Но на самом деле есть небольшие отличия Но скажем так что значит работать вместе Ну что сначала запускается база данных остальные сервисы только потом поднимаются этот сервис и насчет портов то есть вот эта запись означает Почему два раза написан
00:54:04 - 00:56:07
внешний внутренний которые в одной сети и внешней как не знаю может тягой просто есть человек вы говорили а по поводу вот этих вот N файл нотации что они означают я стен файл где прописаны какие-то тесные переменные и они будут подтягиваться сюда Ну можем перейти по этому ну здесь здесь задача такая типичная ревью что вот есть код в нем потенциально наверное из проблемы и хотелось бы что здесь не твой взгляд не так если что я промотаю вниз тут совсем немножко Так у нас звезда то класс я не молдат
00:55:19 - 00:56:47
возраст класс Animal Constructor [музыка] не знаю мы докапываемся там комментариев нет такого плана или Мы прям синтаксические какие-то логические ошибки ищем Ну да комментариев я бы сказал Нет не обязательно OK скажем так здесь есть какие-то проблемы прям которые приведут способности либо Неожиданное поведение этого года тут вроде норм овнер овнер капитал Айс Так у нас овнер же это ты не строка это словарь капитала Не сработает первое ошибка так дальше док наследуется денимал конструктор вызываем через супер
00:56:39 - 00:58:25
родительский порода [музыка] текс бред тут может кейр сработать то что есть у нас не будет такого ключа лучше через год доставать вот дальше кал от Дога наследуется [музыка] Ну ладно я в принципе больше не вижу каких-то логических синтаксических ошибок вопрос что-то печатает Пускай ну допустим не то чтобы синтаксически совсем а вот в плане review хорошо за исключением того что я бы там прокомментировал каждый метод может быть какие-то есть но в плане методы которые просто что-то печатают с точки зрения
00:57:46 - 00:59:53
[музыка] Enterprise разработки но они бессмысленно несет никакой то пользу мы рассматриваем это как нормальный проект который что-то должен делать или как просто посмотреть но там принят 123 принты бесполезны они не нужны в разработке если мы хотим какую-то логику то тут должно возвращаться какое-то значение потом мы с этим значением должны что-то делать как-то оперировать просто попринить но это у себя в консоль там запустить посмотреть [аплодисменты] не знаю Пускай что-то мне не понимаю к чему уклоните
00:58:55 - 01:00:19
Ну не то что к чему-то клоним Просто если вот как ты делал изначально просто пойти по коду то в нем есть просто проблемы скажем так они не настолько широкие абстрактные что типа бессмысленно делать при это просто пример кода где для упрощения естественно вместо какого-то действия написали что лука раунд значит к своему значит просто соединение все примем упрощенных Ну да Ну я понял есть какие-то методы которые что-то делают в чем проблема Пускай что-то делают хотя бы Вопрос такой был Ну что в этом коде вот в этом корове что
00:59:43 - 01:01:29
не так Ну смотри есть метод своему Он у него нотация возвращается строку ничего не возвращается это не заметил другие вещи Дальше Он медленно по поводу тега по поводу тегов на самом деле там не только кейрор там сами теги они в общем как бы надо проверять как тега ключ то есть эта штука может по двум причинам упасть про капитала из Я думаю может быть просто оговорился капитала не гик никакой это строка есть Но предаваясь действительно может упасть потому что она тоже вообще вот дальше А дальше немного другого
01:00:49 - 01:02:21
плана косячки что у нас встреча сайт на самом деле по смыслу делает еще какие-то действия которые вообще не скрыт сайт То есть он делает Иса ему и все остальное почему-то Типа если вот кто-то кто не знакомый с кодом стал бы это читать того хуже стало это использовать он мог бы случайно использовать этот и так 2 просто как-то абстрактно так написано Я даже не обращал внимание что там именно почеши Бог именно покушай Просто смотрел Что метод что-то делает Пускай что-то делает Ну окей есть Второй второй Файлик с
01:01:34 - 01:02:51
ревью я могу пару слов сказать про него это Джанго модели здесь представлены модели кошелек юзер кошелька У нас есть некий код валюты и amount то есть количество денег на балансе плюс у него есть метод который представляет его виде строки есть у него методы Извините которые проверяет пустой кошелек у юзера у нас есть имя есть признак того что он заблокирован есть связь с кошельком задача здесь вот написать функцию она написана Принт User Wallet которая должна вывести кошелек пользователя соответственно в
01:02:22 - 01:03:56
каком-то виде информацию о кошельке то есть здесь также существуют проблемы что этот код может упасть ради случаев они такого же плана так носите по порядку Там сверху Пеп не две строчки отступ между классами импортами если дальше Чар филд в принципе не особо рекомендуют использовать потому что лучше текст Field делает то же самое но нет лишних проверок которые Макс ланч Это проверка чисто на уровне Джанги в постгальте все равно будет создан текстовое поле это ограничение 3 не будет там можно 5 и 10 записать
01:03:10 - 01:04:51
Mount desmal feels OK строка возвращает из софы Mount Self currentsycode вроде Ок из mpty но тут кто как но Лично мне не нравится логика в моделях типа fatmodel не самый лучший место для размещения логики лучше это какие-нибудь отдельные там хелперы бизнес логику выносить так классно методы логические методы в модели Мне не нравится когда расположен а как бы ты говорил-то делал отдельные хелперы отдельные классы для бизнес-логики которые инкапсулирует это то есть так класс User Model name char fielderfilm тоже самое из блок более
01:04:00 - 01:05:55
антифос Окей наводит план Print User Wallet так Ну первое сразу смотреть тут юзер обжиг взгляд может быть ситуация что этого пользу точнее такого username монету упадет тут нужен не знаю какой-нибудь либо обработку на обжиг должно так здесь либо геотор 404 Да дальше If User не может быть и фьюзер То есть он либо упадет либо либо юзер будет если дойдет до этой строчки user.wallet zempty testimal Field мне очень помню если там какое-то дефолтное Значение будет дефолт 0 стоять или нет Если не указывать
01:05:10 - 01:06:44
Угу А вот я тоже не помню к сожалению на Вот это надо перепроверить не помню как там реализация и в конце принт user.name но нужно смотреть если уволят то есть там бланк тронул труд То есть у User может не быть кошелька нужно проверять Если этот валит Ага ну вроде все может что-то еще не заметил Ладно давай попробуем еще раз по строчкам прочитать юзер вроде все мы собрали Давай чуть ниже смотреть может так получится найти про юзеры сказал что это проверка не нужна нужно давать проверку если уволит и
01:06:27 - 01:08:04
фьюзер из МТИ нормально сказал может быть дальше принт юзер не А ну username у нас же А нет я сам передается через метод Ну если мы рассмотрим свой что мы до сюда дошли на юзерине не на юзерине навалить и не упали да тогда норм будет и последняя строчка user.name OK has User Wallet Mount ну принципе можно Селект relat на уолет сделать чтобы пользоваться нет денег ну вернем что У пользователя будет has Zero на коренси чего-то там рублей например смотри в целом задача этой функции это принять себя пользователя найти пользователя
01:07:36 - 01:09:46
найти кошелек его а дальше сказать что денег либо пользователя есть деньги что не соответствует В каком месте имплементация не соответствует ожидаемому поведению ции Ну то что функция называется Print User Wallet будет печататься Что сколько у него денег не знаю что это еще есть на у меня наверное либо глаза молился либо я не вижу Ну наверное смотри он значит из эмте возвращает True кошелек пустой программа что делает а то что мы не брейка имеретируемся Что на то этого напечатает Смотри кого ты упомянул что у юзера типа
01:09:17 - 01:10:53
может быть [музыка] может и не быть и где-то тогда упадет получается нам нужно сейчас только от юзер Окей А [музыка] Что будет если может вообще быть такое здесь что у нас два юзера вернется запрос идет Да у нас ну хотя так username username простое поле это не уникально Да может несколько вернуться соответственно ошибка будет как бы ты переписал чтобы даже модель так чтобы она нормально отрабатывала Ну да Окей и как можно было после этого переписать до старую строчку но я сон уникальный то можно через край
01:10:15 - 01:11:58
и обжиг должна Exist обработать А если Exception не ловить то какие опции есть хотела 404 метод нам не интересен Я даже не знаю таком Но это старые старые времена когда еще дрс конечно сразу если еще там какие-нибудь другие способы Можно например взять фильтр и первое значение фильтре делать Ну тут типа два подхода первое Либо мы ловим ошибку и обрабатываем ее Либо мы не доходим то есть у меня больше нравится подход что там что-то попробовать Если не получится извиниться чем так ну ладно У меня вопрос нет Гриша
01:11:20 - 01:13:09