Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
Всем привет на связи Даниил технический ментор в компании kot review Сегодня мы вам покажем мог интервью на позицию Junior разработчика в нем мы разберем частые вопросы и задачи попадающиеся начинающим поэтому разработчикам собеседования проходите собеседование будет Фериде подписчица нашего telegram-канала она начинающий python-программист который решила проверить себя на прочность узнать границы своих знаний и просто испытать удачу в нашем собеседовании а задавать вопросы Разумеется будет ваша покорный
00:00:00 - 00:01:06
слуга мне больше 10 лет опыта работы программистом Я работал в самых разных компаниях начиная от стартапов внутри человека заканчивая амазоном я провел бесчисленное количество собеседований и наверняка не меньше раз проходил их уверен это видео поможет всем из вас Кто просто хочет узнать как устроены собеседование что на них спрашивают и как проходит Лайф кодинг в комментариях к этому видео вы увидите ссылку на отчет который я написал прямо прямом эфире D по результатам этого собеседования в этом отчёте подробно описаны плюсы и
00:00:33 - 00:01:37
минусы ферида как программиста и Даны рекомендации Что же делать дальше чтобы быть более уверенным и гораздо лучше проходить подобные собеседование Надеюсь это видео окажется очень полезным для вас приятного просмотра все запись пошла Теперь я включаю запись на камере на всякий случай [музыка] 321 мотор начали Здравствуйте Фериде Меня зовут Данил я представитель компании Рога и копыта и сегодня мы с вами происходит собеседование на должность поэтому разработчик Так давайте сразу с вами покажу вам свой
00:01:05 - 00:02:30
экран на котором мы сегодня будем работать Я знаю что вы заранее все настроили и то что мы сможем вместе разбирать те задачи которые Давайте немножко расскажу о себе потом вы расскажете о себе и потом мы уже перейдем непосредственно к собеседованию где Я вас буду спрашивать на всякие разные технические вопросы Сегодня собеседование только техническое никаких интересных вопросов поведенческих я вам задавать не буду это может быть следующий а Итак еще раз повторюсь Меня зовут Данил Я старший питон разработчик компании Рога
00:01:58 - 00:03:28
и копыта мне большой опыт работы но и в компании Рога и копыта Я уже много-много лет и тут я отвечаю Как раз за все за весь бэкенд за все что происходит и расскажите пожалуйста немножко о себе буквально за пару минут Какой у вас есть опыт работы какие у вас цели в питон разработки Как вы видите себя как разработчик на данный момент я занимаюсь этим три с половиной года почти 4 на данный момент я не чувствую что я не дал и чувствую себя Junior Junior вот планы конечно стать Мидл расти Вот но на данный момент как бы у меня
00:02:42 - 00:04:22
такое замешательство Как идти какими Каким путем строить Вообще свое будущее в плане Харт скилов в плане вот такие вот моменты а какой у вас опыт работы а в общем Я заканчивала прикладную математику информатику затем я работала аналитиком баз данных то есть на Microsoft Score сервере делал отчеты различные и затем перешла уже в разработку непосредственно этого Мой первый Опыт мой первый язык также владела когда училась и плюс Sharp но на таком не я не участвовала в разработках на этих языках только обучалась
00:03:37 - 00:05:16
мой непосредственно такой язык на котором я уже работаю какого рода Вы работаете какие-то веб-разработка Это сайт разработка мы подсчет по алгоритмам нам дают алгоритмы манипуляции Мы выполняем в сфере налогов и вот такого рода различные интеграции с различными налоговыми сервисами разных стран в том числе Европы Вот такая вот работа у нас разработка пока я не перешел каким-то конкретным вопросам по части расскажите пожалуйста какие то в этом какие фреймворки вы используете Какие библиотеки я работаю сейчас на Джанго на Джанго 3
00:04:27 - 00:06:24
версии а в данном контексте мы раньше использовали Джанго 1 с моим участием мы переходили на Джанго 3 Ну и различные библиотеки необходимы нету таких Ну вот целоре допустим используем моя слабое место Я уже поняла это синхронное программирование сейчас вот планирую улучшать свои навыки именно в асинхронном так как у нас особые нужды нету используется поэтому только вот сейчас я поняла что это необходимый навык а вот также ряд есть моментов которые хочу улучшить такие как ребит им Q допустим то же самое то есть
00:05:31 - 00:07:23
это такие необходимые навыки которые используются в разработке Мне кажется вот но конкретно вот путь Я пока свой не вижу я вот частями где-то собираюсь что вот этого мне не хватает вот это надо улучшить чисто по YouTube роликом либо где-то там форуме вычитываю [музыка] замечательно мне все понятно по вашему опыту работы Так что давайте перейдем уже к вопросам с моей стороны и я могу громко печатать Но это я не отвлекаюсь Это я записываю ваш ответ для того чтобы у меня были запись о том что здесь происходит
00:06:27 - 00:07:56
давайте начнем немножечко с разминочки Наверняка вы очень хотите программировать и наша первый такой вопрос будет такая задача разминка А как вы видите у себя на экране первый у нас вопрос это написать функцию которая будет проверять является ли заданная строка палиндрома Вы знаете что такое палиндром это кажется перевернут то есть лапу упал упала на розу упала на лапу Азора да да но только помню когда то есть у нас палиндром это такая строка который читается в обе стороны одинаково то есть и сначала в конец из Конца начала не
00:07:12 - 00:08:45
читается для так как вы привели пример роза упала на лапу Азора там это немножко отличается в таком классическом понимании палиндрома у нас не учитываются пробелы в рамках этой задачи мы считаем что пробел это значимый символ и поэтому Если Вы посмотрите на тесты и увидите тест номер на строке 12 Вот видите тест номер шесть что вот эта строка не является палиндромом потому что у нее есть пробелы внутри и они как бы изменяет эту строку обратно она читается не так же как в нормальном порядке Хорошо объяснил то есть пробил они важны
00:07:59 - 00:09:32
поэтому у нас нет таких сложных палиндромов в которых не учитывается максимально простая задача для того чтобы дать вам скажем так понять как у нас работает эта вся система устроена и немножко Разумеется в Вот вы знаете вот в данный момент я допустим теряюсь я вот действительно теряюсь Мне нужен время как бы я хочу сосредоточиться А тут я понимаю что время идет и В такой момент я реально теряюсь я вот допустим До этого была тоже такой же ситуации когда хочется этот вот То есть у меня такое чувство как будто я
00:08:47 - 00:10:13
я заранее знаю что я это провалю и не переживайте если у вас будет что-то не получается я вам всегда естественно подскажу Вам сейчас нужно написать буквально одну маленькую функцию и есть возникают какие-то вопросы обязательно Скажите я направлю и ничего страшного [музыка] один из ключевых моментов когда Извините что я перебиваю хорошие мысли но на всякий случай вам скажу заранее один из ключевых моментов прохождения собеседования это всегда Думать вслух То есть у вас есть какая-то мысль вы как-то понимать начинаете раздумывать
00:09:31 - 00:10:50
так как бы это задачу каким-то подойти лучше Думать вслух известно можно там на пару минут уйти но сказать что мне нужно подумать Прежде чем я приду к решению Но тогда в таком случае предупредите человека который вас собеседу потому что иначе это неловко такое молчание которое все сидят и не знаешь хорошо мысли вслух так комментировать эту строчку так как мы используем то и это номер строки в Line идет сама строка это были значение так из палиндром А из палиндром это как раз именно есть та функция которая вам
00:10:27 - 00:12:03
нужно написать так а вот этот момент Скорее всего вы спалить Дроме Мне нужно сравнить даст руку так палиндром это когда а строка так Напомните чтобы палиндром это когда у нас строка в обе стороны читается одинаково Если мы вычитаем A B C D CB A если мы пройдем в обратную сторону мы получаем то же самое A B C D cda здесь у нас такого нет у нас идет а б в а если мы читаем ее в обратную сторону получается ББ совершенно другая строка Угу так но мне нужно по логике Мне нужно сейчас одну строку перевернуть Ну вот если на этом примере
00:11:20 - 00:12:59
То есть мне вот эту строку нужно с перевернутой строкой сравнять типа как иквал допустим например и если выйдет True то это палиндром правильно звучит хорошо Попробуйте а я не помню как переворачивать строку в цикле Попробуйте перевернуть цикле никакой проблемы сделайте массив из этой строки и потом сделайте из массива обратную строку например так допустим [музыка] а Join до кажется был у меня вообще действительно из головы все Джон соединяет сплит разъединяет Ага значит здесь Я буду соединять а вот здесь я наверное буду сплит
00:12:32 - 00:14:22
сплит Если вы не передадите никакой аргумент она просто разделит просто разделится строку на одиночные а сплитом так Сплит разделяет на одиночные то есть получится если у вас будет просто массив из А B C D CB и передавать никаких аргументов у вас все будет именно то что вы хотите так Сплит кажется такой до синтаксис так но это такая же строка и получится значит сначала Попробуйте просто сохранить массив правильно Если вы знаете как массив разворачивать У меня есть этот я потерялась сохранить теперь этот результат этой
00:13:57 - 00:15:34
выполнения этой операции в какую-то перемену результат сплита отдельно Давайте вот так так сохранила потом это у меня получается Здесь у меня массив здесь я по циклу наверное а обратно было не переживайте не переживайте все хорошо но у меня Сплит противоположное начинается от -1 туда а я не помню Давайте Так вы умеете делать Раньше в обратном порядке чтобы у вас числа были нет допустим не от 0 до 5 от 5 до 0 в Ну да в рендже просто поставить Вот так вот раньше там а реверс reverse есть функция реверса
00:15:28 - 00:17:23
Да но в ренже в рендже ее нет да Но реверс это просто отдельная функция я вот этот синтаксис Откройте просто загуглить никакой в этом проблемы Ну вот реверс от так Ну то есть цикл Да только наоборот реверс а только здесь Наверное такой нужно а можно без него может быть только вы забыли Что именно а все [музыка] ритуал так это newstr и допустим равно usdr то Допустим труда А что здесь ожидается а резалп Да нужно эксперта True А ну да ритуал тру правильно он ожидает result в противном случае Хорошо
00:17:25 - 00:19:30
Давайте попробуем запустить и посмотреть как она работает Так ты один тест один к сожалению не сработал а может быть все дело в том Хотя Давайте проверим как бы вы проверяли эту функцию на корректность но я бы через багер наверное проверяла бы что выводит в данный момент через Принт да давайте перед вами попробуем Ну давайте вот это вот Давайте запустим так а все оказалось дело в чем я вас обманул по поводу сплита да Давайте попробуем запустить Сплит по пустой строке Вот вот да я помню потому что опять же
00:19:16 - 00:21:04
эти сепаратор вот тогда я Глубоко извиняюсь потому что это делается вот замечательно Я вас обманул А как только перестал вас обманывать вас все заработало заработает Ура Теперь у меня есть по ней несколько вопросов У нас есть замечательная а в ней я вижу одну питомскую проблему и одну алгоритмическую С какой начать с алгоритмической Оцените сложность по памяти не сложность А сколько памяти будет потреблять выполнение этой функции наверное много Ну много это не очень графическая оценка нужно будет этой функции А вот у меня
00:20:31 - 00:22:19
алгоритма коса тоже вот я планирую [музыка] оценить не смогу а по а по времени из памяти нет А по времени тоже не смогу хорошо я вам так скажу по памяти у нас есть дополнительная от потому что мы создаем дополнительный массив который собственно кладется ровно столько же сколько у вас входных данных а ведь эта функция и соответственно чтобы мы не делали сколько бы вы не входные данные всегда выделяется дополнительно такой же такое же количество Что же касается по времени оценка времена это будет о том
00:21:37 - 00:23:16
потому что мы всегда проверяем целиком точнее в крайнем случае мы всегда будем проверять целиком строку от начала до конца дальше хорошо мы пришли что у нас есть неэффективно и скорее всего как-то можно даже я не буду вас дополнительно мучить как-то прийти к какому-то быстрому решению которых будут есть меньше памяти Давайте с точки зрения питона Расскажите вот что бросается в глаза в этой функции Что лучше бы не делать Она работает мы видим хорошо работает но тесты все проходят Ну кое-что меня не
00:22:36 - 00:24:04
смущает Вот какие-либо вот если бы вам на coreview пришла такая функция чтобы вы сказали но мне кажется ее можно как-то покомпактнее сделать более и возможно использовать любой синтаксис другие функции более эффективные Ну наверное да но не только во-первых У нас есть проблема если нам всегда нам нужно возвращать результат вот этой функции это у нас бульва значение либо True либо false Зачем делать дополнительные If тут не очень понятно потому что мы проверяем это значение возвращаем True если это
00:23:24 - 00:24:59
значение false возвращаем false то есть мы буквально можем сделать retur а ну да уже сократили стало проще проблема номер два вы видим здесь comprefensional Да вот эта переменная с она делает перекрывает переменную с которой Дана на вход и в данном случае это не вызывало никаких проблем но в целом лучше не перекрывать переменные которые находятся не нужен тогда давайте у меня заготовленного вопроса 4 нет потому что они более алгоритмические и Давайте немножко отойдем от алгоритмов мы более-менее
00:24:15 - 00:25:49
понимаем что там происходит и целях экономии времени лучше перейдем на вопросы более питоновский я думаю потому что вы нормальный программист и не особо много задач по решению каких-то нахождений пыльных Громов и прочее поэтому может возникать какие-то трудности Откройте файл question 4 и я вас там немножко поспрашиваю так вижу classion 3 и сейчас создался к вашему 4 должно быть может надо нажать на Refresh Explorer Если Вы посмотрите сейчас на экран вот кнопка здесь появился нет Ну давайте тогда перейдем в кэшн 3 чтобы
00:25:16 - 00:26:57
не задерживать появился появился замечательно и пойдем по самым основным основу питона естественно я вас не буду спрашивать никакие Чем отличается intextring и а вот давайте рассмотрим такое есть у нас некоторое переменная в ней хранится значение допустим не хранится какой-то словарь и у нас есть перемена б не хранится естественно Мы хотим их сравнить когда мы сравниваем мы говорим а равно B так просто сравнение вопрос питоне есть а из б чем вот эти вот эти два оператора отличаются И зачем они нужны
00:26:28 - 00:28:11
не знаю Давайте попробуем Ну допустим когда мы сравниваем логические какие-то допустим из но или из над но допустим то мы используем из я использую из они допустим Мне кажется так правильно Ну конечно линтер всегда подчеркнет и скажет что это не так хорошо а вот что равняется А тогда мы увидим что а не равно B а не является D но при этом а равняется и более того а является потому что они указывают на одну и ту же область памяти буквально из это проверяем у нас находится в одной области памяти или нет
00:27:42 - 00:29:40
А как вас вообще с изменяемостью неизменяемости объектов и стройных типов изменяемые актини можете допустим турпу тот же самый я не помню как на русском кортеж он не изменяемый а список список изменяемый хорошо пока все нормально Давайте перейдем к другому вопросу а что такое декоратор декоратор это функция которая позволяет изменять существующую функцию не меняя ее замечательно Давайте теперь функция очень сложная функция и я хочу чтобы когда я делаю Вот так эта функция не только возвращалась значение
00:28:49 - 00:30:38
но она еще и печатала Ну да вот какой-нибудь декоратор сверху допустим Принт F Да назовем Принт F и отдельно ее пропишем эту функцию Я если честно Скорее всего тоже А и Б аргументы Она будет принимать Ну то есть сходу вам будет не очень просто написать Ну да которая печатает на правильном пути Давайте посмотрим немножко с другой стороны декораторы это ошибка это он должен быть но ладно я не буду вас учить Как проще понимать декоратор но я понял что судьбы понимаете как декоратор работает хорошо
00:30:08 - 00:31:56
перейдем к следующему вот написал я класс и у него совершенно бесполезный и я хочу сохранить экземпляры класса внутри слова [музыка] а вот Давайте попробуем запустить [музыка] проблемы я вот его использовал в качестве ключа но он к сожалению почему-то не находится почему так происходит и как это исправить потому что здесь же словарь ключом является объект значение 3 А здесь D как будто это строка Ну наверное надо D Kiss Напишите Попробуйте и Давайте запустим Что вы хотите вот этим сделать просто
00:31:35 - 00:33:34
сравнить Какое значение просто хочу я просто хочу получить Ну давайте по-другому запишем давайте сделаем Я хочу получить значение которое я сохранился мы получаем НОД но нет этого ключа Как так выходит вот Я вот только чтобы сохранил а его там нет потому что вы ключ не вызвали Вы же в кейс сохранили Ну да это сам объект Да сам объект он является ключом словаря это уже давайте может если вас ки смущает Давайте вот так а если вы Принт сделаете D что будет какой-то объект Ну да коротенькая Такая подсказочка знаете что
00:33:47 - 00:35:09
такое что делает функция Хеш питоне нет Хорошо тогда ну без этого просто трудно знать что происходит А как работают словари Вы наверное когда получается тоже не очень знаете хорошо расскажите Как работает словари Ну как они устроены Ну там словаре ты есть хэш функция для быстрого доступа непосредственно к таблице Вот это ячейки памяти занимают они определенные и мы непосредственно Обращаемся к какой-то ячейке это супер быстрый поиск по сути Да замечательно а какой будет результат выполнения США от Ну какой будет
00:35:23 - 00:37:12
результат функции от вот этого некоторого объекта посмотрим какое-то некоторая магическое число но возникает есть это есть тот самый Хеш возникает проблема Давайте посмотрим еще несколько объектов которые одинаковы Казалось бы по значению и одинаково хорошо но являются ли они разными между собой не знаю Я тоже не знаю у нас функция Hash вообще не определена но для этого объекта и функция равно неопределена И несмотря на то что у каждой этот у нас объект имеет одинаковый какой-то воображаемый хэш
00:36:22 - 00:38:06
но при этом они не равны а когда у нас происходит вытаскивание объекта из словаря он берет сначала смотрим Хорошо он как бы находит место где должны жить и потом так у нас объекты по значению совпадают Они совпадают собственно поэтому нам нужно определить что-то в внутри этого класса чтобы давало нам правильное сравнение что как определить функцию которая даст будет сравнивать два объекта этого класса не знаю Волшебный метод Какие вы вообще волшебные функции знаете вообще что это такое А вот только стыдно
00:37:22 - 00:39:07
волшебной Функции там Я просто их особо не использовала поэтому не было нужды в моей работе использовать поэтому не кажется Насколько помню было Принт было что-то такое нет стр магическая функция это такая функция которая позволяет использовать стройные функции над этим классом допустим [музыка] стр Адама вызываем от какого-то значения Она превращает его что-то в строку для того чтобы мы вот здесь для того чтобы мы написали красивую строку от нашего восхитительного века которому уже у нас выходит
00:38:34 - 00:40:16
[музыка] мы написали какую-то непонятную строку которую вместо хорошо а для того чтобы определить мы говорим лично вот так же есть функция Лен функция Hash и некоторые другие которые нам позволяют собственно вот STR это как раз магический метод который позволяет работать функции вот с двумя подчеркивания Он позволяет работать но и Вот соответственно если мы определяем яку и хэш и при этом сам класс у нас неизменяемый мы его Вполне себе можем хорошо использовать в качестве ключей для словаря Хорошо давайте Забудем про вот эти наши
00:39:36 - 00:41:03
ключи и Мы с вами уже говорили про износ из not Non вот у меня есть опять же восхитительный метод и он возвращает и я хочу передать в него какое-то дополнительный параметр Да допустим C который будет иметь значение 5 по умолчанию и А может имеет значение соответственно его можно передавать или не передавать и соответственно он будет прибавляться сейчас мыться не знаем хотелось бы добавить Как добавить значение по умолчанию Вот то есть у нас Вот так мы вызываем у нас проблема в том что цене определенно
00:40:59 - 00:42:29
изменить сигнатуру функции f так чтобы там появилась и нам не нужно было бы его прописывать так равно 0 опять если цель передается то C будет равно этому значению которое передалось Если нет то будет использоваться замечательно давайте я тогда изменю я скажу а и что-то мы тогда делаем Magic равняется Нет давайте Вот так мы знаем мы можем передать номер сюда и тогда если мы увидим что значение и Magic Island вы тогда можете какое-то у нас воображаем параметр ну и соответственно Мы всегда проверяем
00:42:01 - 00:43:53
но у нас возникает проблема Допустим мы хотим чтобы этот Мэджик принимал вообще все что угодно вообще любое значение ему было хорошо то есть мы даже тут берем Мы хотим писать каждый но мы не хотим писать Magic в том случае когда нам не передали никакого значения Можем ли мы так то есть Magic может принимать не только любой любые типы вообще все что угодно что вы ему передаете он принимает и печатает Вот такой вот но мы хотим знать когда у него ничего не передали Можно ли это сделать проверять из instance проверяет на типы
00:43:40 - 00:45:21
я правда на там можно использовать и не допустим Если вы придумаете как туда Ну вообще вот прямо сейчас я не вижу как можно использовать или просто и в Magic из Нон то не печатать но мы хотим а то есть мы хотим именно Нон печатать Мы хотим печатать все что угодно Но если нам ничего не передается мы не хотим У нас вот есть мы можем Теперь эту функцию вызвать двумя способами f35 либо Приветики Я хочу чтобы в первом случае ничего не печаталось а во втором случае напечатал Приветики и более того я хочу чтобы если мы вот
00:44:43 - 00:46:21
так вот сделали чтобы он тоже напечатался Возможно ли Ну тут дело в том что если ничего не передавать то по умолчанию уже будет но а Да и функция примет Вот это значение Передается ли да мне сейчас голову идет вариант проверять аргументы которые передаются нет [музыка] Я не знаю вроде показался такие легкие задачи с подвохом Ну да это просто на самом деле это все в продолжении того как у нас работает в питоне сравнения и как как вот мы работаем с объектами и прочее это вот это на самом деле это сложный вопрос
00:45:44 - 00:47:25
большинство питон разработчиков никогда таким не занимаются И у них не возникает и Можно можно не знать Главное что вы знаете как работают аргументы по умолчанию это если вы хотите чтобы магия сработала как вот я показал То есть сейчас давайте запустим эту функцию и она должна напечатать сейчас новый Приветики А мы хотим чтобы было только один раз и Приветики мы делаем так то есть Мы создали какой-то Объект который обязательно уникальный и никогда его не повторится и более того мы проверяем не по его значению а по его
00:46:58 - 00:48:27
месту в памяти то есть Мы создали какой-то внешний Объект который у нас бы хранил значение все остальное кроме вот этого объекта будет распечатываться это это редкая техника она нужна очень меня встречалось только на моей практике два раза когда нужно было такое сделать за сколько получается лет за 14 за 14 лет примерно два раза Но это просто больше на то как Ну различить различение того что происходит по идее можно еще сделать интроспекцию но это это вообще совсем тебрить Итак мы немножко поговорили про питон и
00:48:13 - 00:49:40
у нас у вас Я надеюсь еще есть где-то минут 20-30 времени Да отлично Давайте поговорим немножко про программирование в целом и про вот вся шелуха что есть что вы пишите в проекты и пользуйтесь Джанго и можете мне рассказать что такое rest нет хорошо Не могу собрать объяснение правильно А вот вы написали просто раз был сервис Какие Примерно вот скажем так какое-то просто предположение чем может быть rest и Почему эти сервисы Вы можете сказать Ну потому что они визуализируют Как правильно сказать
00:49:01 - 00:50:58
Ну то есть мы в основном работаем всем часов в формате правильно И это обеспечивает какой-то вот обмен данных таким вот образом хорошо то есть для вас сервисы это которые задают специальным образом Ну вот я не могу вам точно Хорошо Давайте тогда какой-нибудь другой вопрос а Вот какие вы знаете типы Ну что-то вроде get-пост букет пост патч другие редко используемые хорошо а вот когда вы делаете свой раствол сервис и вы не помните что не может но вот Каждый раз когда вот вы делаете дед вот какой-то Get
00:50:06 - 00:51:44
и у нас есть пользователь который делает 10 20 30 40 50 раз а вот этот с одними и теми же значениями вот Зависит ли количество этих запросов от Зависит ли результат вот этого запроса от их количество Ну нет у нас такой Что называется идем патентный запрос [музыка] а вот среди вот того чтобы перечислили вот когда вы пишете вот эти ваши сервисы обладает ли хоть один из типов запросов таким же свойством Да я вот это вот не помню градацию типа безопасные небезопасные Вы про это я именно про то что я спросил можно ли
00:51:12 - 00:52:55
допустим делать пост запрос он не возвращает одно и то же так создаем новый объект наподобие с гет Это скорее всего апдейт запрос патч наверно сможет Ну а можно не сможете все зависимости от того есть но я понимаю что есть Короче такая Святая книга которая описывает Что такое но за мой карьеру я видел что люди воспринимают ее по-разному никто полностью не следует каких-то там воображаемых гайдлайна некоторые делают действительно патентных что каждый раз вы говорите что почуете и он взлетит вам одно и тоже некоторые делают то же самое
00:52:07 - 00:53:30
то есть вас всегда какой-то объект или сломан и всегда можно сказать допустим то что он ничего не возвращает потому что объект уже удален если мы где-то можем получить один и тот же объект он удаляет и уже в принципе либо вернется либо ничего не возвращает Я думаю то что он ничего не возвращает Я больше склоняюсь к этому хорошо и тогда более-менее на самом деле это нет но абсолютно прав видите что-то понимаете знаете что просто не можете сформулировать Давайте перейдем Чуть подальше А вот Представьте
00:52:57 - 00:54:33
Вы заходите браузер не будете адрес Яндекс на экране происходит магия появляется сайт Яндекс между этапами Как вы нажали Enter и до того как начала рендериться картинка сайт на экране Какие вы можете выделить этапы что там происходит Ну во первых [музыка] какой именно не знаю на сервере обрабатывается запрос и возвращается ответ в виде допустим того же поиска который [музыка] страницы Но вот мы вот вели яндекс.ру А как браузер узнал что к какому серверу пойти и кому отдать запрос не написано же у него там ну это да это тема
00:53:51 - 00:55:42
протокола скорее всего и я не смогу ответить на него я знаю что есть два типа протокола это что теперь разница между ними это в том что здесь требуется сертификат здесь требуется Не всегда нужно эта тема как бы когда не нужна была да и я вас понимаю так что давайте перейдем что-то к более приземленным А можно мне сказать что такое расшифровку не поджиг от дикта что-то там такое нужно что это просто запросы базе более удобные нежели просто писать хорошо а и а вообще как когда нужно использовать именно орр а когда можно
00:55:06 - 00:56:52
писать напрямую Сколь запрос когда из койлов оптимальный Хорошо а когда вы думаете писать оптимальный Ну я так понимаю Он же все равно не совершение в каких-то моментах возможно большая нагрузка на базу чистоту запросов и на выдачу поэтому Может проще исполнить В таких каких-то нетривиальных случаях когда прямой SQL кажется более простым решением чем городить какие-то сложные конструкции хорошо вот смотрите написал Я написал красивый хороший А вот он работает медленно вот медленно Мне кажется чуйка у меня
00:56:27 - 00:58:09
такая что он работает медленно а что делать в таком случае а скорее всего надо его проверить на оптимизацию но оптимизировать его скорее всего надо его или нет как мы определим что его надо оптимизировать или не знаю то есть знаете что такое профайлер средства профилировки или что-нибудь нет не знаю хорошо а вот вообще вот даже не не думая о каком-то squery прочее вот у вашей работе происходит да То есть вы говорили что у вас есть там какие-то нужно реализовать алгоритмы которые с финансовыми данными прочее вот и вот это
00:57:37 - 00:59:07
вот сделали и к вам приходит говорит А вот ваша программа работает три часа а мы как-то ожидаем что там минут 15 максимум с такими вопросами то есть в интернете написано про ваш код но я бы начала искать способы как это проверить насколько оптимально у меня написан допустим код как его оптимизировать вообще у меня не было такой ситуации я даже не знаю как ответить если не было трудно знает хорошо А давайте тогда спросим то что я знаю что вы не знаете но вдруг вы просто немножко стесняетесь а что такое asgi
00:58:28 - 01:00:11
вот сервер Давайте синхронный сервер а чем они отличаются ну здесь синхронный сервер здесь они работают А в чем разница принципов работы Вы наверное как раз говорила что мне нужно как раз вот асинхронное программирование так как я вот да есть люди которые знают в теории как она работает но не понимает как приложить бывает наоборот люди которые в практике это делают по крайней мере Вы знаете что такое что есть наверное еще что они что они хорошо немножко тут спрашивал и часто такой вопрос который
00:59:38 - 01:01:27
Люди спрашивают по поводу джанга вообще не специалист но слышал такую штуку Что такое миксы И зачем они нужны я ну как бы тоже я их использовала очень редко поэтому так вообще если так в корень зайти а практически на каждый вопрос отвечаю я не знаю и тоже как-то нелогично я столько лет программирую и мы это обсудим чуть попозже это не встречала это мне не нужно было это не что же я встречалась все это время делала не переживайте это часто такая штука это больше зависит не от того что вы делали Чтобы не делали
01:00:36 - 01:02:12
а Можете ли вы перевести то что у вас есть практически ваши навыки в голове слова этот это тоже отдельный навык и его не очень просто так просто с контачка хоп и попробовать применить так что не переживайте по этому поводу мы это еще отдельно обсудим после записи давайте я Вас еще немножко помочь если вы не против вот все эти ваши замечательные Джанго проекты они на какой операционной системе крутится в продакшене малину на линуксе Да какие у вас вообще отношения с линуксом Ну смогу сделать Ну как бы я не админ и
01:01:29 - 01:03:00
необходимые мне инструменты я смогу установить удалить либо получить допустим тот же самый подключиться через терминал к базе смогу А вот Представьте что у вас есть вот логи вашей программы Ну естественно миллионы строк если вам что-то будет нужно найти в этом блоге находясь терминале чтобы Ну я обычно логи смотрю через блокнот Nano и там просто ход кейс использую и через поиск Допустим что-то еще если я еще определенную ошибку либо Ну просто просматриваю так ну либо там что-то редактировать может быть
01:02:21 - 01:03:58
а вот допустим вам нужно выполнить какую-то утилиту начали писать и мне что-то не понимаете А Google под рукой Нет ну вот так вот случилось что в таком случае делать Вот вы знаете утилиту уже знаете вот вам нужно только понять как с ней работать но я начну набирать потому что обычно Когда выходит ошибка там выходит словарик помощь и там уже Все будет понятно как бы подсказки идут все Умно Поэтому если либо лишнюю не ту букву Наберёшь уходит то что обычно Хелп команду которая вам выведет мануал да то есть инструкция по
01:03:10 - 01:04:54
применению какой-либо команды Насколько помню это было Хелп Но я это не использовала я конечно Обычно люди используют Google это это не страшно хорошо то есть мы в консольке там CD создание файлов создание этого всего там переходить консоли нано хорошо спрашивать как выйти из фильма Я не буду но при этом никакие там какие-то системные Вызовы Как там работает шедоллер как там работает переключение между процессами Вы наверняка не знаете просто потому что зачем я все понял Действительно зачем это
01:04:06 - 01:05:42
знать в принципе обычный питон программиста не надо хорошо А вы знаете что такое докер можете рассказать но докер по сути это контейнер изолированный контейнер который проходит именно процесс происходит процесс а также можно объединять эти контейнеры посредством докер компоста Для чего нужен контейнер сам для того чтобы изолировать какие-то части для того чтобы они не конфликтовали и работали Ну как бы не мешая никому и чтобы никто не мешало чтобы не было конфликта Хорошо можно еще допустим утилизацию ресурсы допустим
01:04:56 - 01:06:38
большая большая мощный компьютер Он простаивает закидывает что-то много докеров и умная Я надеюсь хорошо а Давайте немножко в сторону того же линукса и одной такой замечательной консольной утилиты с гитом вы работаете А что это такое это управление версиями то есть именно сливается туда [музыка] Вот то есть это некий место где хранится кот хорошо Да Действительно это система контроля версии да А какие вот Представьте Какие основные команды вы знаете вот Каким вы пользуетесь Как скажем так даже вот так Как часто вы пользуетесь
01:05:49 - 01:07:50
гитом с консоль очень хорошо Вы наверно пользуетесь пайчармом и в пайчарме Все я абсолютно большая часть времени делаем когда у вас не осталось легких вопросов про консольные команды знаете ли вы чем отличается мерч от rebase так вот rebase Я никогда не использовала амерш это слияние хорошо что происходит мержа сливаются все ветки текущую ветку сливается это нужно предположить на самом деле так хорошо значит гидс из консоли это нет но мерча тогда докер есть а Давайте немножко вернемся к питону но не коду а к тому что его
01:06:52 - 01:08:45
окружает А вот скажите я написал программу Вот написано использовал кучу библиотекнут по тысяче импортов каждый в каждом файле И теперь я хочу поделиться исходниками с кем-нибудь что мне нужно сделать чтобы вот организовать список тех зависимостей которые есть инструмент для этого есть Ну можно создать файл requier Где будут указаны все используемые библиотеки и другой человек может потом установить через приз можно его создать А вот мне такая проблема возникает вот точнее даже я вот сделал рекламе
01:08:09 - 01:09:53
передал всю свою репозиторий своему другу Он говорит знаешь я вот запустил А мне не того какие-то конфликты что-то еще Происходит что из-за чего такое может происходить только что со своего компьютера Вот мой проект я над ним год работал Я создаю своему другу а у него не работает как так на моем работает а у друга нет Ну да в этом случае как раз лучше использовать докеры хорошо а вот из-за чего такая проблема может возникнуть скорее всего у него установленные какие-то библиотеки которые конфликтуют
01:09:02 - 01:10:22
новую установленными например Так а еще а вот как у нас у нас в рекламе Мы всегда указываем версию или не всегда нужно ли это допустим я просто могу же список сказать библиотек искать и все у меня 35 версии кажется и когда через приз устанавливаешь там даже версии Выходит то есть да конечно потому что текущая версия Может комплектовать с какой-то библиотекой и приходится избежать версию допустим Например хорошо а вот если у нас докер Нет ну я немножко не понимаю как долги работает этот у меня еще пентиум из 2008 года в
01:09:41 - 01:11:15
нем виртуализации вообще никакой нет и Linux там плохо работает И мне нужно как-то сделать так чтобы у меня несколько проектов на моем восхитительном компьютере не конфликтовали друг с другом как это сделать через виртуальное окружение через Ленд либо хорошо что вы знаете Можно ли как-то сделать так чтобы у меня несколько питонов еще стоял на компьютере Да как раз вот виртуальное окружение вот у меня там питон 2.7 35310311 Да можно но там можно Конечно можно просто там переключать версии Как хорошо
01:10:31 - 01:12:17
Примерно как работает думаю что вы тоже понимаете хорошо Мы вроде прошлись более-менее о всяким разным штукам вот я больше вас прошел базовые вещи потому что вы сами говорили что Джон разработчик вы не очень хорошо не чувствуете Что вы чтобы на металл пошли Вот поэтому я наверное не буду вам задавать вопросы какие-то Ну более высокого уровневые или вот если вы хотите я могу еще немножко по базам данным поспрашивать по тем как там они устроены дизайна мне в принципе кажется что будет ответы такие же как
01:11:33 - 01:12:56
но просто если вам хотелось бы А может быть какие-то у вас есть еще таланты программирования которые вы хотели рассказать но на самом деле у меня один небольшой вопрос есть который я еще не покрыл вот я в своем коде который Вам показывал использовал какой-то просто банальную функцию Test которая нам запускала тесты сам кондовым способом просто потому что мне было лень прописывать что-то более сложное А вот какие методы для Юнит тестирования вы знаете в питании Какие библиотеки может ну тест часто используемые
01:12:14 - 01:13:41
тест реже больше не знаю кажется их нет а вот скажите 1 минут несколько нехороших людей плохо пишут код и не оставляют место куда я мог бы засунуть мог я там есть вызов какой-то базы данных там может еще этот звонок для того чтобы кофе мне сделали внутри кода все происходит А во время тестов но естественно нужно мог поставить чтобы это все не выполнялось Вот Но не все программисты оставляют место куда это можно мог пропихнуть что в таком случае обычно Я не знаю Ничего а что такое блоки вы знаете
01:12:58 - 01:14:30
думал это ставится чтобы кот пропускался ну хорошо вот допустим вы работаете пишите Unit тесты для для какого-то вашего and Point вот этот путь ходят в базу данных Можно ли оставлять такой код который ходит база данных Во время исполнения чтобы тест каждый раз базу данных ходил и что-то там Смотря ну тест он создает как бы пустую базу при каждом запуске теста создается новая пустая база пост какой-нибудь отдельным нет временная база для теста то есть по сути при тестировании не изменяются текущие данные в базе то есть у нас есть
01:13:50 - 01:15:26
специальный какого-то какая-то специальная база данных которая заменяет реальную боевую как раз вот это вот специально она будет моком для для реальной базы И так можно не только с базами можно с любым таким ресурсом который вы хотите из любой функции То есть вы знаете что может не очень хорошо терминологии владеете Ну хорошо Так я примерно понял какие Какой у вас уровень какой все хорошо я передам и чарам мои компании Рога и копыта и они с вами обязательно свяжутся вот Большое спасибо было очень приятно с вами поговорить
01:14:42 - 01:16:08
а потом мы перейдем вне Записную часть не под запись хорошо а вот и сейчас я отключаю запись
01:15:26 - 01:15:48