LINUX.ORG.RU

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

 ,


5

5

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

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


Держи с собеседования на сисадмина в известную ИТ компанию в России. Питон сисадмина надо знать на уровне «помнить все методы всех встроенных типов», множества и работа со словарями.
1. Найти дубликаты в массиве. Переписать с циклами. Переделать с линейной сложностью алгоритма.
2. Найти максимальные длины последовательностей одинаковых символов.
3. Даётся массив с именами файлов. Сортировка, если числа в названии, по убыванию, а потом буквы по возрастанию.
4. В файле заменить последовательности пробелов и табуляций одним пробелом - без регулярок.
5. Есть массив состоящий из кортежей положительных целочисленных координат. типа [ (2,5), (1,6), (1,8), ... ]. Нужно определить, существует ли вертикаль, которая делит все точки на плоскости. Сделать линейную сложность алгоритма.
6. Есть 2 массива, состоящие из кортежей - отрезков времени нахождении в сети 2-х пользователей, массивы отсортированы по возрастанию. Нужно найти отрезки времени, когда они в сети были одновременно. Сделать линейную сложность алгоритма.
Все задачи на время по 10-15 минут.

Программистов наверно спрашивают серьёзнее.

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

Я никогда не работал в IT, я просто перечислил несколько задач, которые даю в начале семестра второму курсу физфака.

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

Иди ты. Нет, чтобы они это после семестра программирования на C мгновенно выполнили в одну-десять строк и у них загорелись глаза от того, как высокоуровнево и ненапряжно можно программировать.

Знал бы ты, как они ненавидят с того семестра этот ‘pylesos’. Топ-3 первые попытки: '', ‘pylesos’ и ‘sosesos’, также бывает ‘psosely’.

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

Иди ты. Нет, чтобы они это после семестра программирования на C мгновенно выполнили в одну-десять строк и у них загорелись глаза от того, как высокоуровнево и ненапряжно можно программировать.

Как им в этом (и в реальной жизни) поможет, например, такой навык?

«помнить все методы всех встроенных типов»

beaver
()
Ответ на: комментарий от beaver
  1. Покажи мне сообщение, в котором я сказал, что развиваю этот навык.

  2. Расскажи мне, каким методом ты собрался это делать, и как синтаксический сахар от него можно не показать, преподавая Python?

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

Покажи мне сообщение, в котором я сказал, что развиваю этот навык.

А, сорян, я тебя спутал с твоим другом по несчастью.

Расскажи мне, каким методом ты собрался это делать, и как синтаксический сахар от него можно не показать, преподавая Python?

Что делать то?

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

Реальный навык, который я даю им в этом курсе, это не сцать от слова «программирование», а прикинуть адекватное средство для решения задачи, с энтузиазмом натырить из документации нужного кода и двигаться дальше.

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

Что делать то?

Научиться читать. Сделать, что написал.

Серьезно, после выполнения этого задания они не должны запомнить ни одного нового метода. Они даже слова такого еще не знают. Они просто должны вспомнить синтаксис slicing и конструкцию [::-1]. И только попробуй мне рассказать, что программисту на Python slicing не нужен.

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

Не, в молоко.

Ты меня хочешь убедить что собеседования и задач не было и я придумал их сам?

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

Спасибо.

помнить все методы всех встроенных типов

Как быть если я толком ничего не помню из стандартной библиотеки питона?

Даётся массив с именами файлов. Сортировка ...

Требуется реализовать алгоритм вручную или воспользоваться встроенными стредствами?

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

Как быть если я толком ничего не помню из стандартной библиотеки питона?

Почитай доки, кто тебе мешает? Уж встроенные функции и типы ты точно должен знать.

Требуется реализовать алгоритм вручную или воспользоваться встроенными стредствами?

Сначала будут ждать стандартное решение, а потом могут попросить написать велосипед.

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

в данном случае было на встроенных, но могут спросить и реализации вручную

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

Почитай доки, кто тебе мешает? Уж встроенные функции и типы ты точно должен знать.

Как я могу помнить встроенные функций? Зачем это нужно?

точно должен

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Чего?

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

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

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

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

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

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

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от 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 ★★
()
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от WitcherGeralt

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

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

Так вот непонятно, что делать на собеседовании, если ожидается, что я должен помнить стандартную библиотеку.

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

Вообще, ты, похоже, уже забыл, что тема про собеседования. На попрос про нужно или нет в контексте собеседования — однозначное «да». С этим спорить бессмысленно, вот спросят тебя и что? Снажешь, что не нужно?

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

Хз, что делать. Если это конкретная задача и надо «писать на доске», то сказать что хз как точно и описать на словах.

Я бы такую херню не спрашивал, но я из прогеров только джунов собеседовал.

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

Снажешь, что не нужно?

В том-то и вопрос как вести себя и вообще.

Ведь действительно «не нужно». Я же доказал, что вполне можно нормально программировать без запоминания стандартной библиотеки. Я даже только что показал тебе, что даже «знать о существовании» это тоже кукареку.

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

Соврешенно нечестное требование (судя по отписавшимся выше) которое непонятно как обходить.

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

Да никак, только не говори, что нихера не помнишь. Кого угодно, даже если он Гвидо, на собеседовании завалить можно. Ну завалишься и завалишься, вакансий же дофига.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.