Круто, давайте теперь собеседование на миддл и синьор позицию. Генерация кода в видеоряде отвлекает, в первой части было все круто, красивая картинка. На счет HAVING, наверно, правильно было бы уточнить, что агрегатный функции он совершает с группированными данными. Про classmethod и staticmethod слабо раскрыли, не понятна суть.
А вообще кто-нибудь пробовал запустить на практике? Потому как теория -- её бы и проверить неплохо. Python 3.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() Понятно? Список на 10 к перемешанных чисел, из него же кортеж, содержимое идентично. Отдельно такой же перемешанный список для входных данных. Затем по две пары функций: сначала поиск элемента по индексу, затем поиск индекса по значению. @halt -- это таймер. Вывод: list_item_by_index time: 00 h 00 min 0.00175665 s list_index_of_item time: 00 h 00 min 1.10451381 s tuple_item_by_index time: 00 h 00 min 0.00142997 s tuple_index_of_item time: 00 h 00 min 1.19496133 s ------------------ (program exited with code: 0) Press return to continue Теперь просто линейное чтение: import random lst = [*range(1000000)] random.shuffle(lst) tpl = tuple(lst) @halt def list_linear(): for x in lst: a = x @halt def tuple_linear(): for x in tpl: a = x list_linear(), tuple_linear() list_linear time: 00 h 00 min 0.09474740 s tuple_linear time: 00 h 00 min 0.09294936 s ------------------ (program exited with code: 0) Press return to continue Внезапно, да?
Ахахах, интервьюер а ты точно программист?))) 2:30 Какой динамический формат в массиве , что ты несешь? То чтоо ты говоришь это список, совершенно другая структура данных. Основные признаки массива это однородность типов членов и доступ по смещению. Настоящих масивов в базовом синтаксисе Питона вообще нет, они есть в Нумпай (ну естественено еще во многих библиотеаах менее известных)
from array import array 😮 А вообще лист под капотом это динамический массив(что-то типа вектора в плюсах), он хранит ссылки на pyobject и тем самым обеспечивается консистентность данных. Нафига тут вой поднимать и строить из себя самого умного?
@@НиколайРюмин-й6и Ахахах, тот случай когда пришел макнуть тиупого бумера в овно, своими мего знаниями полученными в яндексбоксе/скиллпрактикуме, но получилось только насрать себе в штаны. Причем тут консистеннтность, ты думаешь это умное слово сделает твой высер весомее зумерок? Попытайся научиться читать то что написано, перед тем как умничать. Все важное что я написал, ты переварить не смог. А важное это то, что и макссив и вектор , щас будь очень внимаетлен, ОДНОРОДНЫЕ, или мож ты по гречески лучше ГОМОГЕННЫЕ. И из этого следует , что когда ты обращаешься к его члену, ты ОДИН, еще РАЗ ОДИН, раз вычисляешь адресс. ДАЖЕ если тип данных не элементарный , важно то что он известен СРАЗУ , и интепритатор сначала к адресу прибавляет смещение элемента, а потом смещения по ЗАРАНЕЕ известному типу (если оно есть). А в пихоновском листе ты НЕЗНАЕШЬ что будет в твоем элементе, он завернут в твой обджект, тебе надо ЕЩЕ раз попав в него, узнав его тип, дрюкнуть память, а работа с памятью это долго, если ты вдруг не знал. Даже в минимально вырожденном случае ты получ.ишь скорость в два раза меньшую чем с настоящим массивом. Но я понимаю что тебя такие тонкости при клепании сайтиков на обезьянго не сильно беспокоят
Круто, давайте теперь собеседование на миддл и синьор позицию.
Генерация кода в видеоряде отвлекает, в первой части было все круто, красивая картинка.
На счет HAVING, наверно, правильно было бы уточнить, что агрегатный функции он совершает с группированными данными.
Про classmethod и staticmethod слабо раскрыли, не понятна суть.
Ну не сказать, что это жёсткое собеседование. Обычное
Спасибо большое за интервью) Уже учу SQL)
кандидат явно читает ответы на некоторые вопросы или мне показалось -_-
А вообще кто-нибудь пробовал запустить на практике? Потому как теория -- её бы и проверить неплохо.
Python 3.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()
Понятно? Список на 10 к перемешанных чисел, из него же кортеж, содержимое идентично. Отдельно такой же перемешанный список для входных данных. Затем по две пары функций: сначала поиск элемента по индексу, затем поиск индекса по значению.
@halt -- это таймер.
Вывод:
list_item_by_index time:
00 h 00 min 0.00175665 s
list_index_of_item time:
00 h 00 min 1.10451381 s
tuple_item_by_index time:
00 h 00 min 0.00142997 s
tuple_index_of_item time:
00 h 00 min 1.19496133 s
------------------
(program exited with code: 0)
Press return to continue
Теперь просто линейное чтение:
import random
lst = [*range(1000000)]
random.shuffle(lst)
tpl = tuple(lst)
@halt
def list_linear():
for x in lst:
a = x
@halt
def tuple_linear():
for x in tpl:
a = x
list_linear(), tuple_linear()
list_linear time:
00 h 00 min 0.09474740 s
tuple_linear time:
00 h 00 min 0.09294936 s
------------------
(program exited with code: 0)
Press return to continue
Внезапно, да?
Как мне показалось, кандидат слабоват.
Ахахах, интервьюер а ты точно программист?)))
2:30 Какой динамический формат в массиве , что ты несешь? То чтоо ты говоришь это список, совершенно другая структура данных. Основные признаки массива это однородность типов членов и доступ по смещению. Настоящих масивов в базовом синтаксисе Питона вообще нет, они есть в Нумпай (ну естественено еще во многих библиотеаах менее известных)
Есть, array.array, самый базовый массив, в котором элементы хранятся по значению
from array import array 😮
А вообще лист под капотом это динамический массив(что-то типа вектора в плюсах), он хранит ссылки на pyobject и тем самым обеспечивается консистентность данных. Нафига тут вой поднимать и строить из себя самого умного?
Шэйм он ю вобщем за такие комментарии.
@@НиколайРюмин-й6и Ахахах, тот случай когда пришел макнуть тиупого бумера в овно, своими мего знаниями полученными в яндексбоксе/скиллпрактикуме, но получилось только насрать себе в штаны. Причем тут консистеннтность, ты думаешь это умное слово сделает твой высер весомее зумерок? Попытайся научиться читать то что написано, перед тем как умничать. Все важное что я написал, ты переварить не смог. А важное это то, что и макссив и вектор , щас будь очень внимаетлен, ОДНОРОДНЫЕ, или мож ты по гречески лучше ГОМОГЕННЫЕ. И из этого следует , что когда ты обращаешься к его члену, ты ОДИН, еще РАЗ ОДИН, раз вычисляешь адресс. ДАЖЕ если тип данных не элементарный , важно то что он известен СРАЗУ , и интепритатор сначала к адресу прибавляет смещение элемента, а потом смещения по ЗАРАНЕЕ известному типу (если оно есть). А в пихоновском листе ты НЕЗНАЕШЬ что будет в твоем элементе, он завернут в твой обджект, тебе надо ЕЩЕ раз попав в него, узнав его тип, дрюкнуть память, а работа с памятью это долго, если ты вдруг не знал. Даже в минимально вырожденном случае ты получ.ишь скорость в два раза меньшую чем с настоящим массивом. Но я понимаю что тебя такие тонкости при клепании сайтиков на обезьянго не сильно беспокоят