Это не сеньер явно. 3я задача просто уровень джун джун. Хранить 2 массива, целевой и с отсортированными уникальными значениями, любой реально работающий джун это сделает . 2я хосапде, проверка наследования эксепшена. До перемотки видел что там было if т.е, что произойдет если туда в параметр, а как я понял это массив, передадут 3е или n значение?). Первую ничерта не понял, но видимо потому что питон вижу 1й раз. Мне жаль рынок ИТ если такие менторят людей в интернете и их слушают. Теперь понятно почему хр не могут найти людей
Забавно устроено, что имея многолетний опыт backend разработки (python, php, java), видя задачки на видео, скорее всего школьной или университетской программы, понимаешь что не прошел собеседование на junior позицию
ну таки логично, что для джунов без опыта, и мидлов/сеньоров разные задачки должны быть. Ибо, что с джуна без опыта взять? А сеньор уже и забудет за бесконечными рест крудами всякие институтские задачки
🎯 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
то что что то существует в пайтоне - не значит, что оно зарезервировано object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные
@@ogone4ek880 Если вы используете object как имя переменной, вы затрудняете доступ к встроенному классу object в текущем контексте. Это может привести к путанице и ошибкам, особенно если ваш код зависит от базового функционала этого класса. Это фундаментальная штука и в коде она была неспроста. Основа основ ООП.
Какой джун ? Серьезно ? Хорошо давай задачу для мидл. Я считаю что на позицию джун одолжен быть один вопрос готов ли ты уволится через месяц если не справиться. Все какие задачи и лайвкодинг . Понятно что пару вопросов надо задать чтоб понять в теме человек или нет .
@@saitaro круглые скобки это не лист компрехеншен а генератор эскпрешн, ленивые вычисления, некст один раз выполнится да и все, дальше эвальюейтится ничего не будет(но понятное дело, что само условие будет проверяться для каждого элемента до первого трушного)
16:00 в строке 62 мы вызываем коллбек с помощью ex[1](). Это сработает, если у всех коллбеков нет аргументов. Но в предложенном задании у них разные сигнатуры: у коллбека bar() нет аргументов, а у коллбека lambda есть - '_'. Не уверен, но кажется, чтобы это работало, надо перед вызовом коллбека определять, какая у него сигнатура и вызывать его с ожидаемым количеством аргументов. IMO. P.S.: или исправить кортеж с анонимной функцией, чтобы она тоже была без параметров (IndexError, lambda : print(2))
2 месяца лета не зря... 1 задачу я решил, на второй запутался, но по ходу событий понял, что надо было сделать, а в 3 я сразу понял, что надо было сделать, да и сделал
@@funtickgd9502 Помоги, пожалуйста. Вот тоже из скачанных курсов получил базу, но а щас я хз, че мне делать.. Хочу на веб-разраба пойти и по идее до изучения самого django нужно просто решать задачи и так далее, но я вообще не понимаю, где можно было бы подчеркнуть действительно важные и полезные знания ,а где практикой их закрепить.
Эта (3) задача взята с литкода и вроде MinStack называется чтоли,. В целом она достаточно простая, если проблема с push, pop и top достаточно просто решается на уровне обычного списка, то для getMin с временной сложность за O(1) нужно при каждом push добавлять минимум, то есть если предыдущего значения минимум меньше вставляемого значения, то вместе с ним и сохраняем, если новый элемент меньше текущего, то добавляем само число и дополнительно число, обозначающее текущий минимум, относительно него дальше и будут добавляться элементы. Так мы гарантируем, что при вызове pop (удаление элемента) следующий перед ним будет хранить свой минимум.
Пару комментов: задача 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()
Я немного не понял, но получается что в min_nums будут добавляться не все числа? разве за этим не последует ситуация когда get_min даст неверное значение, вроде 4 5 1 1, список минимумов заполнится единицами, а когда их обе вытолкнут, то get_min ничего не вернет?
Я тоже запутался но потом понял что здесь в стек числа добавляются с права и убираются справа. В этом случае если число не добавляется в min_nums то оно там и не нужно, ведь его удалят прежде чем справа останется минимальное число)
Я себя отношу к джуну… Ибо изучаю сам все и только лишь полгода))) но эти задачки я бы решил немного по-другому, но в целом контент прикольный) Спасибо))) А декораторы, это очень полезная и хорошая штука!
3:09 Всегда хочеться треснуть чем-то тяжелым тех кто в одну строку пишет много операторов, как это в строке 2 и 9. Код в первую очередь должен быть визуально легко читаем, потому что читаем код мы чаще чем пишем, экономия количества строк не дает преймуществ, кроме демонтрации умственных отклонений автора подобного кода.
Во второй строчке списковое включение должно быть, и оно эффективнее чем через простой цикл for. Да, согласен, он загруженный, но это типо норм на питоне, если дальше загружать это списковое включение, то тогда уже реально перемудрено. В 9 строчке вообще не понятно что тебе не нравится? То что скобочки не открыли? lambda? Элементы списка отдельно не написали? Предполагаю это сделано, чтобы не занимать много времени
Интересное видео. Я (пытаюсь) писать игры и программы на Годот и там язык в некотором роде схож с питоном, но захотелось глянуть что тут. Половину слов и понятий не знаю, поэтому хотелось бы задать вопрос по последней задаче. Если нужен минимальный элемент массива, то зачем создавать массив из предыдущих его значений? И что значит "за постоянное время"? В решении не заметил какого-либо уравнённого значения скорости выполнения функций 🤔
Постоянное время - оно же константное, оно же O(1). Что бы нормально это понять лучше почитать простую книжку по алгоритмам. Можно начать с "Грокаем алгоритмы". Конкретно здесь: Если не было бы ограничения на постоянное время, get_min() мог бы просто возвращать встроенную min(self.stack), а она работает за линейное время. Если написать свою реализацию min, то это сразу видно: чтобы найти минимальный элемент придётся перебрать все элементы, то есть в худшем случае минимальный элемент будет последним, и в среднем время поиска линейно зависит от длины последовательности. В отличии от операций push, pop, top: когда мы в конец просто добавляем / удаляем элемент, это не зависит от размера последовательности (на самом деле там есть подводные камни про перевыделение памяти при увеличении размера). В реализации за постоянное время и есть смысл задачи. Артем сразу это упоминает на 18:01.
@@ЯнПацюпа Спасибо, вроде бы понял. А что даёт -1 в номере индекса элемента массива? (Или это не оно?) Я так понимаю последнее значение переменной из массива, да?
@@droidnah Да, это последний элемент. Это стандартный способ в Python, он поддерживает отрицательные индексы, можно вообще посмотреть на срезы - они очень удобные)
@@droidnah Рад слышать. Вообще если есть желание поплотнее посмотреть на Python, можно для этого взять книжку Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения (Eric Matthes. Python Crash Course). Там как раз первый проект второй части - это игра на pygame (первая часть - основы Python), правда алгоритмов там нет
думаю здесь нужно было использовать бинарный поиск так как если у нас нужно цифра или число будет находиться в самом конце то программа будет каждый элемент перебирать
Решение у задачи 3 сломается. Например, если запушить 323, а потом достать два последних элемента. В стеке останется 3, а список мин элементов будет пустой. Решение: вместо двух массивов сделать один двумерный. При каждом push в него будет добавляться: [добавленный элемент,мин элемент на момент добавления]
Почему список останется пустой? При пуше первой тройки в него добавится тройка по условию not mins, потом при втором пуше добавится двойка т.к она меньше последнего элемента списка т.е тройки которую мы добавили. При пуше последней тройки в список ниче не добавится. В итоге в стеке 323 а в списке 32. Первый пуп удаляет тройку из стека и ниче не удаляет из списка, второй удаляет двойку везде, третий удаляет двойку везде. Все ок
Раньше когда слушал других программистов думал, что не дотягиваю даже до +- уровня стажёра, а после просмотра видео понимаю, что я уже сижу на нем точно, а возможно даже ещё годик другой практики и буду Джуном
Оскорбительно у людей такое спрашивать. Данная задача решается за 20-40 секунд ( с учётом написание кода ) Я считаю на такой вакансии куда важней понять есть у человека инженерное мышление. Может ли он понять что написанно в коде и его знание английского языка.
"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()) # храним в стеке сами значения и его текущий минимум
вообще pop из-за структуры данных лист, не будет работать. так как лист требует сдвига, это медленно. и top тоже кстати будет медленный иногда из за переаллокации нужно создавать всего три связных списка, один чтобы работал pop а другой чтобы работал top только недавно увидел аналогичную задачу про это) изначально офигевал как можно такое сделать. задача была - что то про нахождения минимальной суммы для каждой подстроки в K элементов в массиве аналогичным образом делается
Третья задача это 155 с литкода, не? Кстати, что лучше на собесе делать если встретил задачу к которой знаешь решение? Прикинутся что видишь её в первый раз или признаться что знаешь?
Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу
А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь
Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!
По поводу "И как проходить такие собесы челам без опыта?!" - А как проходят собеседования для FANGа ? Есть разные видоскики на Ютубе, где люди рассказывают как они по много месяцев прорешивали задачи на LeetCode + там же можно изучать чужие решения. Через год такой практики вы тоже сможете быстро находить решения под такие задачки на собесах - в подсознании уже накопятся типовые алгоритмические решения.
Первые две задачи без комментариев - там ничего сложного. 3-я задача встречалась в нескольких курсах по алгоритмам и структурам данных, поэтому если знаешь, то реализовать ее тоже не составляет большого труда.
Для меня сложно было второе. В третьем сразу понял что нужно параллельно сортированный список создавать при инициализации и добавлять в нужное место новый при пуше
Всегда ориентироваться надо на худшую сложность, сложность в худшем случае. Но есть вариации, когда получится лучше, чем мы ожидали. Отсюда худшая и лучшая сложности, все зависит от поступающих данных.
Смотря для кого. Олимпиадник с такими задачами на изи справится, сеньер, у которого последние 5 лет было решение реальных задач, а не этого бреда, будет закономерно тупить.
Так много комментариев, что задачи легчащие и не тянут даже на стажера и так мало комментариев, что третья задача решена не верно, точнее не для всех случаев) Видимо эти комментаторы только во сне разработчики)
Кому интересно, вот такой код у меня получился на последний вопрос. 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())
Все что я увидел в коде это ?????? ?????? ?????? ????? .)) вот сижу и думаю а стоит вообще начинать если я не разбираюсь в этом вообще от слова совсем ) и с чего начать_)
в защиту автора видео хочу сказать, что на собеседовании очень сильный стресс и даже такие легкие задачи как первая могут вогнать в ступор, так как очень много нервов мешает думать. Это надо прокачивать скилл прохождения собеседований, чтобы на них не переживать
Ну я честно не понимаю две вещи: 1. Каким образом человек которого заявляют как сеньора так долго (и так плохо) решал эти задачи 2. Почему после такого собеса человека (судя по заявлениям в видео) взяли, это же даже не уровень стажера
@@artemshumeiko меньше, врать не буду. Но с таким уровнем прохождения алго-задач даже на стажировки в биг тех не берут, там банально развернут на первом этапе. Я понимаю что алгосы это не то что показывает уровень разработчика, но если бы собеседующие так считали - зачем они бы дали вообще эту задачу, да еще и в конце (в конце дают задачи посложнее обычно)
@@tegeranchikrus4389 Бро забей, автор канала очередной инфоцыган, который вместо импрува своих хард скиллов, выбрал дорогу продажи платных курсов и развития канала (это и не плохо и не хорошо, бабки есть бабки). Но очев видно, что чел максимум мид (ито не в каждом даже российском бигтехе). Алгосы с собеса на видео реально самые базированные, буквально литкод грид 75. И можно долго с пеной у рта доказывать, что алгоритмы - это не про грейд, но когда ты не знаешь как работает трейсбек в языке, в котором ты себя называешь сеньором, это нонсенс. Еще насмешило, что автор канала не выдержал критики с твоей стороны и сразу затронул тему с зарплатой, а ведь это говорит о том, что поцанчик то оказывается - полный мудак, раз мерит достижения и компетенцию людей по зарплате. Ам сори за бурный конец.
Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления
@@PeterSidoroff там фича в том, что добавление в упорядоченный массив у тебя происходит только при пуше меньшего элемента, т.е. push(1), push(2), push(3), pop() -> 1, pop() -> None т.к. 2 и 3 тупо не добавлялись, оба гения сидят(как сделать пуш за О(1) если там придется по нормальному по всему массиву проходиться чтобы его в нужное место воткнуть не представляю)
эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match() raise e?
вообще не понял третью задачу. Первое что мне пришло в голову - создать связный список. Добавление - переназначение указателя на вершину на новый, удаление - переназначение указателя на следующий, топ - указатель уже указывает на нужное, get_min можно искать при каждом добавлении элемента в стек или при его удалении(если уадлили минимальный, то нужно найти следующий минимальный), либо если по памяти нам все равно, то создать multi_set и там уже изи все хранить. первое что пришло в голову
нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях
полтора гола ежедневной учебы и 100к ваши. На самом деле пох сколько предлагают 50, 70, 100. Если компания норм, то сам факт влиться в структуру и уже расти по грейду это и есть основная цель.
На питоне не пишу, знаю только школьную программу, поехали. 1. Получить первый объект, соответствующий условию предиката. Она создает список, прогоняя объекты через предикат, и возращает первый элемент, если список не пустой 2. Без понятия :D 3. честно говоря, мне такая задача попадалась в одном курсе. Я просто использовал словарь(ключ: число, значение: количество чисел) и стек одновременно: ко всем новым в стеке числам в словаре прибавляется единица. И когда нужно получить минимальный элемент, просто выбираем первый элемент словаря Получается, 1 - правильно, 2 - неправильно, 3 - правильно.
@@Артем-п6ф9эчувствую, в 2025 от джунов (по крайней мере в вебе) будут требовать написать полноценное приложение-чат (при этом не просто чат, а асинхронный real-time чат), который полностью заменит чат в каком-нибудь вк, так еще и с разделением на личные сообщения и беседу, и это в качестве тестового задания, но платит таким спецам будут те же 50-80к; а уже в 2027 такое задание на джуна тянуть не будет. Люди всё больше идут в программирование, python один самых популярных языков (если не самый), конкуренция на позицию джуниор огромная, так как все торопятся выйти на работу. Зарплаты растут медленно, уровень понимания и количество знаний должны быть всё глубже и больше, ну и помимо этого увеличивается требуемое количество сайд скиллов (по типу git, но конкретно к нему нет претензий, просто для ясности пример)
@@Артем-п6ф9эзачем "как"? Просто написать. Причем чтобы к концу лайв кодинга количество пользователей было больше, чем в ТГ. Это на Джуна. На стажёра - больше, чем в Фейсбук
Приглашаю на мой Практический курс по Backend разработке по всем актуальным технологиям: artemshumeiko.ru
видео придает уверенности, что сеньоры тоже тупят на собеседовании джуна
Он тупил спецом ))
Это не сеньер явно. 3я задача просто уровень джун джун. Хранить 2 массива, целевой и с отсортированными уникальными значениями, любой реально работающий джун это сделает . 2я хосапде, проверка наследования эксепшена. До перемотки видел что там было if т.е, что произойдет если туда в параметр, а как я понял это массив, передадут 3е или n значение?). Первую ничерта не понял, но видимо потому что питон вижу 1й раз.
Мне жаль рынок ИТ если такие менторят людей в интернете и их слушают. Теперь понятно почему хр не могут найти людей
Это ж из разных сказок джин и сеньор Помидор
@@Rulezzz3 это канал просто принадлежит недосеньору. Нормальный сеньор на собесе не тупит.
причем конкретно :))))
Забавно устроено, что имея многолетний опыт backend разработки (python, php, java), видя задачки на видео, скорее всего школьной или университетской программы, понимаешь что не прошел собеседование на junior позицию
мне кажеться что на таких собесах впервую очередь проверяют твой скилл в технологиях а не задачках.Хотя я не уверен я же не програмист
ну таки логично, что для джунов без опыта, и мидлов/сеньоров разные задачки должны быть.
Ибо, что с джуна без опыта взять?
А сеньор уже и забудет за бесконечными рест крудами всякие институтские задачки
Спасибо за ваш контент! Очень познавательно и полезно! Продолжайте в том же духе!
Если это JUNIOR то у меня знания zero.
Ну я бы за 20 минут решил бы задачу, в принципе надо понять задачу
За 2 месяца этого лета у меня прогресс, я решил 1 задачу...
Нормально если ты не изучал каждый день по 8 часов@@funtickgd9502
и таких, как ты, 99% в откликах
@@uvwzyx Каких в откликах?
задача с минимальным элементом в стэке - огонь)
🎯 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
омг) главный скилл на собесах это внимательно слушать вопросы и стараться отвечать именно на них
это какой-то новый уровень троллинга)
Почему? Слишком просто для джуниора? Если да, то зачем джуниору знать больше?
@@TheWorld-hs1hf 😂😂😂😂😂
Object в Питоне же зарезервированно, и можно было бы сказать, что не корректно использовать такое название. 😊
то что что то существует в пайтоне - не значит, что оно зарезервировано
object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно
in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные
зарезервирован object, но не Object
@@ogone4ek880 да, но это считается плохой практикой
@@ogone4ek880 Если вы используете object как имя переменной, вы затрудняете доступ к встроенному классу object в текущем контексте. Это может привести к путанице и ошибкам, особенно если ваш код зависит от базового функционала этого класса. Это фундаментальная штука и в коде она была неспроста. Основа основ ООП.
@@unnme2721 и че, я сказал что это незарезервированное имя, а не то что можно свободно так переменные называть
Первая легко, третья легчайше для олимпиадника, просто дефолтный стек с префиксным минимумом. А для второй нужно синтаксис подучить
Да тут ЕГЭ уровень
Какой джун ? Серьезно ? Хорошо давай задачу для мидл. Я считаю что на позицию джун одолжен быть один вопрос готов ли ты уволится через месяц если не справиться. Все какие задачи и лайвкодинг . Понятно что пару вопросов надо задать чтоб понять в теме человек или нет .
На мидл нет задачек спрашивают что ты делал на прошлой работе, что такое солид и тд 😂😂
Один из вариантов решения первой задачи:
def get_first_matching_object(predicate, objects):
return next((x for x in objects if predicate(x)), None)
Да проще filter использовать
@@SabFo_ лист компрехеншен выполняется быстрее
@@maximkoltsov9833 Лист компрехеншен создаст список, пройдясь по всем объектам. Это избыточно, как по памяти, так и по времени.
@@saitaro ладно, согласен, ошибся
@@saitaro круглые скобки это не лист компрехеншен а генератор эскпрешн, ленивые вычисления, некст один раз выполнится да и все, дальше эвальюейтится ничего не будет(но понятное дело, что само условие будет проверяться для каждого элемента до первого трушного)
Отлично. Спасибо за собеседование. Покажешь на Ютубе ещё одно с лайв кодингом?
Третья задача проще декоратора с параметрами эксепшенов. Это же классическая реализация стека.)
16:00 в строке 62 мы вызываем коллбек с помощью ex[1](). Это сработает, если у всех коллбеков нет аргументов. Но в предложенном задании у них разные сигнатуры: у коллбека bar() нет аргументов, а у коллбека lambda есть - '_'. Не уверен, но кажется, чтобы это работало, надо перед вызовом коллбека определять, какая у него сигнатура и вызывать его с ожидаемым количеством аргументов. IMO.
P.S.:
или исправить кортеж с анонимной функцией, чтобы она тоже была без параметров (IndexError, lambda : print(2))
это куда такие собесы? очень хотелось бы
2 месяца лета не зря... 1 задачу я решил, на второй запутался, но по ходу событий понял, что надо было сделать, а в 3 я сразу понял, что надо было сделать, да и сделал
С нуля за два месяца?
Где учился????
@@dllb сам по книгам, примерами алгоритмов, литкоду. Мне на курсах только базу синтаксиса дали
@@funtickgd9502 а какие курсы и книги использовал?
@@funtickgd9502 Помоги, пожалуйста. Вот тоже из скачанных курсов получил базу, но а щас я хз, че мне делать.. Хочу на веб-разраба пойти и по идее до изучения самого django нужно просто решать задачи и так далее, но я вообще не понимаю, где можно было бы подчеркнуть действительно важные и полезные знания ,а где практикой их закрепить.
Эта (3) задача взята с литкода и вроде MinStack называется чтоли,. В целом она достаточно простая, если проблема с push, pop и top достаточно просто решается на уровне обычного списка, то для getMin с временной сложность за O(1) нужно при каждом push добавлять минимум, то есть если предыдущего значения минимум меньше вставляемого значения, то вместе с ним и сохраняем, если новый элемент меньше текущего, то добавляем само число и дополнительно число, обозначающее текущий минимум, относительно него дальше и будут добавляться элементы. Так мы гарантируем, что при вызове pop (удаление элемента) следующий перед ним будет хранить свой минимум.
Пару комментов:
задача 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()
Я немного не понял, но получается что в min_nums будут добавляться не все числа? разве за этим не последует ситуация когда get_min даст неверное значение, вроде 4 5 1 1, список минимумов заполнится единицами, а когда их обе вытолкнут, то get_min ничего не вернет?
Я тоже запутался но потом понял что здесь в стек числа добавляются с права и убираются справа. В этом случае если число не добавляется в min_nums то оно там и не нужно, ведь его удалят прежде чем справа останется минимальное число)
@@Marlo-Smileерунда
@@anton6643 Поясни
Я себя отношу к джуну… Ибо изучаю сам все и только лишь полгода))) но эти задачки я бы решил немного по-другому, но в целом контент прикольный) Спасибо))) А декораторы, это очень полезная и хорошая штука!
3:09 Всегда хочеться треснуть чем-то тяжелым тех кто в одну строку пишет много операторов, как это в строке 2 и 9. Код в первую очередь должен быть визуально легко читаем, потому что читаем код мы чаще чем пишем, экономия количества строк не дает преймуществ, кроме демонтрации умственных отклонений автора подобного кода.
Во второй строчке списковое включение должно быть, и оно эффективнее чем через простой цикл for. Да, согласен, он загруженный, но это типо норм на питоне, если дальше загружать это списковое включение, то тогда уже реально перемудрено.
В 9 строчке вообще не понятно что тебе не нравится? То что скобочки не открыли? lambda? Элементы списка отдельно не написали? Предполагаю это сделано, чтобы не занимать много времени
Были идеи по решению, но дайти до результата было сложно👍👍👍
Интересное видео. Я (пытаюсь) писать игры и программы на Годот и там язык в некотором роде схож с питоном, но захотелось глянуть что тут.
Половину слов и понятий не знаю, поэтому хотелось бы задать вопрос по последней задаче. Если нужен минимальный элемент массива, то зачем создавать массив из предыдущих его значений?
И что значит "за постоянное время"? В решении не заметил какого-либо уравнённого значения скорости выполнения функций 🤔
Постоянное время - оно же константное, оно же O(1). Что бы нормально это понять лучше почитать простую книжку по алгоритмам. Можно начать с "Грокаем алгоритмы".
Конкретно здесь:
Если не было бы ограничения на постоянное время, get_min() мог бы просто возвращать встроенную min(self.stack), а она работает за линейное время. Если написать свою реализацию min, то это сразу видно: чтобы найти минимальный элемент придётся перебрать все элементы, то есть в худшем случае минимальный элемент будет последним, и в среднем время поиска линейно зависит от длины последовательности.
В отличии от операций push, pop, top: когда мы в конец просто добавляем / удаляем элемент, это не зависит от размера последовательности (на самом деле там есть подводные камни про перевыделение памяти при увеличении размера).
В реализации за постоянное время и есть смысл задачи.
Артем сразу это упоминает на 18:01.
@@ЯнПацюпа Спасибо, вроде бы понял. А что даёт -1 в номере индекса элемента массива? (Или это не оно?)
Я так понимаю последнее значение переменной из массива, да?
@@droidnah Да, это последний элемент. Это стандартный способ в Python, он поддерживает отрицательные индексы, можно вообще посмотреть на срезы - они очень удобные)
@@ЯнПацюпа спасибо большое за ответы, теперь догнал суть 😁
@@droidnah Рад слышать. Вообще если есть желание поплотнее посмотреть на Python, можно для этого взять книжку Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения (Eric Matthes. Python Crash Course). Там как раз первый проект второй части - это игра на pygame (первая часть - основы Python), правда алгоритмов там нет
думаю здесь нужно было использовать бинарный поиск так как если у нас нужно цифра или число будет находиться в самом конце то программа будет каждый элемент перебирать
Решение у задачи 3 сломается. Например, если запушить 323, а потом достать два последних элемента. В стеке останется 3, а список мин элементов будет пустой. Решение: вместо двух массивов сделать один двумерный. При каждом push в него будет добавляться: [добавленный элемент,мин элемент на момент добавления]
Почему список останется пустой? При пуше первой тройки в него добавится тройка по условию not mins, потом при втором пуше добавится двойка т.к она меньше последнего элемента списка т.е тройки которую мы добавили. При пуше последней тройки в список ниче не добавится. В итоге в стеке 323 а в списке 32. Первый пуп удаляет тройку из стека и ниче не удаляет из списка, второй удаляет двойку везде, третий удаляет двойку везде. Все ок
Ну а с двумерным впринципе тоже думаю будет работать
@@HeppygroupDifermen да, моя ошибка, на 323 сработает. Но на 222 все же сломается. А на 322 будет неверный ответ
@@billykid8678 там он потом исправил код и при 222 список min тоже будет 222
на 12:09 копирует и спрашивает у нейросети :)
Раньше когда слушал других программистов думал, что не дотягиваю даже до +- уровня стажёра, а после просмотра видео понимаю, что я уже сижу на нем точно, а возможно даже ещё годик другой практики и буду Джуном
Спасибо тебе большое, бро. Ты делаешь глупых людей как я чуточку умнее.
Оскорбительно у людей такое спрашивать. Данная задача решается за 20-40 секунд ( с учётом написание кода ) Я считаю на такой вакансии куда важней понять есть у человека инженерное мышление. Может ли он понять что написанно в коде и его знание английского языка.
Не могу не спросить)) а что за тема редактора которым они шеряться?
Monokai чуть другой, этот приятнее
"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())
# храним в стеке сами значения и его текущий минимум
вообще pop из-за структуры данных лист, не будет работать. так как лист требует сдвига, это медленно. и top тоже кстати будет медленный иногда из за переаллокации
нужно создавать всего три связных списка, один чтобы работал pop а другой чтобы работал top
только недавно увидел аналогичную задачу про это) изначально офигевал как можно такое сделать.
задача была - что то про нахождения минимальной суммы для каждой подстроки в K элементов в массиве
аналогичным образом делается
Третья задача это 155 с литкода, не? Кстати, что лучше на собесе делать если встретил задачу к которой знаешь решение? Прикинутся что видишь её в первый раз или признаться что знаешь?
Конечно прикинуться, что не знаешь)
в первой задаче не нужно разделять худший/лучший случай, строго говоря - твой ответ некорректный, правильный - просто О(N), но для джуна норм
Очевидно, про принцип kiss в этой конторе не слышали.
Подскажите, я пайтон больше года не ковырял, в 3 задаче почему просто по стеку нельзя get min пробежаться? Долго?
Да, долго. Получится O(n), а нужно O(1)
@@artemshumeiko да, алгоритмы я так и не понял тогда
Спс
Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу
Сколько учишься уже?
А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь
так это база, тут ничего трудного нет
@@gggppp228какие шансы джуну устроится на удаленку ?
Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!
В маленькой компании синьором можно стать имея год опыта.
По поводу "И как проходить такие собесы челам без опыта?!" - А как проходят собеседования для FANGа ? Есть разные видоскики на Ютубе, где люди рассказывают как они по много месяцев прорешивали задачи на LeetCode + там же можно изучать чужие решения. Через год такой практики вы тоже сможете быстро находить решения под такие задачки на собесах - в подсознании уже накопятся типовые алгоритмические решения.
@@PeterSidoroff, целый год тратить на алгосы) звучит жестко
@@vor6758 в гугл по алгосам чтоб попасть надо их лет пять на олимпиадах применять, в среднем :-)
@@vor6758кто-то всю жизнь на них тратит :)
Первые две задачи без комментариев - там ничего сложного. 3-я задача встречалась в нескольких курсах по алгоритмам и структурам данных, поэтому если знаешь, то реализовать ее тоже не составляет большого труда.
А точно ли у джуна нужно спрашивать алгоритмическую сложность? Это точно вопрос по грейду? А? а? А?
Никто не написал про ваш сайт - отличный инструмент для подготовки к собеседованию! Подольше бы он оставался бесплатным!
Для меня сложно было второе. В третьем сразу понял что нужно параллельно сортированный список создавать при инициализации и добавлять в нужное место новый при пуше
Не понял момент с худшей O(1) и лучшей O(n). Откуда вдруг взялось две сложности?
Всегда ориентироваться надо на худшую сложность, сложность в худшем случае. Но есть вариации, когда получится лучше, чем мы ожидали. Отсюда худшая и лучшая сложности, все зависит от поступающих данных.
3 задача частно на кружках для ол програмирование встречаеться
можно бригаду. это спецом сеньор так тупит? или реально? или постановка?
Смотря для кого. Олимпиадник с такими задачами на изи справится, сеньер, у которого последние 5 лет было решение реальных задач, а не этого бреда, будет закономерно тупить.
Это фейковый сеньор
Так много комментариев, что задачи легчащие и не тянут даже на стажера и так мало комментариев, что третья задача решена не верно, точнее не для всех случаев)
Видимо эти комментаторы только во сне разработчики)
Я вот заметил, но правильное решение за константное время так и не придумал. Интересно, а на собесе это заметили или нет?
Может написал бы сначала для каких случаев это будет неправильно прежде чем пизд*ть?
Честный отзыв! Если честно не тянешь на senior разработка очень слабо, на middle специалиста еще можно !
Сеньор - это не про классное решение алгоритмических задач с собеседования
Блин даже первая задача вызвала звон в голове...
Прорвемся, готовимся дальше)))
У меня только на одну задачу ушло бы 30-40 минут. Сколько бы я не нарешивал эти задачи, я не могу решать их быстро
А нельзя было написать Filter(predicate, object) ?
И что делать потом с этим фильтром?
@@saitaro что-то аля try next(objects) except StopIteration
3 задача решена неверно)
Очень хорошее видео, прям как гора с плеч.
Почему 3 задача проще 2?
Кому интересно, вот такой код у меня получился на последний вопрос.
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())
Все что я увидел в коде это ?????? ?????? ?????? ????? .)) вот сижу и думаю а стоит вообще начинать если я не разбираюсь в этом вообще от слова совсем ) и с чего начать_)
Так , все, иду работать в пятерочку . Чему я научился за месяц хз.
в защиту автора видео хочу сказать, что на собеседовании очень сильный стресс и даже такие легкие задачи как первая могут вогнать в ступор, так как очень много нервов мешает думать. Это надо прокачивать скилл прохождения собеседований, чтобы на них не переживать
каждый раз искать минимум массива?
Помоему в первой задаче можно было сделать бинарный поиск
Привет, мне очень нравятся твои видео, можешь ли ты пожалуйста в одном из следующих видео рассказать как сделать онлайн оплату чего либо
Знания АСД помогли решить третью задачу в первые 4 секунды после ее прочтения
что это?
@@knowledgedose1956 алгоритмы и структуры данных
@@knowledgedose1956 Абстрактно синтаксическое дерево, полагаю
@@knowledgedose1956дисциплина "алгоритмы и структуры данных"
Если это Senior то в отличие от Джуна воспользуется chat gpt
Ты же сеньор как можно было так на первом затупить с возвращаемым значением)
Не имея опыта работы с decorator, 3ье задание показалось намного проще)))
Ну я честно не понимаю две вещи:
1. Каким образом человек которого заявляют как сеньора так долго (и так плохо) решал эти задачи
2. Почему после такого собеса человека (судя по заявлениям в видео) взяли, это же даже не уровень стажера
Вам виднее, наверняка 500к зарабатываете?
@@artemshumeiko меньше, врать не буду. Но с таким уровнем прохождения алго-задач даже на стажировки в биг тех не берут, там банально развернут на первом этапе. Я понимаю что алгосы это не то что показывает уровень разработчика, но если бы собеседующие так считали - зачем они бы дали вообще эту задачу, да еще и в конце (в конце дают задачи посложнее обычно)
Кстати в защиту собеседуемого стоит заметить что с декоратором вроде быстро все получилось, мое почтение
@@tegeranchikrus4389 Бро забей, автор канала очередной инфоцыган, который вместо импрува своих хард скиллов, выбрал дорогу продажи платных курсов и развития канала (это и не плохо и не хорошо, бабки есть бабки). Но очев видно, что чел максимум мид (ито не в каждом даже российском бигтехе). Алгосы с собеса на видео реально самые базированные, буквально литкод грид 75. И можно долго с пеной у рта доказывать, что алгоритмы - это не про грейд, но когда ты не знаешь как работает трейсбек в языке, в котором ты себя называешь сеньором, это нонсенс. Еще насмешило, что автор канала не выдержал критики с твоей стороны и сразу затронул тему с зарплатой, а ведь это говорит о том, что поцанчик то оказывается - полный мудак, раз мерит достижения и компетенцию людей по зарплате. Ам сори за бурный конец.
Решил 1 и 3 (сириус курсы спасибо), декоратор плохо сел в память
блин, поставил на паузу. потратил час на вторую задачку. и это в VSCode
да, и про @wraps не знал
Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления
Для этого есть условие в pop:
if res == self.min_nums[-1]
Нет, там правильно. В push-е стоит условие на пустой массив мин.чисел и на возможное совпадение с текущим мин.числом (
@@PeterSidoroff там фича в том, что добавление в упорядоченный массив у тебя происходит только при пуше меньшего элемента, т.е. push(1), push(2), push(3), pop() -> 1, pop() -> None т.к. 2 и 3 тупо не добавлялись, оба гения сидят(как сделать пуш за О(1) если там придется по нормальному по всему массиву проходиться чтобы его в нужное место воткнуть не представляю)
@@QKekos в вашем случае при вызове pop() удалится 3, потом 2. А 1 так и будет минимальным числом в стеке.
2:42 неа, это же set, а не list, тут вобще нет номеров, эта функция выводит элемент 0 из множества
33 минуты боли, но увы без этого никуда, сразу вспомнил все свои тупняки))
У того кто введет собес голос не слишком грубый и это привело к мыслям про прикол о 14 летних сениорах 😂
Молодец, ты конечно достоин
эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания
if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match()
raise e?
Читаемость огонь.
Не знаю ответ ни на одну задачу. Учусь питону уже второй день.
Я тупой, надо бросать?
Ахах, за 22 дня ты не сможешь этот собес пройти. Это серьзная работа, нужно много времени потратить, чтобы научиться.
Бросай
@@digitaIdevil хорошо, пошёл бросать
@@SaintVes 🤣🤣
@@SaintVesскажи, куда бросил? Просто так спрашиваю
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
Условие перечитай)
Жестко. Я ни одной не знаю😢
Ты не один друг, я тоже почувствовал себя тупым
20:55
def get_min(self):
return min(self.stack) if self.stack else None, надеюсь так будет,ибо я тупой совсем
А так разве нельзя было сделать? или я чего то не понимаю?
по времени это занимает O(n), т.к. нужно пройтись по всему массиву и найти минимальное. Спрашивалось более оптимальное решение
По голосу интервьювера, ему лет 17-19, если это так, мне значит немного стыдно 😢
Не, точно больше
ну так декораторы с параметрами писали во втором пайтоне, изращение, уже как 10 лет можно проще
третья задача развалится, когда в список залетят два одинаковых числа и оба будут минимальными
Нет, так как там при пуше "меньше либо равно" оба числа добавятся в стек минимумов, при попе так же будут выниматься.
вообще не понял третью задачу. Первое что мне пришло в голову - создать связный список. Добавление - переназначение указателя на вершину на новый, удаление - переназначение указателя на следующий, топ - указатель уже указывает на нужное, get_min можно искать при каждом добавлении элемента в стек или при его удалении(если уадлили минимальный, то нужно найти следующий минимальный), либо если по памяти нам все равно, то создать multi_set и там уже изи все хранить. первое что пришло в голову
я вот не понял Артём специально тупит так на 1-ой задаче
или он по настоящему?
в комфортной обстановке любая задача кажется простой
А дядя смог вам объяснить как это пригодится при написании реальных задач с REST и бизнес логикой?
Очевидно, что никак
это только в России програмисту платят 1 тыс $ ?
Наитупейший вопрос
хех, одно дело вещать по подготовленному сценарию, а другое дело в realtime. Хорошо порешал
100 к сейчас 800 баксов 😂
это явно не уровень джуна и не 100 тысяч зп, первая задача только, остальные уровня мидл
нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях
Что задачи, что вопросы это уровень стажера
@@myacc2517 может сразу уровень школьника начальных классов?
@@ChrisColeDC Первая задача сравнима с заданием на егэ, вторая и третья это основа основ
Если для вас эти задачи на мидлов, то у меня плохие новости
@@myacc2517 чел ты сейчас автора видео дураком выставил)))
get_first_matching_object=lambda pred,obj=[]:next((v for v in obj if pred(v)),None)
не вырезай молчание. а то слишком бысто и сильнее комплексую перед собесом
Сорри, но так очень скучно смотреть(
полтора гола ежедневной учебы и 100к ваши. На самом деле пох сколько предлагают 50, 70, 100. Если компания норм, то сам факт влиться в структуру и уже расти по грейду это и есть основная цель.
почемуто 3 задача показалась самой прстой)
это не джуновская задача
Ты же не синьор явно
Это понятие в принципе расплывчатое. В одной конторе ты джун, в другой сениор 😂
Прикол конечно. Такие задачи могут на мидла и синьера дать, с зп в 2-4 раза больше
Угораешь? Я даже не джун это решаю
@@irwynptytzelow молодец, что сказать то тут) но я тут оффер на 300к получил без решения подобных задач, так что точно знаю о чем говорю)
выходит у меня в 16 лет уровень джуниор? и зачем мне в универ поступать тогда...
На питоне не пишу, знаю только школьную программу, поехали.
1. Получить первый объект, соответствующий условию предиката. Она создает список, прогоняя объекты через предикат, и возращает первый элемент, если список не пустой
2. Без понятия :D
3. честно говоря, мне такая задача попадалась в одном курсе. Я просто использовал словарь(ключ: число, значение: количество чисел) и стек одновременно: ко всем новым в стеке числам в словаре прибавляется единица. И когда нужно получить минимальный элемент, просто выбираем первый элемент словаря
Получается, 1 - правильно, 2 - неправильно, 3 - правильно.
знаю только школьную программу... мне такая задача попадалась в одном курсе.
@@Forarit Я знаю только школьную программу питона, курс был про другое
Тут третья задача не про подсчет элементов, да и нет такого понятия как «первый элемент словаря»
@@shehamane3518 В словаре элементы отсортированы, я подразумеваю первым элементом минимальный. Про подсчёт, не про подсчёт, но задача решена
Возможно это старая запись вашего интерьерью? Вопросы не тянут даже на стажёра
Что же тогда должны были спросить? Как написать свой фейсбук или нетфликс?
@@Артем-п6ф9эчувствую, в 2025 от джунов (по крайней мере в вебе) будут требовать написать полноценное приложение-чат (при этом не просто чат, а асинхронный real-time чат), который полностью заменит чат в каком-нибудь вк, так еще и с разделением на личные сообщения и беседу, и это в качестве тестового задания, но платит таким спецам будут те же 50-80к; а уже в 2027 такое задание на джуна тянуть не будет. Люди всё больше идут в программирование, python один самых популярных языков (если не самый), конкуренция на позицию джуниор огромная, так как все торопятся выйти на работу. Зарплаты растут медленно, уровень понимания и количество знаний должны быть всё глубже и больше, ну и помимо этого увеличивается требуемое количество сайд скиллов (по типу git, но конкретно к нему нет претензий, просто для ясности пример)
@@Артем-п6ф9эзачем "как"? Просто написать. Причем чтобы к концу лайв кодинга количество пользователей было больше, чем в ТГ. Это на Джуна. На стажёра - больше, чем в Фейсбук
у чела было на мидла собеседование в два раза легче