Тёмный

Реальное ЛАЙВКОДИНГ собеседование JUNIOR Python разработчик 

Артём Шумейко
Подписаться 29 тыс.
Просмотров 10 тыс.
50% 1

Настоящее собеседование на Junior Python с зарплатой 100.000 рублей.
Первая часть собеседования: • Реальное Собеседование...
📚 Забирай гайд для подготовки к алгоритмическому собеседованию в моем боте: t.me/ArtemShumeikoBot
💡 Заходи в тренажёр для подготовки к техническому собеседованию Солвит: clck.ru/3BQNuoв
Пишу про IT и разработку в телеграм канале - подписывайся: t.me/artemshumeiko
Доступ к моим собеседованиям и закрытым материалам здесь: boosty.to/artemshumeiko
0:00 - Что вас ждет
0:45 - 1 задача (легкая)
6:43 - Определяем алгоритмическую сложность
8:58 - 2 задача (средняя)
12:44 - Момент ступора...
16:06 - 3 задача (самая сложная)
24:23 - Что нужно говорить вслух
31:48 - Что важно уметь кроме решения задач
32:46 - Мой любимый фрагмент видео

Опубликовано:

 

29 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 71   
@Rulezzz3
@Rulezzz3 5 дней назад
видео придает уверенности, что сеньоры тоже тупят на собеседовании джуна
@set1qs
@set1qs 5 дней назад
Он тупил спецом ))
@AirenikMelkonyan
@AirenikMelkonyan 5 дней назад
Object в Питоне же зарезервированно, и можно было бы сказать, что не корректно использовать такое название. 😊
@ogone4ek880
@ogone4ek880 5 дней назад
то что что то существует в пайтоне - не значит, что оно зарезервировано object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные
@rock4ts
@rock4ts 5 дней назад
это какой-то новый уровень троллинга)
@alexsur7315
@alexsur7315 13 часов назад
Отлично. Спасибо за собеседование. Покажешь на Ютубе ещё одно с лайв кодингом?
@asadbekimaraliev7561
@asadbekimaraliev7561 6 часов назад
Молодец, ты конечно достоин
@astimch
@astimch День назад
Первые две задачи без комментариев - там ничего сложного. 3-я задача встречалась в нескольких курсах по алгоритмам и структурам данных, поэтому если знаешь, то реализовать ее тоже не составляет большого труда.
@freisnz
@freisnz Час назад
3я задача на знание Priority Queue using Binary Heap, имхо.
@Volodya72
@Volodya72 5 дней назад
Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления
@user-cc2gu9bx3i
@user-cc2gu9bx3i 4 дня назад
Для этого есть условие в pop: if res == self.min_nums[-1]
@IvaNFallout
@IvaNFallout 5 дней назад
Один из вариантов решения первой задачи: def get_first_matching_object(predicate, objects): return next((x for x in objects if predicate(x)), None)
@SabFo_
@SabFo_ 5 дней назад
Да проще filter использовать
@maximkoltsov9833
@maximkoltsov9833 5 дней назад
@@SabFo_ лист компрехеншен выполняется быстрее
@ChrisColeDC
@ChrisColeDC 5 дней назад
это явно не уровень джуна и не 100 тысяч зп, первая задача только, остальные уровня мидл
@user-yq2ky3bv3l
@user-yq2ky3bv3l 5 дней назад
нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях
@YGNETATEL_3000
@YGNETATEL_3000 18 часов назад
А нельзя было написать Filter(predicate, object) ?
@mrveles
@mrveles 3 дня назад
Очень хорошее видео, прям как гора с плеч.
@kqvwvpk
@kqvwvpk 5 дней назад
Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!
@anoshin45
@anoshin45 5 дней назад
В маленькой компании синьором можно стать имея год опыта.
@qulinxao
@qulinxao 5 дней назад
эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match() raise e?
@merzbow7
@merzbow7 5 дней назад
ну так декораторы с параметрами писали во втором пайтоне, изращение, уже как 10 лет можно проще
@xtray272
@xtray272 5 дней назад
Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу
@symbol9new
@symbol9new 5 дней назад
Сколько учишься уже?
@gggppp228
@gggppp228 5 дней назад
А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь
@suddenname
@suddenname 5 дней назад
Как программист-самоучка с опытом в 7 лет, мало работавший в компаниях, но ходивший по собеседованиям, могу сказать: это слишком простые задачки на джуна В небольших компаниях в лайв-кодинге скорее интересуют более реалистичные задачи, вроде реализации нескольких эндпоинтов в Django или разбора существующего кода на предмет допущенных огрехов, иногда могут спросить даже про несложный деплой приложения на сервер В крупных компаниях два варианта: либо алгоритмические задачи с leetcode/codewars/etc уровня easy/medium, либо разбор тестового задания, которое ты получил до/после собеседования Если кто поделится местами, где можно найти _такие_ вакансии -- я в лобик чмокну
@Ejangordf6sg
@Ejangordf6sg 5 дней назад
так 3 задача это и есть литкод медиум
@suddenname
@suddenname 5 дней назад
@@Ejangordf6sg И правда, но смотрится как задачка не больше, чем на условное "easy+"
@user-tx8dt1kh2c
@user-tx8dt1kh2c 5 дней назад
Почему 3 задача проще 2?
@qulinxao
@qulinxao 5 дней назад
"One Stack (stack of pair value,minvalue):" def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min()) # храним в стеке сами значения и его текущий минимум
@qulinxao
@qulinxao 5 дней назад
get_first_matching_object=lambda pred,obj=[]:next((v for v in obj if pred(v)),None)
@user-fy9zc9bm9m
@user-fy9zc9bm9m 5 дней назад
33 минуты боли, но увы без этого никуда, сразу вспомнил все свои тупняки))
@InojjHacker
@InojjHacker 5 дней назад
Прикол конечно. Такие задачи могут на мидла и синьера дать, с зп в 2-4 раза больше
@Mr_Fulani
@Mr_Fulani 5 дней назад
Плохо ты претворялся друг ), джун тупит страшнее
@aeternaar
@aeternaar День назад
Никто не написал про ваш сайт - отличный инструмент для подготовки к собеседованию! Подольше бы он оставался бесплатным!
@user-lh9nk1vm8u
@user-lh9nk1vm8u 4 дня назад
Пару комментов: задача 2. 1. Полагаю не стоит использовать isinstance, т.к. есть риск получить проблемы с наследованием при расширении списка передаваемых эксепшенов (например, передали еще LookupError, lambda: print(3)) и получили не ожидаемое поведение). type проверит на точное совпадение. 2. Вызов ex[1]() производится без параметров, что в случае IndexError("bar") выбросит missing required positional argument. Полагаю, это проблема постановки задачи и некоторой не внимательности при выполнении. 3. raise e стоит вынести из условия, иначе ломается логика, если выбрасывается эксепшн не переданный в списке. задача 3. 1. Использование list говорит, что у нас О(1) будет не совсем честная. Если докапываться, то какой-нибудь связный список - самое то. 2. Для второго списка за счет чуть большего количества памяти можно поддерживать более простую логику (храним список минимумов). def push(self, num: int) -> None: self.stack.append(num) self.min_nums.append(min(lst[-1] if lst else num, num)) def pop() -> int: self.min_nums.pop() return self.stack.pop()
@arthurarthur4075
@arthurarthur4075 5 дней назад
Возможно это старая запись вашего интерьерью? Вопросы не тянут даже на стажёра
@sergeymalkovski3877
@sergeymalkovski3877 5 дней назад
Жестко. Я ни одной не знаю😢
@khafizovilnaz
@khafizovilnaz 5 дней назад
Ты не один друг, я тоже почувствовал себя тупым
@SaintVes
@SaintVes 5 дней назад
Не знаю ответ ни на одну задачу. Учусь питону уже второй день. Я тупой, надо бросать?
@alexeynesin483
@alexeynesin483 5 дней назад
Ахах, за 22 дня ты не сможешь этот собес пройти. Это серьзная работа, нужно много времени потратить, чтобы научиться.
@digitaIdevil
@digitaIdevil 5 дней назад
Бросай
@SaintVes
@SaintVes 4 дня назад
@@digitaIdevil хорошо, пошёл бросать
@user-bw5in2yo7s
@user-bw5in2yo7s 4 дня назад
хех, одно дело вещать по подготовленному сценарию, а другое дело в realtime. Хорошо порешал
@user-kv5zt2gf3q
@user-kv5zt2gf3q 5 дней назад
Последняя задача не до конца решена. 1. Есть бы сделаем push(3), push(6), push(7), pop(3) и запросим get_min, нам отдаст IndexError, хотябы по идеи должен отдать 6. Мы никак не сможем добиться O(1) в get_min, за исключением, если будем постоянно держать в get_min отсортированную коллекцию, но тогда у других операций увеличится Time Complexity.
@pavelosipov5951
@pavelosipov5951 5 дней назад
сможем, например, вот так: class Stack: def __init__(self): self.stack = [] self.mins = [] def push(self, n: int): self.stack.append(n) self.mins.append(min(self.get_min(), n) if self.mins else n) def pop(self) -> int: self.mins.pop() return self.stack.pop() def top(self) -> int: return self.stack[-1] def get_min(self) -> int: return self.mins[-1] и да, решение на видео с ошибкой, в некоторых случаях неправильно сработает.
@Vasilii_Furi
@Vasilii_Furi 5 дней назад
@@pavelosipov5951 def pop() у тебя неверно работает
@sonzu1468
@sonzu1468 5 дней назад
так это же стэк, мы можем удалить из него тока последнее число
@qulinxao
@qulinxao 5 дней назад
"One Stack (stack of pair value,minvalue):" def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min()) # храним в стеке сами значения и его текущий минимум
@user-kv5zt2gf3q
@user-kv5zt2gf3q 4 дня назад
@@pavelosipov5951 И правда, что-то я ошибся. Спасибо за разъяснение.
@user-ql7mk3mu2f
@user-ql7mk3mu2f 4 дня назад
не понял, почему нельзя просто def get_min(self): return min(self.stack) все остальные методы изменяют данные self.stack и метод всегда будет возвращать данные согласно актуальному стеку. Либо я не понял задачу
@user-cc2gu9bx3i
@user-cc2gu9bx3i 4 дня назад
Требуется решить за постоянное время, а у Вас O(n)
@artemshumeiko
@artemshumeiko 4 дня назад
Потому что эта функция занимает O(n) времени, а нужно O(1)
@sergem6860
@sergem6860 4 дня назад
По-моему некорректно говорить, что в худшем случае О(n), а в лучшем O(1), O вроде описывает имеено поведение в среднем (но надо посмотреть, сходу что-то не находится)
@EgorKissa
@EgorKissa 2 дня назад
O-нотация характеризует верхнюю границу. Например алгоритм быстрой сортировки в худшем случае (при неудачном выборе опорных элементов) может выполниться за O(n*n), но верхняя граница в среднем находится на O(nlogn).
@sergem6860
@sergem6860 2 дня назад
@@EgorKissa а что в лучшем случае она ограничена константой всё же корректно говорить или нет?
@EgorKissa
@EgorKissa 2 дня назад
@@sergem6860 нет
@Denzi33
@Denzi33 5 дней назад
🐯
@user-nu3ot7td1j
@user-nu3ot7td1j 22 часа назад
в защиту автора видео хочу сказать, что на собеседовании очень сильный стресс и даже такие легкие задачи как первая могут вогнать в ступор, так как очень много нервов мешает думать. Это надо прокачивать скилл прохождения собеседований, чтобы на них не переживать
@VaeV1ct1s
@VaeV1ct1s 5 дней назад
Кажется последняя задача решается линкедлистом с указателем на последнюю ноду, а в ноде с указателями на предыдущую и минимальную. И не надо создавать второй лист
@anoshin45
@anoshin45 5 дней назад
Тогда вам нужен кастомный ЛЛ с двумя указателями. Можно упростить и держать минимальное значение в каждой ноде вместо указателя. Но это будет занимать больше места.
@VaeV1ct1s
@VaeV1ct1s 5 дней назад
@@anoshin45 написать класс с 3 полями сложно?
@anoshin45
@anoshin45 5 дней назад
@@VaeV1ct1s Упростить в плане не заморачиватся с указателями на минимальное значение.
@VaeV1ct1s
@VaeV1ct1s 5 дней назад
@@anoshin45 зачем забивать память? Оно у тебя хранится в ноде, на которую ты указываешь. В чем простота?
@anoshin45
@anoshin45 5 дней назад
@@VaeV1ct1s а если у тебя два дупликэйта. Ты сам на себя будешь ссылаться ?
@qulinxao
@qulinxao 5 дней назад
def push(self,v): self.t+=1; self.s.append(q:=(v,self.t)); heapq.heappush(self.pq,q) def pop(self): v,t=self.s.pop(); set(heapq.heappop(pq) for _ in itertools.takewhile(lambda v:v[1]>=t,pq)); return v def top(self):return self.s[-1][0] $$$$это разрыв строки$$$ def get_min(self):return self.pq[0][0] def __init__(self): self.s,self.pq,self.t=[],[(float('inf'),0)],0
@qulinxao
@qulinxao 5 дней назад
def push(self,v): self.s.append(v); v
Далее
Я ПЫТАЛСЯ СДАТЬ ЭКЗАМЕН...
34:43
Просмотров 197 тыс.