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

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 269

  • @artemshumeiko
    @artemshumeiko  Місяць тому +3

    Приглашаю на мой Практический курс по Backend разработке по всем актуальным технологиям: artemshumeiko.ru

  • @dimierlife
    @dimierlife 4 місяці тому +401

    Если это JUNIOR то у меня знания zero.

    • @1200eojf
      @1200eojf 4 місяці тому +5

      Ну я бы за 20 минут решил бы задачу, в принципе надо понять задачу

    • @funtickgd9502
      @funtickgd9502 4 місяці тому +12

      За 2 месяца этого лета у меня прогресс, я решил 1 задачу...

    • @JesusAVGNarezki
      @JesusAVGNarezki 3 місяці тому

      Нормально если ты не изучал каждый день по 8 часов​@@funtickgd9502

    • @uvwzyx
      @uvwzyx 3 місяці тому +8

      и таких, как ты, 99% в откликах

    • @dimierlife
      @dimierlife 2 місяці тому

      @@uvwzyx Каких в откликах?

  • @Rulezzz3
    @Rulezzz3 5 місяців тому +293

    видео придает уверенности, что сеньоры тоже тупят на собеседовании джуна

    • @set1qs
      @set1qs 5 місяців тому +13

      Он тупил спецом ))

    • @ЮрийСтифеев
      @ЮрийСтифеев 4 місяці тому +9

      Это не сеньер явно. 3я задача просто уровень джун джун. Хранить 2 массива, целевой и с отсортированными уникальными значениями, любой реально работающий джун это сделает . 2я хосапде, проверка наследования эксепшена. До перемотки видел что там было if т.е, что произойдет если туда в параметр, а как я понял это массив, передадут 3е или n значение?). Первую ничерта не понял, но видимо потому что питон вижу 1й раз.
      Мне жаль рынок ИТ если такие менторят людей в интернете и их слушают. Теперь понятно почему хр не могут найти людей

    • @alexla_grange8957
      @alexla_grange8957 4 місяці тому +1

      Это ж из разных сказок джин и сеньор Помидор

    • @alexander_gk
      @alexander_gk 3 місяці тому +6

      @@Rulezzz3 это канал просто принадлежит недосеньору. Нормальный сеньор на собесе не тупит.

    • @ВитяСлавинский
      @ВитяСлавинский Місяць тому

      причем конкретно :))))

  • @dorohovrs
    @dorohovrs Місяць тому +37

    Забавно устроено, что имея многолетний опыт backend разработки (python, php, java), видя задачки на видео, скорее всего школьной или университетской программы, понимаешь что не прошел собеседование на junior позицию

    • @ВасильКостриба
      @ВасильКостриба 8 днів тому

      мне кажеться что на таких собесах впервую очередь проверяют твой скилл в технологиях а не задачках.Хотя я не уверен я же не програмист

  • @gradkb
    @gradkb 4 місяці тому +19

    задача с минимальным элементом в стэке - огонь)

  • @gradkb
    @gradkb 4 місяці тому +28

    омг) главный скилл на собесах это внимательно слушать вопросы и стараться отвечать именно на них

  • @ts.kdv.raz0r
    @ts.kdv.raz0r 11 днів тому +1

    Третья задача проще декоратора с параметрами эксепшенов. Это же классическая реализация стека.)

  • @zarddark2440
    @zarddark2440 4 місяці тому +31

    Первая легко, третья легчайше для олимпиадника, просто дефолтный стек с префиксным минимумом. А для второй нужно синтаксис подучить

    • @krosh8982
      @krosh8982 2 місяці тому +2

      Да тут ЕГЭ уровень

  • @dima_upgrade1720
    @dima_upgrade1720 4 місяці тому +4

    Спасибо за ваш контент! Очень познавательно и полезно! Продолжайте в том же духе!

  • @user-lh9nk1vm8u
    @user-lh9nk1vm8u 5 місяців тому +7

    Пару комментов:
    задача 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()

  • @АндрейКапацйна
    @АндрейКапацйна Місяць тому +16

    Какой джун ? Серьезно ? Хорошо давай задачу для мидл. Я считаю что на позицию джун одолжен быть один вопрос готов ли ты уволится через месяц если не справиться. Все какие задачи и лайвкодинг . Понятно что пару вопросов надо задать чтоб понять в теме человек или нет .

  • @AirenikMelkonyan
    @AirenikMelkonyan 5 місяців тому +56

    Object в Питоне же зарезервированно, и можно было бы сказать, что не корректно использовать такое название. 😊

    • @ogone4ek880
      @ogone4ek880 5 місяців тому +6

      то что что то существует в пайтоне - не значит, что оно зарезервировано
      object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно
      in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные

    • @intruder70
      @intruder70 4 місяці тому

      зарезервирован object, но не Object

    • @cherimolah9493
      @cherimolah9493 4 місяці тому

      @@ogone4ek880 да, но это считается плохой практикой

    • @unnme2721
      @unnme2721 4 місяці тому +1

      @@ogone4ek880 Если вы используете object как имя переменной, вы затрудняете доступ к встроенному классу object в текущем контексте. Это может привести к путанице и ошибкам, особенно если ваш код зависит от базового функционала этого класса. Это фундаментальная штука и в коде она была неспроста. Основа основ ООП.

    • @ogone4ek880
      @ogone4ek880 3 місяці тому

      @@unnme2721 и че, я сказал что это незарезервированное имя, а не то что можно свободно так переменные называть

  • @izey__
    @izey__ День тому

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

  • @IvaNFallout
    @IvaNFallout 5 місяців тому +13

    Один из вариантов решения первой задачи:
    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_ лист компрехеншен выполняется быстрее

    • @saitaro
      @saitaro 4 місяці тому +5

      @@maximkoltsov9833 Лист компрехеншен создаст список, пройдясь по всем объектам. Это избыточно, как по памяти, так и по времени.

    • @maximkoltsov9833
      @maximkoltsov9833 4 місяці тому

      @@saitaro ладно, согласен, ошибся

    • @QKekos
      @QKekos 4 місяці тому

      @@saitaro круглые скобки это не лист компрехеншен а генератор эскпрешн, ленивые вычисления, некст один раз выполнится да и все, дальше эвальюейтится ничего не будет(но понятное дело, что само условие будет проверяться для каждого элемента до первого трушного)

  • @alexsur7315
    @alexsur7315 4 місяці тому +7

    Отлично. Спасибо за собеседование. Покажешь на Ютубе ещё одно с лайв кодингом?

  • @rock4ts
    @rock4ts 5 місяців тому +53

    это какой-то новый уровень троллинга)

    • @TheWorld-hs1hf
      @TheWorld-hs1hf 3 місяці тому

      Почему? Слишком просто для джуниора? Если да, то зачем джуниору знать больше?

    • @knowledgedose1956
      @knowledgedose1956 2 місяці тому

      ​@@TheWorld-hs1hf 😂😂😂😂😂

  • @funtickgd9502
    @funtickgd9502 4 місяці тому +4

    2 месяца лета не зря... 1 задачу я решил, на второй запутался, но по ходу событий понял, что надо было сделать, а в 3 я сразу понял, что надо было сделать, да и сделал

    • @TheWorld-hs1hf
      @TheWorld-hs1hf 3 місяці тому

      С нуля за два месяца?

    • @dllb
      @dllb 2 місяці тому

      Где учился????

    • @funtickgd9502
      @funtickgd9502 2 місяці тому +1

      @@dllb сам по книгам, примерами алгоритмов, литкоду. Мне на курсах только базу синтаксиса дали

    • @dllb
      @dllb 2 місяці тому

      @@funtickgd9502 а какие курсы и книги использовал?

    • @ВадимЕлисеев-ц8э
      @ВадимЕлисеев-ц8э 2 місяці тому

      ​@@funtickgd9502 Помоги, пожалуйста. Вот тоже из скачанных курсов получил базу, но а щас я хз, че мне делать.. Хочу на веб-разраба пойти и по идее до изучения самого django нужно просто решать задачи и так далее, но я вообще не понимаю, где можно было бы подчеркнуть действительно важные и полезные знания ,а где практикой их закрепить.

  • @julesbois2122
    @julesbois2122 26 днів тому

    16:00 в строке 62 мы вызываем коллбек с помощью ex[1](). Это сработает, если у всех коллбеков нет аргументов. Но в предложенном задании у них разные сигнатуры: у коллбека bar() нет аргументов, а у коллбека lambda есть - '_'. Не уверен, но кажется, чтобы это работало, надо перед вызовом коллбека определять, какая у него сигнатура и вызывать его с ожидаемым количеством аргументов. IMO.
    P.S.:
    или исправить кортеж с анонимной функцией, чтобы она тоже была без параметров (IndexError, lambda : print(2))

  • @DavidBitiev.2000
    @DavidBitiev.2000 Місяць тому

    Были идеи по решению, но дайти до результата было сложно👍👍👍

  • @_english_9025
    @_english_9025 19 днів тому

    Раньше когда слушал других программистов думал, что не дотягиваю даже до +- уровня стажёра, а после просмотра видео понимаю, что я уже сижу на нем точно, а возможно даже ещё годик другой практики и буду Джуном

  • @asyncio_run
    @asyncio_run 28 днів тому

    Я себя отношу к джуну… Ибо изучаю сам все и только лишь полгода))) но эти задачки я бы решил немного по-другому, но в целом контент прикольный) Спасибо))) А декораторы, это очень полезная и хорошая штука!

  • @danivais7082
    @danivais7082 3 місяці тому +4

    Решил 1 и 3 (сириус курсы спасибо), декоратор плохо сел в память

  • @ghoul4225
    @ghoul4225 10 днів тому

    3 задача частно на кружках для ол програмирование встречаеться

  • @irondanil3461
    @irondanil3461 2 місяці тому

    Спасибо тебе большое, бро. Ты делаешь глупых людей как я чуточку умнее.

  • @паукшнюк-г8ъ
    @паукшнюк-г8ъ 4 місяці тому +13

    это куда такие собесы? очень хотелось бы

  • @abaahi
    @abaahi 2 місяці тому

    Для меня сложно было второе. В третьем сразу понял что нужно параллельно сортированный список создавать при инициализации и добавлять в нужное место новый при пуше

  • @АртемРазумов-щ9г
    @АртемРазумов-щ9г 3 місяці тому +17

    Так много комментариев, что задачи легчащие и не тянут даже на стажера и так мало комментариев, что третья задача решена не верно, точнее не для всех случаев)
    Видимо эти комментаторы только во сне разработчики)

    • @rawil6751
      @rawil6751 3 місяці тому +2

      Я вот заметил, но правильное решение за константное время так и не придумал. Интересно, а на собесе это заметили или нет?

    • @АзаматКостоев-ы1н
      @АзаматКостоев-ы1н 16 днів тому

      Может написал бы сначала для каких случаев это будет неправильно прежде чем пизд*ть?

  • @aeternaar
    @aeternaar 5 місяців тому +6

    Никто не написал про ваш сайт - отличный инструмент для подготовки к собеседованию! Подольше бы он оставался бесплатным!

  • @billykid8678
    @billykid8678 Місяць тому

    Решение у задачи 3 сломается. Например, если запушить 323, а потом достать два последних элемента. В стеке останется 3, а список мин элементов будет пустой. Решение: вместо двух массивов сделать один двумерный. При каждом push в него будет добавляться: [добавленный элемент,мин элемент на момент добавления]

    • @HeppygroupDifermen
      @HeppygroupDifermen Місяць тому

      Почему список останется пустой? При пуше первой тройки в него добавится тройка по условию not mins, потом при втором пуше добавится двойка т.к она меньше последнего элемента списка т.е тройки которую мы добавили. При пуше последней тройки в список ниче не добавится. В итоге в стеке 323 а в списке 32. Первый пуп удаляет тройку из стека и ниче не удаляет из списка, второй удаляет двойку везде, третий удаляет двойку везде. Все ок

    • @HeppygroupDifermen
      @HeppygroupDifermen Місяць тому

      Ну а с двумерным впринципе тоже думаю будет работать

    • @billykid8678
      @billykid8678 Місяць тому

      @@HeppygroupDifermen да, моя ошибка, на 323 сработает. Но на 222 все же сломается. А на 322 будет неверный ответ

    • @ВасильКостриба
      @ВасильКостриба 8 днів тому

      @@billykid8678 там он потом исправил код и при 222 список min тоже будет 222

  • @UserSo4reUsu75ry
    @UserSo4reUsu75ry 2 місяці тому +1

    У меня только на одну задачу ушло бы 30-40 минут. Сколько бы я не нарешивал эти задачи, я не могу решать их быстро

  • @gradkb
    @gradkb 4 місяці тому +4

    в первой задаче не нужно разделять худший/лучший случай, строго говоря - твой ответ некорректный, правильный - просто О(N), но для джуна норм

  • @sergey6661313
    @sergey6661313 3 місяці тому +6

    на 12:09 копирует и спрашивает у нейросети :)

  • @artemkashipov9865
    @artemkashipov9865 Місяць тому

    вообще pop из-за структуры данных лист, не будет работать. так как лист требует сдвига, это медленно. и top тоже кстати будет медленный иногда из за переаллокации
    нужно создавать всего три связных списка, один чтобы работал pop а другой чтобы работал top
    только недавно увидел аналогичную задачу про это) изначально офигевал как можно такое сделать.
    задача была - что то про нахождения минимальной суммы для каждой подстроки в K элементов в массиве
    аналогичным образом делается

  • @Dw3mwtf
    @Dw3mwtf 12 днів тому

    Оскорбительно у людей такое спрашивать. Данная задача решается за 20-40 секунд ( с учётом написание кода ) Я считаю на такой вакансии куда важней понять есть у человека инженерное мышление. Может ли он понять что написанно в коде и его знание английского языка.

  • @Sila_v_pravde123
    @Sila_v_pravde123 2 місяці тому +1

    Так , все, иду работать в пятерочку . Чему я научился за месяц хз.

  • @xtray272
    @xtray272 5 місяців тому +8

    Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу

    • @symbol9new
      @symbol9new 5 місяців тому

      Сколько учишься уже?

    • @gggppp228
      @gggppp228 5 місяців тому +1

      А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь

    • @СтепанВоробьев-л2р
      @СтепанВоробьев-л2р 3 місяці тому

      так это база, тут ничего трудного нет

    • @UserSo4reUsu75ry
      @UserSo4reUsu75ry 2 місяці тому

      ​​​​@@gggppp228какие шансы джуну устроится на удаленку ?

  • @rotsaatkrahe7178
    @rotsaatkrahe7178 3 місяці тому +5

    Я немного не понял, но получается что в min_nums будут добавляться не все числа? разве за этим не последует ситуация когда get_min даст неверное значение, вроде 4 5 1 1, список минимумов заполнится единицами, а когда их обе вытолкнут, то get_min ничего не вернет?

    • @Marlo-Smile
      @Marlo-Smile Місяць тому +2

      Я тоже запутался но потом понял что здесь в стек числа добавляются с права и убираются справа. В этом случае если число не добавляется в min_nums то оно там и не нужно, ведь его удалят прежде чем справа останется минимальное число)

    • @anton6643
      @anton6643 6 днів тому

      ​@@Marlo-Smileерунда

    • @Marlo-Smile
      @Marlo-Smile 6 днів тому

      @@anton6643 Поясни

  • @astimch
    @astimch 4 місяці тому +3

    Первые две задачи без комментариев - там ничего сложного. 3-я задача встречалась в нескольких курсах по алгоритмам и структурам данных, поэтому если знаешь, то реализовать ее тоже не составляет большого труда.

  • @enzopaupau2302
    @enzopaupau2302 2 місяці тому +1

    Не могу не спросить)) а что за тема редактора которым они шеряться?
    Monokai чуть другой, этот приятнее

  • @dangerbenens
    @dangerbenens Місяць тому

    Помоему в первой задаче можно было сделать бинарный поиск

  • @dru_i_d
    @dru_i_d Місяць тому

    Не имея опыта работы с decorator, 3ье задание показалось намного проще)))

  • @daniyarkhabibulin1696
    @daniyarkhabibulin1696 3 місяці тому +3

    Честный отзыв! Если честно не тянешь на senior разработка очень слабо, на middle специалиста еще можно !

    • @ruslankrivoshein2893
      @ruslankrivoshein2893 2 місяці тому +5

      Сеньор - это не про классное решение алгоритмических задач с собеседования

  • @mrveles
    @mrveles 5 місяців тому +1

    Очень хорошее видео, прям как гора с плеч.

  • @relyawang
    @relyawang Місяць тому +1

    Третья задача это 155 с литкода, не? Кстати, что лучше на собесе делать если встретил задачу к которой знаешь решение? Прикинутся что видишь её в первый раз или признаться что знаешь?

    • @artemshumeiko
      @artemshumeiko  Місяць тому +4

      Конечно прикинуться, что не знаешь)

  • @droidnah
    @droidnah 8 днів тому

    Интересное видео. Я (пытаюсь) писать игры и программы на Годот и там язык в некотором роде схож с питоном, но захотелось глянуть что тут.
    Половину слов и понятий не знаю, поэтому хотелось бы задать вопрос по последней задаче. Если нужен минимальный элемент массива, то зачем создавать массив из предыдущих его значений?
    И что значит "за постоянное время"? В решении не заметил какого-либо уравнённого значения скорости выполнения функций 🤔

    • @ЯнПацюпа
      @ЯнПацюпа 7 днів тому +1

      Постоянное время - оно же константное, оно же O(1). Что бы нормально это понять лучше почитать простую книжку по алгоритмам. Можно начать с "Грокаем алгоритмы".
      Конкретно здесь:
      Если не было бы ограничения на постоянное время, get_min() мог бы просто возвращать встроенную min(self.stack), а она работает за линейное время. Если написать свою реализацию min, то это сразу видно: чтобы найти минимальный элемент придётся перебрать все элементы, то есть в худшем случае минимальный элемент будет последним, и в среднем время поиска линейно зависит от длины последовательности.
      В отличии от операций push, pop, top: когда мы в конец просто добавляем / удаляем элемент, это не зависит от размера последовательности (на самом деле там есть подводные камни про перевыделение памяти при увеличении размера).
      В реализации за постоянное время и есть смысл задачи.
      Артем сразу это упоминает на 18:01.

    • @droidnah
      @droidnah 7 днів тому

      ​​​@@ЯнПацюпа Спасибо, вроде бы понял. А что даёт -1 в номере индекса элемента массива? (Или это не оно?)
      Я так понимаю последнее значение переменной из массива, да?

    • @ЯнПацюпа
      @ЯнПацюпа 7 днів тому +1

      @@droidnah Да, это последний элемент. Это стандартный способ в Python, он поддерживает отрицательные индексы, можно вообще посмотреть на срезы - они очень удобные)

    • @droidnah
      @droidnah 7 днів тому +1

      @@ЯнПацюпа спасибо большое за ответы, теперь догнал суть 😁

    • @ЯнПацюпа
      @ЯнПацюпа 7 днів тому

      @@droidnah Рад слышать. Вообще если есть желание поплотнее посмотреть на Python, можно для этого взять книжку Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения (Eric Matthes. Python Crash Course). Там как раз первый проект второй части - это игра на pygame (первая часть - основы Python), правда алгоритмов там нет

  • @otekkvinke
    @otekkvinke 18 днів тому

    А точно ли у джуна нужно спрашивать алгоритмическую сложность? Это точно вопрос по грейду? А? а? А?

  • @qulinxao
    @qulinxao 5 місяців тому +1

    "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())
    # храним в стеке сами значения и его текущий минимум

  • @Nickek-g5k
    @Nickek-g5k 3 місяці тому +2

    Блин даже первая задача вызвала звон в голове...
    Прорвемся, готовимся дальше)))

  • @ИннаЛиксакова-о4н
    @ИннаЛиксакова-о4н 4 місяці тому +4

    в защиту автора видео хочу сказать, что на собеседовании очень сильный стресс и даже такие легкие задачи как первая могут вогнать в ступор, так как очень много нервов мешает думать. Это надо прокачивать скилл прохождения собеседований, чтобы на них не переживать

  • @imdmotcm8953
    @imdmotcm8953 3 місяці тому +1

    Если это Senior то в отличие от Джуна воспользуется chat gpt

  • @ГазинурРысмухаметов
    @ГазинурРысмухаметов 3 місяці тому +6

    3 задача решена неверно)

  • @nadyamoscow2461
    @nadyamoscow2461 2 місяці тому

    Очевидно, про принцип kiss в этой конторе не слышали.

  • @incios
    @incios 4 місяці тому +1

    Знания АСД помогли решить третью задачу в первые 4 секунды после ее прочтения

    • @knowledgedose1956
      @knowledgedose1956 2 місяці тому

      что это?

    • @incios
      @incios 2 місяці тому

      @@knowledgedose1956 алгоритмы и структуры данных

    • @hitomi-b1h
      @hitomi-b1h 2 місяці тому

      ​@@knowledgedose1956 Абстрактно синтаксическое дерево, полагаю

    • @hiften4659
      @hiften4659 Місяць тому

      ​@@knowledgedose1956дисциплина "алгоритмы и структуры данных"

  • @oBiba_and_aBoba
    @oBiba_and_aBoba 4 місяці тому

    Привет, мне очень нравятся твои видео, можешь ли ты пожалуйста в одном из следующих видео рассказать как сделать онлайн оплату чего либо

  • @illia4503
    @illia4503 3 місяці тому +5

    3:09 Всегда хочеться треснуть чем-то тяжелым тех кто в одну строку пишет много операторов, как это в строке 2 и 9. Код в первую очередь должен быть визуально легко читаем, потому что читаем код мы чаще чем пишем, экономия количества строк не дает преймуществ, кроме демонтрации умственных отклонений автора подобного кода.

  • @АндрейПопов-н2г2м
    @АндрейПопов-н2г2м 5 місяців тому +3

    33 минуты боли, но увы без этого никуда, сразу вспомнил все свои тупняки))

  • @nurbolatnurzhanov1958
    @nurbolatnurzhanov1958 4 місяці тому +1

    Кому интересно, вот такой код у меня получился на последний вопрос.
    class Stack:
    def __init__(self):
    self.stack = []
    self.pref_min = []
    self.current_min = None
    def pop(self):
    self.stack.pop()
    self.pref_min.pop()
    self.current_min = self.pref_min[-1]
    def push(self, num):
    self.stack.append(num)
    self.current_min = min(
    self.pref_min[-1], num) if self.pref_min else num
    self.pref_min.append(self.current_min)
    def top(self):
    return self.stack[-1]
    def get_min(self):
    return self.current_min
    a = Stack()
    for i in [10, 2, 5, 4, 6, -1]:
    a.push(i)
    a.pop()
    print(a.top())

  • @oxfaaaaa9687
    @oxfaaaaa9687 23 дні тому

    Не понял момент с худшей O(1) и лучшей O(n). Откуда вдруг взялось две сложности?

    • @Toksi86
      @Toksi86 17 днів тому

      Всегда ориентироваться надо на худшую сложность, сложность в худшем случае. Но есть вариации, когда получится лучше, чем мы ожидали. Отсюда худшая и лучшая сложности, все зависит от поступающих данных.

  • @alexbalgor9142
    @alexbalgor9142 Місяць тому

    Все что я увидел в коде это ?????? ?????? ?????? ????? .)) вот сижу и думаю а стоит вообще начинать если я не разбираюсь в этом вообще от слова совсем ) и с чего начать_)

  • @no101vmv
    @no101vmv 7 днів тому

    Ты же сеньор как можно было так на первом затупить с возвращаемым значением)

  • @yanalsheuski263
    @yanalsheuski263 Місяць тому

    третья задача развалится, когда в список залетят два одинаковых числа и оба будут минимальными

    • @izobretate
      @izobretate 12 днів тому

      Нет, так как там при пуше "меньше либо равно" оба числа добавятся в стек минимумов, при попе так же будут выниматься.

  • @tegeranchikrus4389
    @tegeranchikrus4389 2 місяці тому +1

    Ну я честно не понимаю две вещи:
    1. Каким образом человек которого заявляют как сеньора так долго (и так плохо) решал эти задачи
    2. Почему после такого собеса человека (судя по заявлениям в видео) взяли, это же даже не уровень стажера

    • @artemshumeiko
      @artemshumeiko  2 місяці тому

      Вам виднее, наверняка 500к зарабатываете?

    • @tegeranchikrus4389
      @tegeranchikrus4389 2 місяці тому +1

      @@artemshumeiko меньше, врать не буду. Но с таким уровнем прохождения алго-задач даже на стажировки в биг тех не берут, там банально развернут на первом этапе. Я понимаю что алгосы это не то что показывает уровень разработчика, но если бы собеседующие так считали - зачем они бы дали вообще эту задачу, да еще и в конце (в конце дают задачи посложнее обычно)

    • @tegeranchikrus4389
      @tegeranchikrus4389 2 місяці тому

      Кстати в защиту собеседуемого стоит заметить что с декоратором вроде быстро все получилось, мое почтение

    • @andrewlim2410
      @andrewlim2410 19 днів тому

      @@tegeranchikrus4389 Бро забей, автор канала очередной инфоцыган, который вместо импрува своих хард скиллов, выбрал дорогу продажи платных курсов и развития канала (это и не плохо и не хорошо, бабки есть бабки). Но очев видно, что чел максимум мид (ито не в каждом даже российском бигтехе). Алгосы с собеса на видео реально самые базированные, буквально литкод грид 75. И можно долго с пеной у рта доказывать, что алгоритмы - это не про грейд, но когда ты не знаешь как работает трейсбек в языке, в котором ты себя называешь сеньором, это нонсенс. Еще насмешило, что автор канала не выдержал критики с твоей стороны и сразу затронул тему с зарплатой, а ведь это говорит о том, что поцанчик то оказывается - полный мудак, раз мерит достижения и компетенцию людей по зарплате. Ам сори за бурный конец.

  • @Kalyancheg
    @Kalyancheg Місяць тому

    Подскажите, я пайтон больше года не ковырял, в 3 задаче почему просто по стеку нельзя get min пробежаться? Долго?

    • @artemshumeiko
      @artemshumeiko  Місяць тому

      Да, долго. Получится O(n), а нужно O(1)

    • @Kalyancheg
      @Kalyancheg Місяць тому

      @@artemshumeiko да, алгоритмы я так и не понял тогда
      Спс

  • @dmoroz0v
    @dmoroz0v 4 місяці тому +8

    можно бригаду. это спецом сеньор так тупит? или реально? или постановка?

    • @lesbian_economy
      @lesbian_economy 2 місяці тому

      Смотря для кого. Олимпиадник с такими задачами на изи справится, сеньер, у которого последние 5 лет было решение реальных задач, а не этого бреда, будет закономерно тупить.

    • @АзаматКостоев-ы1н
      @АзаматКостоев-ы1н 16 днів тому

      Это фейковый сеньор

  • @Septman
    @Septman 3 місяці тому +1

    По голосу интервьювера, ему лет 17-19, если это так, мне значит немного стыдно 😢

  • @kqvwvpk
    @kqvwvpk 5 місяців тому +10

    Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!

    • @anoshin45
      @anoshin45 5 місяців тому +9

      В маленькой компании синьором можно стать имея год опыта.

    • @PeterSidoroff
      @PeterSidoroff 4 місяці тому +6

      По поводу "И как проходить такие собесы челам без опыта?!" - А как проходят собеседования для FANGа ? Есть разные видоскики на Ютубе, где люди рассказывают как они по много месяцев прорешивали задачи на LeetCode + там же можно изучать чужие решения. Через год такой практики вы тоже сможете быстро находить решения под такие задачки на собесах - в подсознании уже накопятся типовые алгоритмические решения.

    • @vor6758
      @vor6758 4 місяці тому +2

      ​@@PeterSidoroff, целый год тратить на алгосы) звучит жестко

    • @gradkb
      @gradkb 4 місяці тому

      @@vor6758 в гугл по алгосам чтоб попасть надо их лет пять на олимпиадах применять, в среднем :-)

    • @dansky_music
      @dansky_music 7 днів тому

      @@vor6758кто-то всю жизнь на них тратит :)

  • @КотовДанил-с8б
    @КотовДанил-с8б 5 місяців тому +6

    Почему 3 задача проще 2?

  • @asadbekimaraliev7561
    @asadbekimaraliev7561 4 місяці тому

    Молодец, ты конечно достоин

  • @Volodya72
    @Volodya72 5 місяців тому +5

    Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления

    • @ГеоргийЛухтура-в8м
      @ГеоргийЛухтура-в8м 5 місяців тому +2

      Для этого есть условие в pop:
      if res == self.min_nums[-1]

    • @PeterSidoroff
      @PeterSidoroff 4 місяці тому +3

      Нет, там правильно. В push-е стоит условие на пустой массив мин.чисел и на возможное совпадение с текущим мин.числом (

    • @QKekos
      @QKekos 4 місяці тому +2

      @@PeterSidoroff там фича в том, что добавление в упорядоченный массив у тебя происходит только при пуше меньшего элемента, т.е. push(1), push(2), push(3), pop() -> 1, pop() -> None т.к. 2 и 3 тупо не добавлялись, оба гения сидят(как сделать пуш за О(1) если там придется по нормальному по всему массиву проходиться чтобы его в нужное место воткнуть не представляю)

    • @Trezvy_Papa
      @Trezvy_Papa 3 місяці тому

      @@QKekos в вашем случае при вызове pop() удалится 3, потом 2. А 1 так и будет минимальным числом в стеке.

  • @asyncio_run
    @asyncio_run 28 днів тому

    class Stack:
    def __init__(self):
    self.stack = []
    self.min_num = None
    def push(self, item: int):
    self.stack.append(item)
    self.min_num = min(self.stack)
    def pop(self):
    res = self.stack.pop()
    if res == self.min_num:
    self.min_num = min(self.stack)

    def top(self):
    return self.stack[-1]
    def get_min(self):
    return self.min_num

    • @example_ya
      @example_ya 26 днів тому

      Условие перечитай)

  • @YGNETATEL_3000
    @YGNETATEL_3000 4 місяці тому +2

    А нельзя было написать Filter(predicate, object) ?

    • @saitaro
      @saitaro 4 місяці тому

      И что делать потом с этим фильтром?

    • @vladgusakov3328
      @vladgusakov3328 4 місяці тому

      @@saitaro что-то аля try next(objects) except StopIteration

  • @sergeymalkovski3877
    @sergeymalkovski3877 5 місяців тому +9

    Жестко. Я ни одной не знаю😢

    • @khafizovilnaz
      @khafizovilnaz 5 місяців тому +5

      Ты не один друг, я тоже почувствовал себя тупым

  • @SegeyKravtsov
    @SegeyKravtsov 2 місяці тому +1

    🎯 Key points for quick navigation:
    [00:52] 🛠️ Нехватка типизации и неясность роли предиката, который выглядит как функция из-за своего вызова позднее.
    [01:19] ⚠️ Некорректное использование изменяемого объекта в качестве значения по умолчанию для аргумента функции.
    [01:45] 💡 Удаление избыточных строк и оптимизация конструкции для создания объектов.
    [02:31] 🤔 Функция фильтрует массив объектов, возвращая первый подходящий элемент.
    [04:04] ⚡️ Оптимизация функции для завершения работы при нахождении первого подходящего элемента.
    [05:03] 💡 При вызове функции со списком объектов, функция будет возвращать объект, соответствующий первому элементу списка, или None, если подходящего элемента нет.
    [06:35] 📝 Худшая временная сложность функции O(N), где N - количество элементов в массиве, а лучшая - O(1), если подходящий элемент находится в начале массива.
    [07:02] 🤖 Длина выполнения алгоритма равна длине N списка.
    [07:17] 🌟 Задача на собеседовании была легкой, но потребовались подсказки интервьюера.
    [07:31] 🎁 Получите шпаргалку по алгоритмической сложности в Telegram-канале.
    [08:11] 🌐 Платформа Solvit поможет вам подготовиться к техническим собеседованиям.
    [08:55] 🚀 Обязательно пройдите по ссылке в описании и воспользуйтесь платформой Solvit.
    [09:08] 👨‍💻 Задача на собеседовании: написать декоратор с параметрами.
    [10:38] 📝 Функция, принимающая аргументы функции, может использовать ключевое слово args.
    [12:58] 🤔 Если вы не знаете, как ответить на вопрос, попробуйте начать писать код и решение придет к вам по ходу дела.
    [13:43] 🤖 Exception в Python может быть от базового класса Object
    [14:17] 💡 Чтобы обработать исключения, можно использовать конструкцию try...except
    [14:48] 👀 Для отладки удобно использовать декоратор из функции logging.debug()
    [16:05] 📝 Сложная задача на проектирование класса, требующего оптимизации алгоритмов
    [16:45] 📘 Написание класса с методами push, pop, top и getMin за O(1)
    [17:20] 🤔 Для поиска минимального элемента нужно хранить отдельную переменную и обновлять ее при каждом push
    [18:18] 💡 Для поиска минимального элемента можно использовать дополнительную переменную, хранящую второе минимальное значение
    [19:56] 💡 При удалении элемента нужно пересчитать минимальное значение
    [22:15] 🤔 Для хранения минимального значения одной переменной недостаточно
    [22:45] 📝 Для обновления минимального значения нужно найти максимальное из двух значений
    [25:10] 🗣️ Не бойтесь делиться своими мыслями, даже если они ошибочные. Открытость и готовность работать в команде очень важны.
    [26:01] ⚡️ Стек может быть использован для реализации работы с неограниченным количеством переменных.
    [27:43] 📈 Возрастающая последовательность чисел может быть использована для создания структуры данных, где новое число добавляется только если оно меньше предыдущего.
    [28:36] 💪 При удалении элемента из возрастающей последовательности можно не учитывать элементы, которые больше или равны удаляемому.
    [29:12] 🔄 Элементы в последовательности могут повторяться, что следует учитывать при реализации структуры данных.
    [30:08] 📝 Для реализации стека можно использовать массив с последним элементом, который будет соответствовать минимальному значению.
    [32:10] 🗣️ Задавать грамотные вопросы интервьюеру также важно, как и решать задачи. Это показывает вашу заинтересованность и адекватность.
    Made with HARPA AI

  • @AstorQwest
    @AstorQwest День тому

    это только в России програмисту платят 1 тыс $ ?

  • @5классвиленкин-ъ4п
    @5классвиленкин-ъ4п 4 місяці тому +1

    вообще не понял третью задачу. Первое что мне пришло в голову - создать связный список. Добавление - переназначение указателя на вершину на новый, удаление - переназначение указателя на следующий, топ - указатель уже указывает на нужное, get_min можно искать при каждом добавлении элемента в стек или при его удалении(если уадлили минимальный, то нужно найти следующий минимальный), либо если по памяти нам все равно, то создать multi_set и там уже изи все хранить. первое что пришло в голову

  • @СергейЮров-б6е
    @СергейЮров-б6е 5 місяців тому +2

    хех, одно дело вещать по подготовленному сценарию, а другое дело в realtime. Хорошо порешал

  • @merzbow7
    @merzbow7 5 місяців тому +1

    ну так декораторы с параметрами писали во втором пайтоне, изращение, уже как 10 лет можно проще

  • @qulinxao
    @qulinxao 5 місяців тому +2

    эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания
    if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match()
    raise e?

    • @saitaro
      @saitaro 4 місяці тому +5

      Читаемость огонь.

  • @yauhent671
    @yauhent671 4 місяці тому

    каждый раз искать минимум массива?

  • @SaintVes
    @SaintVes 5 місяців тому +3

    Не знаю ответ ни на одну задачу. Учусь питону уже второй день.
    Я тупой, надо бросать?

    • @alexeynesin483
      @alexeynesin483 5 місяців тому

      Ахах, за 22 дня ты не сможешь этот собес пройти. Это серьзная работа, нужно много времени потратить, чтобы научиться.

    • @digitaIdevil
      @digitaIdevil 5 місяців тому +4

      Бросай

    • @SaintVes
      @SaintVes 5 місяців тому +3

      @@digitaIdevil хорошо, пошёл бросать

    • @h3ckphy246
      @h3ckphy246 4 місяці тому

      @@SaintVes 🤣🤣

    • @kornalexandr
      @kornalexandr 2 місяці тому

      ​@@SaintVesскажи, куда бросил? Просто так спрашиваю

  • @InojjHacker
    @InojjHacker 5 місяців тому +5

    Прикол конечно. Такие задачи могут на мидла и синьера дать, с зп в 2-4 раза больше

    • @irwynptytzelow
      @irwynptytzelow 4 місяці тому +1

      Угораешь? Я даже не джун это решаю

    • @InojjHacker
      @InojjHacker 4 місяці тому +4

      @@irwynptytzelow молодец, что сказать то тут) но я тут оффер на 300к получил без решения подобных задач, так что точно знаю о чем говорю)

  • @ChrisColeDC
    @ChrisColeDC 5 місяців тому +11

    это явно не уровень джуна и не 100 тысяч зп, первая задача только, остальные уровня мидл

    • @РоманДемидов-ц2и
      @РоманДемидов-ц2и 5 місяців тому +2

      нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях

    • @myacc2517
      @myacc2517 4 місяці тому +1

      Что задачи, что вопросы это уровень стажера

    • @ChrisColeDC
      @ChrisColeDC 4 місяці тому +10

      @@myacc2517 может сразу уровень школьника начальных классов?

    • @myacc2517
      @myacc2517 4 місяці тому

      @@ChrisColeDC Первая задача сравнима с заданием на егэ, вторая и третья это основа основ
      Если для вас эти задачи на мидлов, то у меня плохие новости

    • @ChrisColeDC
      @ChrisColeDC 4 місяці тому +2

      @@myacc2517 чел ты сейчас автора видео дураком выставил)))

  • @Mr_Fulani
    @Mr_Fulani 5 місяців тому +3

    Плохо ты претворялся друг ), джун тупит страшнее

  • @akashiseijura
    @akashiseijura 14 днів тому

    у чела было на мидла собеседование в два раза легче

  • @4aidze
    @4aidze Місяць тому

    это не джуновская задача

  • @porohmega
    @porohmega 4 місяці тому +2

    А дядя смог вам объяснить как это пригодится при написании реальных задач с REST и бизнес логикой?

    • @alexander_gk
      @alexander_gk 4 місяці тому +1

      Очевидно, что никак

  • @jdwwsz
    @jdwwsz 4 місяці тому +1

    выходит у меня в 16 лет уровень джуниор? и зачем мне в универ поступать тогда...

  • @Maria_apelsinka
    @Maria_apelsinka 3 місяці тому

    почемуто 3 задача показалась самой прстой)

  • @user-tt9hx4kh1e
    @user-tt9hx4kh1e 4 місяці тому +2

    полтора гола ежедневной учебы и 100к ваши. На самом деле пох сколько предлагают 50, 70, 100. Если компания норм, то сам факт влиться в структуру и уже расти по грейду это и есть основная цель.

  • @viper_0097
    @viper_0097 4 місяці тому

    На питоне не пишу, знаю только школьную программу, поехали.
    1. Получить первый объект, соответствующий условию предиката. Она создает список, прогоняя объекты через предикат, и возращает первый элемент, если список не пустой
    2. Без понятия :D
    3. честно говоря, мне такая задача попадалась в одном курсе. Я просто использовал словарь(ключ: число, значение: количество чисел) и стек одновременно: ко всем новым в стеке числам в словаре прибавляется единица. И когда нужно получить минимальный элемент, просто выбираем первый элемент словаря
    Получается, 1 - правильно, 2 - неправильно, 3 - правильно.

    • @Forarit
      @Forarit 4 місяці тому

      знаю только школьную программу... мне такая задача попадалась в одном курсе.

    • @viper_0097
      @viper_0097 4 місяці тому

      @@Forarit Я знаю только школьную программу питона, курс был про другое

    • @shehamane3518
      @shehamane3518 2 місяці тому

      Тут третья задача не про подсчет элементов, да и нет такого понятия как «первый элемент словаря»

    • @viper_0097
      @viper_0097 2 місяці тому

      @@shehamane3518 В словаре элементы отсортированы, я подразумеваю первым элементом минимальный. Про подсчёт, не про подсчёт, но задача решена

  • @bulbul01124
    @bulbul01124 3 місяці тому +2

    Ты же не синьор явно

    • @phat80
      @phat80 Місяць тому

      Это понятие в принципе расплывчатое. В одной конторе ты джун, в другой сениор 😂

  • @borisdubrovin1105
    @borisdubrovin1105 4 місяці тому

    Третье задание примерно на уровне ЕГЭ по информатике. Весьма доступно. Если учащийся сам смог найти решение егэшных задач, а не тупо зубрил шаблонные готовые решения, то третья задача ему вполне должна быть по силам.

  • @qulinxao
    @qulinxao 5 місяців тому

    get_first_matching_object=lambda pred,obj=[]:next((v for v in obj if pred(v)),None)

  • @MintLoverG
    @MintLoverG 2 місяці тому

    Третья задача, которая "Самая сложная", на Сишарпе можно написать оч лего и быстро, минут за 10. Этому меня учили на 1 курсе, а если уже быть Мидл или Джуном, который закончил обучение это максимально изи. Если я будучи на Втором курсе, посмотрел на условие и понял, что в Шарпе "Самую сложную задачу" смогу написать за минут 15-20, т.к. Я еще не Джун и не Мидл

  • @ДавидКутдусов
    @ДавидКутдусов 5 місяців тому +1

    не понял, почему нельзя просто
    def get_min(self):
    return min(self.stack)
    все остальные методы изменяют данные self.stack и метод всегда будет возвращать данные согласно актуальному стеку.
    Либо я не понял задачу

    • @ГеоргийЛухтура-в8м
      @ГеоргийЛухтура-в8м 5 місяців тому

      Требуется решить за постоянное время, а у Вас O(n)

    • @artemshumeiko
      @artemshumeiko  5 місяців тому +2

      Потому что эта функция занимает O(n) времени, а нужно O(1)

  • @Antinormanisto
    @Antinormanisto 4 місяці тому +1

    Мне кажется, что это совсем не для джуна, а на стажёра какого - нибудь. Уж слишком просто

  • @ahhshsjajs1
    @ahhshsjajs1 Місяць тому

    Когда решалась вторая задача, увидел обучающую структуру Сергея Балакирева по декораторам. wraps, wrapper, res))

    • @w3st-1337
      @w3st-1337 Місяць тому +1

      это не только у него если что

    • @ahhshsjajs1
      @ahhshsjajs1 Місяць тому

      @@w3st-1337 ЕСЛИ ЧТО ВИДЕЛ У НЕГО

  • @НикитаЗавертайло
    @НикитаЗавертайло 5 місяців тому +1

    Последняя задача не до конца решена.
    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 місяців тому +1

      так это же стэк, мы можем удалить из него тока последнее число

    • @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())
      # храним в стеке сами значения и его текущий минимум

    • @НикитаЗавертайло
      @НикитаЗавертайло 5 місяців тому

      @@pavelosipov5951 И правда, что-то я ошибся. Спасибо за разъяснение.

  • @CSGO-cr2ct
    @CSGO-cr2ct 2 місяці тому

    20:55
    def get_min(self):
    return min(self.stack) if self.stack else None, надеюсь так будет,ибо я тупой совсем

    • @CSGO-cr2ct
      @CSGO-cr2ct 2 місяці тому

      А так разве нельзя было сделать? или я чего то не понимаю?

    • @artemshumeiko
      @artemshumeiko  2 місяці тому +2

      по времени это занимает O(n), т.к. нужно пройтись по всему массиву и найти минимальное. Спрашивалось более оптимальное решение

  • @helish_88
    @helish_88 4 місяці тому +1

    это троллинг? слишком сложно для JUNIOR

    • @TheWorld-hs1hf
      @TheWorld-hs1hf 3 місяці тому

      Когда-то это было так, сейчас некоторые пишут, что это даже не уровень стажера, ибо конкуренция растёт

    • @helish_88
      @helish_88 3 місяці тому

      @@TheWorld-hs1hf да не, бред же, сейчас очень сильно не хватает спецов в РФ

    • @TheWorld-hs1hf
      @TheWorld-hs1hf 3 місяці тому

      @@helish_88 да, но это не мешает им так делать. Сам глянь другие свежие собеседования