Александров Сергей (Ярославль) Собеседование python разработчик
ฝัง
- เผยแพร่เมื่อ 2 ธ.ค. 2023
- t.me/TH-camPronin
Чат для общения python разработчиков и им сочуствующих. Свободное общение, тестовые и вопросы с собесов и прочее. Заходите, там вам рады.
Поддержать канал: www.tinkoff.ru/rm/pronin.andr...
Обычно денежка идёт на книжки про питончик. Но иногда на светлое и тёмное.
Если Тиньков не даёт перечислить, стукните в личку телеги andpronin, придумаем что нибудь
Виш лист
Хорошие книги по Питончику, которые могу рекомендовать (и хочу купить с вашей помощью).
Изучаем Python. Двухтомник. Марк Лутц. Очень подробно и структурно (Хочу дождаться 6го издания.. )
• Изучаем Python с Марко...
Читаем и разбираем ее тут
Куплено (огромное спасибо зрителям)
Знакомство с Python | Бейдер Дэн (2023) - выглядит приятно для новичка
Чистый Python. Тонкости программирования для профи | Бейдер Дэн (2022) - хорошо для продолжения
Высоконагруженные приложения. Программирование, масштабирование, поддержка | Клеппман Мартин
Python. К вершинам мастерства | Рамальо Лучано - 2е издание - сложно для новичка, но интересно
Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура -- хорошо про то, когда какой фреймворк применять
Видимо, дальше появтся еще нескромные желания. Но пока - так
Моя тележка andpronin -- стучите, если что.
Мой канал про обучению python с нуля и до мидла Андрей+=Пронин
/ @pypronin
Я в других сетях
🔗Вконтакте: CaptPronin
🔗Дзен: zen.yandex.ru/id/5fbd33919412...
#python #питон #программирование #Андрей_Пронин #собеседование #
Побольше собесов с Олегом. Мужик реально топчик. 👍👍👍
Очень интересно было посмотреть!
Спасибо за видео)
Смотришь собесы тут, потом идешь и смотришь требования на джунов на том же хх, и начинаются когнитивные искажения.
Имхо, но главная ошибка (как и у многих других) - соискатель не уточняет досконально все условия задачи которая изначально поставлено слишком широко (вероятно специально), а бросается ее решать
Этот плохо ведет собеседование, во всех роликах он очень размыто говорит и сильно путает кандидата..
В таком виде код, конечно, упадет. Нет проверки наличия элемента во втором списке перед удалением и sort так не работает.
Хорошо, когда в первую очередь смотрят на способность мыслить и рассуждать, но тогда можно писать на псевдокоде.
Еще наверное стоило бы упомянуть , что использование хэшей меняет стоимость в "процессорном времени" на стоимость "в памяти". И если по памяти есть ограничения, то тогда упростить алгоритм можно отсортировав оба массива, и двигаясь от начала сравнивать элементы и их индексы, тогда бы получили 2 n log n
Ну, крайне неуверенный в себе чувак, конечно, но отдать должное - инженерные мозги у него точно есть. И он ими даже пользоваться может.
Да, тут сразу чувствуется, что алгоритмической подготовки у него особой нет - но при этом очень и очень здраво размышляет, а не гадает.
Особенно после фразы Олега "мб лучше думать, а не вспоминать?"
Но это все фиксится за месяц-два чтения Кормена и решения Литкода.
Также весьма бодро пишет код - явно "не в первый раз" пишет.
Множества активно применяет - это тоже найс.
Ну и в конце, когда получил подсказку насчет словарей - сразу же сходу придумал корректный алгоритм.
Из минусов - 1-2 раза, когда он сказал "нужно использовать множество", мне показалось, что это он "просто сказал", а не "увидел возможное решение".
Ну и то, что изначально он хотел оптимизировать место с сортировкой, а не цикл - это было странно, с учетом того, что уравнение-то он корректное написал.
Так что, весьма неплохо, как по мне.
P.S. Итоговая сложность его алгоритма будет
О( n * m ) + O( 2 * n ) + O( n * log(n) ) O( n * m + n * log(n) )
Где O( 2 * n ) O( n ) и O( n ) + O( n * log(n) ) O( n * log(n) )
А убрать сложность сортировки тут нельзя, т.к. относительно n сортировка имеет самую высокую скорость роста.
Ну а сказать, что это все эквивалентно О(N^2), где N = max(n, m) - это уж очень грубая оценка. Ибо с тем же успехом можно было бы сказать, что финальная сложность 0(N!).
Соррян, но надо было подушнить. :D
А если в первом 5555 а во втором 5777? Нужно 5777 на вьіходе?
Сидя дома на диване сразу приходят нужные идеи, а вот на собеседовании все по другому . Как с этим бороться ?
практикой
@@AndyProninя думал может таблетки посоветуете 😂
@@IvanIvanov-xd2rbпивка бахни перед собесом
Приветствую
Фух, решил рассмотреть вариант с библиотекой, пол дня убил на функцию которая выдаст остаток вычитания списков
def listaminuslistb(a:list,b:list):
#не хотел трогать изначальный лист
#программа выдасть разницу
a1=a.copy()
b1=dict.fromkeys(b,0) #создаем словарь
for i in b:
b1[i]+=1 # значения в б и их количество
zzz=list(b1.keys()) #значения в списке
kkk=list(b1.values()) #кол значений в списке
for i in range(len(zzz)):
for j in range(kkk[i]):
if zzz[i] in a1:
a1.remove(zzz[i])
#удаляем значения из а ,если есть по кол раз в б
return a1 #остаток а после вычитания
"Найдите элементы, которые не повторяются, но повторяются".
Вот смотрю периодически и как в поговорке у меня: "чужую беду, руками разведу", а по факту наверное нет
А нельзя сразу аккуратно описать условие задачи, а не раскрывать разные ее стороны по ходу решения собеседуемым? Ну глупо же получается, нужно какие-то интервью для интервьюеров устраивать на проф. пригодность
list(set(arr1).difference(set(arr2))) это чит?
А, досмотрел до 24 минуты и понял что чит...
В условиях не звучало "с сохранением дублей"!
From collections import Counter)
Ведучий запутал в первом вопросе… сказал что если в первом 555, а во втором 5. Велущий тупо путает
def some_foo(arr1, arr2) -> list:
return list(set([num for num in arr2 if num not in arr1]))
Тоже сразу такое пришло в голову
Неправильно. Если arr1 = [5, 5], а arr2 = [5, 5, 5], то функция вернёт пустой список, а нужно чтоб вернула [5].
res = [i * (arr2.count(i) - arr1.count(i)) for i in set(arr2) if arr2.count(i) > arr1.count(i)]
Все таки я думаю это не очень трудно указывать таймкоды перед тем, как заливать видео.
Полностью согласен. Там надо просто цифры через двоеточия минута:секунда, и описание того, что в это время происходит. Сможете сделать?
@@AndyPronin пассивная агрессия это одна из скреп всего it сообщества
def your_func(a, b):
res = []
for num in a:
if num not in b:
res.append(num)
return res
def some_func(arr1: list, arr2: list):
rounds = len(arr1)
for round in range(rounds):
for elem in arr1:
if elem in arr2:
arr1.remove(elem)
arr2.remove(elem)
return arr2
arr1 = [7, 2, 5, 3, 5, 3]
arr2 = [7, 2, 5, 4, 6, 3, 5, 3, 5] # вернуть элементы, отсутствующие в arr1 -> 4, 5, 6
print(some_func(arr1, arr2))
Кубическая сложность по времени
from collections import Counter
def arr_dif(arr1, arr2):
return list((Counter(arr2) - Counter(arr1)).elements())
а если без Counter?
Еще наверное стоило бы упомянуть , что использование хэшей меняет стоимость в "процессорном времени" на стоимость "в памяти". И если по памяти есть ограничения, то тогда упростить алгоритм можно отсортировав оба массива, и двигаясь от начала сравнивать элементы и их индексы, тогда бы получили 2 n log n
Но если ты сортируешь их через .sort(), то как побочный эффект ты изменяешь список чисел по ссылке, это может изменить логику программы в другом месте, где используется этот же список, безопасным способом будет локально хранить sorted() версию, но это даст линейную сложность по памяти