LINUX.ORG.RU

Вопросы на python-собеседовании

 ,


5

5

Накидайте вопросов, которые вам задавали или вы задаёте при собеседовании на python-программиста.

Вопросы с собеседований нужны чтобы получить представление и готовиться. Хотел бы освоить python (скорее подтянуть, т.к. что-то я уже знаю) и походить по себеседованиями.


Ответ на: комментарий от WitcherGeralt

Отлично. Подскажи, какая питоновских ORM опирается на наличие в языке метаклассов? И где конкретно? Я бы может попробовал там код посмотреть, если других практических кейсов не назовут.

mxrd2
() автор топика
Ответ на: комментарий от WitcherGeralt

Ну давай, назови без интерпретатора и доков, чем eval отличается от exec, как обратить zip, или даже чему равны -7//2%3, 2**2**3, -1**2+3 или True + True + False**False.

Встроенное — не значит нужное, нужное — не значит встроенное.

t184256 ★★★★★
()
Ответ на: комментарий от mxrd2

Да любая, например SQLAlchemy. Только не лезь ты туда, лучше, например, мой пример посмотри: https://github.com/t184256/mutants/blob/efb53df88a4700297937b6e75235fd323bd18923/mutants/on_access_mutant.py А еще лучше ничего не смотри.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

не помнишь, что в питоне есть строки — вот это настораживает

Просто забыл, что в питоне есть доступ к символам строки по такому[] синтаксису. В профессиональном программировании это почти не используется. На практике, если над строкой и проводится какая-то манипуляция, то это либо встроенные функции, либо регулярка. Никто не аксессает отдельные буквы строки чтобы сделать какой-нибудь to_lower, rtrim, reverse и т.п. Хотя, конечно, иногда это нужно. Но «иногда» - это точно, не то, что нужно помнить.

mxrd2
() автор топика
Ответ на: комментарий от mxrd2

Это бесполезно, я сейчас попытался нарыть конкретный кусок, который был бы понятен, ничего не нашел. Правда, я не у компа, с телефона сложно. Почитай лучше какой-нибудь наглядный туториал, дофига их, но вообще оно нафиг не нужно, тебя вряд ли спросят что-то большее, чем «что это», ибо сами никогда их не юзали.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Херли тут помнить?

Ну и зачем мне это помнить? Зачем?

И потом, то что ты привел - мягко говоря не всё. На любой питоновской переменной/литералах есть методы. И суммарно там будет сильно побольше.

mxrd2
() автор топика
Ответ на: комментарий от WitcherGeralt

Без этого вполне можно успешно программировать

Нет. Говнокодить разве что.

Я бы на твоем месте не был столь категоричен. Или объяснил, что дает тебе основания так говорить. Я программировал примерно 2005-2011, и практика показывает, что вполне можно успешно программировать не запоминая стандартную библиотеку.

mxrd2
() автор топика
Ответ на: комментарий от WitcherGeralt

Херли тут помнить?

Ты немного не туда залез. Вот, например:

https://docs.python.org/3/library/stdtypes.html

И там действительно много всякого барахла, которое пригодится примерно никогда.

А если в твоём арсенале не только единственный ЯП - питон, то всё это барахло запоминать из всех ЯП - не только бесполезное занятие, но и невыгодное, затратное по времени и памяти.

beaver
()
Ответ на: комментарий от t184256

eval отличается от exec

Тут ты просто не угадал. На заре своего былокодинга я это активно юзал. Даже «модули» грузил через execfile.

как обратить zip

Чего?

или даже чему равны

Первые два не понял, втф? Последнее угадал, иногда почитываю разричные статейки про WAT в различных языка. Предпоследнее вроде очевидно.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

какие объекты можно изменять не выделяя память в самом питоне

Можно подробнее? Я не понял, о чем ты. Если про мутабельность, то вроде как в общем случае изменение значений не приводит к какому-то дополнительному выделению памяти. Если ты поменял символ в строке, то старая строка всё равно соберется сборщиком пусть и не сразу.

mxrd2
() автор топика
Ответ на: комментарий от mxrd2

Затем, что многое нужно постоянно, а остальное пригождается переодически. Даже если не непосредственно в коде, а в REPL-экспериментах.

На любой питоновской переменной/литералах есть методы

Там представлены старндартные типы и есть ссылки на их полное описание.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от mxrd2

