MOCK-СОБЕСЕДОВАНИЕ с Эдуардом | Знания Python, задачи на код, алгоритмические задачи
Вставка
- Опубліковано 20 чер 2023
- В продолжение разработки линейки курсов "Поколение Python" запускаем новую рубрику - собеседование. В ней наши ученики будут погружаться в атмосферу реального собеседования на должность Python Junior Developer. Их ждут вопросы на знание Python, задачи на написание кода, а также алгоритмические задачи.
В собеседованиях могут принимать участие студенты, которые прошли все наши актуальные курсы. 🙌
Очень глубокий, качественный разговор.
Вот хороший собес, полезный для просмотра. Все объяснили, достаточно глубоко. Собесы с реальными джунами часто не дают хороших ответов на вопросы. Спасибо, полезно!
два профи пообщались) как это поможет джуну на реальном проекте? которому нужна в первую очередь уверенность, а не теория?
но такие видео ведут только на очередные ненужные курсы.
Почему на курсах не уточняют, что из следующих 10 параметров используют только 1-й, очень редко еще и 2-й. А остальными 8-му не нужно забивать свою оперативку в голове. Но ты зазубрил все 10, но не знаешь даже главной особенности того 1-го, с которым ты и будешь постоянно работать первые 3 года)).
в поддержку канала ) надеемся на, то, что народ поддержит эту работу)
Таких бы видосов побольше.Тема собесов очень важна
Класс, обязательно посмотрю:)
Я думал парня на синьора собеседуют, а потом «ну когда найдешь свою первую работу..»
Рубрика огонь)) Больше подобных видосов Тимур)
шикарное интервью, больше похоже на интересную дискуссию
Очень полезное интервью и разбор вопросов. Спасибо за такое развернутое видео! Продолжайте в таком же духе!
Хороший собес! Респект ребятам, которые это делают, молодцы. Еще бы тайм коды на видео добавили - супер чудесно бы было. Сервис для перезентаций тоже понравился
Классные у вас курсы ребят, именно благодаря ним и выучил питон
Прошел три курса "Поколения Python" и привык к конкретным ответам, решая задачи. Точно такая задача про словарь из двух списков была у Пронина, я решил прям как на видео. А по итогу сказали надо расширять сознание, и если списки не равны нельзя терять данные. Необходимо при большем количестве ключей использовать например zip_longest. А если остались не используемые значения их например в отдельный список или в отдельный ключ.
Отличное видео, очень полезная информация и очень грамотно раскрыто, узнал для себя некоторые новые моменты)
Полезное видео. Спасибо!!!!
контент хороший раньше не использовал decimal и не знал.
для последнего задачи оптимальнее было бы:
def foo(m):
c = 0
while m and m[0][0] == 0 and (l:=m.pop(0)):
l.append(1)
c += l.index(1)
return c
привет, привет. открыл видео на этом канале в первый раз и уже участник команды)))
Классный контент, с удовольствием посмотрел. Многое из внутренностей питона для меня оказалось открытием, а задачку в конце я решил за секунды после ее озвучивания. Но я понимаю, что смотрю это спокойно на диване, а в реале мог бы и потеряться. Даже еще бы предложил метод пузырьковой сортировки для более быстрого обегания границы между нулями и единицами. Т.е. найти последний 0 в первой строке и последний 0 в последней строке, посчитать средний наклон спуска по диагонали... Но в 999 из 1000 случаев это на самом деле не нужно. Тем более питон это не про скорость.
Приветствую. Как называется плагин автозаполнения для Pycharm ? Стандартно он вроде не так работает.
Я не понял - кто кого собеседовал...
Наиграно
Они геи😊
Tough guys. Really.
шедевро питон
🤟
Ого, вы теперь еще и собесы делаете - вообще респект.
А кто ведущий? Не шахматный ли человек-матрица, случаем? :D
P.S. А Эдуарду респект - сразу видно, что разбирается во внутрянке Питона. Зачет.
привет, а где страничка обещанная на 20:06 страничка?
Не увидел ссылку, которую говорил, что кинешь на 21.15мин, или просто не нашел
А где ссылка на статью про +=?
в целом интервью очень приятное.
"рядовым программистам комплексные числа никогда не потребуются" -- но при этом пару минут убили на обсуждение... а в сумме на обсуждение float/decimal убили минут пять.
интервьюер сильно влюбился в слова "гомо/гетерогенный". к чему бы это )))
всегда поражает, как с одной стороны люди в матрице нули ищут, а с другой -- не знают, что такое "+=". и ещё более забавно, когда человек, писавший на с# говорит, что поведение "+=" неочевидно...
Про finally и отключение э-ва. Скорость света 300000 км/с. Или 300 км за 1 мс (милисекунду) - Если, допустим, электростанция находится от нас в 3000 км и на ней произошла авария, то свет у нас погаснет только через 10 мс. И если наш код выполняется быстрее, чем 10 мс - то finally имеет шансы быть выполненным.
Вот мое исполнение:
def count_zeros(arr: list):
if len(arr) == 1:
return arr[0].count(0)
if len(arr[0]) == 1:
return len(arr) - sum([x[0] for x in arr])
c = 0
for i in range(min(len(arr), len(arr[0]))):
if arr[i][i]:
break
c += 1
part1 = [row[:c] for row in arr[c:]]
part2 = [row[c:] for row in arr[:c]]
return c ** 2 + count_zeros(part1) + count_zeros(part2)
в матрицах в первом проходе можно и бинарным поиском найти) но это так, в порядке интереса
еееееееееееееееееееееееее!!!!!!!!!!!!
def foo(matrix):
return len([i for sublist in matrix for i in sublist if i == 1] )
2:47 в банковских системах обычно используют integer, и там нет такого понятия, как копейки и тому подобное
хороший собес
Как я решил задачу с матрицей:
def count_zeros(m):
c = 0
i = len(a[0])
for x in a:
i = x[0:i].count(0)
c += i
return c
В каждой строке количество нулей (которые только в начале) не больше, чем в предыдущей, таким образом, мы постепенно будем проверять все меньшую и меньшую часть (срез) строки, так как всю строку проверять смысла нет.
Я не сделал никаких проверок на единицу в цикле, так как(по моему мнению) сами эти проверки отнимают время.
Подскажите, какую скорость имеет данный алгоритм?
Это вообще работать не будет, поскольку "а" не определено. Ну и сложность О(n**2), потому что в цикле for на каждой итерации count, что тоже является циклом. Итого, цикл в цикле.
если сейчас такие джуны, то я сочувствую тем кто пытается войти в айти) чувак тянет на мидл + пятилетней давности
Это точно на Джуна собес😮?
А где написано, что на джуна?)
@@Nina-hy4ql т.к. вопросы про азы, ну почти, и про фреймворки ничего не спросили, + задака на алогритмы не сложная, хотя, как уже сказано, это не собес)
видимо перенервничал Эдуард, на последнюю задачку можно было так же легко сделать с ходу используя индексы))) sum(row.index(1) for row in matrix)
Помимо лайка, добавлю комментарий)
Задача с матрицей
Ментр сообщает, что можно работать с индексами
Тогда почему нельзя представить матрицу как typle
a = ((0, 0, 1, 1), (0, 0, 1, 1), (0, 1, 1, 1), (1, 1, 1, 1))
summ = 0
а для подсчета сделать так?
for i in a:
summ += i.index(1)
тут ведь так же сложность линеная
чувак, кажется ты гений
на сколько я знаю, сложность метода index() - O(n) в худшем случае, так как элемент с искомым индексом может быть в самом конце списка(кортежа) и в общем, в худшем случае, цикл for дает нам сложность O(n) и поиск индекса 1 нам тоже дает O(n). В сумме будет O(n2) ну или O(n * m) если матрица не квадратная.
Не совсем понял чем не угодил проход циклами по всем строкам матрицы для выявления всех нулей. Сколько раз я уже видел такое, да код красивый, но черт ногу сломит в логике, вместо того что бы написать на 2 строки больше но зато все понятно как в азбуке. Никогда не понимал этого.
потому что суть задачек на алгоритмы не в том чтобы проверить как код в проде ты будешь писать, а именно что проверить смекалку, навыки именно в алгосах и структурах данных
@@rednil8242 Так а это чем не алгоритм с циклом то? я помню когда начинал учить питон столько велосипедов ненужных , работающих, но соверншенно ненужных, поизобретал что боольше чет и не хочется.
@@Anshegar тем что до него додумываться почти что не надо
задачка и так изи-медиум, смысл не показать что кандидат просто цикл умеет писать, но в том что догадается до оптимального решения. буквально вчера с этим на собесе столкнулся, с квадратичной сложности до линейной оптимизировал.
С листами и кортежами слишком оверлоад. Не правильно так делать. Это лишь две "почти одинаковые структуры данных" Динамические масив для листа и статический для кортежа. И от туда уже выходит их юз кейс. Человек ответил что итерация через кортеж быстрее что не являеться правдой. ВО первых бенчмарк написать 30 секунд и посмотреть что они одинаковые и даже чаще выигрывает лист(но это зависит от рантайма). Второе чисто знать их структуру что тоже дает ответ что в инетрации как и аксесе нету быстрее или медленее. Пустую аллокацию лист не итерирует.
О хэш таблице. Человек рассказал о старом представлении хэш таблиц в пайтоне. + не рассказано о пробации\колизия\решению кол и тд. Тема очень глубокая. И если уже упоминать у то что знаешь глубь то или рассказывать детально или вообще не рассказывать а то порождает только непонимание.
39:52 Проверил в VS code, вывело это:
[10, 'a']
[123]
[10, 'a']
Собственно, получается Тимур неправильно сказал, что в первом выводе будет только 10. Или в чем проблема?
Гений, смотри хотя-бы когда копируешь код, операции уже произошли и ты выводишь грубо говоря 2 списка, а не 3.
Хоть return и возвращает список, но функция на него продолжает ссылаться и в итоге в 3 её вызове список увеличивается и в list1 также.
@@A.AA.A-qo6tw так задача стоит что выведет код, и вывело собственно, то что я написал. А не то что сначала выведет первый принт, второй и третий, и почему так произошло, если вывести сразу все.
@@kostechkaS думаю, что суть данного вопроса состояло не тупо ответить, что выведет, а именно механизм работы в данном случае.
Постановка
Почему?
def count_zeros(matrix):
return sum(i.index(1) if 1 in i else len(i) for i in matrix)
кортЕжи
шарлотан
никогла не понимал, зачем на инженерном языке решать алгозадачи, вам java мозги жмёт?
def count_zeros(mat):
zeroes = 0
for i in range(len(mat)):
for j in range(len(mat[i])):
if mat[i][j] == 0:
zeroes += 1
else:
break
return zeroes
так красивее , нет ?
так квадратичная сложность
27:40 какая компеляция? он о чем? питон интерпритируемый, там все во время выполнения делается
А что у нас хранится в папке pycache?)
картежИ, без кортежЕй )) аж слух режет.
К собеседованию ни какого отношения не имеет. Ни один, ни второй не программисты.
всмысле?
Нафига думать если есть консоль, с такими работодателями даже не общаюсь.
Во-первых, это не нанимаете на работу, а MOCK собеседование. Во-вторых, если вы не знаете, что происходит под капотом, то в некоторых ситуациях консоль вам не поможет решить проблему. И знать как всё устроенно внутри, куда полезнее, чем бездумно писать код.
@@A.AA.A-qo6tw я всегда смотрю консоль и в 100% всегда решаю сложные задачи. В любом другом случае все уже решено и нужно искать ответ в интернете. Либо читать документацию.
ЭлсЭ, прям коробит от этого косноязычия!! Else [els] Откройте словарь, все названия идут из английского. ну реально невозможно это слушать
Это не урок по английскому, чтобы придераться к произношению. Да, английский полезная вещь, но всё же, имейте терпение и уважение к чужому труду.
Ребята, ну выучите, наконец, как правильно произносить else и прочие английские слова! Так режет ухо, что хочется спросить кто вас так научил? Или сами решили за англичан так произносить? А самое страшное, что свою неграмотность вы ещё и мультиплицируете!
Очередное тупое собеседование.
Важны не знания основ, а мышление программиста.
Выучить язык при необходимости ума большого не надо, а вот интеллект важен всегда.
Короче, очередной эйчаровский тупизм.
как без знания тонкостей языка писать эффективный код?
И прямо со старта...
>>> import decimal
>>> a = decimal.Decimal(0.3)
>>> b = decimal.Decimal(0.1)
>>> a + a + a + b
Decimal('0.9999999999999999722444243843')
>>>
>>> 0.3 + 0.3 + 0.3 + 0.1
0.9999999999999999
>>>
Разницы в результате тупо нет, те же самые 16 девяток после точки, а потом неестественный хвост как бы приклеен. Ну, раз кому-то неправильный результат с колбасой в 28 знаков милее -- дело хозяйское. В данном случае "точность" означает "подробность", но никак не "правильность". Что в регистрах, что в ячейках оперативки одна и та же двоичная система, иначе и быть не может. Так что если считать десятичные дроби, нужен не компьютер, а калькулятор.
И кортеж со списком длиной даже в миллион -- при линейном чтении разница в районе седьмого-восьмого знака после точки. А поиск элемента по индексу / индекса по значению в коллекции на 10 тысяч оказался тоже весьма неоднозначным.
import random
lst = [*range(10000)]
random.shuffle(lst)
tpl = tuple(lst)
indexes = [*range(10000)]
random.shuffle(indexes)
@halt
def list_item_by_index():
for x in indexes:
a = lst[x]
@halt
def list_index_of_item():
for x in indexes:
a = lst.index(x)
@halt
def tuple_item_by_index():
for x in indexes:
a = tpl[x]
@halt
def tuple_index_of_item():
for x in indexes:
a = tpl.index(x)
list_item_by_index(), list_index_of_item()
tuple_item_by_index(), tuple_index_of_item()
Результаты:
list_item_by_index time:
00 h 00 min 0.00274250 s
list_index_of_item time:
00 h 00 min 1.06715661 s
tuple_item_by_index time:
00 h 00 min 0.00153810 s
tuple_index_of_item time:
00 h 00 min 1.17664792 s
Ну и создание кортежа командой tuple из генератора тоже медленнее, чем comprehension. А что там насчёт преимуществе кортежа по памяти?
>>> tuple([*range(1000000)]).__sizeof__()
8000024
>>> [*range(1000000)].__sizeof__()
8000040
>>>
Есть разница))) Но это надо создавать списки/кортежи длиной в 1-3 элемента, а числом в легионы, чтобы профит ощутить.
13:00 "однотипность"... Сразу вспоминается функция all, которая любую пустую коллекцию (во всём остальном Питоне это False и даже для "напарницы" этой функции any) и заодно пустую строку воспринимает как True. Знаете, почему? А потому что "если в комнате нет ни одного человека, то можно утверждать, что каждый человек из находящихся в комнате -- француз. Или женщина". Я не шучу ни грамма. Это известное логическое утверждение называется "парадокс остроумного француза" (The Paradox of the Clever Frenchman) или "парадокс одинокого француза" (The Paradox of the Lonely Frenchman). А потому что в Нидерландах хорошие наркотики, вот почему.
16:30 "список, его хэш-значение..."
>>> s = [1, 2]
>>> hash(s)
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
Действительно.