Турукин Вячеслав. Собеседование junior python разработчик
Подписка, колокольчик, лайки и комментарии мотивируют продолжать.
Поддержать канал: www.tinkoff.ru/rm/pronin.andr...
Обычно денежка идёт на книжки про питончик. Но иногда на светлое и тёмное.
Моя тележка andpronin -- стучите, если что.
Мой канал про обучению python с нуля и до мидла Андрей+=Пронин
/ @pypronin
Я в других сетях
🔗Вконтакте: CaptPronin
🔗Дзен: zen.yandex.ru/id/5fbd33919412...
#python #питон #программирование #Андрей_Пронин #собеседование
Пікірлер: 147
Андрей, большое спасибо за видос! День уже удался))
@AndyPronin
Жыл бұрын
рад, что нравится. Сегодня будет сложный стрим
Фидбек от Андрея один из лучших, если не лучший. Спасибо Вячеславу что дал добро быть этому ролику)
@AndyPronin
Жыл бұрын
Не каждый решится на публикацию своей неудачи. Нужно определённое мужество. Я бы сказал, яйца у Вячеслава наличествуют
Хороший тестовый собес! Вынес для себя полезные моменты, спасибо!
@AndyPronin
Жыл бұрын
Колокольчик, лайк и тд) Рад, что полезно
@bigbluepie8983
Жыл бұрын
@@AndyPronin сделано, шеф!)
А в целом так-то неплохо. Да, в "подкопотню" человек явно не лез и это сразу видно: думаю, вопросы про "pk" и про "залезь в objects" именно на это и были направлены. Однако инфу он нормально ищет: загуглил, на странице через CTRL + F. Т.е. времени много не терял. Правда, нашел не то, что нужно - но, думаю, тут можно списать на стресс. Печатает достаточно резво, копипастит и исправляет копипасту - тоже норм. Думаю, самый большой его минус - очень маленький "ИТ-кругозор". Тут капнуть чуть глубже, там залезть чуть дальше, тут ответить на вопрос "почему так, а не иначе, и что будет, если сделаю иначе?" + подтянуть английский + уверенность = под пивас сойдет. :D Но вопросы на этом собесе были прям уровнем выше, чем на остальных. Думаю даже, что не стоит ожидать на них ответов от среднестатистического студента из ЯП. P.S. А я бы задачу решил через кэш - закэшировал бы список айдишников. Да, память мы потеряем, однако значительно выиграем по скорости. Особенно если эта штука потенциально будет часто использоваться. И в этом случае еще нужно будет пересмотреть логику добавления/удаления объектов - кэш обновлять нужно будет. А постоянно в БД лазать с order_by("?"), это, кажись, плохо. Еще, кстати, в СКЛ есть же рандомайзер. Технически, можно на уровне СКЛ выбрать 3 рандомных элемента, без order_by. Но тут я не совсем уверен, что сработает. P.P.S. От continue в цикле for меня слегка передернуло. :D
Моё мнение, что у Екатерины слишком завышенные требования к человеку, который ещё не в отрасли и пытается в неё попасть на начальную позицию. По мне, так Вячеслав достаточно достойно на всё отвечал, касательно Soft. И откуда взялись эти 85% - он же не на Project Menadger идёт, а на разработчика?
Чет дама слишком буллингом занимается. Почему то выбирает наиболее грубые формулировки вопросов. Ей не хватает формы мусора и лампы которую она бы поворачивала в лицо соискателю. Можно было бы помягче выбирать выражения, а то это какой-то фемдом и тест на стрессоустойчивость.
@rancidlox
Жыл бұрын
Да она типичный манагер по персоналу. Захейтила кандидата по умолчанию и скинула решение на технаря
@mython.8168
Жыл бұрын
+
Переживал за Вячеслава, зная что он не прошел) хороший парень, я думаю у него все еще впереди, проваленные собесы это тоже необходимый опыт. В ближайшем времени предстоит тот же путь, который уже прошел Вячеслав, поэтому спасибо за это видео, оно будет очень полезным когда я буду готовится к своим первым собесам)
@Proborder
Жыл бұрын
*Да, попасть бы ещё на эти собесы не проживая в Москве)*
@ivankosolapov430
Жыл бұрын
@@Proborder начни прожимать в Москве :)
@AndyPronin
Жыл бұрын
@@Proborder я не в Москве живу)
@Proborder
Жыл бұрын
@@AndyPronin *Да я в целом, а не именно к Вам. Трудно сейчас джунам)*
@AndyPronin
Жыл бұрын
@@Proborder джунам всегда непросто
12:34 темное нефильтрованное? Простите))))) Спасибо за видео!
Спасибо за работу, очень полезный материал! (Тоже готовлюсь к собеседованиям, реальный опыт год). Каждый новый ролик думаю, ну всё теперь Андрей спросил всё, что есть, дальше я на всё отвечу))) ан нет)) Некоторые мысли, которые мне приходят во время просмотра: 1) когда человек что-то быстро отвечает, вы часто говорите что-то вроде "ок хорошо". Непонятно, правильный ответ или нет. Если правильный, будет не лишним это проговорить): и зрителю понятно, где правильно, и человека подбодрить)) 2) если человек что-то не отвечает, вы довольно часто говорите "Давайте что-нибудь попроще". В педагогике это bad practice. Если ответ простой, можно его проговорить (для зрителей). "попроще" или "ну хорошо я подскажу" это демотивация участника. лучше без мгновенной оценки подсказывать, или если уж совсем плохо, то "давайте перейдем к другой задаче, а к этой вернёмся" - абсолютно корректно, имхо. Супер контент, супер примеры, спасибо что выкладываете это, надеюсь будете продолжать ;)
@AndyPronin
Жыл бұрын
Спасибо за обратную связь. Полезно. Постараюсь учесть
@pavels4490
Жыл бұрын
@@AndyPronin спасибо вам за ролики, смотрю с удовольствием ;)
Редко пишу комментарии. Но иногда раздражают все эти требования к кандидатам и некое пренебрежение, что касаемо уверенности, откуда ей взяться, без реального опыта? первый собес, человек волнуется, бедняга, воду пил каждые пару минут, хотел только подливать)))) Проведите с ним собес через год реальной работы, будет та самая уверенность, видно же, что нормальный адекватный парень и перспетива у него есть, были кандидаты и похжуе. Так что удачи тебе, просто рынок IT сейчас перенасыщен и работодатель хочет готового специалиста за минимальный бюджет ввиду большой конкуренции. А так отличный джун, молодец, найдешь себе работу однозначно.
@AndyPronin
Жыл бұрын
Уверен, что так и будет. Надеюсь, ещё сделаю видео с ним про то, как ему сделали оффер
@user-td5bw9rt2g
Жыл бұрын
Так если рынок переполнен, как он найдет работу то? И переполняться он будет дальше, спрос падает, а предложение растет.
@AndyPronin
Жыл бұрын
@@user-td5bw9rt2g по рынку в понедельник попробуем стрим записать. С ответами на вопросы
@extendomerc1701
Жыл бұрын
@@AndyPronin ждемс
@userAlino4ka
Жыл бұрын
@@user-td5bw9rt2g я думаю когда кандидат Уверенный, человек со Знаниями, то его возьмут на фоне будь 100 кандидатов растеряшек, будь их 1000.
Спасибо за собеседования, интервью и Лутца! Сам уже прочитал, но какие-то моменты иногда забываются, поэтому использую видео по нему как краткий справочник. Такой вопрос: На тестовые собеседования могут попасть только студенты Яндекс Практикума?
@AndyPronin
Жыл бұрын
Рад, что наравится. Да. Пока так. Возможно, в феврале это изменится. Следите за каналом
Дорогая всем Катерина, если прочитаете данное сообщение, Поздравляю с днём рождения!! Крепкого здоровья, Вам, Вашей семье!!! Каждое собеседование с вами заряжает позитивной энергией, подталкивает учиться ещё усерднее , Вы прекрасны, счастье и процветания 😇😇😇
Все думал ,и вспомнил,чутье мне досказало у нас же есть генераторы,они как раз решают данную задачу,по времени быстрей ,плюс сам код сокращён,и в памяти занимает мало места для вычисления ,да тут более подойдет генератор,сейчас что нибудь напишу,чтоб проверить ,хотя попробую пример переписать,должно получится
Благодарю за Джанго Как раз с ним не сталкивался ещё ☺ Представляю если я буду проходить собеседование, я когда начну волноваться это будет капец 🥲,
@AndyPronin
Жыл бұрын
Зафиксируй стул, что бы не крутился.
@Maine__Coon__1
Жыл бұрын
@@AndyPronin , у меня обычный на 4 ножках, если только прибить к полу 🤣, а если серьёзно атмосфера с видео очень сильно передаётся как от Джуна Вячеслава, его волнения, так и полное спокойствие Андрея, просто нереальное), так же конечно же великолепная и позитивная Катерина 😊
@AndyPronin
Жыл бұрын
@@Maine__Coon__1 а еще у нее сегодня ДР)
Один из вариантов решения - генерить список из трех случайных айдишников, существующих в базе и далее по ним получать три объекта из БД, используя оператор . Отрабатывать должно быстро, тк получение по индексу будет, но минус в том, что два запроса нужны будут, хоть и не самые дорогостоящие)
@AndyPronin
Жыл бұрын
А как генерить список?
@ihorzp4441
Ай бұрын
@@AndyPronin нужно хранить в отдельной табличке размер списка, обновлять его с помощью сигналов при изменении таблицы содержащей список
Я в работе для таких кейсов использую BETWEEN вместо OFFSET, он работает быстрее поскольку отрабатывает оптимизация субд (бинарное дерево по первичным ключам). А для получения рандомных данных можно использовать ORDER BY RAND() и лимит, тогда снова отрабатывает оптимизация, и выбирает рандомные записи до достижения лимита. Есть конечно расширения которые делают это лучше. Но стараемся не тянуть зависимости, тем более база мальенькая на 2кк строк. Вся аналитика же построена на кликхаусе, там репорты для клиентов генерируются в свободное время, так что производительность не играет роли.
@gvadellupa9335
Жыл бұрын
Верно понял, что ты описывал вот это решение: Item.objects.order_by('?')[:3]
Вы тоже после просмотра ерзаете в кресле и говорите ну, эээ, ааа и то есть :)? (я да)
А если так попробовать, конечно будет плохо работать, если много удаленных элементов def get_random(): max_id = Item.objects.all().aggregate(max_id=Max("id"))['max_id'] count = 0 list_id = [] while count pk = random.randint(1, max_id) if Item.objects.filter(pk=pk).exists(): list_id.append(pk) count += 1 return list_id
SELECT * FROM table WHERE num_value >= RAND() * ( SELECT MAX (num_value ) FROM table ) ORDER BY num_value LIMIT 1
Андрей, а вы принимаете непосредственное участие в проработке курса ЯП? Заметил что вы про недавнее изменение в теории по Джанго что то сказали.
@AndyPronin
Жыл бұрын
До недавнего времени принимал. Курс будет значительно обновлен
Если дороги операции чтения по определенному столбцу, b-tree по нему проставить не сильно поможет?
@AndyPronin
Жыл бұрын
Перемешивание дорогое. Чтение с lIMIT - нет
Софтовый фидбек лажа какая-то. Конечно блять люди идут хоть куда нибудь чаще всего на данном этапе. Зачем этот самообман?
Pr'am kak na Fortrane napisal for-loop, zavershil 'continue' 🙂
Добрый день, Андрей. Что если изначально использовать метод first и last, чтобы определить первый и последний id. Затем запускать random из range(first id, last id) и выбирать 3 значения. Пробовать извлекать по сгенерированным id. Если нету чего-то, то ещё раз запускать random пока не найдутся все id.
@AndyPronin
Жыл бұрын
А если есть удалённые записи, или нужно фильтровать? Опять же, первый и последний элементы - значит, мы должны каким то образом сортировку сначала сделать?
@user-uo3gl6ry5q
Жыл бұрын
@@AndyPronin а записи не хранятся по возрастанию id?
@AndyPronin
Жыл бұрын
@@user-uo3gl6ry5q по умолчанию Джанго не сортирует, насколько я поиню
По поводу задачи с выборкой 3х рандомных записей из бд. Условие записей много (3000000 и более и некоторые из них могут отсутствовать) , а если взять максимальный last_pk = Item.objects.last().pk . Затем нам нужно рандомное число random_number = random.randint(1, last_pk) . Пишем функцию которая будет делать запрос в бд Item.objects.filter(pk=random_number) . Если запись существует добавляем ее в список , если запись пуста повторяем с другим рандомным числом. + добавим проверку уникальности списка. и по итогу возвращаем список уникальных существующих id
@AndyPronin
Жыл бұрын
А если много пробелов?
@odessa.ukraine
5 ай бұрын
А зачем так сложно? Есть же order_by(‘?’)[:3]
А если посчитать общее кол во всех сущностей в бд(objects.count()), запихнуть это в переменную num Далее с помощью randrange найти случайное число ДО этого offset 3 раза. Ну, типо offset1,2,3 После - последовательно написать 3 запроса Item.queryset[offset].first() По сути, будут 3 запроса в бд, но все будут дешевые, тк мы будем брать сразу же первую сущность после того как применим offset Пока писал, кажется, понял какую ерунду написал.) Увы)))
@AndyPronin
Жыл бұрын
ага. решение не выглядит норм
по поводу решения, что если ? 1) объявить моделях класс ItemManager(models.Manager) 2) в нем def get_random_items(self): ...параметры выборки... query = f """ RAW SQL request """ with connection.cursor() as cursor: cursor.execute(query) row = cursor.fetch() далее возвращаем что нужно через objects .... 3) Модели Item добавить objects = ItemManager() 4) во View нужно просто вызвать этот кастомный метод random_items = Item.objects.get_random_tems() ..... Надеюсь я понятно изложил идею. Так же как вариант objects.raw(), но не пользовался таким, возможно это даже проще. На мой взгляд, идея должна быть легкой для БД, и не допускает исполнения никакой логики во Views.
@AndyPronin
Жыл бұрын
Как это позволит получить случайные элементы не перемешивая таблицу? Сама идея с менеджерам моделей ок
Я джавист, на питоне ничего не писал, но как по мне, здесь два варианта: 1. Два запроса в БД: первый возвращает все существующие id, второй идёт опять в БД и вытягивает n записей по указанным id из первого запроса. В принципе, я думаю, джанго предоставляет какой-то функционал вроде спринговой пропагации транзакций, чтобы использовать одну и ту же транзакцию в разных методах, общающихся с БД, так что потенциально это не самый плохой вариант с точки зрения оптимизации, как по мне. 2. Один запрос, который сразу возвращает случайные существующие записи, но придётся повозиться с SQL. P.S. Да, вариант с лимитом и оффсетом наверное получше будет, чем певый.
Генерируем 3 рандомных числа в рамках диапазона длины списка rand_items. Затем выбираем по полученным числам в качестве индекса 3 объекта, создаём лист из этих объектов. Во время создания листа либо во время генерации чисел (используем любую структуру данных для их хранения, мы должны проверить что либо число уникальное, либо объект уникальный). Для крайних случаев когда длина списка меньше 3 возвращаем сам список. Рендерим полученные объекты в шаблон
@AndyPronin
Жыл бұрын
а если id выпадет несуществующий?
@chimchimsterschannel161
Жыл бұрын
@@AndyPronin вы правы не идеальный метод, обработать несуществующий id, думаю, тоже можно, только сложность алгоритма будет расти.
@user-qn6pq1dk5h
Жыл бұрын
@@AndyPronin через цикл while и try/except ищем существующие, добавляем их в список. Как набираем 3 шт - выходим из цикла
@user-qn6pq1dk5h
Жыл бұрын
Можно ещё перед этим всем из БД вытащить максимальное значение pk
Андрей , как вы относитесь к питон программистам которые используют Виндоус как мейн ос ? И не знают вообще в Линукс?
@AndyPronin
Жыл бұрын
Я к ним не отношусь) по факту, пайчарм и вскод позволяют вполне комфортно и на винде работать. А что подразумевается под знают линукс?
@xewuss3750
Жыл бұрын
Программирование - это писание символов. Какая разница, в какой ОС будет открыт редактор текста?
Андрей , возьмите на работу))
@AndyPronin
Жыл бұрын
Увы. Пока нет вакансий(
Что тайм менеджмент относится к аналитическому складу ума?
приветствую! проект "джун на прокачку" закрыт? последняя серия 10 месяцев назад
@AndyPronin
Жыл бұрын
Он нашел работу девопсером. Идея взлетела, но не так, как планировали.
@SavenkoRoman
Жыл бұрын
@@AndyPronin спасибо! Не думаете продолжить проект с другим человеком?
@AndyPronin
Жыл бұрын
@@SavenkoRoman если найду на это силы и время. Очень затратное мероприятие оказалось
Надо срочно что-то с курсом делать, просто такие слабые ученики слов нету. Просто маркетинг плати деньги ревьюеры вытянут тебя за уши.
@AndyPronin
Жыл бұрын
Нельзя человека выучить против его воли
@MasterID
Жыл бұрын
Если они поставят жесткие рамки, увы, заработать не получится. А так, да, все зависит о человека, кто то идет меня там научат, кто то идет я там научусь. Только вот тех кто "меня там научат" очень много стало.
Что по поводу такого варианта? использоваться annotate(count=Count(...)), в values_list помимо 'pk' положить 'count', сгенерировать через рандом число от 0 до count - 3, и взять срез 3 элементов, начиная от этого рандом элемента. Кажется, это должно отработать быстрее, чем вариант с сортировкой. При count UPDATE. Тут вообще не то считал, ниже в комментах поправил
@AndyPronin
Жыл бұрын
Прикольно. Но количество элементов это не последний id же?
@gvadellupa9335
Жыл бұрын
@@AndyPronin Да, понял косяк. Что-то такое можно count = Item.objects.all().count() rand_index = random.randint(0, count - 3) rand_articles = Item.objects.all()[rand_index:rand_index + 3] Но это будет выполнено за 2 запроса, мб можно и за один
@AndyPronin
Жыл бұрын
@@gvadellupa9335 эм.. А если id не сплошняком? Например, како Н будь Фильтр типа is_published=True
@gvadellupa9335
Жыл бұрын
@@AndyPronin мб вопрос понял неправильно, но что нам мешает вместо all() написать filter(is_published=True). Просто изначально выборка была из всех записей
@AndyPronin
Жыл бұрын
@@gvadellupa9335 предположим, что у нас из БД в выборку попали записи с id 1, 2, 10, 50. Count будет 4. И индексы не сработают, как планировали
А random.choices только уникальные берет или могут быть повторы?
@andrewmishkov9279
Жыл бұрын
:) посмотрите в доке. А вообще например на степике в курсах по пайтону многих этот модуль разбирается с задачами. Помоему случайное число из списка берет. Может ошибаюсь
@AndyPronin
Жыл бұрын
Могут быть повторы
Видно чувак волнуется)
Интересная штука, я один стопаю видео, отвечаю, а потом запускаю чтоб посмотреть как я ответил?
@AndyPronin
Жыл бұрын
Думаю, нет) Примерно так и должно работать
Здравствуйте. Не так давно на вашем канале. Скажите, это же не реальное собеседование кандидата в компанию?
@AndyPronin
Жыл бұрын
Это - нет. Тестовое
@1Collection_of_hearts
Жыл бұрын
Понял спасибо
Вот что бы я посоветовал этому челу. Так это просто хотя бы задавать себе вопросы. Допустим я бы спросил что нужно видеть юзеру, если у нас в списке 1 статья. И отталкиваясь от требований писать логику кода. А тут как будто его заставляют писать, а не он сам думать хочет. Ну про 60к конечно, загнул
Делайте ваши ставки
сомнительное конечно решение приветствовать "звиздеть", что знаешь, когда понимаешь, что плаваешь в ответе ... возможно стоит обратить внимание на "IBM" специалистов - те прям уверены в своих знаниях - правда боинги потом падают... HR вообще просто по списку прошлась На мой взгляд парень сообразительный и можно работать что за компания?
Здравствуйте, на счет задачи про получение 3 случайных элементов из БД, я бы сделал так - 1) Получил бы максимальный индекс элемента 2) Сделал бы просто 3 перестановки цифр этого индекса (по алгоритму, чтобы сгенерированное число, не превышало максимальный индекс) и потом уже сделал запрос на получение этих индексов из БД. Моя квалификация - ученик, 1 курс.
@disasstor
Жыл бұрын
Максимальный индекс не равен количеству записей, может быть такое , что несколько промежуточных записей удалены, есть каунт, для подсчёта количества записей, в остальном согласен, сделал бы так же.
@AndyPronin
Жыл бұрын
А если индекс попадёт на удалённую запись? Из БД можно же удалять?
@MultiVait
Жыл бұрын
@@AndyPronin перед добавлением можно проверить на .exists(). Получаем максимальный id, генерируем один рандомный, проверяем наличие, добавляем в словарь.
@xewuss3750
Жыл бұрын
Запрос к базе это: 1. Махинации в ОРМ.. 2. Собственно сам запрос к главному процессу СУБД. 3. Создание нового процесса для исполнения запроса. 4, Планирование запроса. 5. Наконец само исполнение. 6. Передача результата. 7. Закрытие процесса. 8. Махинации в ОРМ.. Отсюда: желательно уложиться в один запрос.
@disasstor
Жыл бұрын
@@xewuss3750 предположим в таблице несколько миллионов записей, мы делаем фетчол, по вашей логике это более рационально чем сделать 3 запроса с конкретными айди? Хотя я не предлагал делать 3 запроса, но мне кажется даже в этом случае будет лучше. А вообще «or» никто не отменял.
Это у всех такие зарплатные планки с учётом того, что ты почти ничего не знаешь? (без обид) И рынок действительно готов таких за такие деньги переваривать?
@AndyPronin
7 ай бұрын
В целом, джуны так и стоят. Но Вячеславу подкачаться нужно для оффера
Сижу тут,не подписан,и сижу нахаляву смотрю,надо исправится)
@AndyPronin
Жыл бұрын
И колокольчик не забываем)
@Tornado-ln7fq
Жыл бұрын
@@AndyPronin Ой забыл)
По моему мнению, Екатерина в начале подзадушила Вячеслава
"Уверенности не хватило", ну а как без волнения на собесе...
Охх, я бы, наверное, сознание потерял, если бы на меня так серьезно смотрели, как Андрей вначале на Вячеслава))
Комментарии ютуб удаляет или где?
@AndyPronin
Жыл бұрын
По какой то своей внутренней логике трет. Да
@xewuss3750
Жыл бұрын
@@AndyPronin я там ссылку на хабр кидал. Не очень популярная статья, но автор приводил пример, что SELECT * FROM ,,, ORDER BY RAND() LIMIT 3 , выполнялся у него 40 секунд и он придумал запрос, который выполнял аналогичную задачу за пару секунд.
Влюблен в Екатерину
@ivanabdullaev859
Жыл бұрын
Странный вкус. Либо прыщавый онанимист, либо ищешь мамку себе.
@user-bc5ry6ym2f
Жыл бұрын
@@ivanabdullaev859 Грубовато
@ivanabdullaev859
Жыл бұрын
@@user-bc5ry6ym2f если этих красавиц ейчарш вовремя не осаживать, они со своим креативом зае... любого работника. Эта как раз из таких. По поводу вкуса я лично за симпатишных молодых герлов, а не за бесполезных теток под 40.
Екатерину уберите, спасибо
Я бы заскочил к вам на собеседование.
@AndyPronin
Жыл бұрын
Ну... Пока для студентов Практикума, боюсь с небольшими исключаниями. Возможно, в дальнейшем что-то измениться.
Вроде на собеседование, а вертится на кресле. Смотрится подрастково и не серьёзно
@AndyPronin
Жыл бұрын
Нервы и волнение. Вполне объяснимо.Посмотрит на себя ос стороны и сделает выводы. Для этого и сделано
Зачем нужно изначальн собеседование не по технич. части , кому это интересно блин ?
@AndyPronin
Жыл бұрын
надо же познакомится с человеком? + софты тоже важны для трудоустройства