Если ты поменял символ в строке, то старая строка всё равно соберется сборщиком пусть и не сразу

Мне однажды подобный вопрос и задали. Типа есть у тебя чудовищной длины набор байт / строка, который занимает большую часть оперативы, нужно её отсортировать. Найс?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Типа есть у тебя чудовищной длины набор байт / строка, который занимает большую часть оперативы, нужно её отсортировать.

Всегда было интересно, какому проценту программистов доводилось решать подобные задачи в реальной рабочей практике хотя бы раз в жизни.

beaver
()
Ответ на: комментарий от WitcherGeralt

Но это гипертрофированный случай. Я не говорю, что оно реально пригодится, скорее всего нет. Но в случае, если тебе придётся что-то хадкорно заоптимизировать, то любое лишнее выделение памяти это фейл ещё и с точки зрения проца, gc не бесплатный.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

как обратить zip

чего

Ну типа где взять функцию, по результату zip выдающую его аргументы, этакий unzip.

Предпоследнее вроде очевидно.

Если бы, я как-то на полдня на этом прогорел.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Типа такого:

>>> l = list(zip(list(range(1,10)), list(range(11,20))))
>>> print(l)
[(1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]
>>> d=dict(l)
>>> d.keys()
dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> d.values()
dict_values([11, 12, 13, 14, 15, 16, 17, 18, 19])

Первые два я вообще не понял, есть линк на объяснение?

Надо бы сюда PR сделать: https://github.com/cosmologicon/pywat

WitcherGeralt ★★
()
Ответ на: комментарий от beaver

Ну такое может быть вполне, не только отсортировать. Пробежать по byte array и альтерить все или часть его значений - это впринципе вполне легитимная практическая задача. Я делал такое неоднократно, но не на питоне. (хотя в питоне часто вожусь с byte array, но именно чтоб в питоне и много менять значения не надо было)

Я не знаю, мутабелен ли byte array в питоне, но если я буду делать такое на значимом объме данных, то я озабочусь и почитаю в документации питона прежде чем начинать это делать.

Тут меня смущает другое. Сейчас я этого не знаю и мне вообще всё равно. Совершенно всё равно. Вот на собеседовании как бы получится что видите ли чего-то не знаю. Как-то глупо это.

mxrd2
() автор топика
Ответ на: комментарий от WitcherGeralt

Чо это ты меня тестируешь? Как у любого двусвязного списка.

O(N) ?

beaver
()
Ответ на: комментарий от WitcherGeralt

https://docs.python.org/3/library/functions.html

Там представлены старндартные типы и есть ссылки на их полное описание.

Еще раз. К твоему сведению, та ссылка твоя - это «не всё» мягко говоря. Это вершина айсберга.

Кроме того, оттуда как раз таки мало что нужно. Нужное размазано по всему питону. Как это можно помнить, а главное зачем?

mxrd2
() автор топика
Ответ на: комментарий от mxrd2

Еще раз. К твоему сведению, та ссылка твоя - это «не всё» мягко говоря. Это вершина айсберга.

Да он уже облажался на том, что сказал, что у списков в питоне доступ к элементу, как у «любого двусвязного списка». Хотя на самом деле в питоне списки - по сути динамические массивы указателей на элементы, что-то по типу std::vector<*T> в крестах. И доступ к элементу в такой структуре - O(1).

beaver
()
Ответ на: комментарий от mxrd2

оттуда как раз таки мало что нужно

Да, но нужно очень даже. Специально посчитал, если опустит сами типы, то более-менее регулярно юзаю оттуда штук 15-20 функций / генераторов. Большинство хотя бы раз да пригождалось.

Достаточно помнить про наличие. Затем, чтобы не городить велосипедный код на ровном месте.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Допустим, и что? Как это относится к необходимости знать знать встроенный функции?

Ну как что? Я тоже облажался однажды именно на этом вопросе. Хотя, казалось бы, базовая вещь, каждый junior должен знать. А я почти двадцать лет в индустрии - и не знаю. А знание это ещё более важное, чем встроенные функции, потому что от того, что из себя представляет структура данных, пишутся соответствующие алгоритмы работы с ней. Если ты думаешь, что это двусвязный список, то лишний раз обратиться к рандомному элементу для тебя - будет не очень хорошим вариантом, а на практике - как раз норм, потому что это, внезапно, не двусвязный список.

beaver
()
Ответ на: комментарий от beaver

Не, это понятно. Фейл и фейл. Только как моё незнание одного пруфает позицию о том, что не нужно знать что-то другое?

А то, что джуну нужно точно знать чего там под капотом, это бред. Даже для мидла требоваение странное, ибо 99% работы на питоне — тупое формошлёпство.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Первые два я вообще не понял, есть линк на объяснение?

У питона отличная от C семантика деления. Почитать можно, например, тут: https://github.com/cython/cython/wiki/enhancements-division#abstract

** просто правоассоциативен.

Типа такого

Да но более общо, так как zip может в N аргументов. Ответ такой:

$ l = [(1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]
$ list(zip(*l))
[(1, 2, 3, 4, 5, 6, 7, 8, 9), (11, 12, 13, 14, 15, 16, 17, 18, 19)]

Признаю, я, в целом, не на того напал. Но, надеюсь, моя мысль про (встроенность != нужность каждому прогеру) до тебя тоже дошла.

t184256 ★★★★★
()
Ответ на: комментарий от beaver

Кстати, кинь что-нибудь прочитать на тему, если есть. Не обязательно по питону.

WitcherGeralt ★★
()
Ответ на: комментарий от beaver

Хотя на самом деле в питоне списки - по сути динамические массивы указателей на элементы, что-то по типу std::vector<*T> в крестах.

Формально и ты неправ, и верно это только для конкретной имплементации.

t184256 ★★★★★
()
Ответ на: комментарий от beaver

Для меня непринуждённость собеседования стала определённым маркером адекватности контор

Удваиваю всё сказанное этим господином.

no-such-file ★★★★★
()
Ответ на: комментарий от beaver

Сортировать — предельно малому, а вот просто задач на всю покупаемую оперативку много в научных вычислениях. Знакомые квантовые химики колбасят в оперативке терабайты, у у знакомых биологов как-то XML вертелся такой, что в оперативку не входил…

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Да я с ней так и так согласен, никто не пишет код не смотря документацию и не гугля. Но, как я уже сказал:

Достаточно помнить про наличие. Затем, чтобы не городить велосипедный код на ровном месте.

ТС же говорит, что совсем не знает стандартную библиотеку и даже функций.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

регулярно юзаю оттуда штук 15-20 функций / генераторов.

там нет генераторов. генераторных функций.

t184256 ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Как это относится к необходимости знать знать встроенные функции?

Ну зачем их знать-то?

Даже помнить имена функций - это уже слишком.

Объясни.

mxrd2
() автор топика
Ответ на: комментарий от WitcherGeralt

Угу, этот тред наконец-то во мне разбудил злого педанта =)

t184256 ★★★★★
()
Ответ на: комментарий от mxrd2

Достаточно помнить про наличие. Затем, чтобы не городить велосипедный код на ровном месте.

Сказал ведь уже и даже процитировал. Имена знать не обязательно. Главное знать про наличие и представлять где искать, иначе это не кодинг будет, а велостроение или сплошной гуглёж.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 2)
Ответ на: комментарий от WitcherGeralt

иначе это не кодинг будет, а велостроение или сплошной гуглёж
знать про наличие

Задаю тебе вопрос. Беру случайны пример. (Переключаюсь на свой код, оставшийся открытым со вчерашнего дня.)

Есть число (положим помещается в 32бита).

Нам нужны байты от него (4 штуки). BE (network).

ИРЛ ты начал бы говорить ой, ой... И сказал бы, что тебе нужно в гугл. Потому что ты не знаешь. И скорее всего ты не знаешь даже о существовании этой функции. И тем более не знаешь где ее искать.

mxrd2
() автор топика
Ответ на: комментарий от mxrd2

Нет, я бы сказал, что не понял задачу, ибо не не понял задачу.

Про случайный пример попахивает враньём, либо речь не про питон. Чего ты там пишешь?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

попахивает враньём, либо речь не про питон

>>> (-1).to_bytes(4, byteorder="big", signed=True)
b'\xff\xff\xff\xff'

Чего ты там пишешь

код на питоне.

mxrd2
() автор топика
Ответ на: комментарий от WitcherGeralt

Видишь как недалеко было? Метод-то на integer, не в дебрях каких-нибудь! Хе-хе)

Да, нужно «знать о существовании». Хе-хе)

mxrd2
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.