Собес на 350к в мес в Газпромбанк | Python + Алгоритмы
ฝัง
- เผยแพร่เมื่อ 12 มิ.ย. 2024
- В этом видео я прохожу собеседование на роль Data Scientist в Газпромбанк. Секция алгоритмов и программирования на питоне. Смотри это видео, чтобы узнать решение всех задач!
🐳 Следи за новостями: t.me/gernar228/ - новости, анонсы, бесплатный контент
🍑 Приватный телеграм: t.me/gernar228_bot/ - весь движ тут: сообщество, собесы, мои личные консультации и другой эксклюзивный контент!
⬆️ Boosty больше недоступен, всё переехало в телеграм ⬆️
Асимптотика операций в питоне: proglib.io/p/slozhnost-algori...
Именованные и неименованные аргументы: habr.com/ru/companies/ruvds/a...
Полная версия: • (full) Собес Газпром
00:00 Начало
00:58 Асимптотика операций в Python
02:39 Именованные и неименованные аргументы
03:18 Сортировка слиянием
04:05 Что выведут функции
06:18 Задача на алгоритмы + разбор
10:14 Финал
🐳 Следи за новостями: t.me/gernar228/ - новости, анонсы, бесплатный контент
🍑 Приватный телеграм: t.me/gernar228_bot/ - весь движ тут: сообщество, собесы, мои личные консультации и другой эксклюзивный контент!
⬆ Boosty больше недоступен, всё переехало в телеграм ⬆
🦄 Асимптотика операций в питоне: proglib.io/p/slozhnost-algoritmov-i-operaciy-na-primere-python-2020-11-03
🐳 Именованные и неименованные аргументы: habr.com/ru/companies/ruvds/articles/482464/
🍑 Полная версия: th-cam.com/video/0Nes8BtYL3Mh/w-d-xo.htmlttps://th-cam.com/users/sgaming/emoji/7ff574f2/emoji_u1f351.pngth-cam.com/users/sgaming/emoji/7ff574f2/emoji_u1f433.png
я хоть и работаю фронтом, но смотрю эти выжимки с собесов с удовольствием. Лучший формат и подача, спасибо)
+++
Спасибо, мне очень нравятся ваши видео
Замечательный контент!
Начни делать шортсы из моментов, где ты что-то объясняешь в видео)
Новый формат на том же контенте + получишь намного бОльший охват, как мне кажется)
И к своим заслуженным 100к подписчикам (минимум) придешь ещё быстрее)
Подача и монтаж у тебя огонь, не говоря уже по сам контент) успехов!!!
спасибо за идею!
@@gernar228 Кстати да, сейчас алгоритмы рекомендаций ютуба сильно рейтят каналы, которые активно ведут шортсы
Интересный ролик. Для себя узнал несколько новых вещей!
Формат зашел, лайк. А то большинство собесов просто записи без объяснений, посмотрел с удовольствием
Отличный контент, спасибо! Решил задачу так:
def remove_zero(arr: list) -> list:
zero = 0
for i in range(len(arr)):
if arr[i] != 0:
arr[zero], arr[i] = arr[i], arr[zero]
zero += 1
return arr
Спасибо за видео очень классный алгоритм действительно
Может быть запилишь видос по алгоритмам, структтурам данных и прочим полезностям, которые отделяют нас убогих от носителей профильной вышки ?!)
350 тысяч рублей это как 250000 год назад
вау, потрясающе, а 5 лет назад? а 10? а 2 года вперед?
Это как 5 пещер и 12 женщин
@@keldibekov😂
Я бы сказал 200.
@@keldibekovбригаду?
Оооо это мы ждем
На стажера тоже это все спрашивают, только платят 30к
Прекрасный контент, и качество на достойном уровне, продолжай, пожалуйста 😅
Очень хотелось бы увидеть собес на python backend разработчика. Надеюсь дождусь!
Успехов в развитие канала!
Интересное видео! Подскажите в какой программе или сайте рисовали?
excalidraw
Четко!
Это сеньерский собес правильно понимаю ?
кстати, оффер был после ?
То чувство, когда искал золото, а нашёл алмазы)
Благодарю за подачу, лайк + подписка.
Стандартная питон/алго секция. Такой же сложности дают в бигтехах на джуниор позицию.
да
Так зпха уровня слабого мидла
Упал с заставки))
а оператор if разве не увеличивает сложность?
Ничего не понятно, но очень интересно)
Есть глупый вопрос. Пишу на питоне 2 года, в основном анализ данных. При этом питон знаю плохо, из теоретических вопросов ответить смог бы только на 2 из 6, хотя люди в комментах недоумевают от их очевидности. Задачу решил минут за 7-10, и с другими подобными задачами проблем не возникает, хоть я и вообще не практиковался на литкоде. Чтобы улучшить знание питона достаточно пройти какой-нибудь курс?
Смотря для чего тебе, если для себя - то да. Для собесов - просто ходить на собесы и смотреть что спрашивают. В языках программирования можно сильно закопаться, изучая всё глубже, но то что тебя никогда не спросят.
Собес лютый. Вопросы жесть, красава💪 думаю большинство кто смотрит, даже близко не преблизились к такому.
Вижу другой способ для задачи с нулями. Берём два указателя, первый указывает на начало, второй на конец. В цикле проходимся пока указатели не встретятся, делаем следующее: если встречаем не ноль - сдвигаем первый указатель вперёд, а если ноль, то пока последний указатель является нулём - сдвигаем его назад навстречу первому указателю, как только встречаем не ноль - делаем свап с первым указателем.
Привет, твой вариант не совсем подходит под условие задачи. Необходимо сохранить ненулевых элементов.
А, действительно, не заметил.
Про перестановку нулей в списке - можно просто "отфильтровать" нули и потом добавить их в конец, типа: arr = [i for i in arr if i] + [0] * arr.count(0) . Ну или то же самое через filter: arr = list(filter(lambda i: i, arr)) + [0] * arr.count(0) . На списке с 1000 рандомных int от 0 до 10 вариант с фильтром в 1.7 раз быстрее вашего, list comprehension в 2.7 раза быстрее. По памяти одинаково. Ну и "for i in range(len(arr))", это не C же, не надо так, у нас есть enumerate.
по памяти не одинаково, ты же новый массив создаешь, то есть это O(N) по памяти, но по времени также, да
@@gernar228 Новый массив с теми же элементами (они не будут создаваться заново, просто у каждого объекта добавится еще одна ссылка). Не могу найти сколько внутри питона занимает "указатель", так что поверил memory_profiler , который показывает разницу в ~0.1MiB при ~20MiB всего, не думаю что это значительно. UPD: нашел, ссылка будет занимать 8 байт (на x64). При том что внутри объекта int три поля по 8 байт + 4 байта на само число (минимум, если это не 0).
@@usualneko8894 ты создаешь новый список, под это выделяется память, далее при сложении списков тоже создается новый список и под это снова выделяется память. Так что в моменте у тебя будет х2 по памяти для указателей (сами объекты списка в учет не берем, они не копируются). Ну и само условие задания предполагает, что нельзя использовать структуры динамической длины.
x2 по памяти, то есть 2*n, это O(2*n) => O(n). Любые численные множители всегда выкидываются из O - нотации@@noname-bi7ve
@@TimLaizaR228 по условию задачи нужно уложиться в O(1) по памяти.
А теперь посмотрите как работает ваш алгоритм на массиве [0, 3, 4, 1, 1, 1, 2, 5, 3]. Как только он найдёт 0, он начнёт переставлять все ненулевые элементы друг с другом. Если у вас 0 будет стоять первым, то вы сделаете N-1 перестановок.
Эта задача решается через 2 указателя. Один идёт слева и ищет нулевые элементы, а второй идёт справа и ищет ненулевые элементы.
так N-1 перестановка это нормально, каждая перестановка О(1)
не оч понял почему второй указатель должен идти справа, когда нам нужно хронологический порядок чисел сохранить
тут без n-1 перестановок и не решить.
Прошу прощения. Не заметил про сохранения порядка ненулевых элементов. Вы абсолютно правы.@@gernar228
@@gernar228 а разве перестановка в списке выполняется за О(1)?
@@user-dv5mk9mj7n я так понял, что под перестановкой имели ввиду одновременный свап двух элементов списка. тогда O(1)
Держал
В яндексе такую же давали
Вопрос: Почему втсавка и получение из словаря - O(1)? Если при хеш коллизии Python использует Открутю адресацию, которая подразумевает итерацию, как при взятии по ключу, так и при вставке. Получатеся O(1) амартизированное, разве нет ?
Да, О(1) амортизированное
Еще создать корзины как амортизация
Формат супер, есть ли какая-нибудь литература, где подобные моменты обсуждаются?)
какие именно моменты?
@@gernar228 по алгоритмам в частности)
@@user-ll3mn2li7iсоветую книгу Крогаем Алгоритмы, кучу моментов из видео можно там прочитать и читается с легкостью + иллюстрации
Бхаргава Адитья. Грокаем алгоритмы @@user-ll3mn2li7i
Самое смешное, когда на собесе вертишь бинарные деревья, а на работе правишь XML и копируешь файлики по FTP...
По ключу в хешах хранится не одно значение, а несколько
какие?
Если кому интересно, вот короткое решение последней задачи на с++
int ptr = 0;
for (int i = 0; i < a.size(); ++i) if (a[i] != 0) a[ptr++] = a[i];
for (int i = ptr; i < a.size(); ++i) a[i] = 0;
оно по сложности N^2, можно за N решить
@@gernar228 у меня линия как раз..
А где ML часть?
будет на boosty
Учу этот язык программирования уже 1,5 месяца.Такое ощущение что китайский проще выучить😢
бро, питон проще, не сдавайся 💪🏻
в итоге то взяли ?
потом был ещё МЛ собес, не помню как его прошел
В решении по инициализации списка в функции прям грубая ошибка. Список всегда будет пустым.
это не ошибка
Это так и задумано
Ну это смешно, это что за вопросы сеньёру за 350к))
Почему технический собес на 350к проще чем на Джуна за 80?……
какие базовые вещи которые в первые недели изучаются вряд ли такое дадут на реальном собесе на 350к или собес на 20-50к. (мне задачи гораздо сложнее давали при собесе на джуна зп 50к). Где мл секция где докер и гит и тд
бро, можно проходить собесы на 350к, а можно на 50к, вопросы не будут различаться
Прикол в том, что базовые вещи после нескольких лет работы, могут и не вспомниться.
@@petyap7600в этом и есть проблема. Со временем какие то ньюансы забываются
Так и есть)
Когда ты джун, тебя будут спрашивать сильно по технике, т к не знают, что от тебя ждать в целом, плюс конкуренция большая на место
А когда кандидат с опытом, то общаются про опыт, задачи, обсуждают возможные решения бизнес кейсов.
На видео ещё норм уровень задач, бывают проще на позиции мидла и выше
За что такая абсурдно высокая ЗП?
почему она абсурдно высокая? это нормальная сеньорская зп
3500 долларов в месяц это низкая зарплата, примерно в 3 раза ниже чем в США. По сравнению с развитыми странами это вообще смехотворные деньги.
350к после налогов в окладе?)
да
В решении задачи магии нет. После того как ты нашел 0, ты ищешь первый не нулевой элемент и меняешь их местами. Если у тебя zero = 5, а первый ненулевой элемент находится по индексу 6, то очевидно т.к. ты их поменял местами, то у тебя на позиции 6 станет 0, а на 5 ненулевой элемент. Если у тебя индекс ненулевого элемента больше 6, о это значит, что перед ним были одни нули.
Что-то уровень вопросов такой себе, где-то есть подвох
подвоха нет, это реальный собес на высокий грейд, правда, не единственный
Да, это нормальный уровень для банка
350к/мес, а задачи, как на 3-ем курсе на тройку автоматом...
yes
Хз, по мне как в ВТБ в разы проще вопросы были
Газпром проводит собес в Авито.Код?)
да)
Звяем ьы этим занимаешь , я про ютуб . Если ты успешный программист
Ну вот по опыту общения с другими блогерами прогерами- их цель стать блогером и перестать быть прогером
поработай 5 лет прогером, и не таким заниматься начнешь
@@gernar228 это к чему ?
🤣👍@@gernar228
@@black_grizzly выгораешь, а еще твоя работа не такая уж творческая, как многие кричат. Жизнь одна и не хочется ее потратить на код, который через 10 лет будет переписывать чат гпт. Плюс твои знание устаревт и приходится бежать за технологиями. Учить, поглощать) А хочется что то жля души. Вот снять видео и поговорить потом об этом, при этом с возрастом все больше понимаешь, что реальные вещи важнее, а не только разворачивать сервер на джанго на кюбернетес.
Чет слишком легко
index_zero = 0
for i in range(len(arr)):
if arr[i] == 0 and index_zero == 0:
index_zero = i
if arr[i] > 0 and index_zero > 0:
arr[index_zero], arr[i], = arr[i], arr[index_zero]
index_zero += 1
так пройдет алгоритм ? ?
Неприятно, когда в Python списки называют массивами, потому что это разные структуры данных и их не стоит смешивать
Люди, знакомые только с Python меня, вероятно, не поймут, но в Python не существует массивов как таковых (как в Java: int[], String[], etc.), их "заменяют" списки (List).
У них есть важные отличия:
1) Массивы строго типизированы (примерно поэтому их нет в Python), а в списки можно запихнуть что угодно
2) У массивов статическое выделение памяти, то есть какого размера массив создали, таким он всегда и будет, а у списков - динамическое, то есть расширяемое
3) Добавление элементов в массив происходит непоследовательно из-за принципов работы памяти, поэтому при добавлении элемента в массив надо указывать индекс, куда он будет вставать, а в списках можно добавлять элементы куда угодно (за исключением выхода за границы индексов) и сколько угодно
Ты конечно душнила) Твой лист это просто динамический массив
В js массив с любыми данными.
@@webStandard1151 Максимум чем можно назвать список, так это обёрткой вокруг массива, но никак не его динамическим аналогом, я так полагаю, 2 и 3 отличия вообще прошли мимо
@@user-kp5og5so7f Скриптовым языкам незачем иметь массивы в их исконной форме, так что их часто оборачивают во что-то другое
@@justman073 Ты серьезно?) Массив это просто упорядоченная коллекция элементов и может быть реализована как угодно, и от этого не перестанет быть массивом
Вообще вопросы для джуна
Согласен, лишние подтврждение, что джунов ебут на собеседовании необоснованно жёстко.
ну чот на сеньора так се вопросы и ответы, сеньор сеньору рознь.
Интервьюер, конечно, ппц неприятный в гаспрёме. Как и вся компашка, в принципе
втб посмотри
Работаю также в газпромовской структуре, в ИТ. У нас поинтеллигентнее коллеги, и на собеседованиях в том числе. От подразделения к подразделению сильно все отличается. Но то, как на видео чел себя вел - я бы не пошел туда, даже если бы позвали