Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы:
1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
З.Ы. На прошлой работе HR заставляла соискателей решать задачи про переливание воды, цветные шары и гномов в кепках. По-моему очень хорошая практика была, полные идиоты сразу отсеивались, сейчас контора гораздо более бюрократичная, тонко настроить фильтры HR-ов гораздо сложнее, приходится фильтровать самому.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить?
потому-что большинство людей- идиоты
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
On 24.02.2012 13:48, Паблик Морозов wrote:
> Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от > 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, > ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии > с HH по зарплате и пропустить жöлтенькие).
А как выглядит "правильное решение" этой задачи?
Часто про неё слышу, но то ли это задача с каким-то подвохом и я не
понимаю что действительно требуется (сам я по образованию не
программист, что такое "машина тьюринга" или там "конечный автомат" не
знаю — то есть когда-то для интереса читал, но давно и успешно забыл) то
ли действительно происходит что-то странное то ли одно из двух.
Раньше ещё была задача с "переворотом строки" — это случайно не про то
же самое?
Здравствуйте, hrensgory, Вы писали:
H>On 24.02.2012 13:48, Паблик Морозов wrote:
>> Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от >> 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, >> ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии >> с HH по зарплате и пропустить жöлтенькие).
H>А как выглядит "правильное решение" этой задачи?
H>Часто про неё слышу, но то ли это задача с каким-то подвохом и я не H>понимаю что действительно требуется (сам я по образованию не H>программист, что такое "машина тьюринга" или там "конечный автомат" не H>знаю — то есть когда-то для интереса читал, но давно и успешно забыл) то H>ли действительно происходит что-то странное то ли одно из двух.
H>Раньше ещё была задача с "переворотом строки" — это случайно не про то H>же самое?
Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать.
А если человек не делает что-то постоянно, то просто теряется навык.
Собеседование при этом — стрессовая ситуация и далеко не каждый сможет вспомнить как такое делать.
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг? ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Бред. Отсеивать человека по одной задаче — крайне неудачная идея, как и спрашивать про крышки люков, гору фудзи или количество шариков в автобусе.
На собеседовании в первую очередь надо проверить что человек справится с той работой, которой его нагрузят. Для этого можно предложить ему задачу и пусть расскажет ход решения. Или напрмиер тестовое задание (небольшое) заранее дать.
А вот потом уже спрашивать про такую хрень чтобы проверить фундаментальные знания и соображалку.
ПМ>З.Ы. На прошлой работе HR заставляла соискателей решать задачи про переливание воды, цветные шары и гномов в кепках. По-моему очень хорошая практика была, полные идиоты сразу отсеивались, сейчас контора гораздо более бюрократичная, тонко настроить фильтры HR-ов гораздо сложнее, приходится фильтровать самому.
Такие бредовые задачи пропускают профессиональных ходоков по собеседованиям и отсеивают профессионалов, которые не знают решения.
Ты подумай какой процент этих задач на собеседованиях решается соображалкой, а какой — предварительным гуглением?
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы:
Кого ищите то? Те же плюсисты, обычно, решают в лет. У разработчиков более высокоуровневых языков часто вызывает проблемы, сам не знаю почему.
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Сразу нафиг.
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Давай в самом начале.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Kernan, Вы писали:
H>>Раньше ещё была задача с "переворотом строки" — это случайно не про то H>>же самое? K>Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Sni4ok, Вы писали:
S>конечно сразу нафиг
Но как-то они же работали на предыдущих работах несколько лет? Или от того новую работу и ищут, что так набыдлокодили, что теперь легче работу сменить, чем разбираться?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Kernan, Вы писали:
K>Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
Не совсем.
Конечно наивная реализация — рекурсивна, но при некоторых ухищрениях рекурсия оказывается хвостовой и её можно переписать в цикл, получи Θ(1) по памяти и Θ(n) по времени.
Я вот сходу не напишу вариант с циклом, а из рекурсии выведу. Но на собеседовании и без компа — вряд ли, стрессовая ситуация, ограничено время и вообще на собеседовании впадлу таким заниматься.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Kernan, Вы писали:
H>>>Раньше ещё была задача с "переворотом строки" — это случайно не про то H>>>же самое? K>>Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
L>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца.
А в java\c#?
Это задача дается для проверки понимания как алгоритмы отображаются на конкретные особенности системы типов и рантайма.
Re[4]: Задача на собеседовании - обращение списка.
On 24.02.2012 14:11, Lloyd wrote:
> H>>Раньше ещё была задача с "переворотом строки" — это случайно не про то > H>>же самое? > K>Я так понимаю это базовый принцип построения алгоритмов используя > рекурсию. > > Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того > от начала элемента с i-м с конца.
Ну вот я тоже так думаю, что никакая рекурсия тут не нужна и задача
очень простая. Но не может быть чтобы 9 из 10 на этом отваливалось,
наверное что-то всё-таки ещё требуется.
Потому и хочется узнать у ТС в чём подвох.
--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, hrensgory, Вы писали:
H>А как выглядит "правильное решение" этой задачи?
Да никакого подвоха. Просто дан односвязный или двусвязный список, и надо его обратить (развернуть указатели на элементы), или как-нибудь поменять элементы местами (я обычно делаю небольшие вариации, чтобы не заучивали). Алгоритм — цикл на 4-5 строчек. Никаких специальных знаний не требуется. Можно и с рекурсией написать, если человеку так удобнее, но за этим последуют дополнительные вопросы. Переворот строки — из той же серии, просто я её уже не дают, поскольку уже не все помнять, что такое null-terminated строки и как писать на Си, а на джаве или сишарпе её писать не интересно.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Сколько платишь за решение этой задачи?
>немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие). ПМ>Может быть я что-то не понимаю в этой жизни?
всё правильно понимаешь.. задача не настолько сложная, чтобы её вообще нельзя было решить за короткое время..
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
может и способен, а эту задачу не может решить именно сейчас, т.к. голова занята другим..
но статистика удивляет..
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
спросить о последней работе, дать задачу, если решил, то спрашивать остальное
...coding for chaos...
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
L>>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца.
G>А в java\c#?
Ровно так же.
G>Это задача дается для проверки понимания как алгоритмы отображаются на конкретные особенности системы типов и рантайма.
Чего?
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
L>>>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца. G>>А в java\c#? L>Ровно так же.
G>>Это задача дается для проверки понимания как алгоритмы отображаются на конкретные особенности системы типов и рантайма. L>Чего?
Ну напиши работающий код, который string в C# разворачивает.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, hrensgory, Вы писали:
H>Ну вот я тоже так думаю, что никакая рекурсия тут не нужна и задача H>очень простая. Но не может быть чтобы 9 из 10 на этом отваливалось, H>наверное что-то всё-таки ещё требуется.
H>Потому и хочется узнать у ТС в чём подвох.
Меня однажды спросили про то, как интеграл численно считается. Выяснилось, что процентов 80 соискателей не в состоянии ответить на вопрос из школьной программы.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг? ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
ПМ>З.Ы. На прошлой работе HR заставляла соискателей решать задачи про переливание воды, цветные шары и гномов в кепках. По-моему очень хорошая практика была, полные идиоты сразу отсеивались, сейчас контора гораздо более бюрократичная, тонко настроить фильтры HR-ов гораздо сложнее, приходится фильтровать самому.
Могу лишь сказать что я в студенчестве свои первые собеседования плохо помню, и выходил с них как громом поражённый, не мог решить 2+2, а дома конечно осеняло. Это может и мои тараканы, но вы всё таки программистов набираете а не спецназ.
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
5 минут это слишком долго, никто такого времени не стоит. Только заходит — воды в лицо плесните. Если продолжает разговор значит ваш человек, готов на многое ради работы, будет терпеть и потеть. На всё про всё 30 секунд. Вперёд!
Re[3]: Задача на собеседовании - обращение списка.
ПМ>Переворот строки — из той же серии, просто я её уже не дают, поскольку уже не все помнять, что такое null-terminated строки и как писать на Си
тут можно поспорить. Переворот строки это принципиально иная задача. И задача с переворотом списка, действительно, содержит элемент, который может ввести в ступор в стрессовых условиях собеседования.
В случае со строкой мы имеем random-access линейную область памяти. В случае со списком никакого random-access нет.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать. G>А если человек не делает что-то постоянно, то просто теряется навык.
Мне не надо, чтобы человек помнил как это делать (я специально варьирую задания), мне надо, чтобы человек был в состоянии написать цикл с тремя переменными. Если он не сможет сделать такую простую задачу, как он сможет проектировать сложные системы? Там в голове надо держать гораздо больше, чем 3 переменные.
G>Бред. Отсеивать человека по одной задаче — крайне неудачная идея, как и спрашивать про крышки люков, гору фудзи или количество шариков в автобусе.
А как тогда отсеять людей, не способных программировать? Давать на дом тестовые задания? Я так понял, в среде программистов отношение к ним очень негативное. Задавать технические вопросы? Вот на них ответы человек действительно может не знать, если раньше не работал. Кроме того, мне ведь программист нужен, а не зубрилка. Сейчас интернет есть, если человек с мозгами любую техническую информацию он за 5 минут найдёт (кстати, у меня есть идея проверять навык поиска тех.инфы в интернете, просто я еще не придумал, как это грамотно реализовать).
G>На собеседовании в первую очередь надо проверить что человек справится с той работой, которой его нагрузят. Для этого можно предложить ему задачу и пусть расскажет ход решения. Или напрмиер тестовое задание (небольшое) заранее дать.
Реальные задачи у нас большие и требуют погружения в предметную облать. Поэтому и даю синтеческую, которая на порядок проще и решается за 5 минут.
G>Ты подумай какой процент этих задач на собеседованиях решается соображалкой, а какой — предварительным гуглением?
Ну да, читеры проходят, по отношению к читерам принимаются дополнительные меры. Но если система эффективна не на 100%б а хотя бы на 50% она уже наполовину разгружает специалистов.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>>>Это задача дается для проверки понимания как алгоритмы отображаются на конкретные особенности системы типов и рантайма. L>>Чего?
G>Ну напиши работающий код, который string в C# разворачивает.
1. Давно ли строка стала списком?
2.
var sb = new SringBuilder(s.Length);
for (int i = s.Length-1; i >=0; i--)
{
sb.Append(s[i]);
}
return sb.ToString();
или перегнать в char[], перевернуть массив и построить новую строку.
Зачем тут рекурсия? Причем тут особенности системы типов и рантайма?
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
На бумажке не могут обратить?
Насколько я понимаю, кандидаты пишут что то вроде этого (специально бажную версию кидаю):
List reverseList(List originalList) {
List result = new ArrayList();
for (int i = result.size(); i > 0; ++i) {
result.add(originalList.get(i));
}
return result;
}
То есть банальные ошибки из за невнимательности, да и на бумажке вспомнить о том, что нужно size — 1 и тому подобные проверки делать лень. Лично я б не стал по таким ошибкам судить о квалификации, более того, такие задачи вообще б не стал давать. А если б дал — я б и таким удовлетворился. А заодно б побеседовал о том, что лучше — вот так с созданием нового, или на месте, какие плюсы и какие минусы.
Или на месте его нужно обращать?
Ладно. Такое решение пойдет?
Такое б прокатило — или ошибка, no hire?
Или явно итеративное решение без рекурсии требуется, и кто такое написал — типа нельзя брать (ибо в большинстве институтов почему то рекурсивные алгоритмы не любят)? Так явно итеративное решение даже на компе лень набивать, не то что на бумажке.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Меня однажды спросили про то, как интеграл численно считается. Выяснилось, что процентов 80 соискателей не в состоянии ответить на вопрос из школьной программы.
Такое я никогда не спрашиваю. Вообще ничего, что бы требовало знаний (особенно не относящихся к работе). Хотя мне любытно, зачем вам задали этот вопрос.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>Кого ищите то? Те же плюсисты, обычно, решают в лет. У разработчиков более высокоуровневых языков часто вызывает проблемы, сам не знаю почему.
C#/Java. Среди программистов на C#/Java больше идиотов (может и правда плюсистов брать и переучивать)?
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
L>>Меня однажды спросили про то, как интеграл численно считается. Выяснилось, что процентов 80 соискателей не в состоянии ответить на вопрос из школьной программы.
ПМ>Такое я никогда не спрашиваю. Вообще ничего, что бы требовало знаний (особенно не относящихся к работе). Хотя мне любытно, зачем вам задали этот вопрос.
Работа предполагала знание математики хотя бы в школьном объеме.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Насколько я понимаю, кандидаты пишут что то вроде этого (специально бажную версию кидаю): E>
E> List reverseList(List originalList) {
E> List result = new ArrayList();
E> for (int i = result.size(); i > 0; ++i) {
E> result.add(originalList.get(i));
E> }
E> return result;
E> }
E>
List в Java это массив, а не список. В списке, например, операция получения размера линейно зависит от времени, поэтому её обычно не реализуют.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать. G>>А если человек не делает что-то постоянно, то просто теряется навык.
ПМ>Мне не надо, чтобы человек помнил как это делать (я специально варьирую задания), мне надо, чтобы человек был в состоянии написать цикл с тремя переменными. Если он не сможет сделать такую простую задачу, как он сможет проектировать сложные системы? Там в голове надо держать гораздо больше, чем 3 переменные.
Ты еще спроси как деревья балансировать. Это надо хорошо разбираться в структурах данных и алгоритмах. Большинство разработчиков работают на более высоком уровне абстракции и навык теряется, даже если люди знают. Это примерно как быстрая сортировка.
G>>Бред. Отсеивать человека по одной задаче — крайне неудачная идея, как и спрашивать про крышки люков, гору фудзи или количество шариков в автобусе.
ПМ>А как тогда отсеять людей, не способных программировать? Давать на дом тестовые задания? Я так понял, в среде программистов отношение к ним очень негативное.
Я уже писал свойства хорошего задания. Главное чтобы его можно было сделать не более чем за 4 часа без предварительной подготовки.
ПМ>Задавать технические вопросы? Вот на них ответы человек действительно может не знать, если раньше не работал. Кроме того, мне ведь программист нужен, а не зубрилка. Сейчас интернет есть, если человек с мозгами любую техническую информацию он за 5 минут найдёт (кстати, у меня есть идея проверять навык поиска тех.инфы в интернете, просто я еще не придумал, как это грамотно реализовать).
Сейчас и решение задачи о развороте списка найти можно, и вообще большая часть кода, который пишут разработчики уже есть в интернете
G>>На собеседовании в первую очередь надо проверить что человек справится с той работой, которой его нагрузят. Для этого можно предложить ему задачу и пусть расскажет ход решения. Или напрмиер тестовое задание (небольшое) заранее дать.
ПМ>Реальные задачи у нас большие и требуют погружения в предметную область.
А ты опиши задачу так чтобы предметная область не требовалась. Что бы вы не делали — все сводится к набору структур данных, алгоритмов и используемых библиотек.
ПМ>Поэтому и даю синтеческую, которая на порядок проще и решается за 5 минут.
Это ты думаешь что проще, а на деле не проще. Потому что требует знаний, которые люди не используют каждый день.
G>>Ты подумай какой процент этих задач на собеседованиях решается соображалкой, а какой — предварительным гуглением? ПМ>Ну да, читеры проходят, по отношению к читерам принимаются дополнительные меры. Но если система эффективна не на 100%б а хотя бы на 50% она уже наполовину разгружает специалистов.
Она также на 50% "эффективна" в другую сторону, то есть отсеивает тех, кого не должна.
Я бы не стал такой пользоваться.
Re[2]: Задача на собеседовании - обращение списка.
E> List reverseList(List originalList) {
E> List result = new ArrayList();
E> for (int i = result.size(); i > 0; ++i) {
E> result.add(originalList.get(i));
E> }
E> return result;
E> }
E>
E>То есть банальные ошибки из за невнимательности, да и на бумажке вспомнить о том, что нужно size — 1 и тому подобные проверки делать лень. Лично я б не стал по таким ошибкам судить о квалификации, более того, такие задачи вообще б не стал давать. А если б дал — я б и таким удовлетворился. А заодно б побеседовал о том, что лучше — вот так с созданием нового, или на месте, какие плюсы и какие минусы.
Правильно, так как сами такие ошибки допускаете: "++i"
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг? ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
А почему у вас в организации принимают решения "годен" или "негоден" на основе попадания в шаблонное решение для одной задачи? Не следует ли такого интервьюера уволить?
Может хватит превращать этот форум в троллоферму? Тут почти каждый месяц создаются топики "почему кандидаты не могут решить простую задачу?" и "почему интервьюеры задают задачи, дико оторванные от реальной жизни?". ИМХО и то и другое — отсутствие опыта проведения/прохождения собеседований и жизненного опыта вообще.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, asktomsk, Вы писали:
E>>То есть банальные ошибки из за невнимательности, да и на бумажке вспомнить о том, что нужно size — 1 и тому подобные проверки делать лень. Лично я б не стал по таким ошибкам судить о квалификации, более того, такие задачи вообще б не стал давать. А если б дал — я б и таким удовлетворился. А заодно б побеседовал о том, что лучше — вот так с созданием нового, или на месте, какие плюсы и какие минусы.
A>Правильно, так как сами такие ошибки допускаете: "++i"
Почемы вы считаете это ошибкой?
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> Почему 9 из 10 соискателей не могут её решить? V>Сколько платишь за решение этой задачи?
V>А за бесплатно, сам свое время гробь.
Да, че там. За каждый ответ на собесодовании надо платить! По типу «Кто хочет стать миллионером?»
WBR, Igor Evgrafov
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
ПМ>>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
G>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать.
Ну задача самая, что ни на есть практическая.
Приходилось использовать разворот списка в боевом проекте.
Но ты прав относительно потери навыка, большинство программистов попросту занимается другими задачами — в основном слепить запрос к БД и вывести цифирь на форме. Т.е. сложить из кубиков могут, а выпилить что-то свое — увы.
G>На собеседовании в первую очередь надо проверить что человек справится с той работой, которой его нагрузят. Для этого можно предложить ему задачу и пусть расскажет ход решения. Или напрмиер тестовое задание (небольшое) заранее дать.
Это может ввести в еще бОльший ступор. Все таки в реальных задачах большое количество исходных данных. А для проверки вменяемости кандидата вполне достаточно простой синтетической. Вроде той, что описывает ТС.
Может помочь дать кандидату домашнее задание на пару-тройку часов. Это чтобы исключить влияние стресса.
Одна известная на кывте компания давала три часа времени, компьютер и просила написать игру "Сапер"
Другая (малоизвестная здесь) предлагала на базе стандартного MFC примера drawcli реализовать snap-to-object во время редактирования. Но сроку давали неделю.
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, alzt, Вы писали:
A>List в Java это массив, а не список. В списке, например, операция получения размера линейно зависит от времени, поэтому её обычно не реализуют.
В Java List бывает и на основе массива и на основе связанного списка. Впрочем сложность size() в обоих случаях O(1).
WBR, Igor Evgrafov
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>А почему у вас в организации принимают решения "годен" или "негоден" на основе попадания в шаблонное решение для одной задачи? Не следует ли такого интервьюера уволить?
Этот подход хорош тем, что он позволяет объективно оценить кандидатов.
Способ возможно и не самый лучший, но просто беседа оценить всего лишь навыки общения кандидата и то, насколько он приглянулся. Остальные выводы притянут за уши.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Ты еще спроси как деревья балансировать. Это надо хорошо разбираться в структурах данных и алгоритмах. Большинство разработчиков работают на более высоком уровне абстракции и навык теряется, даже если люди знают. Это примерно как быстрая сортировка.
Чтобы деревья балансировать, надо действительно алгоритм знать, сам человек его за пять минут не изобретёт. Быстрая сортировка — примитивнейший алгоритм, если человек его хоть раз в жизни видел, то напишет без проблем. Хотя если не знает, о чем речь, то может и не написать (хотя незнание алгоритма быстрой сортировки — тоже хреновый показатель).
G>А ты опиши задачу так чтобы предметная область не требовалась. Что бы вы не делали — все сводится к набору структур данных, алгоритмов и используемых библиотек.
Вот я и предложил одну из самых примитивных структур данных и один из самых примитивных алгоритмов над ней. Если это не может, в чём смысл давать что-то сложнее?
G>Это ты думаешь что проще, а на деле не проще. Потому что требует знаний, которые люди не используют каждый день.
каких знаний требует задача обращения списка??
G>Она также на 50% "эффективна" в другую сторону, то есть отсеивает тех, кого не должна.
Это кого, например?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, asktomsk, Вы писали:
A>Правильно, так как сами такие ошибки допускаете: "++i"
Собеседующим же можно допускать ошибки — это кандидатам нельзя .
PS Второй вариант я даже проверил, а первый как заведомо неработоспособный я даж не стал проверять
Re[3]: Задача на собеседовании - обращение списка.
24.02.2012 13:23, Паблик Морозов пишет:
> Но это в месяц.
Мало. Если у тебя такие задачи на собеседовании то, тыс на 500 (р.р.) в
месяц может быть и соглашусь, за меньшее в подобную контору даже не сунусь.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>А почему у вас в организации принимают решения "годен" или "негоден" на основе попадания в шаблонное решение для одной задачи? Не следует ли такого интервьюера уволить?
Где я такое писал?
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>Может хватит превращать этот форум в троллоферму? Тут почти каждый месяц создаются топики "почему кандидаты не могут решить простую задачу?" и "почему интервьюеры задают задачи, дико оторванные от реальной жизни?". ИМХО и то и другое — отсутствие опыта проведения/прохождения собеседований и жизненного опыта вообще.
Потому, что решение задач из реальной жизни занимает сильно больше времени. Это как минниммум. Можно давать тестовые задания на дом но тут уже неоднократно поднимали срач на эту тему. И да, в небольших компаниях нет профессиональных интервьеров. У меня тупо нет времени и объема чтоб прокачать эти скилы, набрать статистику кореляции отвеченных/не отвеченных вопросов и оценки реальной работы.
WBR, Igor Evgrafov
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, GarryIV, Вы писали:
A>>List в Java это массив, а не список. В списке, например, операция получения размера линейно зависит от времени, поэтому её обычно не реализуют.
GIV>В Java List бывает и на основе массива и на основе связанного списка. Впрочем сложность size() в обоих случаях O(1).
На основе списка — это не список.
Как реализуется size() за O(1)? Надо как минимум хранить размер списка дополнительно, а это уже не похоже на классический список.
Плюс у List есть произвольный доступ к элементам. Как это быстро и эффективно реализовать в виде связанного списка? Всё равно какая-то вариация на тему массива будет.
Re[6]: Задача на собеседовании - обращение списка.
24.02.2012 13:30, Lloyd пишет:
> Меня однажды спросили про то, как интеграл численно считается.
Если ты шел на контору, где это нужно по работе, то нормально. Но,
честно, тоже вопрос идиотский. Ничего не проверяет и ничего не дает
собеседующему.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Такое б прокатило — или ошибка, no hire?
Не no hire, но близко к этому, потому что человек даже близко знает, что такое типы и структуры данных ( http://ru.wikipedia.org/wiki/список_(информатика) ). Давать таким ответсвенные задачи — опасно.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>А почему у вас в организации принимают решения "годен" или "негоден" на основе попадания в шаблонное решение для одной задачи? Не следует ли такого интервьюера уволить?
задача крайне сложна и оторвана от реальной жизни?
...coding for chaos...
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> Меня однажды спросили про то, как интеграл численно считается. V>Если ты шел на контору, где это нужно по работе, то нормально.
Да я и не утверждаю, что это ненормально. Меня удивило, что, оказывается, большое кол-во соискателей не в состоянии даже на такую элементарщину ответить.
V>Но, V>честно, тоже вопрос идиотский. Ничего не проверяет и ничего не дает V>собеседующему.
Неужели?
Re[3]: Задача на собеседовании - обращение списка.
24.02.2012 13:36, Паблик Морозов пишет:
> А как тогда отсеять людей, не способных программировать?
Хотел высказаться жестче, но в баню можно отправиться. Отвечу по сути.
Попросите набросать (посвторю, набросать, именно набросать, а не писать
std::string) класс vector, matrix, string и обсудите с ним его решение
(интерфейс класса, работу с памятью,...).
Считаю самым лучшим способом собеседования расспросы о том, что было сделано на предыдущих местах работы и углубление по ходу в технические детали. Почему было принято такое решение? Как была решена вон та проблема, почему? И так далее. Но такой способ собеседования предъявляет серьёзные требования к собеседующему, т.к. он должен иметь хороший кругозор и свободно общаться на разные технические темы.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, GarryIV, Вы писали:
A>>>List в Java это массив, а не список. В списке, например, операция получения размера линейно зависит от времени, поэтому её обычно не реализуют.
GIV>>В Java List бывает и на основе массива и на основе связанного списка. Впрочем сложность size() в обоих случаях O(1).
A>На основе списка — это не список.
В Java List это вообще не структура данных, это интерфейс упорядоченного множества элементов.
A>Как реализуется size() за O(1)? Надо как минимум хранить размер списка дополнительно, а это уже не похоже на классический список.
Классического списка в стандартной библиотеке Java и вправду нет. Но он обычно и не нужен, нужна структура данных с O(1) вставкой/удалением в произвольную позицию, это LinkedList обеспечивает.
А в каком популярном языке программирования есть "классический" список? Чтобы прямо были prev/next, возможность делать всякие графы на их основе. Т.е., скажем, возможность сделать кольцевой список.
A>Плюс у List есть произвольный доступ к элементам. Как это быстро и эффективно реализовать в виде связанного списка? Всё равно какая-то вариация на тему массива будет.
Никто не обещал быстрый и эффективный доступ к элементам. Чудес не бывает, у LinkedList get имеет сложность O(N). Правда в этом конкретном случае мог бы и O(1) иметь, если бы хранил указатель на предыдущий запрошенный узел, но в Sun JDK этой оптимизации нет.
Re[3]: Задача на собеседовании - обращение списка.
24.02.2012 14:05, GarryIV пишет:
> Да, че там. За каждый ответ на собесодовании надо платить! По типу «Кто > хочет стать миллионером?»
Хорошая идея для ТС. Найдет именно тех, кто ему нужен.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Не no hire, но близко к этому, потому что человек даже близко знает, что такое типы и структуры данных ( http://ru.wikipedia.org/wiki/список_(информатика) ). Давать таким ответсвенные задачи — опасно.
Специально ArrayList поставил, между прочим . Но, следует заметить, что реализация разворота списка именно на месте для связанного списка — это на порядок более серьезная ошибка, чем те 4 (а точнее 3.5 — именно для данного языка ArrayList ошибкой не является, так как возвращаю я интерфейс List), которые я привел в этом решении. Ибо квадратичная сложность на ровном месте — это что то. И думаю тот, кто вот такое написал, сделав 3.5 ошибки на бумажке, более достоин работать, чем тот, кто написал без единой ошибки циклы с тремя переменными с квадратичной сложностью. Ибо:
1) Запутанный код на ровном месте (3 переменные, цикл, деление интервала пополам — ошибиться элементарно);
2) Тормоза на ровном месте.
Лично я не могу себе представить ситуацию, когда я в продакшен в либы захреначу алгоритм с квадратичной сложностью, при этом написав более запутанный код.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали: ПМ>http://ru.wikipedia.org/wiki/список_(информатика)
По-моему, глупо собеседовать по википедии. В конкретном языке "список" ("list") или любое другое понятие может иметь значение, не совпадающее с мнением википедии.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Специально ArrayList поставил, между прочим . Но, следует заметить, что реализация разворота списка именно на месте для связанного списка — это на порядок более серьезная ошибка, чем те 4 (а точнее 3.5 — именно для данного языка ArrayList ошибкой не является, так как возвращаю я интерфейс List), которые я привел в этом решении. Ибо квадратичная сложность на ровном месте — это что то. И думаю тот, кто вот такое написал, сделав 3.5 ошибки на бумажке, более достоин работать, чем тот, кто написал без единой ошибки циклы с тремя переменными с квадратичной сложностью. Ибо: E>1) Запутанный код на ровном месте (3 переменные, цикл, деление интервала пополам — ошибиться элементарно); E>2) Тормоза на ровном месте. E>Лично я не могу себе представить ситуацию, когда я в продакшен в либы захреначу алгоритм с квадратичной сложностью, при этом написав более запутанный код.
Квадратичная сложность в развороте связного списка? Ты чего-то путаешь. O(N).
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, alzt, Вы писали:
A>Этот подход хорош тем, что он позволяет объективно оценить кандидатов.
Просто — согласен, но вот объективно... Я не буду спорить — такой подход работает, но он ориентирован на отсев, а не на поиск. Про низкую его эффективность уже написано тонны постов на этом форуме, не вижу смысла снова это перетирать.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, hrensgory, Вы писали:
H>>А как выглядит "правильное решение" этой задачи?
ПМ>Да никакого подвоха. Просто дан односвязный или двусвязный список, и надо его обратить (развернуть указатели на элементы), или как-нибудь поменять элементы местами (я обычно делаю небольшие вариации, чтобы не заучивали). Алгоритм — цикл на 4-5 строчек. Никаких специальных знаний не требуется. Можно и с рекурсией написать, если человеку так удобнее, но за этим последуют дополнительные вопросы. Переворот строки — из той же серии, просто я её уже не дают, поскольку уже не все помнять, что такое null-terminated строки и как писать на Си, а на джаве или сишарпе её писать не интересно.
И как это сделать в STL: std::list<type> например? Максимум что приходит в голову так это идти по первому списку с помощью reverse_iterator и складывать элементы в другой list всегда в конец списка. Чтобы менять указатели между елементами нужен доступ к внутренней структуре хранения списка: type* next; type* prev; но что то не припомню чтобы STL давал доступ к таким вещам возможно из-за того чтобы не привязывать разработчика к конкретной реализации списка.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Мало. Если у тебя такие задачи на собеседовании то, тыс на 500 (р.р.) в V>месяц может быть и соглашусь, за меньшее в подобную контору даже не сунусь.
На такие вакансии мы кандидатов по сайтам резюме не ищем, для этого существуют другие каналы.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, UA, Вы писали:
ПМ>Я не прошу это делать на stl.
С голыми списками работают только на первом курсе университета чтобы понять как оно работает но в реальной работе велосипедостроение не приветствуется.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Хотел высказаться жестче, но в баню можно отправиться. Отвечу по сути. V>Попросите набросать (посвторю, набросать, именно набросать, а не писать V>std::string) класс vector, matrix, string и обсудите с ним его решение V>(интерфейс класса, работу с памятью,...).
Вот когда компьютеру можно будет "набросать" vector, matrix, string, обсудить с ним решение и получить рабочую программу, тогда я буду так делать. А пока от программистов требуется умение писать хороший, понятный и эффективный код. Умение болтать языком ему ортогонально и проверяется вопросом "расскажите о наиболее интересном своём проекте".
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, UA, Вы писали:
UA>И как это сделать в STL: std::list<type> например? Максимум что приходит в голову так это идти по первому списку с помощью reverse_iterator и складывать элементы в другой list всегда в конец списка. Чтобы менять указатели между елементами нужен доступ к внутренней структуре хранения списка: type* next; type* prev; но что то не припомню чтобы STL давал доступ к таким вещам возможно из-за того чтобы не привязывать разработчика к конкретной реализации списка.
Структуры данных не ограничены контейнерами, предоставляемыми стандартной библиотекой.
Вот тебе пример односвязного списка на базе массивов:
typedef int VERTEX;
std::vector<POINT> m_PositionVertex; // Координаты вершин
std::vector<VERTEX> m_NextVertex; // Ссылка на следующую вершину
VERTEX m_FirstVertex, // Голова списка вершин
m_FirstFreeVertex; // Голова списка удаленных вершин
С моментальной бинарной сериализацией для POD данных и повторным использованием ранее удаленных элементов.
Ессно, все это завернуто в класс, детали реализации наружу не торчат.
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Квадратичная сложность в развороте связного списка? Ты чего-то путаешь. O(N).
В развороте на месте. При условии отсутствия обратных ссылок — а это классический вариант связанного списка, хоть я и не припоминаю такого в стандартных либах. Хотя да, на практике как раз там двусвязный список, и там методы есть, позволяющие это все делать без оверхеда за время N. Но у интерфейса List таких методов нет. И что теперь instance of использовать и кастить явно? И на бумажке ? Лично я эти методы в голове не держу, так что хрен я напишу это за время N на бумажке без использования дополнительной памяти. А с использованием — это изврат писать, какого черта тогда не вернуть новый список?
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Да никакого подвоха. Просто дан односвязный или двусвязный список, и надо его обратить (развернуть указатели на элементы), или как-нибудь поменять элементы местами (я обычно делаю небольшие вариации, чтобы не заучивали).
Abirf именно в односвязности, так как я не представляю себе сколько-нибудь вменяемого программиста, который не смог бы обратить двусвязный.
У Роберста Сэдвика описывается алгоритм обращения именно для односвязного списка.
Там нужно пара вспомогательных указателей, которые надо правильно переприсваивать.
А указатели, как заметил Джоэл Спольски — это показатель "программистскости" программиста...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
GIV>>Да, че там. За каждый ответ на собесодовании надо платить! По типу «Кто хочет стать миллионером?» ПМ>Боюсь тогда большинство людей будут приходить на собеседование ради самого процесса, а не ради того, чтобы усроиться на работу.
А разве в «Кто хочет стать миллионером?» не берут деньги за первые 10 вопросов ещё до попадания кандидата в студию?
И каждый день — без права на ошибку...
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Вот теперь точно no hire, потому что список на месте разворачивается за линейное время. Начинаю убеждаться в верности выбранной методики.
public void reverse(List list)
Просим реализацию. Без instanse of, при условии, что передается однонаправленный список, который я написал сам.
Re[4]: Задача на собеседовании - обращение списка.
Причем здесь мнение википедии? Человек или обладает системными знаниями, или нет. Типы и структуры данных — это то, с чего начинается изучение программирования в школах и институтах.
Re[5]: Задача на собеседовании - обращение списка.
24.02.2012 14:13, Паблик Морозов пишет: >Быстрая сортировка — > примитивнейший алгоритм, если человек его хоть раз в жизни видел, то > напишет без проблем. Хотя если не знает, о чем речь, то может и не > написать (хотя незнание алгоритма быстрой сортировки — тоже хреновый > показатель).
За 20 лет ни разу не понадобилось писать оное самому. Всегда была в
наличии функция sort.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>такой подход работает, но он ориентирован на отсев
Я тут и должен быть отсев. Если 9 из 10 кандидатов с такой задачей справится не могут, их надо отсеивать и не тратить по полтора часа на собеседование каждого. Ведь тогда на работу времени не останется.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали: ПМ>Не могут написать процедуру, обращающую список. То, что получается в результате, список не обращает.
Ну это очень пространное определение. Если не брать в расчет опечатки и знание деталей редкоиспользуемого API, то у любой задачи, например, бывают граничные случаи, которые не позволяют ее решить за пять минут. Квиксорт, например, из таких.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>>Квадратичная сложность в развороте связного списка? Ты чего-то путаешь. O(N). E>В развороте на месте. При условии отсутствия обратных ссылок — а это классический вариант связанного списка, хоть я и не припоминаю такого в стандартных либах. Хотя да, на практике как раз там двусвязный список, и там методы есть, позволяющие это все делать без оверхеда за время N. Но у интерфейса List таких методов нет. И что теперь instance of использовать и кастить явно? И на бумажке ? Лично я эти методы в голове не держу, так что хрен я напишу это за время N на бумажке без использования дополнительной памяти. А с использованием — это изврат писать, какого черта тогда не вернуть новый список?
Почему-то все считают, что структуры данных ограничены стандартной библиотекой, предоставляемой языком. Паралич мышления?
Либо действительно, не всем это нужно.
_____________________
С уважением,
Stanislav V. Zudin
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, UA, Вы писали:
UA>С голыми списками работают только на первом курсе университета чтобы понять как оно работает но в реальной работе велосипедостроение не приветствуется.
Понятно, что не приветсвуется, я же написал, что задача нужна только для того, чтобы проверить, сможет ли человек написать примитивный алгоритм. Ведь давать реальные задачи невозможно по вполне очевидным причинам.
Re[8]: Задача на собеседовании - обращение списка.
24.02.2012 14:25, Lloyd пишет:
> Да я и не утверждаю, что это ненормально. Меня удивило, что, > оказывается, большое кол-во соискателей не в состоянии даже на такую > элементарщину ответить.
Ничего себе элементарщина...
> Неужели?
Да. Если нужен программист, который хорошо знает математику в некоторой
области, то и говорить надо по этой области. Но, простыми задачками
ничего не выяснишь. Просто надо выяснить, насколько устойчиво человек в
этой области себя чувствует или плавает сильно — а это беседа.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
24.02.2012 14:28, MaxRos пишет:
> Считаю самым лучшим способом собеседования расспросы о том, что было > сделано на предыдущих местах работы и углубление по ходу в технические > детали. Почему было принято такое решение? Как была решена вон та > проблема, почему? И так далее. Но такой способ собеседования предъявляет > серьёзные требования к собеседующему, т.к. он должен иметь хороший > кругозор и свободно общаться на разные технические темы.
А также понимать, что он делал и почему.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Задача на собеседовании - обращение списка.
24.02.2012 14:57, Паблик Морозов пишет:
> На такие вакансии мы кандидатов по сайтам резюме не ищем, для этого > существуют другие каналы.
9 из 10 кандидатов на вакансию, бла-бла-бла. Это не твой пост самый
первый в этой теме?
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали: ПМ>Здравствуйте, Mr.Cat, Вы писали: ПМ>Причем здесь мнение википедии? Человек или обладает системными знаниями, или нет. Типы и структуры данных — это то, с чего начинается изучение программирования в школах и институтах.
А при чем здесь системные знания? Допустим, я иду на собеседование, допустим, на джава-разработчика. То, что имеет в джаве конкретное значение (списки, ссылки и т.п.) я в этом значении и понимаю. Какое мне дело до чьих-то системных знаний?
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, alzt, Вы писали:
A>>>List в Java это массив, а не список. В списке, например, операция получения размера линейно зависит от времени, поэтому её обычно не реализуют.
GIV>>В Java List бывает и на основе массива и на основе связанного списка. Впрочем сложность size() в обоих случаях O(1).
A>На основе списка — это не список.
java.util.LinkedList это не список? Глубокомыслено.
A>Как реализуется size() за O(1)? Надо как минимум хранить размер списка дополнительно, а это уже не похоже на классический список.
Это не отменяет необходимости знать как реализована та или иная структура данных в стандартной библиотеке используемого языка.
A>Плюс у List есть произвольный доступ к элементам. Как это быстро и эффективно реализовать в виде связанного списка? Всё равно какая-то вариация на тему массива будет.
Никто и не обещал доступ по индексу за O(1) у LinkedList. Это тоже надо знать.
WBR, Igor Evgrafov
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> Да я и не утверждаю, что это ненормально. Меня удивило, что, >> оказывается, большое кол-во соискателей не в состоянии даже на такую >> элементарщину ответить. V>Ничего себе элементарщина...
Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
>> Неужели? V>Да. Если нужен программист, который хорошо знает математику в некоторой V>области, то и говорить надо по этой области. Но, простыми задачками V>ничего не выяснишь. Просто надо выяснить, насколько устойчиво человек в V>этой области себя чувствует или плавает сильно — а это беседа.
А если нужен человек, от которого нужно знание математики хотя бы в рамках школьного курса? Тоже ничего не дает?
Re[5]: Задача на собеседовании - обращение списка.
24.02.2012 15:04, Паблик Морозов пишет: > А пока от программистов требуется умение писать хороший, > понятный и эффективный код для эффективного менеджера.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Но как-то они же работали на предыдущих работах несколько лет?
значит плохо работали, если не могут решить задачи про задачи про переливание воды, цветные шары и особенно про гномов в кепках. Может у них вообще какие устарелые и невостребованные скизлы типа С++, а про гномиков — не знают.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Паблик Морозов, Вы писали:
GIV>>>Да, че там. За каждый ответ на собесодовании надо платить! По типу «Кто хочет стать миллионером?» ПМ>>Боюсь тогда большинство людей будут приходить на собеседование ради самого процесса, а не ради того, чтобы усроиться на работу.
BFE>А разве в «Кто хочет стать миллионером?» не берут деньги за первые 10 вопросов ещё до попадания кандидата в студию?
Я как-то всегда начинал смотреть с момента попадания кандидата в студию
WBR, Igor Evgrafov
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, UA, Вы писали:
UA>И как это сделать в STL: std::list<type> например? Максимум что приходит в голову так это идти по первому списку с помощью reverse_iterator и складывать элементы в другой list всегда в конец списка.
Зачем так сложно? Достаточно пробежаться от начала списка к концу и подобавлять элементы в начало нового списка. Методы для этого в std:list есть (push_front), специально посмотрел.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Почему-то все считают, что структуры данных ограничены стандартной библиотекой, предоставляемой языком. Паралич мышления?
Блин. Типа того . Точно паралич мышления
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Ты еще спроси как деревья балансировать. Это надо хорошо разбираться в структурах данных и алгоритмах. Большинство разработчиков работают на более высоком уровне абстракции и навык теряется, даже если люди знают. Это примерно как быстрая сортировка.
ПМ>Чтобы деревья балансировать, надо действительно алгоритм знать, сам человек его за пять минут не изобретёт.
А чем разворот списка хуже?
ПМ>Быстрая сортировка — примитивнейший алгоритм, если человек его хоть раз в жизни видел, то напишет без проблем.
Далеко не каждый способен "за 5 минут" написать алгоритм, который "видел хоть раз в жизни".
Я вот уверен что большинство сходу не напишет поиск максимальной подпоследовательности за O(n), хотя почти все его видели.
Или например выбор N случайных элементов из массива.
Потому что это сложные алгоритмы, как и разворот списка на месте. Правильная их реализация не совпадает с наивной. Оптимизированная быстрая сортировка — тоже.
Хотя если не знает, о чем речь, то может и не написать (хотя незнание алгоритма быстрой сортировки — тоже хреновый показатель).
G>>А ты опиши задачу так чтобы предметная область не требовалась. Что бы вы не делали — все сводится к набору структур данных, алгоритмов и используемых библиотек. ПМ>Вот я и предложил одну из самых примитивных структур данных и один из самых примитивных алгоритмов над ней. Если это не может, в чём смысл давать что-то сложнее?
Есть смысл давать что-то что ближе к реальной задаче
Еще раз повторю что разворот списка не пишут. Ты наверное и сам его в production не писал ни разу.
G>>Это ты думаешь что проще, а на деле не проще. Потому что требует знаний, которые люди не используют каждый день. ПМ>каких знаний требует задача обращения списка??
Больших как ни странно.
G>>Она также на 50% "эффективна" в другую сторону, то есть отсеивает тех, кого не должна. ПМ>Это кого, например?
Это например тех кто не гуглил перед собеседованием вопросы и не умеет соображать быстро в стрессовой ситуации. Среди них кстати могут быть и очень хорошие специалисты.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, UA, Вы писали:
UA>>С голыми списками работают только на первом курсе университета чтобы понять как оно работает но в реальной работе велосипедостроение не приветствуется.
ПМ>Понятно, что не приветсвуется, я же написал, что задача нужна только для того, чтобы проверить, сможет ли человек написать примитивный алгоритм. Ведь давать реальные задачи невозможно по вполне очевидным причинам.
Значит вам нужно искать студента в которого это свежо в памяти, люди с опытом сразу детектят ваш быдлоподход к делу/людям и возможно спецом валят задание чтобы поскорее от вас уйти.
Re[6]: Задача на собеседовании - обращение списка.
, совсем недавно,
3) Андрей Орлов, "Записки автоматизатора. Профессиональная исповедь", глава "HR",
4) Фил Портер, "Искусство корпоративной политики",
5) Виктор Дольник, "Непослушное дитя биосферы", глава "Правила знакомства".
и т.д. и т.п.
У вас официальный приём. Вы легко можете "разболтать" соискателя (его обманывать не надо — он сам обманываться рад) и подкинуть ему задачку из той области, где он работал последние несколько лет. Ну не обращает он списки. Зато, может, вы узнаете, что он SQL-запросы с группировками умеет составлять и тем был бы полезен.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, kaa.python, Вы писали:
KP>>Кого ищите то? Те же плюсисты, обычно, решают в лет. У разработчиков более высокоуровневых языков часто вызывает проблемы, сам не знаю почему.
ПМ>C#/Java. Среди программистов на C#/Java больше идиотов (может и правда плюсистов брать и переучивать)?
Не стоит. Тогда будет еще больше идиотов.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
А вы можете её сами написать за 5 минут? Я вот по часам засекал, за 12 минут вот такой результат:
Здравствуйте, UA, Вы писали:
UA>Значит вам нужно искать студента в которого это свежо в памяти, люди с опытом сразу детектят ваш быдлоподход к делу/людям и возможно спецом валят задание чтобы поскорее от вас уйти.
А что такого быдланского в этом подходе? Как еще отсеять людей, котыре не могут писать код, не нагружая их многочасовыми тестовыми задачами?
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, UA, Вы писали:
UA>>И как это сделать в STL: std::list<type> например? Максимум что приходит в голову так это идти по первому списку с помощью reverse_iterator и складывать элементы в другой list всегда в конец списка.
L>Зачем так сложно? Достаточно пробежаться от начала списка к концу и подобавлять элементы в начало нового списка. Методы для этого в std:list есть (push_front), специально посмотрел.
Можна и так согласен.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>24.02.2012 14:57, Паблик Морозов пишет:
>> На такие вакансии мы кандидатов по сайтам резюме не ищем, для этого >> существуют другие каналы. V>9 из 10 кандидатов на вакансию, бла-бла-бла. Это не твой пост самый V>первый в этой теме?
Я же написал >немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие
Ты написал про 500 т.р. Я ответил, что на вансии с з.п. 500 т.р. мы кандидатов на публичных сайтах вакансий не ищем.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
G>>>>Это задача дается для проверки понимания как алгоритмы отображаются на конкретные особенности системы типов и рантайма. L>>>Чего?
G>>Ну напиши работающий код, который string в C# разворачивает.
В haskell всегда была. В .NET она IEnumerable<char>, что есть тоже список, но не "односвязный линейный список".
L>1. Давно ли строка стала списком? L>2. L>
L>var sb = new SringBuilder(s.Length);
L>for (int i = s.Length-1; i >=0; i--)
L>{
L> sb.Append(s[i]);
L>}
L>return sb.ToString();
L>
L>или перегнать в char[], перевернуть массив и построить новую строку.
L>Зачем тут рекурсия? Причем тут особенности системы типов и рантайма?
Рекурсия для списков, а не для строк C#.
А в своем коде ты используешь довольно много знаний о рантайме .NET. Например то что string — immutable, и то что множество манипуляций с immutable строками работает медленно. Поэтому для начала строку надо привести к какой-либо mutable структуре, а потом уже проводить манипуляции.
Просто у тебя эти знания уже в подкорку головного мозга забились, как разворот линейного односвязного списка у некоторых.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, gandjustas, Вы писали:
ПМ>>>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
G>>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать.
SVZ>Ну задача самая, что ни на есть практическая.
Да ну?
SVZ>Приходилось использовать разворот списка в боевом проекте.
Сколько раз? Много таких?
Re[11]: Задача на собеседовании - обращение списка.
Чувак, возвращайся из мира фантазий в реальность? Какие, нах, меры? Речь идет о школьном алгоритме — равибваем ось x на отрезки, считает в каждом отрезке значение ф-ции и суммируем. Все, никакого матана, школа, 9-й класс.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>У разработчиков более высокоуровневых языков часто вызывает проблемы, сам не знаю почему.
Для Java это слишком низкоуровневая задача. Я даже не помню когда последний раз на Java банальный for с обращением по индексу писал, точно больше года назад. Обычно или foreach, или итераторы во все поля.
Re[7]: Задача на собеседовании - обращение списка.
24.02.2012 15:38, Паблик Морозов пишет:
> кандидатов на публичных сайтах вакансий не ищем.
В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и
свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует
слать резюме.
Posted via RSDN NNTP Server 2.1 beta
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, UA, Вы писали:
UA>>Значит вам нужно искать студента в которого это свежо в памяти, люди с опытом сразу детектят ваш быдлоподход к делу/людям и возможно спецом валят задание чтобы поскорее от вас уйти.
ПМ>А что такого быдланского в этом подходе? Как еще отсеять людей, котыре не могут писать код, не нагружая их многочасовыми тестовыми задачами?
Почему начали спрашивать со списков? Доставайте тогда букварь из под стола и просите повторить человека алфавит для начала. Результат будет тот же.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>>>>>Это задача дается для проверки понимания как алгоритмы отображаются на конкретные особенности системы типов и рантайма. L>>>>Чего?
G>>>Ну напиши работающий код, который string в C# разворачивает. G>В haskell всегда была.
Кто была?
G>В .NET она IEnumerable<char>, что есть тоже список, но не "односвязный линейный список".
IEnumerable — это итератор, а не список. Список — это List.
L>>1. Давно ли строка стала списком? L>>2. L>>
L>>var sb = new SringBuilder(s.Length);
L>>for (int i = s.Length-1; i >=0; i--)
L>>{
L>> sb.Append(s[i]);
L>>}
L>>return sb.ToString();
L>>
L>>или перегнать в char[], перевернуть массив и построить новую строку.
L>>Зачем тут рекурсия? Причем тут особенности системы типов и рантайма?
G>Рекурсия для списков, а не для строк C#.
Ну так объясни, причем тут рекурсия. Все равно непонятно.
G>А в своем коде ты используешь довольно много знаний о рантайме .NET. Например то что string — immutable, и то что множество манипуляций с immutable строками работает медленно. Поэтому для начала строку надо привести к какой-либо mutable структуре, а потом уже проводить манипуляции.
Для начала, я испольщоал инфомацию о том, что string — это не список.
G>Просто у тебя эти знания уже в подкорку головного мозга забились, как разворот линейного односвязного списка у некоторых.
Никто-никто не заметил передергивания (список -> односвязный список).
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> кандидатов на публичных сайтах вакансий не ищем. V>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и V>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует V>слать резюме.
Полный список компаний можно посмотреть на сайте hh.ru
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>>>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать.
SVZ>>Ну задача самая, что ни на есть практическая. G>Да ну?
SVZ>>Приходилось использовать разворот списка в боевом проекте. G>Сколько раз? Много таких?
Ты клонишь к тому, что в типовых проектах это не требуется? Не спорю. Процентов 90 проектов не предъявляют требований к быстродействию. Там надо быстрее код выдать.
Однако есть проекты, где надо и структуры данных уметь проектировать, и такты из процессора выжимать.
Несчастный переворот списка мне пришлось применять пару раз в САПРах.
_____________________
С уважением,
Stanislav V. Zudin
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, GarryIV, Вы писали:
GIV>>>В Java List бывает и на основе массива и на основе связанного списка. Впрочем сложность size() в обоих случаях O(1).
A>>На основе списка — это не список. GIV>java.util.LinkedList это не список? Глубокомыслено.
Да точно. Это я на ArrayList зациклился.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
G>>В .NET она IEnumerable<char>, что есть тоже список, но не "односвязный линейный список".
L>IEnumerable — это итератор, а не список. Список — это List.
Смотри что Кнут пишет про список.
G>>Рекурсия для списков, а не для строк C#. L>Ну так объясни, причем тут рекурсия. Все равно непонятно.
Для списков чтоли?
G>>А в своем коде ты используешь довольно много знаний о рантайме .NET. Например то что string — immutable, и то что множество манипуляций с immutable строками работает медленно. Поэтому для начала строку надо привести к какой-либо mutable структуре, а потом уже проводить манипуляции.
G>>Просто у тебя эти знания уже в подкорку головного мозга забились, как разворот линейного односвязного списка у некоторых. L>Никто-никто не заметил передергивания (список -> односвязный список).
Можно и двусвязный, разница от этого небольшая.
Если почитать кнута, то массив тоже является списком
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Нет, реализацию припасу для интервью
Реализацию в соседней ветке привели, если что, уверен, что она и имелась в виду . Но там без абстракций в виде интерфейса и пользуемся информацией о внутреннем представлении. Именно на Java и C# у разработчиков настолько вклинивается в мозг, что список — это тот, кто имплементит интерфейс List, что переклинивает даже в отсутствии стрессовой ситуации. Для плюсов же вероятность того, что переклинит, меньше, не говоря уже про функциональные языки. Вот собственно и ответ, в чем причина того, что многие заваливают интервью на простейшем вопросе.
clsss Node
{
Node next;
};
Ибо такое представление списка ну никак не назовешь привычным и часто используемым, и сходу про него подумать очень и очень проблематично.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
E>>Такое б прокатило — или ошибка, no hire?
ПМ>Не no hire, но близко к этому, потому что человек даже близко знает, что такое типы и структуры данных ( http://ru.wikipedia.org/wiki/список_(информатика) ). Давать таким ответсвенные задачи — опасно.
Может быть поэтому и не подходят 90% кандидатов?
Назвать ArrayList списком при работе с Java вполне себе нормально. Мозг ищет решение из наиболее знакомой области, а область — программирование. А классические структуры данных — это лучше студенты помнят без опыта работы, и ходоки по собеседованиям. Поэтому находится java-List и дальше мозг не замечает, что решает другую задачу. Кандидату надо не просто намекнуть, а как следует разжевать в чём суть задачи.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, gandjustas, Вы писали:
G>>>>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать.
SVZ>>>Ну задача самая, что ни на есть практическая. G>>Да ну?
SVZ>>>Приходилось использовать разворот списка в боевом проекте. G>>Сколько раз? Много таких?
SVZ>Ты клонишь к тому, что в типовых проектах это не требуется? Не спорю.
Это не требуется на подавляющем большинстве проектов. Это уже достаточно чтобы считать задачу непрактической.
SVZ>Процентов 90 проектов не предъявляют требований к быстродействию. Там надо быстрее код выдать.
Предъявляют, только быстродействие зависит от кучи факторов и разворот списка стоит в самом конце.
SVZ>Несчастный переворот списка мне пришлось применять пару раз в САПРах.
Интересно зачем? Линейный односвязный список — не очень удачная структура данных в mutable случае.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
L>>IEnumerable — это итератор, а не список. Список — это List.
G>Смотри что Кнут пишет про список.
Ага. Бросился перечитывать все 4 тома. Цитату приведи.
G>>>Рекурсия для списков, а не для строк C#. L>>Ну так объясни, причем тут рекурсия. Все равно непонятно. G>Для списков чтоли?
Даю тебе три попытки дагадаться. Тольк не смотри название темы и предыдущие сообшения в ветке.
G>>>А в своем коде ты используешь довольно много знаний о рантайме .NET. Например то что string — immutable, и то что множество манипуляций с immutable строками работает медленно. Поэтому для начала строку надо привести к какой-либо mutable структуре, а потом уже проводить манипуляции.
G>>>Просто у тебя эти знания уже в подкорку головного мозга забились, как разворот линейного односвязного списка у некоторых. L>>Никто-никто не заметил передергивания (список -> односвязный список). G>Можно и двусвязный, разница от этого небольшая.
Да, передгивание останется передергиванием.
G>Если почитать кнута, то массив тоже является списком
Да, является.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Далеко не каждый способен "за 5 минут" написать алгоритм, который "видел хоть раз в жизни". G>Я вот уверен что большинство сходу не напишет поиск максимальной подпоследовательности за O(n), хотя почти все его видели.
Мы говорим про быструю сортировку. Думаю те, кто её видели, со мной согласятся. Что значит "максимальная подпоследовательность" я не знаю, если это LCS-problem то там всё намного сложнее O(n).
G>Потому что это сложные алгоритмы, как и разворот списка на месте. Правильная их реализация не совпадает с наивной. Оптимизированная быстрая сортировка — тоже.
какая еще может быть "наивная" реализация разворота списка?
G>Есть смысл давать что-то что ближе к реальной задаче
А ближе/дальше как мерить интересно? Если полностью убрать предметную область, то и останутся задачи на алгоритмы над структурами данных.
G>Еще раз повторю что разворот списка не пишут. Ты наверное и сам его в production не писал ни разу.
Еще раз повторю, что даётся наиболее примитивная задача, показывающая, сможет ли человек написать простейший алгоритм. В продакшене я писал гораздо более сложные алгоритмы, но над ними надо думать часами.
G>Больших как ни странно.
каких именно?
G>Это например тех кто не гуглил перед собеседованием вопросы и не умеет соображать быстро в стрессовой ситуации. Среди них кстати могут быть и очень хорошие специалисты.
Поэтому я и даю сеньёр-девелоперам задачу, которую по идее может решить любой школьник.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Причем здесь мнение википедии? Человек или обладает системными знаниями, или нет. Типы и структуры данных — это то, с чего начинается изучение программирования в школах и институтах.
Вот так всегда оказывается. Вначале ты писал, что кандидаты не могут решить простейшую задачу. А теперь выясняется, что ещё требуются системные знания. Причём школьные . Их обычно хорошо помнят отличники, а затем с возрастом этих знаний остаётся всё меньше. Исключением являются преподаватели и всевозможные теоретики.
Re[12]: Задача на собеседовании - обращение списка.
24.02.2012 15:41, Lloyd пишет:
> Чувак, возвращайся из мира фантазий в реальность? Какие, нах, меры?
Мне подобного очень много приходится делать. Это реальность. Но это
мелочь, а не задача — сделал, отладил, юзают.
> Речь > идет о школьном алгоритме — равибваем ось x на отрезки, считает в каждом > отрезке значение ф-ции и суммируем. Все, никакого матана, школа, 9-й класс.
Вот я тебе и написал посему про бессмысленность данного вопроса.
Он выясняет только помнишь ли ты так-называемый метод "прямоугольников"
(кстати, у тебя какие левые правые, средние).
Т.е. этот вопрос даже для затравки не годится. Можно было бы выложить
тебе формулу (типа той по ссылке) и спросить как бы ты стал ее считать,
ну а дальше уже по выяснять, что ты знаешь. Но и тут большой подводный
камень — это узкое знание и пользы от него в работе мало — чаще нужно
умение рыскать по инету и выискивать там решения аналогичных задач и
адаптировать их под твою. А это на собеседовании можно узнать только
одним способом — беседой.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
A>>Этот подход хорош тем, что он позволяет объективно оценить кандидатов.
А>Просто — согласен, но вот объективно... Я не буду спорить — такой подход работает, но он ориентирован на отсев, а не на поиск. Про низкую его эффективность уже написано тонны постов на этом форуме, не вижу смысла снова это перетирать.
Я не знаю есть ли связь со способностью решать переворот списка и способностью программировать. Наверное, есть, но довольно запутанная.
Но важно заранее понять, в каком случае человека берут. Поэтому несколько простых вопросов позволят объективно оценить кандидата. Главное не отклонятся от единой методики. Естественно вопросы тоже надо уметь выбирать.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
А>>такой подход работает, но он ориентирован на отсев
ПМ>Я тут и должен быть отсев. Если 9 из 10 кандидатов с такой задачей справится не могут, их надо отсеивать и не тратить по полтора часа на собеседование каждого. Ведь тогда на работу времени не останется.
Отсеивать надо, если ты считаешь, что приобрести такой навык сложно. Если человека можно научить за пару часов решать подобные задачи — то стоит ли отсеивать людей по этому критерию?
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> Речь >> идет о школьном алгоритме — равибваем ось x на отрезки, считает в каждом >> отрезке значение ф-ции и суммируем. Все, никакого матана, школа, 9-й класс. V>Вот я тебе и написал посему про бессмысленность данного вопроса. V>Он выясняет только помнишь ли ты так-называемый метод "прямоугольников" V>(кстати, у тебя какие левые правые, средние).
Это не суть важно. В переделе то же самое будет.
V>Т.е. этот вопрос даже для затравки не годится. Можно было бы выложить V>тебе формулу (типа той по ссылке) и спросить как бы ты стал ее считать, V>ну а дальше уже по выяснять, что ты знаешь.
Зачем им это делать, если им это не нужно?
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Mr.Cat, Вы писали:
MC>А при чем здесь системные знания? Допустим, я иду на собеседование, допустим, на джава-разработчика. То, что имеет в джаве конкретное значение (списки, ссылки и т.п.) я в этом значении и понимаю. Какое мне дело до чьих-то системных знаний?
Ну вам может быть и никакого, а моя практика показала, что люди, не знающие базовых вещей, вместо простых и эффективных решений пишут глючный быдлокод, на переделывание которого потом надо тратить время и деньги.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Mr.Cat, Вы писали:
MC>Ну это очень пространное определение. Если не брать в расчет опечатки и знание деталей редкоиспользуемого API, то у любой задачи, например, бывают граничные случаи, которые не позволяют ее решить за пять минут. Квиксорт, например, из таких.
Да, и если человек не может увидеть и обработать все граничные случаи в алгоритме обращения списка, что он тогда будет делать в раельных задачах, где граничных случаем на несколько порядков больше? try-catch везде лепить? Знаем, видели таких, идиотов дешевле не брать, чем потом увольнять.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
BFE>А вы можете её сами написать за 5 минут? Я вот по часам засекал, за 12 минут вот такой результат: BFE>Опыт программирования больше 10 лет.
Я бы задумался. Человек 10 лет программирует, а все не научился стандарные библиотеки использовать
40 строк кода на переизобретение велосипеда в стиле C, полное неумение пользоваться C++, шаблонами и STL, страсть к низкоуровневому решению задачи и концентрация не на решении проблемы а на показывании "мастерства".
На мой взгляд — плохо
Re[7]: Задача на собеседовании - обращение списка.
G>>Потому что это сложные алгоритмы, как и разворот списка на месте. Правильная их реализация не совпадает с наивной. Оптимизированная быстрая сортировка — тоже. ПМ>какая еще может быть "наивная" реализация разворота списка?
list = x::list | nil
reverse nil = nil
reverse x::xs = (reverse xs)::[x]
G>>Есть смысл давать что-то что ближе к реальной задаче ПМ>А ближе/дальше как мерить интересно? Если полностью убрать предметную область, то и останутся задачи на алгоритмы над структурами данных.
Угу, вот только разворота линейного списка на месте среди них нет, потому что связные списки редко используются в чистом виде. Чаще всякие stl и другие контейнеры.
G>>Еще раз повторю что разворот списка не пишут. Ты наверное и сам его в production не писал ни разу. ПМ>Еще раз повторю, что даётся наиболее примитивная задача, показывающая, сможет ли человек написать простейший алгоритм. В продакшене я писал гораздо более сложные алгоритмы, но над ними надо думать часами.
Ничего она не показывает, не надо тешить свое самолюбие. Вот ты например не напишешь выборку N случайных чисел массива не заглядывая в гугл за 5 минут. О чем это говрит? А ни о чем
G>>Больших как ни странно. ПМ>каких именно?
А вот каких знаний требует задача выбора N случайных элементов массива?
G>>Это например тех кто не гуглил перед собеседованием вопросы и не умеет соображать быстро в стрессовой ситуации. Среди них кстати могут быть и очень хорошие специалисты. ПМ>Поэтому я и даю сеньёр-девелоперам задачу, которую по идее может решить любой школьник.
К чему тут "поэтому"?
Ты пытаешься приуменьшить сложность задачи, которую сам знаешь. Яж говорю — напиши за 5 минут без гугла выборку N случайных чисел из массива. По сложности задача примерно такая же, как разворот списка.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
L>>>IEnumerable — это итератор, а не список. Список — это List.
G>>Смотри что Кнут пишет про список.
L>Ага. Бросился перечитывать все 4 тома. Цитату приведи.
Ага, бросился перепечатывать бумажную книгу.
G>>>>Рекурсия для списков, а не для строк C#. L>>>Ну так объясни, причем тут рекурсия. Все равно непонятно. G>>Для списков чтоли?
L>Даю тебе три попытки дагадаться. Тольк не смотри название темы и предыдущие сообшения в ветке.
А то что все списки — рекурсивные структуры и все алгоритмы с ними рекурсивны по своей природе. Сам не догадался?
Это должно быть еще более очевидно, чем реализация этих алгоритмов.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, UA, Вы писали:
UA>Почему начали спрашивать со списков? Доставайте тогда букварь из под стола и просите повторить человека алфавит для начала. Результат будет тот же.
Вывод о том, что человек знает большинство букв и умеет составлять из них осмысленные слова, я делаю на основе прочтения резюме. вывод о том, что человек знает некоторые операции языка программирования и умеет составлять из них осмысленные алгоритмы я делаю, попросив написать парочку.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>Я бы задумался. Человек 10 лет программирует, а все не научился стандарные библиотеки использовать
H>std::list<int> list; H>... H>std::reverse(list.begin(), list.end())
H>40 строк кода на переизобретение велосипеда в стиле C, полное неумение пользоваться C++, шаблонами и STL, страсть к низкоуровневому решению задачи и концентрация не на решении проблемы а на показывании "мастерства".
надо подтверждать статус профессионала, а так же, за что платить от 150 килорублей в месяц
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и V>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует V>слать резюме.
Как я уже (3 раза) написал, мы не выставляем на публичных сайтах вакансии программистов с компенсацией 500 т.р. в месяц. Т.е. ты претендуешь именно на такую з.п. и потрудишься прочитать информацию о вакансии, у тебя и так не будет причин слать резюме. Если ты такую вакансию на публичном сайте найдёшь — можешь смело слать — она не наша.
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
L>>Даю тебе три попытки дагадаться. Тольк не смотри название темы и предыдущие сообшения в ветке. G>А то что все списки — рекурсивные структуры и все алгоритмы с ними рекурсивны по своей природе. Сам не догадался? G>Это должно быть еще более очевидно, чем реализация этих алгоритмов.
Ты можешь ответить на простой вопрос "зачем для разворота списка нужна рекурсия"?
Не нужно уходить в высокии материи и пытаться на основе того, что список пожет быть реализован как рекурсивная структура данных, делать вывод, что это неотъемлемое свойство списка.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, alzt, Вы писали:
A>Отсеивать надо, если ты считаешь, что приобрести такой навык сложно. Если человека можно научить за пару часов решать подобные задачи — то стоит ли отсеивать людей по этому критерию?
Навык писать нормальный рабочий код приобрести сложно.
Re[2]: Задача на собеседовании - обращение списка.
H>>40 строк кода на переизобретение велосипеда в стиле C, полное неумение пользоваться C++, шаблонами и STL, страсть к низкоуровневому решению задачи и концентрация не на решении проблемы а на показывании "мастерства".
о_О>надо подтверждать статус профессионала, а так же, за что платить от 150 килорублей в месяц
Здравствуйте, Паблик Морозов, Вы писали: ПМ>что он тогда будет делать в раельных задачах, где граничных случаем на несколько порядков больше?
Напишет тесты, очевидно же. Не все любят компилировать в уме и учить википедию наизусть.
Re[6]: Задача на собеседовании - обращение списка.
Вообще, имхо, задача собеседования — определить адекватность кандидата и способность мыслить. Остальное обычно проистекает из желания показать собственное превосходство.
Re[14]: Задача на собеседовании - обращение списка.
24.02.2012 16:07, Lloyd пишет:
> Это не суть важно. В переделе то же самое будет.
Вот и пролетел ты со школьными своими знаниями — это важно. Можешь на
вики посмотреть, можешь пару учебников качнуть.
А вот то, что важно — это бессмысленность данного вопроса.
> Зачем им это делать, если им это не нужно?
Тут я тебя уже не понял. Кому им и что не нужно?
Posted via RSDN NNTP Server 2.1 beta
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>24.02.2012 15:38, Паблик Морозов пишет:
>> кандидатов на публичных сайтах вакансий не ищем. V>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и V>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует V>слать резюме.
Могу дать ответ на этот вопрос
Компания BrightConsult.
24.02.2012 16:08, Lloyd пишет:
> Извини, забыл тег [sarcasm]
Ну почему же. Подавляющее большинство компании достаточно вменяемые и
собеседования у них вменяемые. Но встречаются некоторые, которых к
вменяемым я бы не отнес. Вот и хочется выяснить, куда не соваться., не
тратить время не свое не чужое.
Я по молодости один раз так сдуру полдня на гномиков потратил (там были
монетки правда) и дико был счастлив, что послал их подальше и в
последующем только утвердился в правильности того решения.
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>24.02.2012 16:07, Lloyd пишет:
>> Это не суть важно. В переделе то же самое будет. V>Вот и пролетел ты со школьными своими знаниями — это важно. Можешь на V>вики посмотреть, можешь пару учебников качнуть.
Спасибо тебе, родной. Но я как-нить обойдуст красным дипломом по математике.
Для той задачи, о которой идет речь не важно, в какой точке интервала мы будем брать значение функции.
>> Зачем им это делать, если им это не нужно? V>Тут я тебя уже не понял. Кому им и что не нужно?
Собеседователям не нужно от соискателя знание хардкорной математики.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Я тут и должен быть отсев. Если 9 из 10 кандидатов с такой задачей справится не могут, их надо отсеивать и не тратить по полтора часа на собеседование каждого. Ведь тогда на работу времени не останется.
А построить процесс так чтобы не надо было собеседовать каждого — никак?
Ну ок, понеслась, еще раз.
Обобщенный процесс найма в большинстве организаций где я работал и куда собеседовался (все совпадения с реальными ситуациями и людьми случайны):
В программерский оффис врывается Босс с радостным воплем "мы оторвали новый супермегапроект, нам срочно нужны программисты!". Осторожные попытки выяснить что это за проект и кто именно нужен и сколько платят — результатов не приносят, он сам этого еще не знает. В результате генерится вакансия с некими обобщенными требованиями и отправляется HR для распространения. Начинается поток резюме. С ними нужно что-то делать, встает вопрос кто будет проводить интервью. Ответственным выбирают естесственно самого умного — задрота Васю (не хочу никого обидеть, я и сам был в этой роли когда-то). Задрот Вася с толком подходит к делу, с помощью интернета и умных книжек составляет кучу вопросов, которые по мнению сообщества железно помогают отделить зерна от плевел. И вот к Васе вводят первую жертву. Вася не любит и не умеет общаться с людьми, от его грозного взгляда жертва сразу впадает в легкий ступор. Начинается экзекуция — Вася исподтишка заглядывает в шпаргалку и вопрошает: "что такое виртуальный деструктор" (и т. д. на ваш выбор). Все попытки жертвы сначала представиться, выяснить с кем он говорит, куда он попал, что это за проект и сколько платят — обречены на провал, "сначала мы должны выяснить подходите ли вы нам". Наконец, где-нибудь через час, Вася находит вопрос на который вымотанная жертва не может ответить. От взгляда полного презрения, жертва впадает уже в нелегкий ступор и начинает мямлить что он/она знал, но забыл. Вася выдерживает эффектную паузу, потом задает следующий вопрос, но подавленная жертва уже не в состоянии продолжать собеседование. Со временем у Васи появляется все больше опыта по эффективному отсеиванию кандидатов, а Босс кусает локти — новый проект стоит, Вася тоже не работает, но ничего не поделаешь, достойных противников для Васи, который с каждым собеседованием все матереет — не найти, а на меньшее мы не согласны. В конце концов отчаявшийся босс обращается с призывом к сотрудникам: поискать по знакомым. Нужный человек находится, но он хочет больше денег. Босс с тоской соглашается, он уже сто раз пожалел что взялся за этот проект, но ничего не поделаешь, договор подписан. Дальше вариант — или новичка берут в обход Васи или ему заранее сообщают что будут за вопросы, не суть важно, человек будет принят.
Знакомо до боли, не правда ли? У меня было пожалуй всего пара нормальных интервью (не считая тех, где я был в роли того знакомого которого нашли), которые не проходили по такому сценарию (были и ненормальные не по такому сценарию, например когда меня собеседовали пара обкуренных, но это уже из другой оперы). Самое идеальное было — прислали вакансию, приехал, пообщался с HR, она подробно рассказала что за организация, что за проект, какая в нем роль, сколько платят, как проходит процесс принятия на работу, с кем придется работать (20 минут). Потом простенькое ТЗ на 2 часа на дом (я как раз ЗА ТЗ, но только за составленное с умом и с уважением к кандидату), близкое к предметной области. Потом собеседование с тимлидом и менеджером, оба люди немолодые, с большим опытом в своей области. Рассказали о себе, показали офис, напоили кофе, познакомили с потенциальными коллегами. Рассказали чем именно придется заниматься, немного поговорили про особенности предстоящего проекта, про то чем занимался я и насколько оно пересекается с их проектом. В результате выяснили, что мы друг другу не подходим, расстались безо всяких взаимных обид (еще 20 минут).
К чему это все? Ведь если подумать, не так уж и трудно сделать чтобы неподходящие кандидаты отсеивались сами, с минимальными затратами времени и при этом никто не пострадал, правда? Но думать мы не любим, у нас правит принцип "социального доказательства", что хорошо для Майкрософт то хорошо и для ИП "Вася Пупкин".
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, Sni4ok, Вы писали:
S>>конечно сразу нафиг
ПМ>Но как-то они же работали на предыдущих работах несколько лет? Или от того новую работу и ищут, что так набыдлокодили, что теперь легче работу сменить, чем разбираться?
Много где работа сводится к написанию программ, которые дёргают библиотечные функции, и вся квалификация сводится к знанию тонкостей этих библиотек.
И этим можно заниматься годами, а потом гордо писать — "5 лет опыта разработки на C++".
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
A>>Отсеивать надо, если ты считаешь, что приобрести такой навык сложно. Если человека можно научить за пару часов решать подобные задачи — то стоит ли отсеивать людей по этому критерию?
ПМ>Навык писать нормальный рабочий код приобрести сложно.
Но ты же проверяешь навык переворачивания строки. А это не одно и тоже, что и навык писать нормальный код.
Re[8]: Задача на собеседовании - обращение списка.
Там куча ссылок на разные задачи.
G>list = x::list | nil G>reverse nil = nil G>reverse x::xs = (reverse xs)::[x]
Это не in-place и сложность тут приходит из сложности ::. Если уж говорить в терминах базовых операций (конструкторов списка nil и cons) то вообще не понятно, что тут делает :: (вторая — я так понял одним символом тут обозначается как a -> [a] -> [a], так и [a] -> [a] -> [a]) и почему в таком разе не foldl (flip (:)) []? Кароче, если бы кандидат мне такое выдал, я бы посоветовал ему не выпендриваться и написать на C#.
G>Угу, вот только разворота линейного списка на месте среди них нет, потому что связные списки редко используются в чистом виде. Чаще всякие stl и другие контейнеры.
На это всё и рассчитано. Мне не нужны люди, которые знают, как разворачивать списки. Мне нужны люди, которые в состоянии написать алгоритм для решения задачи.
G>Ничего она не показывает, не надо тешить свое самолюбие. Вот ты например не напишешь выборку N случайных чисел массива не заглядывая в гугл за 5 минут. О чем это говрит? А ни о чем
За O(от длинны массива) могу сходу написать (случайная перестановка массива индексов и взятие по нему N элементов). Если подумать, может что получше напишу. Кстати, есть подозрение, что это сложнее обращения списка. Проверю на ком-нибудь продвинутом, кто хорошо справится с первой задачей.
G>>>Больших как ни странно. ПМ>>каких именно? G>А вот каких знаний требует задача выбора N случайных элементов массива?
Алгоритма случайной перестановки за O(n), если решать её как это делаю я. Или каких-либо других структур и алгоритмов, смотря как решать.
G>К чему тут "поэтому"?
Потому что сложную задачу человек в стрессовой ситуации действительно может не решить, а от того, что у него не получается, начнёт еще больше волноваться.
G>Ты пытаешься приуменьшить сложность задачи, которую сам знаешь.
Я сам её не знал, правда теперь знаю, т.к. пришлось несколько раз её решить за кандидатов. Вообще не даю ничего, чего бы сам не решил, мне ведь код проверять, который может сильно отличаться от того решения, которое я "занаю".
Re[8]: Задача на собеседовании - обращение списка.
24.02.2012 17:03, Lloyd пишет:
> Для той задачи, о которой идет речь не важно, в какой точке интервала мы > будем брать значение функции.
Ты прав , меня немного дальше понесло по численному интегрированию.
Вот так и на старуху бывает проруха. Читаешь одно, а пишешь немного о
другом.
> Собеседователям не нужно от соискателя знание хардкорной математики.
Вот это я не понял. Если спрашивают математику, то она им нужна или нет?
Или это вопрос, чтобы время потянуть, не охота работать — с соискателем
интереснее потрепаться бывает?
А если математика им нужна, то ныне без "хардкорной" не много сделаешь.
Да и развивается все сейчас быстро (не успеваешь отслеживать новое),
особенно в прикладных областях.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>Я бы задумался. Человек 10 лет программирует, а все не научился стандарные библиотеки использовать
Если бы я получил такое задание, я бы понял, что надо продемонстрировать алгоритмические способности, умение объяснить придуманный алгоритм собеседнику и быстро выразить в виде кода. Во многих серьёзных конторах подобные задачки и дают. Правда обычно пытаются выбрать задание, для решения которого нет стандартной функции в библиотеке. Хотя вот в Amazon мне задавали найти подстроку в строке, очевидно, что std::string.find их не интересовал.
H>std::reverse(list.begin(), list.end())
Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Я сам пишу им представление, если возникают проблемы (а для себя ставлю галочку "ООП головного мозга"), что тоже не плюс.
Чтож у вас за задачи то там такие, что навыки абстрагирования являются минусом? Сколько ни читал книг — везде говорится, что абстракция, это просто священный грааль для программиста (без фанатизма естественно если этим пользоваться, а случай со списками как раз и является отсутствием этого фанатизма). Ибо очень помогает следовать DRY принципу, который тоже священен. Ладно, не ООП — берем функциональный подход, конкретно книгу SICP. Вдалбливают эти абстракции черти как! Берем императивный подход — Си, тоже абстракции вбивают, вбивают и вбивают в голову. Типа написали алгоритм — он должен работать вообще с любыми данными! Копипаст отстой, реюз форева, с момента зарождении индустрии причем! Здесь же в качестве эталонной реализации приводится решение, работающее только для одной конкретной структуры данных. И на основе того, насколько близко ты мыслишь именно этой конкретной структурой данных, а не чем то более общим, судится о квалификации разработчика — однако.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>>>40 строк кода на переизобретение велосипеда в стиле C, полное неумение пользоваться C++, шаблонами и STL, страсть к низкоуровневому решению задачи и концентрация не на решении проблемы а на показывании "мастерства".
о_О>>надо подтверждать статус профессионала, а так же, за что платить от 150 килорублей в месяц
H>Профи напишет H>std::reverse(list.begin(), list.end())
Реальный реверс списка очень редко нужен в большинстве случаев достаточно передавать исходный список по ссылке и юзать reverse_iterator.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>А построить процесс так чтобы не надо было собеседовать каждого — никак?
А как? Домашние задания? Не хотят. Жесткий отсев по резюме? Во-первых писать их толком не умеют, во-вторых аббривеатур себе навписывать много ума не надо. Давать компьютер и закрывать в комнате на 3 часа, пока не напишет сапёр — издевательство. Небольшая задача, которую можно сделать прямо на собеседовании вместе с кандидатом — самый гуманный вариант ИМХО.
А>Знакомо до боли, не правда ли?
Нет, у меня никогда такого не было.
А>К чему это все? Ведь если подумать, не так уж и трудно сделать чтобы неподходящие кандидаты отсеивались сами, с минимальными затратами времени и при этом никто не пострадал, правда?
Да, и первый пост в теме как раз об этом, не правда ли? (заметьте, в моём случае кандидату не понадобилось тратить два часа на выполнение тестового задания)
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Codechanger, Вы писали:
C>Вообще, имхо, задача собеседования — определить адекватность кандидата и способность мыслить. Остальное обычно проистекает из желания показать собственное превосходство.
Вот поэтому задачи про гномов рулят — можно сразу оценить, как человек подходит к решению задачи.
Re[10]: Задача на собеседовании - обращение списка.
Я ничего не писал про навыки абстрагирования, я написал именно про ООП. Тип данных — это абстракция. Если человек не знает, что такое список, а слово это у него ассоциируется только с классом list — это как раз показатель, что абстрагировать человек не умеет.
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
L>>>Даю тебе три попытки дагадаться. Тольк не смотри название темы и предыдущие сообшения в ветке. G>>А то что все списки — рекурсивные структуры и все алгоритмы с ними рекурсивны по своей природе. Сам не догадался? G>>Это должно быть еще более очевидно, чем реализация этих алгоритмов.
L>Ты можешь ответить на простой вопрос "зачем для разворота списка нужна рекурсия"?
Я тут в соседнем посте писал:
Это наивное определение. И самое интересное что можно попробовать написать реализацию разворота списка на месте таким образом, но это будет крайне сложный код.
L>Не нужно уходить в высокии материи и пытаться на основе того, что список пожет быть реализован как рекурсивная структура данных, делать вывод, что это неотъемлемое свойство списка.
А оно так и есть, даже если ты этого не знаешь.
А вот как вывести нужный вариант:
Для начала попробуем определить разворот списка через другую, "родную" для списков операцию — свертку.
reverse xs = fold f (startS) (xs)
f :: 'a -> 'b -> 'a
Далее попробуем подставить nil:
reverse xs = fold f startS nil
== /*по определению fold*/
strartS
== /*потому что reverse*/
nil :: 'a
далее подставляем xs = x::y::nil
reverse xs = fold f nil x::y::nil
== /*по определению fold*/
f( f(nil, x), y)
== /*потому что reverse*/
y::x::nil
Но функции fold в C нету и надо написать. Обобщенный fold писать смысла нет, можно сразу написать (fold f)
Далее видна хвостовая рекурсия в reverseHelper, её можно преобразовать в цикл.
Для этого условие выхода обращаем и делаем условием цикла, а вместо возврата делаем переход к следующей итерации
Node* reverseHelper(Node* left, Node* right)
{
while(right != null);
{
Node* n = right;
right = right -> next;
n->next = left;
left = n;
}
return left;
}
24.02.2012 17:27, . пишет:
> H>std::reverse(list.begin(), list.end()) > Если в некой конторе будут ожидать такое решение, то лучше оттуда > бежать, ибо требование знания наизусть функций стандартной библиотеки ни > о чём хорошем не говорит.
Это говорит о том, что чел не будет лишний раз придумывать велосипед с
треугольными колесами, а будет писать понятный, правильно работающий
код. А заниматься безумствами с оптимизацией будет только тогда, когда
это очень нужно.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
G>>Угу, вот только разворота линейного списка на месте среди них нет, потому что связные списки редко используются в чистом виде. Чаще всякие stl и другие контейнеры. ПМ>На это всё и рассчитано. Мне не нужны люди, которые знают, как разворачивать списки. Мне нужны люди, которые в состоянии написать алгоритм для решения задачи.
Да, но ты почему-то уверен что это знание выводится из умения разворачивать список на месте.
Хотя это неверно.
G>>Ничего она не показывает, не надо тешить свое самолюбие. Вот ты например не напишешь выборку N случайных чисел массива не заглядывая в гугл за 5 минут. О чем это говрит? А ни о чем ПМ>За O(от длинны массива) могу сходу написать (случайная перестановка массива индексов и взятие по нему N элементов).
Это будет O(длина массива), а не O(кол-во элементов)
ПМ>Если подумать, может что получше напишу. Кстати, есть подозрение, что это сложнее обращения списка.
Ну вот. Ты проверку не прошел. Код очень простой, даже проще чем разворот списков.
[сcode]
i=0;
k = arr.length();
assert(n <= k);
while(n>0)
{
if(rand(k) < n)
{
result.push_back(arr[i]);
n--;
}
i++;
k--;
}
[/сcode]
И я уверен что ты его хотя бы раз видел. Но не писал с тех пор ни разу, вот и не смог родить.
Это значит что алгоритм сложен, несмотря на то что код простой.
А с максимальной подпоследовательностью еще проще код.
Только ты его не знаешь и склонен преувеличивать сложность задачи. Это вообще стандартное явление: сложность того что человек знает и умеет он склонен приуменьшать, а того что не знает — преувеличивать, независимо от реальной сложности задачи.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>З.Ы. На прошлой работе HR заставляла соискателей решать задачи про переливание воды, цветные шары и гномов в кепках. По-моему очень хорошая практика была, полные идиоты сразу отсеивались, сейчас контора гораздо более бюрократичная, тонко настроить фильтры HR-ов гораздо сложнее, приходится фильтровать самому.
все правильно, поддерживаю, задача хорошая. вообще задачки на логику, алгоритмы — обязательно нужно давать
почитала тред с интересом, а некоторые спецы которых я раньше уважала по разделу джава сразу как-то упали в моих глазах
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, a.v.v, Вы писали:
AVV>а вы именно код просите написать? или и рассказ алгоритма пойдет?
Код. Заодно смотрю как человек его пишет. Если у человека есть какая-то разумная система именования идентификаторов (пусть даже не общепринятая), если он использует табуляцию — это сразу плюс. Если зовёт переменные node1, node2 — то сразу минус. Если спеллит непривильно — еще один минус. Причем хорошего программиста сразу видно — назвал ноды prev, current, next — уже на полпути к успеху, скорее всего правильно напишет. Назвал node1, node2 — сам запутался в присваиваниях и слился.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, msk78, Вы писали:
M>Здравствуйте, Vzhyk, Вы писали:
V>>24.02.2012 15:38, Паблик Морозов пишет:
>>> кандидатов на публичных сайтах вакансий не ищем. V>>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и V>>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует V>>слать резюме. M>Могу дать ответ на этот вопрос M>Компания BrightConsult.
Там же CRM в основном. Причем тут разворот списков? Кто-то решил повыделываться?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, a.v.v, Вы писали:
AVV>>а вы именно код просите написать? или и рассказ алгоритма пойдет?
ПМ>если он использует табуляцию — это сразу плюс.
а как на бумаге можно сделать табуляцию? или это на компе все?
ПМ>спеллит непривильно
это как?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>если он использует табуляцию — это сразу плюс.
Let mortal flame begin!
ПМ>Если зовёт переменные node1, node2 — то сразу минус. Если спеллит непривильно — еще один минус. Причем хорошего программиста сразу видно — назвал ноды prev, current, next — уже на полпути к успеху, скорее всего правильно напишет. Назвал node1, node2 — сам запутался в присваиваниях и слился.
а вот это уже слишком тонкие моменты, чтобы на основании этого отказывать человеку
...coding for chaos...
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> H>std::reverse(list.begin(), list.end()) >> Если в некой конторе будут ожидать такое решение, то лучше оттуда >> бежать, ибо требование знания наизусть функций стандартной библиотеки ни >> о чём хорошем не говорит. V>Это говорит о том, что чел не будет лишний раз придумывать велосипед с V>треугольными колесами, а будет писать понятный, правильно работающий V>код. А заниматься безумствами с оптимизацией будет только тогда, когда V>это очень нужно.
Ничего это не говорит. Думаю, любой программист с опытом работы больше пары лет умеет пользоваться гуглом и формумами, ищет решение перед тем, как решать с нуля самому. Даже если и попадаются неадекваты, это выявляется совсем другими вопросами.
В любом случае, задание, сформулированное таким способом, я бы тоже стал решать сам, а не вспоминать имя и параметры стандартной функции; хотя, наверное, упомянул бы между делом о ней, если бы вспомнил (ибо гугла на интервью обычно нет).
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, a.v.v, Вы писали:
AVV>>а вы именно код просите написать? или и рассказ алгоритма пойдет?
ПМ>Код. Заодно смотрю как человек его пишет. Если у человека есть какая-то разумная система именования идентификаторов (пусть даже не общепринятая), если он использует табуляцию — это сразу плюс. Если зовёт переменные node1, node2 — то сразу минус. Если спеллит непривильно — еще один минус. Причем хорошего программиста сразу видно — назвал ноды prev, current, next — уже на полпути к успеху, скорее всего правильно напишет. Назвал node1, node2 — сам запутался в присваиваниях и слился.
Как то пишут вот так и до сих пор не запутались:
// (c) list standard header from STLvoid sort()
{ // order sequence, using operator<if (2 <= _Mysize)
{ // worth sorting, do itconst size_t _MAXBINS = 25;
_Myt _Templist(this->_Alval), _Binlist[_MAXBINS + 1];
size_t _Maxbin = 0;
while (!empty())
{ // sort another element, using bins
_Templist._Splice(_Templist.begin(), *this, begin(),
++begin(), 1, true); // don't invalidate iterators
size_t _Bin;
for (_Bin = 0; _Bin < _Maxbin && !_Binlist[_Bin].empty();
++_Bin)
{ // merge into ever larger bins
_Binlist[_Bin].merge(_Templist);
_Binlist[_Bin].swap(_Templist);
}
if (_Bin == _MAXBINS)
_Binlist[_Bin - 1].merge(_Templist);
else
{ // spill to new bin, while they last
_Binlist[_Bin].swap(_Templist);
if (_Bin == _Maxbin)
++_Maxbin;
}
}
for (size_t _Bin = 1; _Bin < _Maxbin; ++_Bin)
_Binlist[_Bin].merge(_Binlist[_Bin - 1]); // merge up
splice(begin(), _Binlist[_Maxbin - 1]); // result in last bin
}
}
void _Orphan_ptr(_Myt& _Cont, _Nodeptr _Ptr) const
{ // orphan iterators with specified node pointers
_Lockit _Lock(_LOCK_DEBUG);
const_iterator **_Pnext = (const_iterator **)&_Cont._Myfirstiter;
while (*_Pnext != 0)
if ((*_Pnext)->_Ptr == _Myhead
|| _Ptr != 0 && (*_Pnext)->_Ptr != _Ptr)
_Pnext = (const_iterator **)&(*_Pnext)->_Mynextiter;
else
{ // orphan the iterator
(*_Pnext)->_Mycont = 0;
*_Pnext = (const_iterator *)(*_Pnext)->_Mynextiter;
}
}
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Я ничего не писал про навыки абстрагирования, я написал именно про ООП. Тип данных — это абстракция. Если человек не знает, что такое список, а слово это у него ассоциируется только с классом list — это как раз показатель, что абстрагировать человек не умеет.
Конкретно для Java, список — это то, что имплементит List. То есть структура данных, для которой возможен упорядоченный доступ по индексу. Это практически наиболее часто используемый интерфейс. В той же википедии вроде ничего не говорится о том, что под списком подразумевается именно связанный список.
В информатике, спи́сок (англ. list) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза.
List, кстати — это не класс, а интерфейс . А вот в .Net под List, ЕМНИП как раз подразумевается связанный список. Да и в других языках тоже под списком подразумевают именно связанный список, а учитывая, что я в последнее время Lispом усиленно проникаюсь, то у меня в последнее время под списком по умолчанию вообще односвязанный понимается.
Так вот, подход, применимый в Java — вполне корректен и вполне хорошо ложится на определение списка — разве нет? Так что плохого в том, что разработчик при работе со списками привык именно работать именно с интерфейсом List? Дополнительно, на практике обращение списка будет выглядить так — Collections.reverse(list). Без всяких циклов. А где именно этот reverse находится в стандартной библиотеке, это на собеседовании не помнимс чаще всего. Хотя ладно, признаю, уделали меня, можно и через интерфейс за линейное время сделать, забыл про метод previous у итератора, никогда им не пользовался . Сейчас посмотрел — все, на полгода я мегакрутой разработчик, ибо это некоторое время буду помнить . Хотя для односвязного списка, которого в библиотеке вроде как нет, обобщенный для всех списков алгоритм не будет линейным, ибо эффективно написать итератор, бегающий назад, проблематично. Так что формально я не так уж и был неправ с квадратичными глупостями .
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Ну я бы, наверное, тоже не написал бы сходу программу для обращения списка — последний раз работал с указателями 11 лет назад. Кстати, тогда я участвовал в проекте по разработке встроенной системы реального времени на C. Однажды я у удивлением узнал, что ведущий программист нашего проекта со многими годами опыта на C совершенно не знал функций стандартной библиотеки C для чтения/записи из/в файл. Это дало мне повод усомниться в его компетенции. Но потом я понял, что никакой проблемы в этом нет. Мы работали в среде операционной системы pSOS, и у нас даже не было файловой системы. А все, что касалось нашего проекта, этот программист знал хорошо.
Кстати, полгода назад я проходил собеседование в одной компании на позицию Senior Developer, в которой мне перед собеседованием дали несколько заданий, в том числе написать на бумажке функцию реверсирования строки. Потом, после интервью, я вспомнил, что написал ее с ошибкой. Что неудивительно, поскольку последний раз писал код на бумажке лет 15 назад. Так что, меня из-за этого на работу брать нельзя ?
Re[4]: Задача на собеседовании - обращение списка.
H>>Я бы задумался. Человек 10 лет программирует, а все не научился стандарные библиотеки использовать .>Если бы я получил такое задание, я бы понял, что надо продемонстрировать алгоритмические способности, умение объяснить придуманный алгоритм собеседнику и быстро выразить в виде кода. Во многих серьёзных конторах подобные задачки и дают. Правда обычно пытаются выбрать задание, для решения которого нет стандартной функции в библиотеке. Хотя вот в Amazon мне задавали найти подстроку в строке, очевидно, что std::string.find их не интересовал.
Первое что мне сказали когда я пришел в IBM — Do not think, do ask.
Я бы сразу задал вопрос — устраивает ли решение из STL. Умные задают дополнительные вопросы — дураки сразу "понимают".
Знаменитая история. Джоел спольски любил задавать вопрос — нарисуйте дом. Вы рисуете квадратик с шапочкой, может даже окошком и дверцей. И когда закончили, Спольски говорил — да, совсем забыл. Домик-то для двуголовых жирафов. Что, размеры не те? чего не уточняли? все, до свиданья.
H>>std::reverse(list.begin(), list.end()) .>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>>>std::reverse(list.begin(), list.end()) .>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать
никто нигде не пишет реверс лист сам.
это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Да, но ты почему-то уверен что это знание выводится из умения разворачивать список на месте. G>Хотя это неверно.
Я вообще не понимаю о каких знаниях ты сейчас говоришь, если честно.
G>Это будет O(длина массива), а не O(кол-во элементов)
Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.)
G>Ну вот. Ты проверку не прошел. Код очень простой, даже проще чем разворот списков.
G>[сcode] G>i=0; G>k = arr.length(); G>assert(n <= k);
G>while(n>0) G>{ G> if(rand(k) < n) G> { G> result.push_back(arr[i]); G> n--; G> } G> i++; G> k--; G>} G>[/сcode]
Ну и в каком месте он O(кол-ва элементов)??
G>Только ты его не знаешь и склонен преувеличивать сложность задачи.
Здравствуйте, зиг, Вы писали:
зиг>никто нигде не пишет реверс лист сам. зиг>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
безапелляционность утверждений не есть признак ума
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, UA, Вы писали:
UA>Как то пишут вот так и до сих пор не запутались:
C++ — это вообще одна большая помойка, не на что там равняться. Единственное, за что уважаю плюсовиков, то что среди них действительно чуть меньше полных идиотов — помойка ошибок не прощает, чуть что — сразу граблями по лбу.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Flying Dutchman, Вы писали:
FD>Однажды я у удивлением узнал, что ведущий программист нашего проекта со многими годами опыта на C совершенно не знал функций стандартной библиотеки C для чтения/записи из/в файл. Это дало мне повод усомниться в его компетенции. Но потом я понял, что никакой проблемы в этом нет. Мы работали в среде операционной системы pSOS, и у нас даже не было файловой системы. А все, что касалось нашего проекта, этот программист знал хорошо.
Поэтому проверка справочных знаний ни о чём не говорит. Возьмёт этот ваш ведущий программист справочник и прочитает, какие функции используются для чтения/записи. Важно только то, как человек пишет код, проектирует систему (если это архитектор) и т.д. Справочные знания могут устрать еще до того, как они выдет к вам на работу.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.)
Шеф, признавай, что облажался даже покруче меня с квадратичной сложностью . Я конечно понимаю, что ты задание не понял, но пример показателен. И ведь задание вполне однозначное, никаких требований к распределению не подразумевает. Был массив 1,2,3. Нужно получить из него 10 случайных элементов — пожалуйста, 1 из вариантов — 1,3,2,2,2,2,1,3,1,1. И в чем сложность ?
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, a.v.v, Вы писали:
AVV>понял, вот это конечно более тревожный знак чем невозможность написать код
Я отношу их к второстепенным, хозяйке на заметку. Напирмер, если идентификаторы сильно безграмотные, можно что-нибудь по-английски спросить, а то вдруг он еще английского не знает.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>Первое что мне сказали когда я пришел в IBM — Do not think, do ask.
Какая должность-то?
H>Я бы сразу задал вопрос — устраивает ли решение из STL. Умные задают дополнительные вопросы — дураки сразу "понимают".
Кому что. Кому нужны кодеры, чтобы можно было дать разжеванное задание и вперёд, а кто ищет инженеров, которым дают хотелку и ожидают хоть какой-то прототип, который можно увидеть и пощупать, который легко рефакторится по ходу в законченный продукт. В общем это и есть отличие миддлов и синьоров.
H>Знаменитая история. Джоел спольски любил задавать вопрос — нарисуйте дом. Вы рисуете квадратик с шапочкой, может даже окошком и дверцей. И когда закончили, Спольски говорил — да, совсем забыл. Домик-то для двуголовых жирафов. Что, размеры не те? чего не уточняли? все, до свиданья.
Бред какой-то. Размеров на рисунке же нет, а количество голов у жирафа на форму дома не влияет. Если что, можно потом и отрефакторить, стирательную резинку в софтостроении использовать не зазорно.
H>>>std::reverse(list.begin(), list.end()) .>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит. H>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать
Так оно находится не мыслительным процессом, а 2-х минутным гугленьем. Какой смысл такого вопроса на интервью? Я вот сходу не скажу есть ли стандартная функция реверса, например, в javascript и не помню наизусть хедер <algorithm>, хотя несколько лет С++ опыта есть.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Соврать, знамо дело. "У Вас отличное резюме, я уж для порядка Вам простенькое дам, иначе HR меня заругает". Не сделал — пять минут о погоде и великом и прощаться. Только не критиковать и не учить, как делать правильно — собеседование не для этого. Сделал — можно и признаться, что обманули человека и отсеиваете идиотов И собеседовать дальше.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, Flying Dutchman, Вы писали:
FD>>Однажды я у удивлением узнал, что ведущий программист нашего проекта со многими годами опыта на C совершенно не знал функций стандартной библиотеки C для чтения/записи из/в файл. Это дало мне повод усомниться в его компетенции. Но потом я понял, что никакой проблемы в этом нет. Мы работали в среде операционной системы pSOS, и у нас даже не было файловой системы. А все, что касалось нашего проекта, этот программист знал хорошо.
ПМ>Поэтому проверка справочных знаний ни о чём не говорит. Возьмёт этот ваш ведущий программист справочник и прочитает, какие функции используются для чтения/записи. Важно только то, как человек пишет код, проектирует систему (если это архитектор) и т.д. Справочные знания могут устрать еще до того, как они выдет к вам на работу.
Конечно, я с этим полностью согласен. Просто тогда я был несколько моложе и не настолько мудр, как сейчас
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.) E>Шеф, признавай, что облажался даже покруче меня с квадратичной сложностью . Я конечно понимаю, что ты задание не понял, но пример показателен. И ведь задание вполне однозначное, никаких требований к распределению не подразумевает. Был массив 1,2,3. Нужно получить из него 10 случайных элементов — пожалуйста, 1 из вариантов — 1,3,2,2,2,2,1,3,1,1. И в чем сложность ?
Скорее всего задача именно та, какую я пытаюсь решить. И gandjustas тоже пытается что-то подобное сделать.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Да, но ты почему-то уверен что это знание выводится из умения разворачивать список на месте. G>>Хотя это неверно.
ПМ>Я вообще не понимаю о каких знаниях ты сейчас говоришь, если честно.
G>>Это будет O(длина массива), а не O(кол-во элементов)
ПМ>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.)
ПМ>Ну и в каком месте он O(кол-ва элементов)??
Давай ты просто в википедии найдешь этот алгоритм. Его толи Кнут, толи Дейкстра описывал.
G>>Только ты его не знаешь и склонен преувеличивать сложность задачи.
ПМ>Опять телепатия. Где я что преувеличивал? Я написал, что не знаю, что это за задача, и что у LCS сложность больше O(n). (http://en.wikipedia.org/wiki/Longest_common_subsequence_problem)
А причем тут LCS я вообще не о ней. Я о других задачах, которые ты случайно не знаешь. Ты решение за 5 минут не написал, несмотря на то что оно очень простое и ты скорее всего его видел. Оно минимум в паре известных книг по программированию фигурирует.
Ты же суть поста моего уже понять должен был:
1) Простой код != простой алгоритм.
1) Не всегда простой код может написать человек, который его не писал за последние полгода.
3) Нет смысла на собеседовании спрашивать написание такого простого кода, так как оно совершенно непоказательно.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, a.v.v, Вы писали:
AVV>Здравствуйте, зиг, Вы писали:
зиг>>никто нигде не пишет реверс лист сам. зиг>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
AVV>безапелляционность утверждений не есть признак ума
ваше утверждение безапелляционно!
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>Ну да. Еще можно случайно выбирать элемент в диапазоне 0 — l ( := length — 1), обменивать его с крайним элементом массива l = l — 1, повторить. Тогда будет от O от кол-ва элементов, но исходный массив испортится. Вообще, для решения этой задачи надо задать больше уточняющих вопросов (например, что значит "случайных", какие требования к распределению и т.п.) E>Шеф, признавай, что облажался даже покруче меня с квадратичной сложностью . Я конечно понимаю, что ты задание не понял, но пример показателен. И ведь задание вполне однозначное, никаких требований к распределению не подразумевает. Был массив 1,2,3. Нужно получить из него 10 случайных элементов — пожалуйста, 1 из вариантов — 1,3,2,2,2,2,1,3,1,1. И в чем сложность ?
Не, задача как раз не такая. например ряд чисел от 1 до 10, а нужно 3 (N) случайных выбрать. Естественно выбранные элементы массива должны быть разными.
Но суть не в этом, а как раз в том что товарищ Морозов не узнал "в лицо" классическую задачу, обсосанную всеми кому не лень, кроме Джоэла.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, зиг, Вы писали:
зиг>Здравствуйте, Handie, Вы писали:
H>>>>std::reverse(list.begin(), list.end()) .>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать зиг>никто нигде не пишет реверс лист сам. зиг>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
А зачем если в итоге такое все равно не пишут?
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Давай ты просто в википедии найдешь этот алгоритм. Его толи Кнут, толи Дейкстра описывал.
Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций. И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку?
G>Ты решение за 5 минут не написал, несмотря на то что оно очень простое и ты скорее всего его видел. Оно минимум в паре известных книг по программированию фигурирует.
Извини был занят, проверял, умеет ли очередной соискатель обращать списки.
G>Ты же суть поста моего уже понять должен был: G>1) Простой код != простой алгоритм.
Согласен. Поэтому спрашиваю именно простой алгоритм.
G>3) Нет смысла на собеседовании спрашивать написание такого простого кода, так как оно совершенно непоказательно.
Очень даже показательно. Есть те, кто могут и те, кто нет. Те, кто не могут даже из интеренета алгоритмы неправильно переписывают, или делают неверные утверждения относительно их характеристик.
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Не, задача как раз не такая. например ряд чисел от 1 до 10, а нужно 3 (N) случайных выбрать. Естественно выбранные элементы массива должны быть разными.
Оххх, господи, совсем уж склероз. У тебя неотформатировано, и я i как k прочитал . А сходу б не подумал, что такое можно таким малым количеством кода сделать настолько изящно. Хотя решение в этюдах черти сколько лет назад вроде видел, задача действительно известная.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>А как? Домашние задания? Не хотят.
Т. е. они не готовы потратить 2 часа, чтобы попробовать себя, понять чем придется примерно заниматься, создать повод для обсуждения, а хотят сразу подвергуться допросу? Не верю. Может проблема в самом ТЗ или в неправильной его подаче? Коряво сформулированное ТЗ и отсутствие ответа на вопрос — зачем оно, тоже странный ход со стороны работодателя. Было тут у кого-то задание: написать веб сервер. Ниче так заданьице, да?
ПМ>Жесткий отсев по резюме? ПМ>Во-первых писать их толком не умеют, во-вторых аббривеатур себе навписывать много ума не надо. Давать компьютер и закрывать в комнате на 3 часа, пока не напишет сапёр — издевательство. Небольшая задача, которую можно сделать прямо на собеседовании вместе с кандидатом — самый гуманный вариант ИМХО.
А ты всерьез ожидаешь от людей, которые даже не могут написать резюме, каких-то фундаментальных знаний?
А>>Знакомо до боли, не правда ли?
ПМ>Нет, у меня никогда такого не было.
Ну, значит у меня просто плохая карма.
ПМ>Да, и первый пост в теме как раз об этом, не правда ли? (заметьте, в моём случае кандидату не понадобилось тратить два часа на выполнение тестового задания)
Ему не пришлось, зато тебе пришлось. Насколько я понял, проблема как раз в твоем времени, а не во времени кандидата. Если на интервью попадают 9 из 10 тех кого надо отсеять, тут ведь явно что-то не так? У меня кстати вот тоже такого никогда не было.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Ахмед, Вы писали:
А>Т. е. они не готовы потратить 2 часа, чтобы попробовать себя, понять чем придется примерно заниматься, создать повод для обсуждения, а хотят сразу подвергуться допросу?
Показать им чем именно они будут заниматься можно только на рабочем месте, людей ведь в проект берут а не на пустое место. Всё остальное — будет лишь каким-либо приближением, "близость" которого можно оценить весьма условно.
А>Может проблема в самом ТЗ или в неправильной его подаче? Коряво сформулированное ТЗ и отсутствие ответа на вопрос — зачем оно, тоже странный ход со стороны работодателя.
Опять же т.з. Уточнения будут при любом т.з.: за примером далеко ходить не надо — в сосденей ветке выяснилось, что задачу "выбрать N элементов из массива случайным образом" люди понимают поразному. Когда речь идёт о тестовом задании, возможности уточнять задание как правило нет. И еще эта схема не работает, когда отдел HR сам ищет сотрудников. Звонок от HR и фраза: "мы посмотрели ваше резюме, оно нам понравилось, напишите-ка нам тестовое задание" — немного странно будет звучать.
А>Было тут у кого-то задание: написать веб сервер. Ниче так заданьице, да?
И лично мне совершенно не понятно, что плохого в этом задании? А каким должно быть нормальное? Чем написание веб-сервера хуже написания какой-нибудь записной книжки на джаве, или еще что-нибудь в этом роде?
А>А ты всерьез ожидаешь от людей, которые даже не могут написать резюме, каких-то фундаментальных знаний?
Да. Моё резюме выглядит ничуть не лучше, чем резюме людей, которых приходится собеседовать. При этом необходимый минимум знаний у меня есть.
А>Ему не пришлось, зато тебе пришлось. Насколько я понял, проблема как раз в твоем времени, а не во времени кандидата. Если на интервью попадают 9 из 10 тех кого надо отсеять, тут ведь явно что-то не так?
Ну да, согласен. Было бы интересно узнать хорошие методики. Таки тестовые задания? И как тогда осуществлять активный поиск с использованием тестовых заданий?
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
H>>>>>std::reverse(list.begin(), list.end()) .>>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать зиг>>никто нигде не пишет реверс лист сам. зиг>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
G>А зачем если в итоге такое все равно не пишут?
чтобы проверить способность писать аналогичное. работа не состоит из набора простых шагов, часто бывает что нужно что-то нестандартное или нетривиальное сделать.
с тем же успехом можно было дать реальную задачу из жизни, но тогда пришлось бы потратить кучу времени на объяснение деталей предметной области, все это ни к чему — лучше давать такие абстрактные задачи, требующие минимум вводных данных, показывающие возможность кандидата думать и быстро писать хороший код
Здравствуйте, minorlogic, Вы писали:
M>Потому что ваши HR работают ОЧЕНЬ плохо ?
А что должен сделать HR? Они присылают нам резюме, мы смотрим, там всё прекрасно: опыт работы (правда не в гуле/яндексе, но всё равно); весьма часто — неплохое образование; внушительный список технологий. Начинаем спрашивать, выясняется, что на техническом уровне дофига пробелов. Плюем на технику, начинаем спрашивать "а как вы думаете?" "а если бы надо было сделать такое, то как бы вы сделали?" — выясняется, что и фундаментальных знаниях пробелы (или просто человек не соображает) и решение из рук вон плохое.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать. G>А если человек не делает что-то постоянно, то просто теряется навык.
А что — практическая задача? Навернуть экран linq-гуана, который автор без супер-мега-профайлера оптимизировать вообще отказывается, в качестве подтверждения корректности предлагает два с половиной юнит-теста, которые не покрывают даже всех 5 особых ситуаций, зато с понтом используют NMock c динамикой — это практическая задача? А аккуратно подвигать итератором — не практическая? Кажется, я понимаю, почему топик-стартер держится от таких "практиков", валящихся на детских задачках, по возможности подальше... Я б тоже держался подальше
Забанен с формулировкой "клинический дисидент".
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Давай ты просто в википедии найдешь этот алгоритм. Его толи Кнут, толи Дейкстра описывал.
ПМ>Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций.
Может ошибся в о\О нотации. Алгоритм проверил по работающей программе.
ПМ>И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку?
Действительно нету. Ведь ты умудряешься спрашивать на собеседовании один алгоритм, а сам другие, довольно известные, не знаешь и вывести не можешь.
G>>Ты же суть поста моего уже понять должен был: G>>1) Простой код != простой алгоритм. ПМ>Согласен. Поэтому спрашиваю именно простой алгоритм.
Обращение списка — простой код, алгоритм довольно сложен. Я тут в соседней ветке писал выкладки от начала и до конца, они требуют много знаний.
Без них можно только запомнить алгоритм, но не вывести его.
Ты кстати и сам писал что сначала не мог его сходу написать, а потом, натренировавшись на собеседованиях, запомнил (но не понял).
G>>3) Нет смысла на собеседовании спрашивать написание такого простого кода, так как оно совершенно непоказательно.
ПМ>Очень даже показательно. Есть те, кто могут и те, кто нет.
Ты — не можешь. О чем это говорит?
Здравствуйте, зиг, Вы писали:
зиг>Здравствуйте, gandjustas, Вы писали:
H>>>>>>std::reverse(list.begin(), list.end()) .>>>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>>>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать зиг>>>никто нигде не пишет реверс лист сам. зиг>>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
G>>А зачем если в итоге такое все равно не пишут? зиг>чтобы проверить способность писать аналогичное.
Тебе приходится часто на работе писать "аналогичное"? Тогда скорее всего ты чем-то не тем занимаешься.
зиг>работа не состоит из набора простых шагов, часто бывает что нужно что-то нестандартное или нетривиальное сделать.
Именно что состоит. Причем большинство этих шагов уже есть в готовых либах и надо уметь склеить кучу готовых кусочков в таком порядке чтобы получить правильный результат.
Работа программиста уже лет 40 как чисто инженерная деятельность, научной и исследовательской работы в мейнстримовом программировании почти нет.
зиг>с тем же успехом можно было дать реальную задачу из жизни, но тогда пришлось бы потратить кучу времени на объяснение деталей предметной области, все это ни к чему — лучше давать такие абстрактные задачи, требующие минимум вводных данных, показывающие возможность кандидата думать и быстро писать хороший код
Нахрен никому предметная область не нужна. Как говорил Фейнман: Если вы — ученый ядерный физик и не можете за 5 минут объяснить ребенку чем занимаетесь — вы шарлатан.
Как почитаешь форум — у всех супер-мега уникальные проекты, а на деле еще надо поискать чем принципиально две программы друг от друга отличаются.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать. G>>А если человек не делает что-то постоянно, то просто теряется навык.
b-3>А что — практическая задача? Навернуть экран linq-гуана, который автор без супер-мега-профайлера оптимизировать вообще отказывается, в качестве подтверждения корректности предлагает два с половиной юнит-теста, которые не покрывают даже всех 5 особых ситуаций, зато с понтом используют NMock c динамикой — это практическая задача? А аккуратно подвигать итератором — не практическая? Кажется, я понимаю, почему топик-стартер держится от таких "практиков", валящихся на детских задачках, по возможности подальше... Я б тоже держался подальше
Да ты не переживай, топистартер тупо решил "блеснуть эрудицией", занимается он таким де linq-гуаном, как и 100500 других программистов.
И ты кстати тоже таким занимаешься, может в другой форме, но суть не меняется.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, msk78, Вы писали:
M>>Здравствуйте, Vzhyk, Вы писали:
V>>>24.02.2012 15:38, Паблик Морозов пишет:
>>>> кандидатов на публичных сайтах вакансий не ищем. V>>>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и V>>>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует V>>>слать резюме. M>>Могу дать ответ на этот вопрос M>>Компания BrightConsult.
G>Там же CRM в основном. Причем тут разворот списков? Кто-то решил повыделываться?
Как говорил Фоменко, чем бы дитя не тешилось, лишь бы не руками.
Судя по изначальному сообщению ветки про БрайтКонсалт, там сначала давали тесты на IQ: http://rsdn.ru/forum/job/4260056.aspx
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, зиг, Вы писали:
зиг>>Здравствуйте, gandjustas, Вы писали:
H>>>>>>>std::reverse(list.begin(), list.end()) .>>>>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.
H>>>>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать зиг>>>>никто нигде не пишет реверс лист сам. зиг>>>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
G>>>А зачем если в итоге такое все равно не пишут? зиг>>чтобы проверить способность писать аналогичное. G>Тебе приходится часто на работе писать "аналогичное"? Тогда скорее всего ты чем-то не тем занимаешься.
да уж конечно. все занимаются чем-то не тем, и только один чувак все про всех знает чем им надо заниматься на работе.
зиг>>работа не состоит из набора простых шагов, часто бывает что нужно что-то нестандартное или нетривиальное сделать. G>Именно что состоит. Причем большинство этих шагов уже есть в готовых либах и надо уметь склеить кучу готовых кусочков в таком порядке чтобы получить правильный результат. G>Работа программиста уже лет 40 как чисто инженерная деятельность, научной и исследовательской работы в мейнстримовом программировании почти нет.
бугага. т.е. реверс списка это научная и исследовательская работа, поняли, так и запишем
зиг>>с тем же успехом можно было дать реальную задачу из жизни, но тогда пришлось бы потратить кучу времени на объяснение деталей предметной области, все это ни к чему — лучше давать такие абстрактные задачи, требующие минимум вводных данных, показывающие возможность кандидата думать и быстро писать хороший код G>Нахрен никому предметная область не нужна. Как говорил Фейнман: Если вы — ученый ядерный физик и не можете за 5 минут объяснить ребенку чем занимаетесь — вы шарлатан. G>Как почитаешь форум — у всех супер-мега уникальные проекты, а на деле еще надо поискать чем принципиально две программы друг от друга отличаются.
жду с нетерпением краткого описания _реальной_ задачи, чтоб все мгновенно было понятно что и как надо сделать, и чтобы у меня не возникало тысячи попутных вопросов по ходу дела (мы же на интервью? у нас только 5 минут, не забываем.).
Re[3]: Задача на собеседовании - обращение списка.
Паблик Морозов, а озвучьте плз бюджет.
"вроде конкурентноспособная" это мало о чем говорит.
Для некоторых и 40-50 тыс. для Москвы конкурентноспособная.
А вдруг после этого всё станет на свои места? (в плане понимания чего-то в этой жизни)
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
ПМ>Может быть я что-то не понимаю в этой жизни? <skipped>
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
ПМ>>Если подумать, может что получше напишу. Кстати, есть подозрение, что это сложнее обращения списка. G>Ну вот. Ты проверку не прошел. Код очень простой, даже проще чем разворот списков.
Это не "очень простой" код, это обычный говнокод, поскольку скопипащено правильно, да не под ту задачу... По каждому элементу массива (i++) вызывается rand(k), до тех пор, пока n элементов не будут найдены. Количество вызовов rand(k) таким образом в точности равно номеру последнего выбранного элемента, что есть O(числа элементов массива). И камлания именем кнута да дейкстры как-то не отменяют факт, что ты в своём стиле, как обычно, пафосно облажался.
Спрашивается, а зачем писать фигню на хаскеле, если в цикле while(n > 0) { if (..) { push_back(arr[i] }; i++ }, где матожидание числа циклов, после которых n==0, при фиксированном n — пропорционально arr.length() — доблесный хаскелист не видит эквивалентости с линейным поиском элемента массива? Ну, в смысле о-больших?
Стыд и позор
Забанен с формулировкой "клинический дисидент".
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>C++ — это вообще одна большая помойка, не на что там равняться. Единственное, за что уважаю плюсовиков, то что среди них действительно чуть меньше полных идиотов — помойка ошибок не прощает, чуть что — сразу граблями по лбу.
Пока что этой помойке по эффективности и гибкости нет равных.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, зиг, Вы писали:
зиг>>>никто нигде не пишет реверс лист сам. зиг>>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.
AVV>>безапелляционность утверждений не есть признак ума
зиг>ваше утверждение безапелляционно!
эй вы там, у вас флешмоб сегодня чтоб мне рейтинг что ли повысить?
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
L>>Ты можешь ответить на простой вопрос "зачем для разворота списка нужна рекурсия"? G>Я тут в соседнем посте писал:
Какой-то совершенно новый для меня синтаксист java/C#-а.
G>Это наивное определение. И самое интересное что можно попробовать написать реализацию разворота списка на месте таким образом, но это будет крайне сложный код.
L>>Не нужно уходить в высокии материи и пытаться на основе того, что список пожет быть реализован как рекурсивная структура данных, делать вывод, что это неотъемлемое свойство списка. G>А оно так и есть, даже если ты этого не знаешь.
Нет, это не так.
G>А вот как вывести нужный вариант:
G>Для начала попробуем определить разворот списка через другую, "родную" для списков операцию — свертку.
G>Но функции fold в C нету и надо написать. Обобщенный fold писать смысла нет, можно сразу написать (fold f)
G>Теперь можно и в C попробовать написать такой хелпер для С (пишу прямо в форуме не проверяя)
G>Далее видна хвостовая рекурсия в reverseHelper, её можно преобразовать в цикл. G>Для этого условие выхода обращаем и делаем условием цикла, а вместо возврата делаем переход к следующей итерации
G>Далее убираем лишнюю косвенность из reverse
А теперь после всего написаного поднимаемся на пару-тройку сообщений вверх и с удивлением обнаруиваем, что ни haskell, ни C не обсуждается.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>За 20 лет ни разу не понадобилось писать оное самому. Всегда была в V>наличии функция sort.
Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому...
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
ПМ>>Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций. G>Может ошибся в о\О нотации. Алгоритм проверил по работающей программе.
Нет, просто не умеешь оценивать сложность алгоритмов.
ПМ>>И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку? G>Действительно нету. Ведь ты умудряешься спрашивать на собеседовании один алгоритм, а сам другие, довольно известные, не знаешь и вывести не можешь.
Я привёл два варианта: O от длинны массива без разрушения массива, и O от кол-ва элементнов с разрушением. Ты привел O от длинны массива с O от кол-ва элементнов по памяти, т.е. не на много лучше моего первого варианта (хотя лучше, не спорю). При этом еще смог четко обозначить вычислительные сложности, и, подозреваю, не сможешь показать, что в твоём алгоритме вероятность выбора элемента не зависит от его позиции в массиве (хотя не зависит). По-моему это говорит только о том, что написание такого алгоритма требует чуть больше познаний в теории вероятностей и выч. сложности, чем написание обращения списка. Но утверждение о том, что человек, не способный написать обращение списка, вообще ни на что нихрена не способен — это не опровергает.
G>Ты кстати и сам писал что сначала не мог его сходу написать, а потом, натренировавшись на собеседованиях, запомнил (но не понял).
Я такого не писал.
ПМ>>Очень даже показательно. Есть те, кто могут и те, кто нет. G>Ты — не можешь. О чем это говорит?
Неверная начальная посылка.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
M>Я бы мог проконсультировать ваших HR за большие деньги. Но вам рекомендую поменять HR
Давайте обсудим это. Расскажите о своём успешном опыте в области консалтинговой деятельности, о компаниях, где вы смогли улучшить процесс найма сотрудников, о методиках оценки эффективности, во что это вылилось. Думаю, я мог бы договориться о небольшой презентации для менеджмента компании, если Вам действительно есть что сказать.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, minorlogic, Вы писали:
M>>Я бы мог проконсультировать ваших HR за большие деньги. Но вам рекомендую поменять HR
ПМ>Давайте обсудим это. Расскажите о своём успешном опыте в области консалтинговой деятельности, о компаниях, где вы смогли улучшить процесс найма сотрудников, о методиках оценки эффективности, во что это вылилось. Думаю, я мог бы договориться о небольшой презентации для менеджмента компании, если Вам действительно есть что сказать.
За большую плату я дам вам контакты квалифицированных HR, за ОЧЕНЬ большую плату переведу с ними переговоры о консалтинговых услугах.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
BBI>Здравствуйте, UA, Вы писали:
UA>>Как то пишут вот так и до сих пор не запутались: BBI>У STL один из самых хреновых стилей которые я когда либо видел.
Как у стл может быть стиль, если у каждого своя реализация? Или ты никакой кроме Динкумварэ не видел?
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, antonio_banderas, Вы писали:
_>Паблик Морозов, а озвучьте плз бюджет. _>"вроде конкурентноспособная" это мало о чем говорит. _>Для некоторых и 40-50 тыс. для Москвы конкурентноспособная. _>А вдруг после этого всё станет на свои места? (в плане понимания чего-то в этой жизни)
Ну, допустим, от 100т.р. на руки.
Re[2]: Задача на собеседовании - обращение списка.
Во-первых хватит писать сюда ответы, я еще надеялся поиспользовать эту задачу, во-вторых не заработает на списке из одного элемента. Правильный вариант у Stanislav V. Zudin, если интересно.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, UA, Вы писали:
UA>>Пока что этой помойке по эффективности и гибкости нет равных.
ПМ>Тренды на TIOBE говорят об обратном.
Этот индекс не определяет эффективность приложений построенных c помощью языка или гибкость самого языка.
The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system.
Я бы поставил на первое место SQL уж очень много проектов где он используется и будет использоваться.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
M>За большую плату я дам вам контакты квалифицированных HR, за ОЧЕНЬ большую плату переведу с ними переговоры о консалтинговых услугах.
Хорошо, там и передам CEO, что некий minorlogic с интеренет-форума большую плату бла-бла-бла. Мы вам перезвоним.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, UA, Вы писали:
UA>Этот индекс не определяет эффективность приложений построенных c помощью языка или гибкость самого языка.
Ну хорошо, покажите индекс, который определяет эффективность приложений (интересно, что это за бред такой? отношение доходов от продаж к стоимости разработки что-ли) и гибкость языка (интересно какое место С++ лучше гнётся и в какую сторону?)
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, UA, Вы писали:
UA>>Этот индекс не определяет эффективность приложений построенных c помощью языка или гибкость самого языка.
ПМ>Ну хорошо, покажите индекс, который определяет эффективность приложений (интересно, что это за бред такой? отношение доходов от продаж к стоимости разработки что-ли) и гибкость языка (интересно какое место С++ лучше гнётся и в какую сторону?)
Как бэ странно слышать такие вопросы от тролячеловека, который проводит собеседования с переварачиванием списка. Какой индекс? О чем вы? это познается еще в школе — учите матчасть.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Miroff, Вы писали:
M>Для Java это слишком низкоуровневая задача.
Для плюсов тоже, ни разу не писал такого на плюсах. Так же как и сортировки собственные не изобретал. Все есть в STL. Разворот однонаправленного списка писал один раз в жизни — на собеседовании. Пишется легко, без тренировок, это же вообще, как 2+2, все равно что в столбик не уметь складывать (именно складывать а не умножать или делить )
M>Я даже не помню когда последний раз на Java банальный for с обращением по индексу писал, точно больше года назад. Обычно или foreach, или итераторы во все поля.
Ты это, не путай C и C++, в плюсах тоже никто и ничего не изобретает, ибо все уже есть.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
UA>>Пока что этой помойке по эффективности и гибкости нет равных. ПМ>Тренды на TIOBE говорят об обратном.
А ты в курсе о чём эти тренды вообще?
The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings.
...TIOBE index is not about the best programming language or the language in which most lines of code have been written
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, о_О, Вы писали:
UA>>>Как то пишут вот так и до сих пор не запутались: BBI>>У STL один из самых хреновых стилей которые я когда либо видел.
о_О>Как у стл может быть стиль, если у каждого своя реализация? Или ты никакой кроме Динкумварэ не видел?
пардон, мне следовало бы уточнить что я про те, что идут с MSVC. Я почему то подумал что из куска кода, на который я отвечал это будет и так очевидно.
Начиная с VC6 и заканчивая VC2010 — стиль оформления кода страшноватый.
В VC2010 и VS11 DP STL кстати динкумваревский.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Меня однажды спросили про то, как интеграл численно считается. Выяснилось, что процентов 80 соискателей не в состоянии ответить на вопрос из школьной программы.
Большая часть людей забывает вычмат сразу после здачи, ибо нафиг не нужен (в болшинстве случаев).
это не школьная программа
Всё сказанное выше — личное мнение, если не указано обратное.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
а в моём универе вычмат начался на третьем курсе.
сразу после матана
Всё сказанное выше — личное мнение, если не указано обратное.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Ну хорошо, покажите индекс, который определяет эффективность приложений
Такого индекса не существует.
ПМ>и гибкость языка
Такого индекса тоже не существует.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Разумное не сможет, таскать контролы на форму за копейки — да. Если тебе нужна бибизянка, как раз выгодно брать тупых: они будут сидеть на одной з.п. до посинения.
ПМ>2. Если сраз нафиг, то как грамотно построить интервью
Рассказ о себе(проверяем умение связно говорить), собеседование по языку и логике.
Если ответить не может, бай — бай.
ПМ>З.Ы. На прошлой работе HR
Тут прокол: хрюша не может собеседовать, просто не может, по определению!
Re[8]: Задача на собеседовании - обращение списка.
L>var sb = new SringBuilder(s.Length);
L>for (int i = s.Length-1; i >=0; i--)
L>{
L> sb.Append(s[i]);
L>}
L>return sb.ToString();
L>
мне аналогичную задачу пришлось решать вчера в реальном проекте на VB6
на строках в 4-7mb на VB6 работает Очень медленно подозреваю что на c# не быстрей
вообще конечная задача была находить позицию последнего вхождение заданной подстроки в строке (решение я нашел с нескольких минут стало выполняться за доли секунды)
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
ПМ>>>Если подумать, может что получше напишу. Кстати, есть подозрение, что это сложнее обращения списка. G>>Ну вот. Ты проверку не прошел. Код очень простой, даже проще чем разворот списков.
b-3>Это не "очень простой" код, это обычный говнокод, поскольку скопипащено правильно, да не под ту задачу...
В смысле "не под ту"? ты о чем вообще?
b-3>По каждому элементу массива (i++) вызывается rand(k), до тех пор, пока n элементов не будут найдены. Количество вызовов rand(k) таким образом в точности равно номеру последнего выбранного элемента, что есть O(числа элементов массива).
Я говорил про o(n), может напутал o и O, я их часто путаю.
b-3>И камлания именем кнута да дейкстры как-то не отменяют факт, что ты в своём стиле, как обычно, пафосно облажался.
Какие громкие слова, "говнокод", "облажался". Давай ченить для начала напишешь, потом будешь умничать.
Нерешенной осталась задача о максимальной подпоследовательности в один проход. Дерзай.
Re[16]: Задача на собеседовании - обращение списка.
L>Какой-то совершенно новый для меня синтаксист java/C#-а.
Тем не менее ты все понял.
G>>Это наивное определение. И самое интересное что можно попробовать написать реализацию разворота списка на месте таким образом, но это будет крайне сложный код. L>>>Не нужно уходить в высокии материи и пытаться на основе того, что список пожет быть реализован как рекурсивная структура данных, делать вывод, что это неотъемлемое свойство списка. G>>А оно так и есть, даже если ты этого не знаешь. L>Нет, это не так.
Докажи.
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
ПМ>>>Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций. G>>Может ошибся в о\О нотации. Алгоритм проверил по работающей программе.
ПМ>Нет, просто не умеешь оценивать сложность алгоритмов.
Ну я хотя бы умею их писать.
ПМ>>>И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку? G>>Действительно нету. Ведь ты умудряешься спрашивать на собеседовании один алгоритм, а сам другие, довольно известные, не знаешь и вывести не можешь.
ПМ>По-моему это говорит только о том, что написание такого алгоритма требует чуть больше познаний в теории вероятностей и выч. сложности, чем написание обращения списка.
Обращение списка требует больше познаний в рекурсивных структурах данных. Тебе так не кажется, потому что ты много раз написал это обращение.
ПМ>Но утверждение о том, что человек, не способный написать обращение списка, вообще ни на что нихрена не способен — это не опровергает.
Ты такой же простой код написать не смог, как не сможешь еще десяток "классческих" алгоритмов реализовать. Ты ни на что не способен?
Давай попытка номер два: есть последовательность чисел (массив или список — неважно), нужно найти сумму максимальной подпоследовательности. То есть множество подряд стоящих элементов, сумма которых максимальна.
ПМ>>>Очень даже показательно. Есть те, кто могут и те, кто нет. G>>Ты — не можешь. О чем это говорит? ПМ>Неверная начальная посылка.
Имеено, начальная посылка в том что человек не знающий <любой классический алгоритм> ни на что не способен.
Вот я и показываю что большинство присутствующих здесь что-нить да не знает.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, Vzhyk, Вы писали:
V>>За 20 лет ни разу не понадобилось писать оное самому. Всегда была в V>>наличии функция sort.
M>Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому...
.Where(<критерий>).Take(1000)
И linq-гуано (с) рвет в какашки любые поделки по выразительности.
Re[8]: Задача на собеседовании - обращение списка.
L>var sb = new SringBuilder(s.Length);
L>for (int i = s.Length-1; i >=0; i--)
L>{
L> sb.Append(s[i]);
L>}
L>return sb.ToString();
L>
Ага. А если бы подобный алгоритм написал на плюсах, то обвинили бы в перерасходе памяти.
Так что таки "конкретные особенности системы типов и рантайма"
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Mystic, Вы писали:
M>>Здравствуйте, Vzhyk, Вы писали:
V>>>За 20 лет ни разу не понадобилось писать оное самому. Всегда была в V>>>наличии функция sort.
M>>Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому...
G>.Where(<критерий>).Take(1000)
G>И linq-гуано (с) рвет в какашки любые поделки по выразительности.
Увы, на С# я просто не умею писать высокопроизводительный код.
Re[7]: Задача на собеседовании - обращение списка.
В школе объясняют(ли) "физический смысл" интеграла как площади "под графиком функции", для соискателя помнящего школьную программу этого могло бы хватить даже если он забыл/никогда не изучал вычмат.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, Mystic, Вы писали:
M>>>Здравствуйте, Vzhyk, Вы писали:
V>>>>За 20 лет ни разу не понадобилось писать оное самому. Всегда была в V>>>>наличии функция sort.
M>>>Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому...
G>>.Where(<критерий>).Take(1000)
G>>И linq-гуано (с) рвет в какашки любые поделки по выразительности.
M>Увы, на С# я просто не умею писать высокопроизводительный код.
Это легко. Вот ты говоришь что у тебя есть массив из 10000000 элементов. Но ведь эти элементы не из воздуха появились.
Если они из БД, то .Where(<критерий>).Take(1000) прекрасно сработает, только еще orderby надо добавить. Если в БД есть подходящие индексы, то это даст охренительный прирос производительности, больше чем любое вылизывание кода.
Другой вариант: данные попадают из источника, который не поддерживает индексы. Тем не менее при таком объеме данные не будут получены все сразу, скорее всего они будут приходить порциями. Так вот преобразовывая порции в поток (IObservable) объектов используя тоже самое linq выражение просто отпадет необходимость считывать все и ответ получишь как только необходимый объем данных будет получен.
Если же данные генерируются или достаются из внешнего источника синхронно (pull), то необходимо для них сделать ленивую последовательность (с помощью yield), которую обрабатывать тем же выражением что выше.
При любом раскладе сокращение затрат на считывание\генерацию ненужных элементов будет в во много раз больше, чем любое вылизывание кода.
Re[16]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
ПМ>>Нет, просто не умеешь оценивать сложность алгоритмов. G>Ну я хотя бы умею их писать.
Умеешь писать те, которые уже есть в либе что ли?
А писать код, который потом не можешь протестировать (или оценить, как в нашем случае), это такая MVP-шная метода разработки?
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
ПМ>>>Нет, просто не умеешь оценивать сложность алгоритмов. G>>Ну я хотя бы умею их писать. b-3>Умеешь писать те, которые уже есть в либе что ли?
В либе чего?
b-3>А писать код, который потом не можешь протестировать (или оценить, как в нашем случае), это такая MVP-шная метода разработки?
Протестировать? Оценить? Ты о чем? Причем тут MVP?
Ты что-то несвязное говоришь вообще.
Re[16]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Вот я и показываю что большинство присутствующих здесь что-нить да не знает.
Я уже 20 раз написал, что мне не нужны знания, мне нужно умение решать задачи. Если я вижу, что человек знает алгоритм, я даже не останавливаюсь на решении, а сразу даю другую задачу.
Re[10]: Задача на собеседовании - обращение списка.
Ну вот, после всех заявлений и хамства "Вы сами ничего не умеете, а хотите, чтобы целый MVP вам двигал указатели на собеседовании !!", я взял да написал поиск максимальной подпоследовательности в один проход.
Время 25 мин, в студии, без всякого гугления (доказывай обратное), без предварительных построений на хаскел, с использованием динамического программирования и мозга.
На нечитаемый map + fold или темплейт ты это сам перепишешь
Что здесь недоступного программисту с 4 годами опыта?
Можно предположить, что в если это очередной вопрос из списка элементарнейших, а соискатель имеет серьезный опыт в разработке, то это больше похоже на банальное нежелание выполнять этот тест. Иногда проще сказать 'Не знаю', в противном случае придется долго и нудно объяснять, а собеседующие начнут уговаривать сделать. А в сознании уже вырисовывается тип задач, которые планируются для выполнения на этой позиции. Ну что могут поручить сотруднику, о котором знают, что он умеет решать студенческие задачки? А может, это попытка продавить по зарплате, поставив на один уровень со студентами? В любом случае — обидно.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
M>>Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому... G>.Where(<критерий>).Take(1000) G>И linq-гуано (с) рвет в какашки любые поделки по выразительности.
Тут больше похоже на то, что ему нужно было 1000 минимальных элементов.
Ибо иначе нормальный человек про сортировку бы не заикнулся.
И твой код эту задачу не решает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, namespace, Вы писали:
N>Можно предположить, что в если это очередной вопрос из списка элементарнейших, а соискатель имеет серьезный опыт в разработке, то это больше похоже на банальное нежелание выполнять этот тест. Ну что могут поручить сотруднику, о котором знают, что он умеет решать студенческие задачки? А может, это попытка продавить по зарплате, поставив на один уровень со студентами?
Ну, это обосновано, но это ж должно быть сразу заметно.
Есть программисты, которые умеют писать код. А есть программисты, которые умеют не писать код.
В целом вторые более оплачиваемые, ведь как сказал классик: лучшая программа — это та, которую обоснованно удалось не писать вообще.
Проблема только в том, что когда в расчёте на второй вариант П. Морозов спросит не "напишите код", а к примеру "предположите, каким образом может быть устроен протокол RPC в WCF?", то собеседуемый всё равно прибежит на RSDN с жалобами, типа "меня завалили тупым вопросом про скрытые детали реализации"
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
b-3>Ну вот, после всех заявлений и хамства "Вы сами ничего не умеете, а хотите, чтобы целый MVP вам двигал указатели на собеседовании !!", я взял да написал поиск максимальной подпоследовательности в один проход.
b-3>Время 25 мин, в студии, без всякого гугления (доказывай обратное), без предварительных построений на хаскел, с использованием динамического программирования и мозга.
на массиве { 10, 20, -15, -30, 22, 10} выдает неверный результат.
b-3>Что здесь недоступного программисту с 4 годами опыта?
Ничего, но алгоритм сложен, ты за 25 минут не выдал правильный код. Начни с того что посчитай максимальную сумму.
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Вот я и показываю что большинство присутствующих здесь что-нить да не знает.
ПМ>Я уже 20 раз написал, что мне не нужны знания, мне нужно умение решать задачи. Если я вижу, что человек знает алгоритм, я даже не останавливаюсь на решении, а сразу даю другую задачу.
Какие задачи? По разработке CRM? Как они коррелируют с задачами которые выдумываешь ты?
Re[18]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
b-3>>Время 25 мин, в студии, без всякого гугления (доказывай обратное), без предварительных построений на хаскел, с использованием динамического программирования и мозга.
G>на массиве { 10, 20, -15, -30, 22, 10} выдает неверный результат.
Да, неприятно. Хотя собеседование по любому пройдёно. Ну, представим, что это реальный код. Пишем юнит-тест, думаем где налажали и делаем правку.
if (posMax < posMin)
{
if (sumMax > (partSum - sumMin))
posMin = 0;
else
posMax = pos;
}
Я всё ещё жду кода на хаскель и мап-фолдах, написанного быстрее чем за 25 минут
b-3>>Что здесь недоступного программисту с 4 годами опыта? G>Ничего, но алгоритм сложен, ты за 25 минут не выдал правильный код. Начни с того что посчитай максимальную сумму.
Суть тут в том, что собразить, что сумма на отрезке [a;b] — это разница сумм [0;b] и [0;a]. Дальше задача сводится к "дана последовательность, найдите два максимально отдалённых значения". Оно одно из трёх: [0, максимум], [мин, максимум] и [мин;конец]. В зависимости от расположения минимума и максимума, часть перечисленных интервалов невалидны, они исключаются из рассмотрения. Здесь хаскелисты могут воображить монаду MayBe... )))
Вы прослушали анализ задачи.
Так что, надо ли программисту уметь анализировать задачи?
Забанен с формулировкой "клинический дисидент".
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Какие задачи? По разработке CRM? Как они коррелируют с задачами которые выдумываешь ты?
ПМ>В разработке постоянно возникают задачи на написание алгоритмов, если человек это делать не умеет — он не нужен.
"Постоянно" это как часто? Какой процент из них требует разворачивания списков или манипуляций с битами.
Ты сам часто писал в тех проектах, которыми занимаешься, эти самые развороты списков?
Вот например выборка случайных из массива — относительно часто встречается, многие алгоритмы требуют рандомизации. Алгоритмы на графах бывают.
Но это все крайне редко, настолько редко что проще нагуглить когда понадобится.
А спрашивать на собеседовании — не более чем потешать свое самолюбие.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
b-3>>>Время 25 мин, в студии, без всякого гугления (доказывай обратное), без предварительных построений на хаскел, с использованием динамического программирования и мозга.
G>>на массиве { 10, 20, -15, -30, 22, 10} выдает неверный результат. b-3>Да, неприятно. Хотя собеседование по любому пройдёно. Ну, представим, что это реальный код. Пишем юнит-тест, думаем где налажали и делаем правку. b-3>
Даем на вход new int[] { -5 ,10, 20, -15, -30, 22 } и получаем {-5 ,10, 20}, что очевидно неверно.
Да, детка давай еще. Еще тест, еще порция "случайных изменений" чтобы следующий тест прошел.
b-3>Я всё ещё жду кода на хаскель и мап-фолдах, написанного быстрее чем за 25 минут
Напиши сначала правильный вариант, потом и сам догадаешься.
b-3>>>Что здесь недоступного программисту с 4 годами опыта? G>>Ничего, но алгоритм сложен, ты за 25 минут не выдал правильный код. Начни с того что посчитай максимальную сумму. b-3>Суть тут в том, что собразить, что сумма на отрезке [a;b] — это разница сумм [0;b] и [0;a]. Дальше задача сводится к "дана последовательность, найдите два максимально отдалённых значения". Оно одно из трёх: [0, максимум], [мин, максимум] и [мин;конец]. В зависимости от расположения минимума и максимума, часть перечисленных интервалов невалидны, они исключаются из рассмотрения.
Предположение верное если на всем отрезке сумм один минимум и одни максимум, что в общем случае не так
b-3>Вы прослушали анализ задачи. b-3>Так что, надо ли программисту уметь анализировать задачи?
Конечно надо, только ты тут ошибся.
Это очередной пример когда задача и реализация решения простые, но алгоритм сложен.
Re[20]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>"Постоянно" это как часто? Какой процент из них требует разворачивания списков или манипуляций с битами. G>Ты сам часто писал в тех проектах, которыми занимаешься, эти самые развороты списков?
Я просто напомню, что выбирать "лучшие 20" из 10000 элементов, Linq.Enumerable без загрузки в память всей коллекции и полной её сортировки не умеет ва-а-аще.
Может ли встать такая задача в реальном проекте, скажем в медиаплеере (среди фильмов) или клиенте B2B сервиса (в некой коллекции) — вопрос риторический
Забанен с формулировкой "клинический дисидент".
Re[20]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>"Постоянно" это как часто? Какой процент из них требует разворачивания списков или манипуляций с битами.
Постоянно — это всегда. Программирование — это и есть написание алгоритмов. Человек пишет код. Если он не умеет писать код, или пишет код криво — он не нужен. Идиота дешевле не нанимать, чем потом уволить.
G>Ты сам часто писал в тех проектах, которыми занимаешься, эти самые развороты списков?
Я писал гораздо более сложные алгоритмы, но давать их на интервью я не могу просто из-за временных ограничений.
G>Но это все крайне редко, настолько редко что проще нагуглить когда понадобится.
Решение реальной задачи заказчика ты не нагуглишь.
G>А спрашивать на собеседовании — не более чем потешать свое самолюбие.
Нет, это хороший способ отсеять людей, которые не могут программировать.
Здравствуйте, gandjustas, Вы писали:
G>Предположение верное если на всем отрезке сумм один минимум и одни максимум, что в общем случае не так
В общем случае — один. Ты с локальными экстремумами перепутал.
Забанен с формулировкой "клинический дисидент".
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
b-3>Я просто напомню, что выбирать "лучшие 20" из 10000 элементов, Linq.Enumerable без загрузки в память всей коллекции и полной её сортировки не умеет ва-а-аще.
Но содержит все кубики, необходимые для сборки решения без полной сортировки в том числе. Загрузить всю коллекцию придется, но не сразу всю.
Re[22]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
b-3>>Я просто напомню, что выбирать "лучшие 20" из 10000 элементов, Linq.Enumerable без загрузки в память всей коллекции и полной её сортировки не умеет ва-а-аще. S>Но содержит все кубики, необходимые для сборки решения без полной сортировки в том числе. Загрузить всю коллекцию придется, но не сразу всю.
Пользователь будет очень рад, когда открытие окошка "♥ МОИ ЛЮБИМЫЕ ФИЛЬМЫ ♥" будет начинаться с > Загрузить всю коллекцию придется, но не сразу всю.
секунд так на двадцать пять, и конечно же купит Ваш плеер
Забанен с формулировкой "клинический дисидент".
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
b-3>Пользователь будет очень рад, когда открытие окошка "♥ МОИ ЛЮБИМЫЕ ФИЛЬМЫ ♥" будет начинаться с >> Загрузить всю коллекцию придется, но не сразу всю. b-3>секунд так на двадцать пять, и конечно же купит Ваш плеер
Я не понял. Ты предлагаешь выдавать результат не загружая часть коллекции?
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
b-3>>Пользователь будет очень рад, когда открытие окошка "♥ МОИ ЛЮБИМЫЕ ФИЛЬМЫ ♥" будет начинаться с >>> Загрузить всю коллекцию придется, но не сразу всю. b-3>>секунд так на двадцать пять, и конечно же купит Ваш плеер
S>Я не понял. Ты предлагаешь выдавать результат не загружая часть коллекции?
В видеоплеере? Да, предлагаю. Но это же сложно, это же нужно код писать вместо .OrderBy(..).Take(20)
Так вы всё же расскажите, как Вы будете делать видеоплеер? Будет ли там использоваться СУБД 'для оптимизации поиска' и так далее?
А когда выяснится, что с SQLite линку работает хреново, захотите ли вы, чтоб пользователь купил Windows 7 Home Premium вместо его vista home starter, дабы можно было применить новейшие технологии микрософт?
Ещё можно провести эксперимент: спросить соседского школьника, прогающего на паскале, как сделать список из 20 самых популярных фильмов в маааленьком таком плеере?
Забанен с формулировкой "клинический дисидент".
Re[25]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Я не понял. Ты предлагаешь выдавать результат не загружая часть коллекции? b-3>В видеоплеере? Да, предлагаю. Но это же сложно, это же нужно код писать вместо .OrderBy(..).Take(20)
Я отвечал на пафосное утверждение о том что Linq не может обеспечить решения задачи без сортировки всей коллекции в памяти. Писать видеоплеер я не подписывался.
Здравствуйте, gandjustas, Вы писали:
G>Даем на вход new int[] { -5 ,10, 20, -15, -30, 22 } и получаем {-5 ,10, 20}, что очевидно неверно. G>Да, детка давай еще. Еще тест, еще порция "случайных изменений" чтобы следующий тест прошел. G>Напиши сначала правильный вариант, потом и сам догадаешься.
Так я не понял, я собеседованике прошёл или не прошёл?
А по какой причине?
А как ответил на вопрос победивший кандидат?
G>Это очередной пример когда задача и реализация решения простые, но алгоритм сложен.
24.02.2012 11:48, Здравствуйте, Паблик Морозов : > 1. Если человек не в состоянии обратить список, способен ли он вообще > написать что-нибудь разумное или сразу нафиг?
И что ты намерен услышать в ответ? list.Reverse()?
Не знаю как в яве, а в шарпе нет списков в классическом виде, List
реализован через массивы. Классическая задача вырождается в убожество.
Думаю, для шарпа или жабы давать задачу или не стоит вообще или, по
крайней мере, перед постановкой задачи реализовать классический
односвязный список.
С переворотом строки та же песня -- задача на шарпе смысла не имеет
> З.Ы. На прошлой работе HR заставляла соискателей решать задачи про > переливание воды, цветные шары и гномов в кепках.
Ну, давай такие же. Логические задачи на построение алгоритмов вполне
подходят.
Posted via RSDN NNTP Server 2.1 beta
Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[26]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, b-3, Вы писали:
b-3>>Здравствуйте, samius, Вы писали:
S>>>Я не понял. Ты предлагаешь выдавать результат не загружая часть коллекции? b-3>>В видеоплеере? Да, предлагаю. Но это же сложно, это же нужно код писать вместо .OrderBy(..).Take(20)
S>Я отвечал на пафосное утверждение о том что Linq не может обеспечить решения задачи без сортировки всей коллекции в памяти. Писать видеоплеер я не подписывался.
Linq, конечно, может обеспечить решение задачи. Дать Select, Where, Take и Aggregate
Однако на наиболее простом решении, которое придумал соседский школьник: завести мутабельный (хаскеллисты здесь падают в обморок, enterprise-critical-программеры вешаются) — да, мутабельный! — список "лучших и кандидатов" — которое замечательно продастся — Linq будет вставлять палки в колёса. Потому что Linq, порочная дочь HaskellDB и Visual Basic-а, не может в мутабельность.
И пусть школьник Вася хранит этот список в реестре, а счётчик просмотров фильма — в метаданных .avi. И может даже когда-то что-то взглюкнет, и 19 место в списке фильмов определится неправильно.
Но его плеер заработает деньги, а ваш будет требовать какую-нибудь Windows 8 или что будет модно к тем временам
А потом окажется, что на мобильник телефон ваш код, использующий SQL Server Сompact Edition, перенести никак нельзя... Что ж... Увы и ах! Хотя с точки зрения enterprise-программинга правильно завести базу данных с индексом, и не тратить дорогущий трудочас на такую глупость, как изобретение маленького кривоватого алгоритма.
Вон там ganjustas в соседней ветке уже второй юнит-тест мне написал)
Забанен с формулировкой "клинический дисидент".
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Я отвечал на пафосное утверждение о том что Linq не может обеспечить решения задачи без сортировки всей коллекции в памяти. Писать видеоплеер я не подписывался. b-3>Linq, конечно, может обеспечить решение задачи. Дать Select, Where, Take и Aggregate
b-3>Однако на наиболее простом решении, которое придумал соседский школьник: завести мутабельный (хаскеллисты здесь падают в обморок, enterprise-critical-программеры вешаются) — да, мутабельный! — список "лучших и кандидатов" — которое замечательно продастся — Linq будет вставлять палки в колёса. Потому что Linq, порочная дочь HaskellDB и Visual Basic-а, не может в мутабельность.
Так ты думаешь на иммутабельности потреяешь 25 минут на 10000 элементах?
b-3> И пусть школьник Вася хранит этот список в реестре, а счётчик просмотров фильма — в метаданных .avi. И может даже когда-то что-то взглюкнет, и 19 место в списке фильмов определится неправильно.
Мне непонятно, почему ты обвиняешь Linq в невозможности создать решение, которое ты на других технологиях даже не рассматриваешь. Может линк не позволяет тебе ходить по списку, который хранится в реестре?
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Так ты думаешь на иммутабельности потреяешь 25 минут на 10000 элементах?
Прочитать 10000 файлов на хилой машине с антивирусом вполне может занимать 25 секунд. Речь не шла про минуты, понятно что 25 минут на открытие формы не бывает даже у linq-программеров с сертификатами
b-3>> И пусть школьник Вася хранит этот список в реестре, а счётчик просмотров фильма — в метаданных .avi. И может даже когда-то что-то взглюкнет, и 19 место в списке фильмов определится неправильно.
S>Мне непонятно, почему ты обвиняешь Linq в невозможности создать решение, которое ты на других технологиях даже не рассматриваешь. Может линк не позволяет тебе ходить по списку, который хранится в реестре?
Линку никак не помогает этот список ни менять, ни читать, не сохранять. Соответственно, linq не позволяет решить задачу вышеописанным способом, а только предлагает "загрузить всё и отсортировать". Можно не применять здесь linq, конечно.
Делаю вывод, что задача отобрать 20 лучших из 10000 иногда открываемых фильмов, на Linq эффективно не решается.
Делаю вывод, что бывают задачи, когда правильнее вместо linq запроса написать ужасный for.
А знаете что этот ужасный for делает? Поиск места вставки в мутабельный массив! Это в 2012-то году! Нет, это невыносимо! Пойду нарисую ещё один отчёт на Entities Framework и интегрирую его в Microsoft SharePoint...
Забанен с формулировкой "клинический дисидент".
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Так ты думаешь на иммутабельности потреяешь 25 минут на 10000 элементах? b-3>Прочитать 10000 файлов на хилой машине с антивирусом вполне может занимать 25 секунд. Речь не шла про минуты, понятно что 25 минут на открытие формы не бывает даже у linq-программеров с сертификатами
ну ладно, секунд. Почему ты думаешь что использование линка даст заметный проигрыш при чтении 10000 файлов?
b-3>>> И пусть школьник Вася хранит этот список в реестре, а счётчик просмотров фильма — в метаданных .avi. И может даже когда-то что-то взглюкнет, и 19 место в списке фильмов определится неправильно.
S>>Мне непонятно, почему ты обвиняешь Linq в невозможности создать решение, которое ты на других технологиях даже не рассматриваешь. Может линк не позволяет тебе ходить по списку, который хранится в реестре? b-3>Линку никак не помогает этот список ни менять, ни читать, не сохранять. Соответственно, linq не позволяет решить задачу вышеописанным способом, а только предлагает "загрузить всё и отсортировать". Можно не применять здесь linq, конечно.
Давай-ка прежде всего сравнивать одинаковые решения. Или ты выбираешь 20 файлов на паскале (читая и сравнивая) и сравниваешь этот подход с решением с ликном. Или ты читаешь на паскале список из реестра и сравниваешь этот подход с решением с линком.
b-3>Делаю вывод, что задача отобрать 20 лучших из 10000 иногда открываемых фильмов, на Linq эффективно не решается.
Решение на Linq может быть лишь немногим менее эффективно чем соответствующее решение на чем-нибудь другом. Конечно, если ты читаешь линком 10000 файлов а паскалем 20-и элементный список из реестра, то проблемы не в линке, а в твоей голове.
b-3>Делаю вывод, что бывают задачи, когда правильнее вместо linq запроса написать ужасный for.
Бывает.
Но я-то говорил что для того что бы выбрать 20 записей из 10000 не нужно сортировать всю коллекцию. В ответ тебя унесло черт знает куда. b-3>А знаете что этот ужасный for делает? Поиск места вставки в мутабельный массив! Это в 2012-то году! Нет, это невыносимо! Пойду нарисую ещё один отчёт на Entities Framework и интегрирую его в Microsoft SharePoint...
успехов
Re[30]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Давай-ка прежде всего сравнивать одинаковые решения. Или ты выбираешь 20 файлов на паскале (читая и сравнивая) и сравниваешь этот подход с решением с ликном. Или ты читаешь на паскале список из реестра и сравниваешь этот подход с решением с линком.
S>Решение на Linq может быть лишь немногим менее эффективно чем соответствующее решение на чем-нибудь другом. Конечно, если ты читаешь линком 10000 файлов а паскалем 20-и элементный список из реестра, то проблемы не в линке, а в твоей голове.
Вот тут я категорически не соглашусь. Проблема в данном случае именно в linq, а не в голове.
Потому что как инструмент linq замечателен, и активно мной используется в работе. Это я на всяких случай поясняю: я и QueryProvier-ы писал, и решарпером его всего излазил...)
Как философия разработки linq — плоха. Потому что подязык запросов философией разработки никогда, как вы понимаете, не являлся. И то, что "должен быть только один способ сделать это", и "если можно сделать иммутабельно — делай иммутабельно", и то что "ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq!", и тому подобные убеждения приводят к тому, что программа на линку читает 10000 файлов, а программа на паскале 20 ключей из реестра.
Кто здесь виноват — судите сами
Забанен с формулировкой "клинический дисидент".
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, alzt, Вы писали:
A>Этот подход хорош тем, что он позволяет объективно оценить кандидатов. A>Способ возможно и не самый лучший, но просто беседа оценить всего лишь навыки общения кандидата и то, насколько он приглянулся. Остальные выводы притянут за уши.
И кому нужна эта объективность? Не троллинга ради — это действительно моя имха. Если человек тебе не нравится — по каким-то субъективным признакам — то и не стоит его брать, работать-то с человеком будешь, а не калькулятором разворачивающихся списоков. Вот я, например, сильно не люблю скользких или врущих людей, если вместо ответа "не знаю" начинают молоть чушь в надежде угадать (особенно вчерашние студенты эти страдают) — гарантированно не возьму, а того кто "не знаю" могу вполне взять по совокупности других вопросов. Или если человек "быкует" — пусть он хоть десятью способами список развернет, я с ним работать не буду.
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>"Постоянно" это как часто? Какой процент из них требует разворачивания списков или манипуляций с битами.
ПМ>Постоянно — это всегда. Программирование — это и есть написание алгоритмов.
Неверно. Современное программирование — комбинирование существующих алгоритмов.
G>>Ты сам часто писал в тех проектах, которыми занимаешься, эти самые развороты списков? ПМ>Я писал гораздо более сложные алгоритмы, но давать их на интервью я не могу просто из-за временных ограничений.
Тем не менее разворот списков не писал в продакшн, как и многое другое что любят спрашивать на собеседованиях.
G>>Но это все крайне редко, настолько редко что проще нагуглить когда понадобится. ПМ>Решение реальной задачи заказчика ты не нагуглишь.
Зато нагуглишь уже готовые блоки, из которых можно склепать решение.
G>>А спрашивать на собеседовании — не более чем потешать свое самолюбие. ПМ>Нет, это хороший способ отсеять людей, которые не могут программировать.
Нет, это способ отсеять тех кто не писал разворот списка последние полгода.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Это же нужно еще объяснить человеку, что список — это не стандартный тип из библиотеки, а хрень из книжек Вирта у которой каждый элемент суть рекорд из ссылки на данные и ссылки на следующий элемент. Потому что в АТД список с операцией NextItem теряется вся "загадочность" с перестроением ссылок.
Лучше заставлять написать АТД "дерево" на тех же рекордах с ссылками на правый и левый узел, сохраняющий сбалансированность при вставке и удалении элемента
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>Знаменитая история. Джоел спольски любил задавать вопрос — нарисуйте дом.
Во-первых, Спольски — пи***с.
Во-вторых, распиарившись он, очевидно, имел такой поток кандидатов, что мог не то что домиками-гномиками-фудзями задалбывать, а просто половину резюме не глядя выбрасывать в корзину — типа "мне не нужны неудачники",
Re[22]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
ПМ>>Постоянно — это всегда. Программирование — это и есть написание алгоритмов. G>Неверно. Современное программирование — комбинирование существующих алгоритмов.
Так задачу на комбинирование (именно комбинирование, а не вызвать готовую функцию API) ты ж тоже завалишь
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>Предположение верное если на всем отрезке сумм один минимум и одни максимум, что в общем случае не так b-3>В общем случае — один. Ты с локальными экстремумами перепутал.
Я не перепутал, я именно их и имел ввиду. Потому что в твоем способе разница нужна между парой рядомстоящих локальных экстремумах.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>А как тогда отсеять людей, не способных программировать?
я бы проверял навыки, которые вам нужны. Создаете АТД? Тогда задача на список хорошая. Пользуетесь СУБД? Значит программа с запросами к СУБД на используемом языке и/или задача на проектирование базы. Обрабатываете строки? Значит задачи на работу со строками. Пишите параллельные программы? Значит задачи на параллелеизм и обработку конфликтов.
Если вам нужен "кодер для клепания формочек", нафига его мучать АТД, вам главное что бы он знал какой контрол куда применить и что бы бизнес-логику тонким слоем по коду не размазывал.
Здравствуйте, gandjustas, Вы писали:
G>Я не перепутал, я именно их и имел ввиду. Потому что в твоем способе разница нужна между парой рядомстоящих локальных экстремумах.
Ну, значит после второго фейла идём гуглить. Более того: вообще в жизни алгоритм ищется, а не придумывается. Вот только чтоб знать, что искать, нужно проблему идентифицировать, упростить, обобщить, и в нескольких эквивалентных вариантах представить) Потому что алгоритмов, если верить старику Дейкстре, всего лишь примерно сто, а алгоритмически сложных задач сто раз по сто, и одно к другому свести уметь надо)
Я уж не говорю о том, что если работодатель, типа, ganjustas, то можно смело писать очевидное решение за n проходов на linq — скорее всего, прохляет
Забанен с формулировкой "клинический дисидент".
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
ПМ>>>Постоянно — это всегда. Программирование — это и есть написание алгоритмов. G>>Неверно. Современное программирование — комбинирование существующих алгоритмов. b-3>Так задачу на комбинирование (именно комбинирование, а не вызвать готовую функцию API) ты ж тоже завалишь
Комбинирование — и есть вызов готовых функций. У тебя какое-то другое понимание комбинирования?
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>Я не перепутал, я именно их и имел ввиду. Потому что в твоем способе разница нужна между парой рядомстоящих локальных экстремумах. b-3>Ну, значит после второго фейла идём гуглить. Более того: вообще в жизни алгоритм ищется, а не придумывается. Вот только чтоб знать, что искать, нужно проблему идентифицировать, упростить, обобщить, и в нескольких эквивалентных вариантах представить) Потому что алгоритмов, если верить старику Дейкстре, всего лишь примерно сто, а алгоритмически сложных задач сто раз по сто, и одно к другому свести уметь надо)
Не умничай, задачу то ты не решил.
b-3>Я уж не говорю о том, что если работодатель, типа, ganjustas, то можно смело писать очевидное решение за n проходов на linq — скорее всего, прохляет
Конечно прохляет, если всех устраивает.
Re[31]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Решение на Linq может быть лишь немногим менее эффективно чем соответствующее решение на чем-нибудь другом. Конечно, если ты читаешь линком 10000 файлов а паскалем 20-и элементный список из реестра, то проблемы не в линке, а в твоей голове. b-3>Вот тут я категорически не соглашусь. Проблема в данном случае именно в linq, а не в голове.
Проблема в голове.
b-3>Как философия разработки linq — плоха. Потому что подязык запросов философией разработки никогда, как вы понимаете, не являлся. И то, что "должен быть только один способ сделать это", и "если можно сделать иммутабельно — делай иммутабельно", и то что "ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq!", и тому подобные убеждения приводят к тому, что программа на линку читает 10000 файлов, а программа на паскале 20 ключей из реестра.
Ну вот видишь, только проблема в твоей голове не позволяет читать 20 ключей из реестра линком, и почему-то заставляет читать 10000 файлов, причем все сразу, и при этом сортировать их в памяти.
b-3>Кто здесь виноват — судите сами
Межает однозначно проблема в голове. А кто виноват и что делать —
ПМ>>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
вообще, это задачка с первых семинаров на ВМик МГУ Если не умничать, пытаясь сразу написать программу, а нарисовать список в виде прямоугольничков, решение становиться тривиальным и очевидным
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
b-3>>Так задачу на комбинирование (именно комбинирование, а не вызвать готовую функцию API) ты ж тоже завалишь G>Комбинирование — и есть вызов готовых функций. У тебя какое-то другое понимание комбинирования?
Да, у меня комбинирование — это объединение функциональности.
На простом примере:
Вот есть программа А — ввод данных в форму и сохранение их на диск в XML. И библиотека Б — передача данных по сети (TCP/IP). Это даже не алгоритмы, всё simple и stupid.
Говоришь, вызов готовых функций? И какие готовые функции нужно вызвать, чтобы данные сохранились на диск, но на удалённом компьютере?
Так вот с алгоритмами то же самое.
Забанен с формулировкой "клинический дисидент".
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Mystic, Вы писали:
M>>Здравствуйте, gandjustas, Вы писали:
G>>>Здравствуйте, Mystic, Вы писали:
M>>>>Здравствуйте, Vzhyk, Вы писали:
V>>>>>За 20 лет ни разу не понадобилось писать оное самому. Всегда была в V>>>>>наличии функция sort.
M>>>>Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому...
G>>>.Where(<критерий>).Take(1000)
G>>>И linq-гуано (с) рвет в какашки любые поделки по выразительности.
M>>Увы, на С# я просто не умею писать высокопроизводительный код.
G>Это легко. Вот ты говоришь что у тебя есть массив из 10000000 элементов. Но ведь эти элементы не из воздуха появились.
Данные берутся из базы. Но необходимые запросы выполнятся крайне медленно: кретиев очень много, они строятся динамически, индексы использовать не получается... Да и если запрос должен вернуть примерно 60% всех элементов, то индекс просто бесполезен. Соответственно на основании данных из базы строится SHM-объект, из которого C++-шная утилита, часто методом тупого перебора, выполняет нужные запросы.
Re[32]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
b-3>>Как философия разработки linq — плоха. Потому что подязык запросов философией разработки никогда, как вы понимаете, не являлся. И то, что "должен быть только один способ сделать это", и "если можно сделать иммутабельно — делай иммутабельно", и то что "ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq!", и тому подобные убеждения приводят к тому, что программа на линку читает 10000 файлов, а программа на паскале 20 ключей из реестра. S>Ну вот видишь, только проблема в голове не позволяет читать 20 ключей из реестра линком, и почему-то заставляет читать 10000 файлов, причем все сразу, и при этом сортировать их в памяти.
Ну что поделать, специфика отрасли такая. "Голова" формируется программными средствами и книжками по использованию программных средств. Людей, способных более-менее критически это воспринимать — мало.
Напоминаю, что обсуждаем-то мы, должен ли уметь программист разворачивать списки. Если не должен, то должен ли он уметь справиться с задачей про 20 лучших фильмов без чтения 10тыс файлов?
S>Межает однозначно проблема в голове. А кто виноват и что делать — : xz:
Дай на собеседовании задачу "напишите сортировку 20-элементного массива вставками", пол-рсдна будет кричать, что подобное никогда не надо, потому что есть List.Sort и Linq.EnumerableQuery У них у всех проблемы в голове?
Забанен с формулировкой "клинический дисидент".
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
S>>Мне непонятно, почему ты обвиняешь Linq в невозможности создать решение, которое ты на других технологиях даже не рассматриваешь. Может линк не позволяет тебе ходить по списку, который хранится в реестре? b-3>Линку никак не помогает этот список ни менять, ни читать, не сохранять. Соответственно, linq не позволяет решить задачу вышеописанным способом, а только предлагает "загрузить всё и отсортировать". Можно не применять здесь linq, конечно.
А что применять?
b-3>Делаю вывод, что задача отобрать 20 лучших из 10000 иногда открываемых фильмов, на Linq эффективно не решается.
А на чем решается эффективно?
b-3>Делаю вывод, что бывают задачи, когда правильнее вместо linq запроса написать ужасный for.
Покажи чтоли?
Re[31]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Давай-ка прежде всего сравнивать одинаковые решения. Или ты выбираешь 20 файлов на паскале (читая и сравнивая) и сравниваешь этот подход с решением с ликном. Или ты читаешь на паскале список из реестра и сравниваешь этот подход с решением с линком.
S>>Решение на Linq может быть лишь немногим менее эффективно чем соответствующее решение на чем-нибудь другом. Конечно, если ты читаешь линком 10000 файлов а паскалем 20-и элементный список из реестра, то проблемы не в линке, а в твоей голове. b-3>Вот тут я категорически не соглашусь. Проблема в данном случае именно в linq, а не в голове.
Именно в голове. Так как linq совсем неплохо может и с реестром работать.
b-3>Как философия разработки linq — плоха. Потому что подязык запросов философией разработки никогда, как вы понимаете, не являлся.
Что значит "философия разработки"? Что ты понимаешь под этим словосочетанием?
Re[33]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Дай на собеседовании задачу "напишите сортировку 20-элементного массива вставками", пол-рсдна будет кричать, что подобное никогда не надо, потому что есть List.Sort и Linq.EnumerableQuery
И они будут правы
b-3>У них у всех проблемы в голове?
нет, проблемы у тебя.
Если ты искренне считаешь что для сортировки 20-элементов надо писать что-либо кроме .sort или .orderby, то ты зря тратишь деньги твоего работодателя.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, b-3, Вы писали:
b-3>>Здравствуйте, gandjustas, Вы писали:
G>>>Я не перепутал, я именно их и имел ввиду. Потому что в твоем способе разница нужна между парой рядомстоящих локальных экстремумах. b-3>>Ну, значит после второго фейла идём гуглить. Более того: вообще в жизни алгоритм ищется, а не придумывается. Вот только чтоб знать, что искать, нужно проблему идентифицировать, упростить, обобщить, и в нескольких эквивалентных вариантах представить) Потому что алгоритмов, если верить старику Дейкстре, всего лишь примерно сто, а алгоритмически сложных задач сто раз по сто, и одно к другому свести уметь надо) G>Не умничай, задачу то ты не решил.
Я инициировал процесс разработки, который на ранней стадии дал прототип, что уже приятно для заказчика и который, в конечном счёте, после тестирования и переписывания кода, приведёт к решению задачи.
Ты объективно оценил свои возможности и написал дубовый код с n проходами, а то и вовсе отказался решать задачу.
Что из этого лучше? зависит от организации программного проекта на самом деле В очень многих областях лучше отказаться решать задачу, чем написать код, требующий тестирования и работающий не всегда. В других лучше написать код, работающий не всегда, чем огрести зависимости от 10 фреймворков, склеенных соплями)
Соискатель должен понимать, в какую фирму он устраивается. Если б я устраивался конфигурации для 1с писать, боже меня упаси сложные алгоритмы на собеседовании придумывать. А если б в игродев, так понимал бы, что после слов "без готового фреймворка я это писать не буду!" со мной распрощаются) Я себе новую подпись придумал, кстати.
Забанен с формулировкой "клинический дисидент".
Re[33]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
b-3>Ну что поделать, специфика отрасли такая. "Голова" формируется программными средствами и книжками по использованию программных средств. Людей, способных более-менее критически это воспринимать — мало.
Вот ты критически воспринимаешь линк. А в какой книжке ты прочитал что им нельзя ходить в реестр?
b-3>Напоминаю, что обсуждаем-то мы, должен ли уметь программист разворачивать списки.
Мое мнение — уметь разворачивать списки не должен. Но должен суметь его развернуть, даже если не умел. Хотя бы не по месту.
b-3>Если не должен, то должен ли он уметь справиться с задачей про 20 лучших фильмов без чтения 10тыс файлов?
Ну вот смотри. Дали тебе задачу про 20 лучших фильмов из 10к. Ты думаешь что в реестре уже есть 20 записей? Боюсь, что раз в условии этого нет, то и рассчитывать что прокатит решение через чтение из реестра записей не стоит. Помести туда эти записи, тогда потом читай. Так что задача выборки 20 лучших фильмов из 10к файлов без чтения реестра все равно стоит. Следующий момент: линк позволит решить эту задачу не сортируя ВСЮ коллекцию и не держа всю коллекцию в памяти. Вообще больше 20+1 записей держать в памяти для решения этой задачи не нужно. Есть возражения против того, что линком эту задачу решить можно?
S>>Межает однозначно проблема в голове. А кто виноват и что делать — : xz: b-3>Дай на собеседовании задачу "напишите сортировку 20-элементного массива вставками", пол-рсдна будет кричать, что подобное никогда не надо, потому что есть List.Sort и Linq.EnumerableQuery У них у всех проблемы в голове?
Отвечу за себя. Я кричать не буду, я спокойно отношусь к задачам про сортировку, белочек, гномиков и т.п. Включая те, которые я еще не решал и возможно не решу если придется. А за пол рсдн-а отвечать не собираюсь.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Mystic, Вы писали:
M>Данные берутся из базы. Но необходимые запросы выполнятся крайне медленно: кретиев очень много, они строятся динамически, индексы использовать не получается...
Выделенное случается крайне редко и является признаком плохого проектирования.
M>Да и если запрос должен вернуть примерно 60% всех элементов, то индекс просто бесполезен. Соответственно на основании данных из базы строится SHM-объект, из которого C++-шная утилита, часто методом тупого перебора, выполняет нужные запросы.
Ниче не понял, но понял что работает неэффекттивно. Эффективно заставлять базу считать, она умет оптимизировать считывание с диска, в отличие от программного кода.
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, b-3, Вы писали:
b-3>>Здравствуйте, gandjustas, Вы писали:
ПМ>>>>Постоянно — это всегда. Программирование — это и есть написание алгоритмов. G>>>Неверно. Современное программирование — комбинирование существующих алгоритмов. b-3>>Так задачу на комбинирование (именно комбинирование, а не вызвать готовую функцию API) ты ж тоже завалишь G>Комбинирование — и есть вызов готовых функций. У тебя какое-то другое понимание комбинирования?
Задача обращения списка и строится из вызова готовых фунций (главным образом функций присваивания), если человек не может скомбинировать эти функции надлежащим образом, то и более сложную программу он не напишет.
Re[22]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Нет, это способ отсеять тех кто не писал разворот списка последние полгода.
Нет, это именно способ отсеять тех, у кого голова соображает настолько плохо, что они не могут решить эту задачу.
Если человек помнит, как решать эту задачу (т.е. писал её в последние полгода), я дам другую и отсею его, если выяснится, что он не соображает, а разворот списка просто выучил наизусть.
Re[32]: Задача на собеседовании - обращение списка.
Ты решил ответить на все мои сообщения сразу?
b-3>>Дай на собеседовании задачу "напишите сортировку 20-элементного массива вставками", пол-рсдна будет кричать, что подобное никогда не надо, потому что есть List.Sort и Linq.EnumerableQuery G>И они будут правы
С точки зрения "программирования отчётов" конечно да.
b-3>>Как философия разработки linq — плоха. Потому что подязык запросов философией разработки никогда, как вы понимаете, не являлся. G>Что значит "философия разработки"? Что ты понимаешь под этим словосочетанием?
Подразумеваю набор убеждений разработчика, который влияют на его результат. Ты его уже замечательно поскипал:
должен быть только один способ сделать это
если можно сделать иммутабельно — делай иммутабельно
ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq!
могу всё это хорошо расширить, добавив cюда kiss, но это нужно начинать отдельную тему
Если подобные убеждения приводят к тому, что видеоплеер начинает требовать базу данных, .NET 4.5 и небазовую версию Windows, значит в этом случае с этими убеждениями не всё правильно.
G>Если ты искренне считаешь что для сортировки 20-элементов надо писать что-либо кроме .sort или .orderby, то ты зря тратишь деньги твоего работодателя.
Прочитай ветку, которую мы обсуждаем, на примере B2B — сервиса и видеоплеера) Если ты считаешь, что ради сокращения подобного кода до .sort или .orderby можно делать 10 тыщ запросов к вебсервису или сканировать список из дохрена файлов — ты будешь прав далеко не всегда)
b-3>>Соответственно, linq не позволяет решить задачу вышеописанным способом, а только предлагает "загрузить всё и отсортировать". Можно не применять здесь linq, конечно. G>А что применять? Уже писал
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>Не умничай, задачу то ты не решил. b-3>Я инициировал процесс разработки, который на ранней стадии дал прототип, что уже приятно для заказчика и который, в конечном счёте, после тестирования и переписывания кода, приведёт к решению задачи.
Ты неимоверно пафосно облажался с этим решением. Думаю, что вряд ли такое понравилось бы собеседующим. Одно дело — просто не решить. Другое — не решить ТАК Хоть бы извинился...
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>А как тогда отсеять людей, не способных программировать?
J>я бы проверял навыки, которые вам нужны. Создаете АТД? Тогда задача на список хорошая. Пользуетесь СУБД? Значит программа с запросами к СУБД на используемом языке и/или задача на проектирование базы. Обрабатываете строки? Значит задачи на работу со строками. Пишите параллельные программы? Значит задачи на параллелеизм и обработку конфликтов.
J>Если вам нужен "кодер для клепания формочек", нафига его мучать АТД, вам главное что бы он знал какой контрол куда применить и что бы бизнес-логику тонким слоем по коду не размазывал.
Но сеньёр-девелопер, не могущий решить задачку по программированию для первокурсников — это ведь просто смешно. Зачем он такой нужен? Лучше сразу взять первокурсника, писать SQL-запросы он научится быстрее (т.к. соображает лучше).
Здравствуйте, jhfrek, Вы писали:
ПМ>>>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
J>вообще, это задачка с первых семинаров на ВМик МГУ Если не умничать, пытаясь сразу написать программу, а нарисовать список в виде прямоугольничков, решение становиться тривиальным и очевидным
Вот именно. И если человек не пытается разработать какой-нибудь способ решение (например, не пытается что-то нарисовать, дать говорящие имена переменным, описать задачу словами, свести её к более простой, например, с помощью рекурсии) — значит человек не в состоянии решать никакие задачи. Максимум что он может — это как робот перевести ТЗ на сишарп, не думая. Как правило в результате такого перевода получается говнокод. Говнокодеры нам не нужны.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, b-3, Вы писали:
b-3>>>Здравствуйте, gandjustas, Вы писали:
G>>>>Я не перепутал, я именно их и имел ввиду. Потому что в твоем способе разница нужна между парой рядомстоящих локальных экстремумах. b-3>>>Ну, значит после второго фейла идём гуглить. Более того: вообще в жизни алгоритм ищется, а не придумывается. Вот только чтоб знать, что искать, нужно проблему идентифицировать, упростить, обобщить, и в нескольких эквивалентных вариантах представить) Потому что алгоритмов, если верить старику Дейкстре, всего лишь примерно сто, а алгоритмически сложных задач сто раз по сто, и одно к другому свести уметь надо) G>>Не умничай, задачу то ты не решил. b-3>Я инициировал процесс разработки, который на ранней стадии дал прототип, что уже приятно для заказчика и который, в конечном счёте, после тестирования и переписывания кода, приведёт к решению задачи.
Бла-бла-бла, в итоге никуда не приведет. Ты так своему ПМу рассказывай почему ты так долго пишешь.
b-3>Ты объективно оценил свои возможности и написал дубовый код с n проходами, а то и вовсе отказался решать задачу.
Я-то знаю как эту задачу решить. А если бы не знал, то сделал бы в несколько проходов,. И вот уж если бы не устроило, то гуглил бы как решить задачу более оптимальным способом.
b-3>Соискатель должен понимать, в какую фирму он устраивается. Если б я устраивался конфигурации для 1с писать, боже меня упаси сложные алгоритмы на собеседовании придумывать. А если б в игродев, так понимал бы, что после слов "без готового фреймворка я это писать не буду!" со мной распрощаются) Я себе новую подпись придумал, кстати.
Для программиста очень важно быстро выдавать результат. Результат должен быть корректен, хотя может быть и неполным.
А ты предлагаешь долгий процесс разработки, который выдает некорректный результат и лишь надежду на то что результат станет станет когданить корректным.
Здравствуйте, samius, Вы писали:
S>Ты неимоверно пафосно облажался с этим решением. Думаю, что вряд ли такое понравилось бы собеседующим. Одно дело — просто не решить. Другое — не решить ТАК Хоть бы извинился...
Не собираюсь я извиняться перед тем, кто код даже не написал и всем перед этим нахамил Ну ниже своего достоинства для MVP двигать немытые указатели.
Ну пусть ищет работу там, где от программиста ничего, кроме straightforward кода, знания мелкомягких API и умения быковать не требуется, мы вряд ли с ним конкурентами окажемся)
Я принял заведомо неравный вызов: "я заранее знаю решение, а вы пишите код и я покритикую, да заодно вопить, без ссылки на страницу, что я его не нагуглил, а прочитал у Кнута". Это вообще любимое занятие, он уже тут начал интересоваться, как я буду делать вставки в сортированный (20 лучших фильмов) массив Вполне достойно выступил. И если в аналогичном коде на Haskell не будет этих ошибок, то это только потому, что этот код никто не стал писать
Перед людьми, отказывающимися думать, пробовать и ошибаться, извиняться не в моих правилах, уважаемый
Забанен с формулировкой "клинический дисидент".
Re[25]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, b-3, Вы писали:
b-3>>>Здравствуйте, gandjustas, Вы писали:
ПМ>>>>>Постоянно — это всегда. Программирование — это и есть написание алгоритмов. G>>>>Неверно. Современное программирование — комбинирование существующих алгоритмов. b-3>>>Так задачу на комбинирование (именно комбинирование, а не вызвать готовую функцию API) ты ж тоже завалишь G>>Комбинирование — и есть вызов готовых функций. У тебя какое-то другое понимание комбинирования?
ПМ>Задача обращения списка и строится из вызова готовых фунций (главным образом функций присваивания), если человек не может скомбинировать эти функции надлежащим образом, то и более сложную программу он не напишет.
Присваивание не является реализацией какого-либо алгоритма.
Ты вообще-то можешь не продолжать отстаивать свою точку зрения, так как уже признал что она является лишь капризом, а не необходимостью.
Здравствуйте, b-3, Вы писали:
b-3>Перед людьми, отказывающимися думать, пробовать и ошибаться, извиняться не в моих правилах, уважаемый
Если с этой фразы начинать собеседование, то сэкономишь время и себе и собеседователям.
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Нет, это способ отсеять тех кто не писал разворот списка последние полгода.
ПМ>Нет, это именно способ отсеять тех, у кого голова соображает настолько плохо, что они не могут решить эту задачу. ПМ>Если человек помнит, как решать эту задачу (т.е. писал её в последние полгода), я дам другую и отсею его, если выяснится, что он не соображает, а разворот списка просто выучил наизусть.
Уж проверили что ты сам сядешь на второй такой задаче.
Кстати не надо учить разворот списка чтобы писать его. Нужен навык. Если ты пишешь такое регулярно, то вполне можешь написать разворот списка или другую подобную задачу.
Если же не писал его, то хрен напишешь, потому что алгоритм сложный.
Здравствуйте, gandjustas, Вы писали:
G>Бла-бла-бла, в итоге никуда не приведет. Ты так своему ПМу рассказывай почему ты так долго пишешь.
Ну да, ты своему ПМу не рассказываешь про сроки — зато рассказываешь, почему так резко упали продажи. Дураки-клиенты то домен у себя не имеют, то маки к рабочей сети подключают, то ещё что нибудь препятствует.
Хотя, если не ошибаюсь, у тебя нет ПМа. Что такое? Никто не хочет в тебя деньги вкладывать?
Здравствуйте, samius, Вы писали:
b-3>>Перед людьми, отказывающимися думать, пробовать и ошибаться, извиняться не в моих правилах, уважаемый S>Если с этой фразы начинать собеседование, то сэкономишь время и себе и собеседователям.
А что будет?
Мне, правда в ближайшее время не предстоит проходить собеседование. Всё больше приходится участвовать в качестве ведущего специалиста (читай, "умного ботаника"). Могу, если хотите, в этой роли процитированную фразу сказать Какой Вы ждёте ответной реакции?
Забанен с формулировкой "клинический дисидент".
Re[33]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
b-3>Ты решил ответить на все мои сообщения сразу?
b-3>>>Дай на собеседовании задачу "напишите сортировку 20-элементного массива вставками", пол-рсдна будет кричать, что подобное никогда не надо, потому что есть List.Sort и Linq.EnumerableQuery G>>И они будут правы b-3>С точки зрения "программирования отчётов" конечно да.
С любой точки зрения будут правы.
b-3>>>Как философия разработки linq — плоха. Потому что подязык запросов философией разработки никогда, как вы понимаете, не являлся. G>>Что значит "философия разработки"? Что ты понимаешь под этим словосочетанием? b-3>Подразумеваю набор убеждений разработчика, который влияют на его результат. Ты его уже замечательно поскипал: b-3>
b-3>должен быть только один способ сделать это
b-3>если можно сделать иммутабельно — делай иммутабельно
b-3>ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq!
b-3>могу всё это хорошо расширить, добавив cюда kiss, но это нужно начинать отдельную тему
Так это ты сам придумал. Ты уверен что кто-то придерживается такой философии?
b-3>Если подобные убеждения приводят к тому, что видеоплеер начинает требовать базу данных, .NET 4.5 и небазовую версию Windows, значит в этом случае с этими убеждениями не всё правильно.
Причем тут linq? Такого эффекта и без linq добиться можно.
G>>Если ты искренне считаешь что для сортировки 20-элементов надо писать что-либо кроме .sort или .orderby, то ты зря тратишь деньги твоего работодателя. b-3>Прочитай ветку, которую мы обсуждаем, на примере B2B — сервиса и видеоплеера) Если ты считаешь, что ради сокращения подобного кода до .sort или .orderby можно делать 10 тыщ запросов к вебсервису или сканировать список из дохрена файлов — ты будешь прав далеко не всегда)
Не понял, почему для сортировки 20 элементов может понадобиться 10000 запросов к вебсервису? Объясни этот момент, я не понимаю какую проблему ты пытаешься описать.
b-3>>>Соответственно, linq не позволяет решить задачу вышеописанным способом, а только предлагает "загрузить всё и отсортировать". Можно не применять здесь linq, конечно. G>>А что применять? b-3>Уже писал
Это ортогональные вещи. Приведи задачу, где не надо применять linq, а надо применять что-то другое. И покажи что.
Re[26]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Ты вообще-то можешь не продолжать отстаивать свою точку зрения, так как уже признал что она является лишь капризом, а не необходимостью.
Нет, умение писать алгоритмы хотя бы на уровне старшеклассника является необходимостью для человека, который работает программистом. Неумение программировать — профнепригодность.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>Бла-бла-бла, в итоге никуда не приведет. Ты так своему ПМу рассказывай почему ты так долго пишешь. b-3>Ну да, ты своему ПМу не рассказываешь про сроки — зато рассказываешь, почему так резко упали продажи. Дураки-клиенты то домен у себя не имеют, то маки к рабочей сети подключают, то ещё что нибудь препятствует.
Это тебя окончательно не в ту степь понесло. Причем тут маки?
b-3>Хотя, если не ошибаюсь, у тебя нет ПМа. Что такое? Никто не хочет в тебя деньги вкладывать?
У меня и ПМ есть, и сам себе ПМ бываю.
b-3>Несерьёзно это всё.
Да, ты что-то постоянно от темы уходишь.
В сухом остатке: задачу не решил, даже направление решения не угадал, так еще и не признал что неправ, а начал увиливать. Низачот однозначно, я бы на работу не взял.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Но сеньёр-девелопер, не могущий решить задачку по программированию для первокурсников — это ведь просто смешно. Зачем он такой нужен? Лучше сразу взять первокурсника, писать SQL-запросы он научится быстрее (т.к. соображает лучше).
Не, все не так просто. Что бы первокурсник мог решить эту задачу, у него в курсе должны быть эти списки. Далеко не все программисты не то что не закончили программистский факультет, но и вообще имеют высшее образование. Да и далеко не все программистские факультеты имеют подробный разбор внутренностей АТД в своих курсах.
А первокурсник без опыта и знания подводных камней может вам нагородить таких SQL запросов...
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Если же не писал его, то хрен напишешь, потому что алгоритм сложный.
Если голова работает — то напишешь. Если настолько тупой, что не можешь решить даже такую простую задачу — иди найди работу, требующую меньших интеллектуальных возможностей (например, сторожем или вахтёром).
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
b-3>>>Перед людьми, отказывающимися думать, пробовать и ошибаться, извиняться не в моих правилах, уважаемый S>>Если с этой фразы начинать собеседование, то сэкономишь время и себе и собеседователям. b-3>А что будет?
Сэкономишь время
b-3>Мне, правда в ближайшее время не предстоит проходить собеседование. Всё больше приходится участвовать в качестве ведущего специалиста (читай, "умного ботаника").
Извини, фич, характерных для умного ботаника я пока в тебе не приметил. Пафос, кстати, совсем не обязательная черта умного ботаника. b-3> Могу, если хотите, в этой роли процитированную фразу сказать Какой Вы ждёте ответной реакции?
Например, что у ведомых найдется повод прикинуть перспективы и сэкономить время и нервы.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>... не пытается что-то нарисовать, дать говорящие имена переменным, описать задачу словами, свести её к более простой, например, с помощью рекурсии) — значит человек не в состоянии решать никакие задачи. Максимум что он может — это как робот перевести ТЗ на сишарп, не думая.
а вот с этим подходом согласен. Т.е. суть не в самой задаче, а суть в том, как человек ее решает.
Собственно на зачетах и экзаменах на этом все и валятся, когда кидаются отвечать, писать программу, и т.п. не подумав и не порассуждав, выдавая первое, что пришло в голову.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить?
Условно всех людей можно поделить на 2 категории. Первая (их больше пресловутых 95%) познают мир путем запоминания фактов,
в результате чего картина у них получается весьма разрозненной. Вторые не тянут в голову всякую мелочь (запас памяти ограничен),
а держат в кеше только фундаментальные сущности с их свойствами и связями, подгружая в случае необходимости конкретную
информацию из внешних источников. Данные свойства мышления — системные, т.е. они распространяются на любую деятельность человека.
Другими словами, системно мыслящий человек мыслит так всегда независимо от решаемых им задач; он не разделяет работу/дом,
важные/неважные задачи и прочее с т.з. выбора применяемых методов мышления. За подробностями пожалуйте к Курту Голдштейну,
Хьюллингсу Джескону и прочим отцам неврологии и психологии.
В данном обсуждении также есть два лагеря с полюсами Паблик Морозов (ПМ) и gandjustas (gj). Скажу сразу — они оба правы.
Но давайте проанализируем ситуацию. Мыслят они по-разному, это факт. Морозов входит во вторую группу (или старается
туда входить) — это прямо следует из его постов, gandjustas — в первую (из его высказываний прямо это не следует,
но с некоторыми весьма малыми допусками это так). Вывод очень простой — они могут бесконечно спорить, т.к. их точки зрения
ортогональны. Они пересекаются только в одном месте — в точке результата (надеюсь, что хоть там пересекаются). Под результатом
здесь я понимаю работающий код, с хорошими храктеристиками, простой в понимании/поддержке и т.д.
Углубимся. Контекст данных веток — собеседование. Посылка: каждый собеседующий берет на работу людей, которые мыслят схожим
с ним образом. Даже не так, каждый ДОЛЖЕН брать людей, которые мыслят схожим с ним образом. Иначе они тупо не сработаются — это
очевидно. Именно поэтому методы ПМ и gj должны быть разными (хотя и могут пересекаться). Именно поэтому "задавание задачек"
на собеседовании для ПМ — один из работающих инструментов, а для gj — бессмысленная херня.
С т.з. работодателя ситуация иная. Цель каждой коммерческой фирмы (я специально тут редуцирую множество работодателей) — получать
прибыль. В близкой/средней/далекой перспективе. Для этого нужно решать задачи, в т.ч. и технические. Для некотрых задач нужна
команда из gj, для некоторых — из ПМ. Смешанных команд на низком уровне быть не может, это тоже очевидно. Поэтому работодатель должен
правильно выбирать "зерно" из которого растет команда.
философия. Какой подход лучше? Ответа нет. Да, подход ПМ потенциально может решить бОльшее количество задач, с более широким спектром.
С другой стороны, подход gj выигрывает в краткосрочной перспективе и в среднем дает больше денег для исполнителя. Но есть еще
другие ниши — медицина/авиация/космос, даже обычная промышленность, где gj отфильтруются по определению.
Резюме. ПМ, вам уже дали ответ на ваш вопрос — "1. 95% идиоты. 2. да". Вы все правильно делаете, продолжайте набирать людей по
собственным критериям, которые вы считаете важными, тем более, что они весьма разумны. И никого не слушайте )) Аналогичный совет
я позволю сделать gandjustas.
И для молодых — самое прибыльное инвестирование — в себя. Чем ты моложе, тем долгосрочнее вложение ты можешь сделать. Учитесь
думать головой, в конце концов, это основной инструмент программиста.
Re[34]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
b-3>>Подразумеваю набор убеждений разработчика, который влияют на его результат. Ты его уже замечательно поскипал: b-3>>должен быть только один способ сделать это b-3>>если можно сделать иммутабельно — делай иммутабельно b-3>>ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq! b-3>>могу всё это хорошо расширить, добавив cюда kiss, но это нужно начинать отдельную тему G>Так это ты сам придумал. Ты уверен что кто-то придерживается такой философии?
Так это я не сам придумал, а регулярно вижу на практике. Даже мой визави ganjustas этим грешен и пишет свои Sharepoint solutions, по слухам, приблизительно так.
b-3>>Прочитай ветку, которую мы обсуждаем, на примере B2B — сервиса и видеоплеера) Если ты считаешь, что ради сокращения подобного кода до .sort или .orderby можно делать 10 тыщ запросов к вебсервису или сканировать список из дохрена файлов — ты будешь прав далеко не всегда) G>Не понял, почему для сортировки 20 элементов может понадобиться 10000 запросов к вебсервису? Объясни этот момент, я не понимаю какую проблему ты пытаешься описать.
Задача простая: есть коллекция (скажем, набор фильмов, или данные веб-сервиса), нужно выбрать 20 элементов, которые чаще всех других обрабатываются. Счётчики к элементам приделывать можно. Перечислять всю коллекцию или загружать её в память — нельзя.
Мутабельным решением, без linq, является массив из 20 наиболее часто используемых (т.е. с наибольшими значениями счётчика), в который делается (или не делается) вставка при открытии очередного элемента коллекции.
Решением на linq является... Да, собственно ничего не является, заведение СУБД (в видеоплеере, LOL!) или загрузка всей коллекции в память (дофига дисковых операций или запросов к веб-сервису).
Здравствуйте, samius, Вы писали:
b-3>>>>Перед людьми, отказывающимися думать, пробовать и ошибаться, извиняться не в моих правилах, уважаемый S>>>Если с этой фразы начинать собеседование, то сэкономишь время и себе и собеседователям. b-3>>А что будет? S>Сэкономишь время
Кандидат развернётся и убежит со словами "как вы смеете! я никогда не ошибаюсь! А думать — так это вообще не моё" ?
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Сэкономишь время b-3>Кандидат развернётся и убежит со словами "как вы смеете! я никогда не ошибаюсь! А думать — так это вообще не моё" ?
В случае когда ты собеседователь, лучше для кандидата будет убежать. Любому. Вне зависимости от знаний и умений. ИМХО.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, Паблик Морозов, Вы писали:
J>Не, все не так просто. Что бы первокурсник мог решить эту задачу, у него в курсе должны быть эти списки.
Ну то, что в IT полно каких-то непонятных людей с улицы, без образования, фундаментальных знаний и навыков написания программ мне и так известно. Таких и следует отсеивать.
J>А первокурсник без опыта и знания подводных камней может вам нагородить таких SQL запросов...
Человек, который не соображает, еще быстрее нагородит фигни. Написание SQL-запросов — это типичная задачка на логику.
Здравствуйте, samius, Вы писали:
S>>>Сэкономишь время b-3>>Кандидат развернётся и убежит со словами "как вы смеете! я никогда не ошибаюсь! А думать — так это вообще не моё" ? S>В случае когда ты собеседователь, лучше для кандидата будет убежать. Любому. Вне зависимости от знаний и умений. ИМХО.
Может, напишите конкретные аргументы, чтобы я их мог передать своему работодателю? А то, понимаешь, отвлекают от отладки кода с цикломатической метрикой "двадцать одна", заставляют в какой-то болтологии участвовать
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>>>Сэкономишь время b-3>>>Кандидат развернётся и убежит со словами "как вы смеете! я никогда не ошибаюсь! А думать — так это вообще не моё" ? S>>В случае когда ты собеседователь, лучше для кандидата будет убежать. Любому. Вне зависимости от знаний и умений. ИМХО. b-3>Может, напишите конкретные аргументы, чтобы я их мог передать своему работодателю? А то, понимаешь, отвлекают от отладки кода с цикломатической метрикой "двадцать одна", заставляют в какой-то болтологии участвовать
Аргументы пусть ищет работодатель. А я лишь могу привести факты, которые привели меня к такому мнению и цепочку предположений
1) неумеренный и необоснованный пафос в случае нерешения задачи ganjustas-а
2) бредовые лозунги в голове по поводу линка и иммутабельности, мешающие делать адекватную оценку применения технологии
Это приводит к мысли что единственный шанс чего-то добиться под твоим началом — скомпрометировать тебя в глазах твоего начальства при условии адекватности оного. Но адекватность твоего начальства скомпрометирована тем что ты ведущий.
Отсюда и вывод, что при наличии выбора следует делать выбор не в пользу работы в твоей конторе.
Здравствуйте, samius, Вы писали:
S>Аргументы пусть ищет работодатель. А я лишь могу привести факты, которые привели меня к такому мнению и цепочку предположений S>1) неумеренный и необоснованный пафос в случае нерешения задачи ganjustas-а
Т.е. необоснованного пафоса ganjustas-а Вы предпочитаете в упор не замечать?
Я вот тоже пытаюсь, но иногда существование мира программистов-отчётописателей, презирающих метод assert, оператор switch и цикл for, заставляет меня выступить с речью, напоминающей киркоровское "меня раздражает ваша розовая кофточка, ваши (O)(O) и ваш микрофон!" .
Выглядит, конечно, это не очень красиво — кому, казалось бы, та розовая кофточка мешала. Но обсуждать эту тему иногда всё же надо, иначе такие люди окружат тебя и будут тебе подсовывать на рабочий стол тушь и прокладки программы, сканирующие 10000 тыщ файлов для выполнения запроса на Linq S>2) бредовые лозунги в голове по поводу линка и иммутабельности, мешающие делать адекватную оценку применения технологии
Ну, Вы найдёте там ещё много "бредовых лозунгов", например что не любое приложение должно строиться вокруг релятивистской базы данных. О ужас, скажете Вы, как же можно вручную писать model layer. Нет model layer без ORM-а, и Linq2Sql пророк его. Ещё можно про rich модель поспорить с ganjustas-ом, это его любимая тема, не делаю так только потому, что с ним принципиально согласен — но троллинг на RSDN на эту тему меня задевает. Ну и так далее.
Считаю, что вместе должны работать совместимые люди
S>Это приводит к мысли что единственный шанс чего-то добиться под твоим началом — скомпрометировать тебя в глазах твоего начальства при условии адекватности оного. Но адекватность твоего начальства скомпрометирована тем что ты ведущий. Отсюда и вывод, что при наличии выбора следует делать выбор не в пользу работы в твоей конторе.
Похоже, моя фирма осталась без консультаций на тему подбора кадров
Забанен с формулировкой "клинический дисидент".
Re[7]: Задача на собеседовании - обращение списка.
просмотрел, правда по-диагонали, но списков не нашел. Обычные задачи на обычные знания. Если человек их не умеет решать, его из школы не надо выпускать, не то что на работу брать.
J>>Далеко не все программисты не то что не закончили программистский факультет, но и вообще имеют высшее образование. ПМ>Ну то, что в IT полно каких-то непонятных людей с улицы, без образования, фундаментальных знаний и навыков написания программ мне и так известно. Таких и следует отсеивать.
я не их имел в виду. А хороших программистов, которые просто АТД "список" не изучали и которые вам в ответ напишут List.Reverse, имея в виду List из библиотеки с которой они постоянно работают.
J>>А первокурсник без опыта и знания подводных камней может вам нагородить таких SQL запросов... ПМ>Человек, который не соображает, еще быстрее нагородит фигни.
он не "не соображает", он никогда не слышал о списке. Если вы ему вводную лекцию прочитаете, он легко решит вашу задачу.
ПМ>Написание SQL-запросов — это типичная задачка на логику.
э... вы уверены что вам нужна таблица из миллиона элементов, выдаваемая "логичным" запросом из теоретического курса по реляционным отношениям из базы не оптимизированной к запросам?
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>он не "не соображает", он никогда не слышал о списке. Если вы ему вводную лекцию прочитаете, он легко решит вашу задачу.
Вводную лекцию читаю и подсказки даю. Не помогает.
J>э... вы уверены что вам нужна таблица из миллиона элементов, выдаваемая "логичным" запросом из теоретического курса по реляционным отношениям из базы не оптимизированной к запросам?
Нет, не уверен, вообще не вижу никакой логической связи.
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Ты вообще-то можешь не продолжать отстаивать свою точку зрения, так как уже признал что она является лишь капризом, а не необходимостью.
ПМ>Нет, умение писать алгоритмы хотя бы на уровне старшеклассника является необходимостью для человека, который работает программистом. Неумение программировать — профнепригодность.
Практика показывает что много программистов не умеют писать сложные алгоритмы без гугла и пишут отличный код.
Re[35]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
b-3>>>Подразумеваю набор убеждений разработчика, который влияют на его результат. Ты его уже замечательно поскипал: b-3>>>должен быть только один способ сделать это b-3>>>если можно сделать иммутабельно — делай иммутабельно b-3>>>ФП лучше всего, а linq — почти ФП, нафиг думать, пишем на linq! b-3>>>могу всё это хорошо расширить, добавив cюда kiss, но это нужно начинать отдельную тему G>>Так это ты сам придумал. Ты уверен что кто-то придерживается такой философии? b-3>Так это я не сам придумал, а регулярно вижу на практике. Даже мой визави ganjustas этим грешен и пишет свои Sharepoint solutions, по слухам, приблизительно так.
Я бы радовался если бы можно было в шарике нормаьно linq писать. Но он к сожалению полн кода из дремучего 2003 года, который является оберткой еще более дремучего нативного кода из 2001 года.
Linq там реализован крайне криво и использовать его нельзя.
Но это лирика. А то что ты видишь на практике заключается как раз в незнании linq. Глупо говорить что X — плохо, когда некоторая группа людей не знает X.
b-3>>>Прочитай ветку, которую мы обсуждаем, на примере B2B — сервиса и видеоплеера) Если ты считаешь, что ради сокращения подобного кода до .sort или .orderby можно делать 10 тыщ запросов к вебсервису или сканировать список из дохрена файлов — ты будешь прав далеко не всегда) G>>Не понял, почему для сортировки 20 элементов может понадобиться 10000 запросов к вебсервису? Объясни этот момент, я не понимаю какую проблему ты пытаешься описать. b-3>Задача простая: есть коллекция (скажем, набор фильмов, или данные веб-сервиса), нужно выбрать 20 элементов, которые чаще всех других обрабатываются. Счётчики к элементам приделывать можно. Перечислять всю коллекцию или загружать её в память — нельзя.
Если перечислять нельзя при чем тут linq? Он на не-ienumerable не работает.
Решение: сделать свою коллекцию пар счетчик-количество обращений. Положить в базу, сделать индексы, запросом получать первые 20 по индексу.
Коллекцию можно как локально, так и удаленно хранить в зависимость от того что можно модифицировать.
О linq не сказал ни слова. Можно реализацию как с linq делать, так и без оного.
b-3>Мутабельным решением, без linq, является массив из 20 наиболее часто используемых (т.е. с наибольшими значениями счётчика), в который делается (или не делается) вставка при открытии очередного элемента коллекции.
А где коллекция хранится между запусками?
b-3>Решением на linq является... Да, собственно ничего не является, заведение СУБД (в видеоплеере, LOL!) или загрузка всей коллекции в память (дофига дисковых операций или запросов к веб-сервису).
А хранить коллекцию где? В реестре? А как потом top20 получить? Это меньше дисковых операций потребует?
b-3>Собственно всё
Ага, ты сам себе противоречить начал. Получается что в твоей задаче linq и приткнуть некуда.
А если приткнуть, то это СУБД и поднимать все в память.
А если linq не притыкать, то тоже самое получится.
Re[36]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>А хранить коллекцию где? В реестре? А как потом top20 получить? Это меньше дисковых операций потребует?
Да никак не получать. Нигде не хранить. Сразу же формировать top20. Без баз данных, без linq, без всей фигни, без чистых функций, без перспективной потокобезопасности, зато о ужас — с циклом, сортировку напоминающем. Потому что в простом видеоплеере, например, база данных не нужна, да и в библиотеке-адаптере вебсервиса тож.
G>Ага, ты сам себе противоречить начал. Получается что в твоей задаче linq и приткнуть некуда.
Да. Именно так. Linq в этой задаче не нужен, лучше написать вместо него простой код. А человеку, который на такое не способен и на собеседовании это делать отказывается — ну, с чистой совестью искать работу, где пишут по принципу "не изобретайте ничего — есть только один способ сделать это".
Забанен с формулировкой "клинический дисидент".
Re[2]: Задача на собеседовании - обращение списка.
V>Углубимся. Контекст данных веток — собеседование. Посылка: каждый собеседующий берет на работу людей, которые мыслят схожим V>с ним образом. Даже не так, каждый ДОЛЖЕН брать людей, которые мыслят схожим с ним образом. Иначе они тупо не сработаются — это V>очевидно. Именно поэтому методы ПМ и gj должны быть разными (хотя и могут пересекаться). Именно поэтому "задавание задачек" V>на собеседовании для ПМ — один из работающих инструментов, а для gj — бессмысленная херня.
Не передергивай. Я не говорю что задавание задачек — херня. Я говорю что задавание задачек на переворачивание списка и гномов в шапках — херня.
Я даю задачи, которые ближе к реальной работе.
А задачи на шапки гномов и переворачивание списков на собеседовании — херня полнейшая, потому что в 90% случаев она решается предварительным гуглением, а не соображалкой.
V>философия. Какой подход лучше? Ответа нет. Да, подход ПМ потенциально может решить бОльшее количество задач, с более широким спектром. V>С другой стороны, подход gj выигрывает в краткосрочной перспективе и в среднем дает больше денег для исполнителя. Но есть еще V>другие ниши — медицина/авиация/космос, даже обычная промышленность, где gj отфильтруются по определению.
Рассказываю тайну — нету "других ниш", все ПО пишется одинаково. Где-то больше код проверяется, где-то меньше, где-то больше объемы данных, где-то меньше, где-то навороченные фреймворки, где-то надо и сортировку вручную писать. Но сути это не меняет.
Кстати больше говнокода, чем в АСУТП я в жизни не видел. Вот тебе и "промышленность".
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, samius, Вы писали:
S>>Аргументы пусть ищет работодатель. А я лишь могу привести факты, которые привели меня к такому мнению и цепочку предположений S>>1) неумеренный и необоснованный пафос в случае нерешения задачи ganjustas-а b-3>Т.е. необоснованного пафоса ganjustas-а Вы предпочитаете в упор не замечать?
У него пафоса значительно меньше и он гораздо более обоснован.
b-3>Я вот тоже пытаюсь, но иногда существование мира программистов-отчётописателей, презирающих метод assert, оператор switch и цикл for, заставляет меня выступить с речью, напоминающей киркоровское "меня раздражает ваша розовая кофточка, ваши (O)(O) и ваш микрофон!" . b-3>Выглядит, конечно, это не очень красиво — кому, казалось бы, та розовая кофточка мешала. Но обсуждать эту тему иногда всё же надо, иначе такие люди окружат тебя и будут тебе подсовывать на рабочий стол тушь и прокладки программы, сканирующие 10000 тыщ файлов для выполнения запроса на Linq
тут не с программистами обсуждать надо. Может для начала отдыхать больше, или работу сменить...
S>>2) бредовые лозунги в голове по поводу линка и иммутабельности, мешающие делать адекватную оценку применения технологии b-3>Ну, Вы найдёте там ещё много "бредовых лозунгов", например что не любое приложение должно строиться вокруг релятивистской базы данных. О ужас, скажете Вы, как же можно вручную писать model layer. Нет model layer без ORM-а, и Linq2Sql пророк его. Ещё можно про rich модель поспорить с ganjustas-ом, это его любимая тема, не делаю так только потому, что с ним принципиально согласен — но троллинг на RSDN на эту тему меня задевает. Ну и так далее.
Срочно выгружать лозунги из головы. Они не помогают решать задачи, а отвлекают на борьбу с ними и за них.
b-3>Считаю, что вместе должны работать совместимые люди
Считаю, что нужно прилагать усилия над собой, что бы быть совместимым. Хотя бы пока есть надежда на взаимность.
S>>Это приводит к мысли что единственный шанс чего-то добиться под твоим началом — скомпрометировать тебя в глазах твоего начальства при условии адекватности оного. Но адекватность твоего начальства скомпрометирована тем что ты ведущий. Отсюда и вывод, что при наличии выбора следует делать выбор не в пользу работы в твоей конторе. b-3>Похоже, моя фирма осталась без консультаций на тему подбора кадров
Я переживу это
Re[37]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, gandjustas, Вы писали:
G>>А хранить коллекцию где? В реестре? А как потом top20 получить? Это меньше дисковых операций потребует? b-3>Да никак не получать. Нигде не хранить. Сразу же формировать top20.
Каким образом? Откуда данные взять?
G>>Ага, ты сам себе противоречить начал. Получается что в твоей задаче linq и приткнуть некуда. b-3>Да. Именно так. Linq в этой задаче не нужен, лучше написать вместо него простой код.
Linq и есть простой код.
Хотя можешь свой "простой код" написать для такой задачи, посмотрим что проще будет.
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>А задачи на шапки гномов и переворачивание списков на собеседовании — херня полнейшая, потому что в 90% случаев она решается предварительным гуглением, а не соображалкой.
Моя практика говорит об обратном. А у тебя такой практики нет, так что твое заявление высосано из чьего-то пальца.
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Практика показывает что много программистов не умеют писать сложные алгоритмы без гугла и пишут отличный код.
ПМ>Тут идёт речь об алгоритме, доступному школьнику.
Алгоритм наименьшей подпоследовательности тоже доступен школьнику, однако его ты написать не можешь.
Re[30]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>А задачи на шапки гномов и переворачивание списков на собеседовании — херня полнейшая, потому что в 90% случаев она решается предварительным гуглением, а не соображалкой.
ПМ>Моя практика говорит об обратном. А у тебя такой практики нет, так что твое заявление высосано из чьего-то пальца.
Твоя практика показывает что ты не способен решить задачу в том же духе с которой до этого не сталкивался. При этом я уверен что у тебя уровень повыше чем у большинства кандидатов.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Алгоритм наименьшей подпоследовательности тоже доступен школьнику, однако его ты написать не можешь.
ПМ>Это ты из чьего пальца высосал?
Ты не представил опровержения. Даже намеков не было. Так что вполне могу считать именно так.
Re[32]: Задача на собеседовании - обращение списка.
Когда-то в школе я любил решать задачки со всероссийских и международных олимпиад по программированию. Хороший ли я был программист тогда? Да в общем-то никакой. Потому что решение алгоритмических задач нередко на практике востребовано минимально, и в реальных проектах нужны другие скиллы. И школьный навык написания алгоритмов совсем не мешал мне выдавать тонны говнокода в первые годы моей работы.
Решение алгоритмических задач это навык. Где-то он нужен, где-то нет. И большинство программистов смогут его прокачать до какого-то приемлемого уровня, если будет такая необходимость. Как могут люди, для которых алгоритмические задачи сложны, работать программистами? Да в общем-то прекрасно могут. Очень возможно, что многие из тех, кого вы отсеиваете прекрасно справляются со своей работой, просто их работа состоит не в переворачивании списков.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, MozgC, Вы писали:
MC>Когда-то в школе я любил решать задачки со всероссийских и международных олимпиад по программированию. Хороший ли я был программист тогда? Да в общем-то никакой. Потому что решение алгоритмических задач нередко на практике востребовано минимально, и в реальных проектах нужны другие скиллы. И школьный навык написания алгоритмов совсем не мешал мне выдавать тонны говнокода в первые годы моей работы. MC>Решение алгоритмических задач это навык. Где-то он нужен, где-то нет. И большинство программистов смогут его прокачать до какого-то приемлемого уровня, если будет такая необходимость. Как могут люди, для которых алгоритмические задачи сложны, работать программистами? Да в общем-то прекрасно могут. Очень возможно, что многие из тех, кого вы отсеиваете прекрасно справляются со своей работой, просто их работа состоит не в переворачивании списков.
Я же не прошу решить олимпиадную задачу, для которой действительно может потребоваться знание алгоритмов, и до решение которой может быть сложно догадаться. Я прошу перевернуть чёртов список. По-моему если программист даже этого сделать не может — то это клиника. По крайней мене это никак не сеньёр-девелопер, а в лучшем случае какой-нибудь настройщик шарепоинта.
Кстати, многие серьёзные организации (Майкрософт, Гугль, Фейсбук) отсеивают программистов по алгоритмическим задачам. Неверное не зря.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Я же не прошу решить олимпиадную задачу, для которой действительно может потребоваться знание алгоритмов, и до решение которой может быть сложно догадаться. Я прошу перевернуть чёртов список. По-моему если программист даже этого сделать не может — то это клиника. По крайней мене это никак не сеньёр-девелопер, а в лучшем случае какой-нибудь настройщик шарепоинта.
Они смогут это сделать, просто им нужна привычная обстановка (а не стрессовая ситуация — собеседование; у некоторых на собеседовании может даже мондраж начаться) и больше времени чем тем, кто чаще работает с написанием алгоритмов или увлекается этим.
ПМ>Кстати, многие серьёзные организации (Майкрософт, Гугль, Фейсбук) отсеивают программистов по алгоритмическим задачам. Неверное не зря.
Они еще про гору Фудзи спрашивают(ли), тоже на вооружение возьмёте?
Знаете что смущает в ваших сообщениях? Вы не допускаете другого мнения. Вам говорят, что собеседование может быть стрессом для программиста, что 5 минут ему может быть мало, что решение алгоритмических задач — это навык, который можно прокачать при необходимости (и тогда ваши задачки будут решаться за 60 секунд), что программист может успешно работать не перевернув список за 5 минут, что в работе программиста есть куча других важных навыков. А вы все одно — "не может перевернуть список — это клиника, нам такие идиоты не нужны". Ну раз вам не нужны — не берите, зачем на форуме что-то обсуждать тогда? А если обсуждаете — то почему совсем не принимаете чужие мнения и чужой опыт?
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, MozgC, Вы писали:
MC>Они смогут это сделать, просто им нужна привычная обстановка (а не стрессовая ситуация — собеседование; у некоторых на собеседовании может даже мондраж начаться) и больше времени чем тем, кто чаще работает с написанием алгоритмов или увлекается этим.
Поэтому я даю больше времени, подсказки и т.п. Кстати, некоторые ведь могут. И еще качество алгоритма часто коррелирует с качеством оформления (то, как человек даёт имена переменным и т.п.) В общем, хорошего программиста обычно сразу видно, даже на такой задаче, и я склоняюсь к выводу, что если программист хороший — то он хорош во всём, а если плохой — то и код коряво пишет, и примитивный алгоритм реализовать не может.
MC>Они еще про гору Фудзи спрашивают(ли), тоже на вооружение возьмёте?
Возьму. Не вижу причин не брать на вооружение зарекомендовавшие себя практики.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
MC>>Они еще про гору Фудзи спрашивают(ли), тоже на вооружение возьмёте? ПМ>Возьму. Не вижу причин не брать на вооружение зарекомендовавшие себя практики.
Начнём с того, что ты знаешь только то, что такой вопрос задают. Но совершенно не знаешь зачем они его задают, и как они именно они трактуют рассуждения собеседуемого.
Так что "зарекомендовавшая" это очень громко сказано.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
M>>Данные берутся из базы. Но необходимые запросы выполнятся крайне медленно: кретиев очень много, они строятся динамически, индексы использовать не получается...
G>Выделенное случается крайне редко и является признаком плохого проектирования.
А мне нравится, работать, в принципе, удобно. А если надо какой-нить алгоритм руками написать, то ничего стращного в этом не вижу, основные проблемы не в этом
M>>Да и если запрос должен вернуть примерно 60% всех элементов, то индекс просто бесполезен. Соответственно на основании данных из базы строится SHM-объект, из которого C++-шная утилита, часто методом тупого перебора, выполняет нужные запросы.
G>Ниче не понял, но понял что работает неэффекттивно. Эффективно заставлять базу считать, она умет оптимизировать считывание с диска, в отличие от программного кода.
База более чем уступает по скорости C++. Чтение с дисков это неоправданные накладные расходы, я уже писал про SHM. Более того, все это хорошо масштабируется, и таких вспомогательнх серверов можно поставить хоть сотню.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
ПМ>>Чтобы деревья балансировать, надо действительно алгоритм знать, сам человек его за пять минут не изобретёт. G>А чем разворот списка хуже?
да ладно тебе настолько преувеличивать... Разворот списка — это банальная задача на обмен значений у двух переменных при помощи третьей
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
J>>он не "не соображает", он никогда не слышал о списке. Если вы ему вводную лекцию прочитаете, он легко решит вашу задачу. ПМ>Вводную лекцию читаю и подсказки даю. Не помогает.
ну, если человек, после объяснения что такое список, не может решить задачу на обмен значений у двух переменных, тогда его действительно надо к ЕГЭ посылать
J>>э... вы уверены что вам нужна таблица из миллиона элементов, выдаваемая "логичным" запросом из теоретического курса по реляционным отношениям из базы не оптимизированной к запросам? ПМ>Нет, не уверен, вообще не вижу никакой логической связи.
первокурсник, обладающий теоретическими знаниями, может писать не оптимальные запросы, просто потому что у него нет опыта и знаний какие именно запросы оптимальны. Если вы готовы подождать пока он этого опыта наберется, то можно брать и первокурсника.
Re[5]: Задача на собеседовании - обращение списка.
26.02.2012 1:48, Здравствуйте, Паблик Морозов : > Поэтому я даю больше времени, подсказки и т.п.
А можно про подсказки подробнее? Блин, это задача на понимание
указателей, коих ни в шарпе ни в жабе нет. Вообще нет, в принципе.Ты
вгонишь любого вменяемого программера в ступор. В management коде
избыточность получается жуткая, по сравнению с плюсами, где оригинальная
задача имеет смысл. Зачем?
Posted via RSDN NNTP Server 2.1 beta
Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[3]: Задача на собеседовании - обращение списка.
_>>Паблик Морозов, а озвучьте плз бюджет. _>>"вроде конкурентноспособная" это мало о чем говорит. _>>Для некоторых и 40-50 тыс. для Москвы конкурентноспособная. _>>А вдруг после этого всё станет на свои места? (в плане понимания чего-то в этой жизни)
ПМ>Ну, допустим, от 100т.р. на руки.
Тада все нормально. К нам на такие деньги большинство кандидатов тоже конструктор от деструктора не отличают . Видимо, рынок сейчас такой.
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Что могу сказать. Все зависит от постановки задачи. Прочитав несколько дней назад титульный вопрос, я был уверен что задача сводится к
for i in range( list.count() / 2 ) :
list[ i ].swap( list[ list.count() - 1 - i ] )
Затем, немного почитав ветку, я с удивлением увидел внутренности списков, next / previous и прочие знакомые, но неожиданные здесь вещи. Есть подозрение, что вопрос в формулировке задачи. Кандидаты не понимают, что вы от них хотите.
Также, многие разработчики работают на достаточно высоком уровне. Лично я, несмотря на более чем пятнадцатилетний опыт коммерческой разработки, внутренности списка последний раз видел лет пять назад. И спроси меня сейчас без ошибок реализовать на бумажке даже простейший односвязный список — могу и не осилить.
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Я довольно много интервьюирую, и делаю следующим образом. Есть вопросник, в начале которого стоит ряд простых устных вопросов, призванных провести первоначальную фильтрацию. У кандидата последовательно спрашивают "почему не принято всю программу записывать в один большой файл исходника", "зачем нужны классы", "если разделить функциональность программы на два класса — как они смогут взаимодействовать между собой?". Затем просёт на листочке набросать интерфейс класса-обертки для работы с файом с простейшей функциональностью — получения размера этого файла.
В целом за эти пять-десять минут складывается представление о том, насколько человек разбирается в написании программ. Если есть неуверенность — задаются пара вопросов по профильным технологиям (у нас это сетка и многопоточность). Если видно, что кандидат не тянет — то интервю завершается со словами "собеседование двухфазное, вы успешно прошли первую фазу, в течении некоторого времени мы еще будем интервьюировать кандидатов, и когда всех посмотрим, то наиболее понравившихся пригласим более плотно пообщаться и вручить оффер."
Если кандидат тянет, то с исходных вопросов выходим уже на более интересные — работы с потоками, контроль ошибок, взаимодействие частей программы и прочее.
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
L>>Какой-то совершенно новый для меня синтаксист java/C#-а. G>Тем не менее ты все понял.
Нет, не понял какое отношение реаоизация списков в haskell/c имеет отношение к java/C#.
L>>>>Не нужно уходить в высокии материи и пытаться на основе того, что список пожет быть реализован как рекурсивная структура данных, делать вывод, что это неотъемлемое свойство списка. G>>>А оно так и есть, даже если ты этого не знаешь. L>>Нет, это не так. G>Докажи.
Тут и доказывать нечего. См. пример списков в .Net/java. Они совершенно нерекурсивны по реализации.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Ромашка, Вы писали:
Р>24.02.2012 14:47, Здравствуйте, Lloyd : >> IEnumerable — это итератор, а не список. Список — это List.
Р>List в C#, как меня недавно ткнули носом, нифига не список, а массив.
Нет, это тот, кто тебя ткнул, переносит свой плюсовый опыт, не задумываяь на другие области.
Посмотрите, что такое список в википедии и ткните его самого.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Философ, Вы писали:
L>>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
Ф>а в моём универе вычмат начался на третьем курсе. Ф>сразу после матана
Вы школе учиться надо было, а не пивасик с приятелями квасить.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Философ, Вы писали:
L>>Меня однажды спросили про то, как интеграл численно считается. Выяснилось, что процентов 80 соискателей не в состоянии ответить на вопрос из школьной программы.
Ф>Большая часть людей забывает вычмат сразу после здачи, ибо нафиг не нужен (в болшинстве случаев). Ф>это не школьная программа
Задача "численно посчитать интеграл" — вполне себе школьная. За подтверждением сходите в ближайший книжный и откройте учебник за 9-10 класс.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, a.v.v, Вы писали:
AVV>>понял, вот это конечно более тревожный знак чем невозможность написать код
ПМ>Я отношу их к второстепенным, хозяйке на заметку. Напирмер, если идентификаторы сильно безграмотные, можно что-нибудь по-английски спросить, а то вдруг он еще английского не знает.
Лучше сразу на сербскохорватском, а то вдруг и его не знает.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Какой ужас этот ваш додиез
как-то так, за 5 минут, правда не тестил:
int max_subsequence(int arr_size, int * values, int seq_size)
{
assert(arr_size >= seq_size);
int pos_begin=0;
int pos_end=seq_size-1;
int max_pos=0;
int sum=0;
for(int i = 0;i< seq_size;i++)
sum+=values[i];
int max_sum = sum;
while (pos_end < arr_size-1)
{
sum = sum - values[pos_begin++] + values[++pos_end];
if (max_sum < sum)
{
max_pos = pos_begin;
max_sum = sum;
}
}
return max_pos;
}
ЗЫ. алгоритма в глаза не видел, просто как-то в голову пришло
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: Задача на собеседовании - обращение списка.
Мне лень лезть в рефлектор и смотреть как оно реализовано. Даже если как
классический двунаправленный список, то пофиг -- задача все равно
выродилась в убожество.
Posted via RSDN NNTP Server 2.1 beta
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить?
Всё что написали — читать не стал... Так не могут или сразу отказываются продолжать интервью? А про "гномов" — зачет! Сразу вспоминаю одно из своих собеседований... Не удержался тогда — "макнул" мальчика в... Но хоть его коллеги от души посмеялись Похоже он и их зае...ь успел своим "пафосом"
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Ops, Вы писали:
Ops>>
Ops>>int max_subsequence(int arr_size, int * values, int seq_size)
Ops>>
Ops>>ЗЫ. алгоритма в глаза не видел, просто как-то в голову пришло
S>А что такое seq_size? Какая задача решалась?
Поиск наибольшей (или наименьшей, тут непринципиально) последовательности за 1 проход.
Где-то выше ganjustas сформулировал.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, samius, Вы писали:
S>>А что такое seq_size? Какая задача решалась? Ops>Поиск наибольшей (или наименьшей, тут непринципиально) последовательности за 1 проход. Ops>Где-то выше ganjustas сформулировал.
Разве в той формулировке была указана длина последовательности?
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>первокурсник, обладающий теоретическими знаниями, может писать не оптимальные запросы, просто потому что у него нет опыта и знаний какие именно запросы оптимальны. Если вы готовы подождать пока он этого опыта наберется, то можно брать и первокурсника.
А какой тут нужен опыт? Оптимальность прямо следует из теории. А вот если человек не знает, как работает join, например, и не сможет назвать сложность поиска по индексу (сложность операций в деревьях и хеш-таблицах — это второй вопрос после разворота списка, неправильный ответ на который приводит к преждевременному завершению интервью) — то никакой опыт ему не поможет.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Ops, Вы писали:
Ops>Лучше сразу на сербскохорватском, а то вдруг и его не знает.
Сербохорвацкий нужен в сербскохорватии, а в программировании нужен английский (единственное исключение — платформа 1С, но это даже не программированием называется, а конфигурацией).
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Eye of Hell, Вы писали:
EOH>Тада все нормально. К нам на такие деньги большинство кандидатов тоже конструктор от деструктора не отличают . Видимо, рынок сейчас такой.
А сколько надо платить, чтобы отличал?
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
BBI>Здравствуйте, Паблик Морозов, Вы писали:
MC>>>Они еще про гору Фудзи спрашивают(ли), тоже на вооружение возьмёте? ПМ>>Возьму. Не вижу причин не брать на вооружение зарекомендовавшие себя практики. BBI>Начнём с того, что ты знаешь только то, что такой вопрос задают. Но совершенно не знаешь зачем они его задают, и как они именно они трактуют рассуждения собеседуемого.
Именно поэтому я его и не задаю. Когда разберусь как это работает, буду использовать.
BBI>Так что "зарекомендовавшая" это очень громко сказано.
Non sequitur. Практика как раз есть. Просто я не владею технологией.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Ромашка, Вы писали:
Р>А можно про подсказки подробнее? Блин, это задача на понимание Р>указателей, коих ни в шарпе ни в жабе нет.
Нифига себе нет! Все объекты передаются по ссылкам. Адресной арифметики нет, но она и не нужна.
Р>избыточность получается жуткая, по сравнению с плюсами, где оригинальная
Нет никакой избыточности, всё как в C или в С++, один в один (только без уродских звёздочек и стрелочек).
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
EOH>>Тада все нормально. К нам на такие деньги большинство кандидатов тоже конструктор от деструктора не отличают . Видимо, рынок сейчас такой.
ПМ>А сколько надо платить, чтобы отличал?
Самое абсурдное, имхо, увеличение планки только увеличит кол-во неадекватов, т.к. для них это будет дополнительный стимул попытаться (ого, дежищщи какие), а нормальный разработчик, адекватно оценивающий степень своей некомпетентности, сочтет предъявляемые требования чересчур жесткими для него.
Re[5]: Задача на собеседовании - обращение списка.
EOH>>Тада все нормально. К нам на такие деньги большинство кандидатов тоже конструктор от деструктора не отличают . Видимо, рынок сейчас такой. ПМ>А сколько надо платить, чтобы отличал?
Если бы я знал .
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>А сколько надо платить, чтобы отличал?
А ты уверен, что тебе действительно нужен человек, который будет отличать? В большинстве случаев, при грамотной постановке задач, подойдут разработчики чуть умнее обезьяны. Для остальных, крайней редких задач,, планку стоило бы, конечно, на 30-50% поднять.
Re[7]: Задача на собеседовании - обращение списка.
ПМ> Давать компьютер и закрывать в комнате на 3 часа, пока не напишет сапёр — издевательство.
Может и издевательство, но только так удастся проверить — способен ли человек реально что-то напрограммировать. Понятно, стресс и все такое — но это мелочи в сравнении с издевательскими вопросами.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Ромашка, Вы писали:
Р>>List в C#, как меня недавно ткнули носом, нифига не список, а массив.
L>Нет, это тот, кто тебя ткнул, переносит свой плюсовый опыт, не задумываяь на другие области.
Почему обязательно плюсовый? Не только плюсовики под списком подразумевают связный список. Как минимум все или значительная часть функциональщиков.
L>Посмотрите, что такое список в википедии и ткните его самого.
Да, в википедии написано что List — абстрактная структура данных, которая типично реализуется с помощью связных списоков или массивов (динамических массивов).
Там же написано
The name list is also used for several concrete data structures that can be used to implement abstract lists, especially linked lists.
Lists are typically implemented either as linked lists (either singly or doubly linked) or as arrays, usually variable length or dynamic arrays.
The standard way of implementing lists, originating with the programming language Lisp, is to have each element of the list contain both its value and a pointer indicating the location of the next element in the list.
Так какого надо было для частной реализации на динамическом массиве использовать имя, которое обозначается как для абстрактной структуры данных, так и для реализаций по типу связных списков, которые являются стандартной реализацией абстрактного списка?
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Нет, это тот, кто тебя ткнул, переносит свой плюсовый опыт, не задумываяь на другие области. S>Почему обязательно плюсовый? Не только плюсовики под списком подразумевают связный список. Как минимум все или значительная часть функциональщиков.
S>Так какого надо было для частной реализации на динамическом массиве использовать имя, которое обозначается как для абстрактной структуры данных, так и для реализаций по типу связных списков,
Я думаю, мотивация достаточно проста — для большинства случаев использования удобен список на основе массива, а раз так, то имеет смысл использовать более краткое название для такого типа списков.
S>которые являются стандартной реализацией абстрактного списка?
О каком таком стандарте вы говорите?
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Так какого надо было для частной реализации на динамическом массиве использовать имя, которое обозначается как для абстрактной структуры данных, так и для реализаций по типу связных списков,
L>Я думаю, мотивация достаточно проста — для большинства случаев использования удобен список на основе массива, а раз так, то имеет смысл использовать более краткое название для такого типа списков.
Если следовать такой логике, то Dictionary наверное тоже должен был бы называться по-короче?
S>>которые являются стандартной реализацией абстрактного списка?
L>О каком таком стандарте вы говорите?
Я говорю о стандартном способе реализации, который не я придумал. Цитату из википедии я приводил.
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Я думаю, мотивация достаточно проста — для большинства случаев использования удобен список на основе массива, а раз так, то имеет смысл использовать более краткое название для такого типа списков.
S>Если следовать такой логике, то Dictionary наверное тоже должен был бы называться по-короче?
Dictionary несколько затруднительно сократить, уже одно слово.
S>>>которые являются стандартной реализацией абстрактного списка?
L>>О каком таком стандарте вы говорите? S>Я говорю о стандартном способе реализации, который не я придумал. Цитату из википедии я приводил.
По какой причине должен быть выбран именно такой "стандарт"?
Re[16]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Если следовать такой логике, то Dictionary наверное тоже должен был бы называться по-короче?
L>Dictionary несколько затруднительно сократить, уже одно слово.
например, Map
S>>>>которые являются стандартной реализацией абстрактного списка?
L>>>О каком таком стандарте вы говорите? S>>Я говорю о стандартном способе реализации, который не я придумал. Цитату из википедии я приводил.
L>По какой причине должен быть выбран именно такой "стандарт"?
Тут вопрос в другом. По какой причине было выбрано отклонение от такого стандарта? Но это риторический вопрос. А я хотел спросить другое.
Вы посоветовали Ромашке ткнуть того, кто его ткнул, в википедию. Я не помню, кто его ткнул точно, но не исключаю что это мог быть я. Вот я сходил в википедию и увидел что там написано что стандартным способом реализации List является связный список. Что дальше?
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Если следовать такой логике, то Dictionary наверное тоже должен был бы называться по-короче?
L>>Dictionary несколько затруднительно сократить, уже одно слово. S>например, Map
Все равно одно слово.
L>>По какой причине должен быть выбран именно такой "стандарт"? S>Тут вопрос в другом. По какой причине было выбрано отклонение от такого стандарта? Но это риторический вопрос. А я хотел спросить другое.
Нет, вопрос звучит именно так, как я написал.
S>Вы посоветовали Ромашке ткнуть того, кто его ткнул, в википедию. Я не помню, кто его ткнул точно, но не исключаю что это мог быть я. Вот я сходил в википедию и увидел что там написано что стандартным способом реализации List является связный список. Что дальше?
Дальше надо включить думалку и проанализировать, что там написано.
Стандартный не значит единственный и тыкать кого-либо носом из-за того, что в Net-е реализация основана на массиве, а не на связанном списке — неправильно.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Eye of Hell, Вы писали:
_>>>Паблик Морозов, а озвучьте плз бюджет. _>>>"вроде конкурентноспособная" это мало о чем говорит. _>>>Для некоторых и 40-50 тыс. для Москвы конкурентноспособная. _>>>А вдруг после этого всё станет на свои места? (в плане понимания чего-то в этой жизни)
ПМ>>Ну, допустим, от 100т.р. на руки.
EOH>Тада все нормально. К нам на такие деньги большинство кандидатов тоже конструктор от деструктора не отличают . Видимо, рынок сейчас такой.
Снизь планку до 70 -- пойдут нормальные люди. Вообще парадоксально, ставил 120, шла в основном школота с хабра, которая вообще не разбиралась ни программировании, ни в математике. Поставил 70, нанял двух нормальных мужиков лет 30, работают, что не знают быстро осваивают. Есличо, то самый эффективный за последний год работник у меня работает за 40. Так что корреляция качества с ценой сейчас довольно странная.
<Подпись удалена модератором>
Re[18]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>например, Map
L>Все равно одно слово.
Но короче в 3,3 раза
L>>>По какой причине должен быть выбран именно такой "стандарт"?
L>Нет, вопрос звучит именно так, как я написал.
Я не предлагал выбирать стандартный способ реализации для дотнета. Имхо, достаточно было выбрать имя реализации, не вводящее в заблуждение.
S>>Вы посоветовали Ромашке ткнуть того, кто его ткнул, в википедию. Я не помню, кто его ткнул точно, но не исключаю что это мог быть я. Вот я сходил в википедию и увидел что там написано что стандартным способом реализации List является связный список. Что дальше?
L>Дальше надо включить думалку и проанализировать, что там написано.
Я дал результаты своего анализа в первом ответе
L>Стандартный не значит единственный и тыкать кого-либо носом из-за того, что в Net-е реализация основана на массиве, а не на связанном списке — неправильно.
Не согласен. Тыкать носом в это надо. Пусть не тыкать, но поправлять. Дело в том, что характеристики у списка и массива довольно сильно отличаются. И значительная часть разработчиков считает что List в дотнете выполнен в виде связного списка. Особенно, пришедших в дотнет с других языков/платформ. И виноваты в этом, как я считаю, не те люди, которые при встрече List забывают заглянуть в MSDN, а те, кто назвал динамический массив списком.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Паблик Морозов, Вы писали: ПМ>>http://ru.wikipedia.org/wiki/список_(информатика) MC>По-моему, глупо собеседовать по википедии. В конкретном языке "список" ("list") или любое другое понятие может иметь значение, не совпадающее с мнением википедии.
Тут даже не в википедии дело. Собеседование по терминам это глупость в принципе.
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>>>По какой причине должен быть выбран именно такой "стандарт"?
L>>Нет, вопрос звучит именно так, как я написал. S>Я не предлагал выбирать стандартный способ реализации для дотнета. Имхо, достаточно было выбрать имя реализации, не вводящее в заблуждение.
Имя List и так никого не вводит в заблуждение, за исключением тех, кто ошибочно считает, что реализация списка обязательно должна быть основана на связанном списке.
S>>>Вы посоветовали Ромашке ткнуть того, кто его ткнул, в википедию. Я не помню, кто его ткнул точно, но не исключаю что это мог быть я. Вот я сходил в википедию и увидел что там написано что стандартным способом реализации List является связный список. Что дальше?
L>>Дальше надо включить думалку и проанализировать, что там написано. S>Я дал результаты своего анализа в первом ответе
L>>Стандартный не значит единственный и тыкать кого-либо носом из-за того, что в Net-е реализация основана на массиве, а не на связанном списке — неправильно.
S>Не согласен. Тыкать носом в это надо. Пусть не тыкать, но поправлять. Дело в том, что характеристики у списка и массива довольно сильно отличаются. И значительная часть разработчиков считает что List в дотнете выполнен в виде связного списка.
Приведите ссылки на исследования, подтверждающие это. По моим наблюдениям, все знаю, что внутри у List-а как массивы.
S>Особенно, пришедших в дотнет с других языков/платформ. И виноваты в этом, как я считаю, не те люди, которые при встрече List забывают заглянуть в MSDN, а те, кто назвал динамический массив списком.
А по-моему, виноваты те, кто тащат с собой нерелевантный опыт и на основе него делает слишком большие допущения.
Re[20]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Я не предлагал выбирать стандартный способ реализации для дотнета. Имхо, достаточно было выбрать имя реализации, не вводящее в заблуждение.
L>Имя List и так никого не вводит в заблуждение, за исключением тех, кто ошибочно считает, что реализация списка обязательно должна быть основана на связанном списке.
Я не считаю что реализация списка должна быть основана на связном списке. Я считаю что реализация списка, основанная не на связном списке, не должна носить имя List.
L>Приведите ссылки на исследования, подтверждающие это. По моим наблюдениям, все знаю, что внутри у List-а как массивы.
Ссылки на исследования не дам, но сам регулярно сталкиваюсь с людьми, введеными в заблуждение.
S>>Особенно, пришедших в дотнет с других языков/платформ. И виноваты в этом, как я считаю, не те люди, которые при встрече List забывают заглянуть в MSDN, а те, кто назвал динамический массив списком.
L>А по-моему, виноваты те, кто тащат с собой нерелевантный опыт и на основе него делает слишком большие допущения.
Нерелевантный опыт — это динамический массив, названный списком.
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>>>Я просто напомню, что выбирать "лучшие 20" из 10000 элементов, Linq.Enumerable без загрузки в память всей коллекции и полной её сортировки не умеет ва-а-аще. S>>Но содержит все кубики, необходимые для сборки решения без полной сортировки в том числе. Загрузить всю коллекцию придется, но не сразу всю.
b-3>Пользователь будет очень рад, когда открытие окошка "♥ МОИ ЛЮБИМЫЕ ФИЛЬМЫ ♥" будет начинаться с >> Загрузить всю коллекцию придется, но не сразу всю. b-3>секунд так на двадцать пять, и конечно же купит Ваш плеер
Если список не отсортированный, то в любом случае придётся просматривать все элементы. Т.е. список придётся весь загрузить в память. При этом не обязательно это делать сразу для всех элементов, можно грузить частями, что во многих случаях может сильно ускорить работу.
Re[33]: Задача на собеседовании - обращение списка.
G>>Ты не представил опровержения. Даже намеков не было. Так что вполне могу считать именно так. ПМ>А почему я должен их предоставлять? Ты сделал утверждение, значит бремя доказательства лежит на тебе. Иначе это просто очередная чушь.
у него 90% постов чушь и попытка загнать собеседника в угол, делая его виноватым и в чем-то обязанным
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>И кому нужна эта объективность? Не троллинга ради — это действительно моя имха. Если человек тебе не нравится — по каким-то субъективным признакам — то и не стоит его брать, работать-то с человеком будешь, а не калькулятором разворачивающихся списоков. Вот я, например, сильно не люблю скользких или врущих людей, если вместо ответа "не знаю" начинают молоть чушь в надежде угадать (особенно вчерашние студенты эти страдают) — гарантированно не возьму, а того кто "не знаю" могу вполне взять по совокупности других вопросов. Или если человек "быкует" — пусть он хоть десятью способами список развернет, я с ним работать не буду.
Естественно, если человек не нравится — то лучше не брать. Если кандидат на собеседование пришёл быковать, то это вообще диагноз.
Просто возможна другая крайность — человек работу не потянет, но его берут, т.к. он понравился. Потом, не смотря на замечательный характер, он будет раздражать всех, кто с ним будет работать.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
EOH>>>Тада все нормально. К нам на такие деньги большинство кандидатов тоже конструктор от деструктора не отличают . Видимо, рынок сейчас такой. ПМ>>А сколько надо платить, чтобы отличал? L>Самое абсурдное, имхо, увеличение планки только увеличит кол-во неадекватов, т.к. для них это будет дополнительный стимул попытаться (ого, дежищщи какие), а нормальный разработчик, адекватно оценивающий степень своей некомпетентности, сочтет предъявляемые требования чересчур жесткими для него.
интересно, а если обратить понятие "испытательный срок"... То есть выставить планку по рынку, но меньше той, которую готовы платить, и не называть ее платой за испытательный срок, а на собеседовании говорить что через месяц-три готовы повысить до ... (назвать сумму которую платить готовы) после аппрува кандидатуры проджект лидером... ?
Лучше правильно сформулируй текст вакансии "Требуется программист с опытом решения задач про громов в кепках. Опыт решения задач про гномов с х алмазом во лбу преведствуется. Моральная устойчивость от начальника-самодура обязательна".
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Я не предлагал выбирать стандартный способ реализации для дотнета. Имхо, достаточно было выбрать имя реализации, не вводящее в заблуждение.
L>>Имя List и так никого не вводит в заблуждение, за исключением тех, кто ошибочно считает, что реализация списка обязательно должна быть основана на связанном списке. S>Я не считаю что реализация списка должна быть основана на связном списке. Я считаю что реализация списка, основанная не на связном списке, не должна носить имя List.
Почему?
S>>>Особенно, пришедших в дотнет с других языков/платформ. И виноваты в этом, как я считаю, не те люди, которые при встрече List забывают заглянуть в MSDN, а те, кто назвал динамический массив списком.
L>>А по-моему, виноваты те, кто тащат с собой нерелевантный опыт и на основе него делает слишком большие допущения. S>Нерелевантный опыт — это динамический массив, названный списком.
Обоснуй, почему не стоит давать наиболее часто используемым структурам более краткое название.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Условно всех людей можно поделить на 2 категории. Первая (их больше пресловутых 95%) познают мир путем запоминания фактов, V>в результате чего картина у них получается весьма разрозненной. Вторые не тянут в голову всякую мелочь (запас памяти ограничен), V>а держат в кеше только фундаментальные сущности с их свойствами и связями, подгружая в случае необходимости конкретную V>информацию из внешних источников.
Деление людей на запоминальщиков и понимальщиков правильное, а вот выводы вы делаете неверные.
Как раз понимальщик никогда не будет давать задачек на собеседовании, т.к. понимальщик прекрасно понимает:
1) Что за пять минут придумать можно решение только крайне примитивной задачи. Решение мало-мальски сложной задачи за пять минут можно только вспомнить, если знал его раньше.
2) Что при реальной работе программист как правило имеет дело с хорошо знакомым контекстом. На собеседовании контекст не знаком совершенно, ни в плане поставленных задач, ни в плане людей поставивших эти задачи.
3) Что в реальной работе от программиста практически никогда не требуется решение за пять минут. И тем более от программиста никогда не требуется решить задачу за пять минут в незнакомом контексте.
Соответственно отбор по решению задачек на собеседовании это типичный отрицательный отбор, т.е. способ отбора, который дает худшие результаты нежели отбор кандидатов случайным образом.
V>Морозов входит во вторую группу (или старается туда входить) — это прямо следует из его постов
Что-то я не заметил в каком месте Морозов входит во вторую группу. Вроде по постам это типичный запоминальщик, который запомнил решение какой-то задачи и на этом основании считает, что она очень простая.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
Р>>избыточность получается жуткая, по сравнению с плюсами, где оригинальная
ПМ>Нет никакой избыточности, всё как в C или в С++, один в один (только без уродских звёздочек и стрелочек).
Один в один только синтаксис. А способ мышления может отличаться. Поэтому с этой задачей могут лучше справляться переученные плюсовики.
Re[22]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Я не считаю что реализация списка должна быть основана на связном списке. Я считаю что реализация списка, основанная не на связном списке, не должна носить имя List.
L>Почему?
Я уже развертывал свою точку зрения по этому поводу.
S>>Нерелевантный опыт — это динамический массив, названный списком.
L>Обоснуй, почему не стоит давать наиболее часто используемым структурам более краткое название.
Я не делал такого утвреждения и не собираюсь его обосновывать.
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Почему? S>Я уже развертывал свою точку зрения по этому поводу.
Да у тебя утверждение из разряда "потому что тут так принято". От плохих привычек избавляться нужн, а не потакать им.
L>>Обоснуй, почему не стоит давать наиболее часто используемым структурам более краткое название. S>Я не делал такого утвреждения и не собираюсь его обосновывать.
Ну вот и хорошо. Т.о. образом, если отбросить тех, кому лень заглянуть в документацию при переходе на новую платформу, то возвражений против более краткого названия вроде как не прозвучало.
К чему тогда этот спор?
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, mucks, Вы писали:
M>Ага. А если бы подобный алгоритм написал на плюсах, то обвинили бы в перерасходе памяти. M>Так что таки "конкретные особенности системы типов и рантайма"
А где тут перерасход памяти?
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Я уже развертывал свою точку зрения по этому поводу.
L>Да у тебя утверждение из разряда "потому что тут так принято". От плохих привычек избавляться нужн, а не потакать им.
И чем плоха та привычка? И чем лучше вводить новые плохие привычки?
L>>>Обоснуй, почему не стоит давать наиболее часто используемым структурам более краткое название. S>>Я не делал такого утвреждения и не собираюсь его обосновывать.
L>Ну вот и хорошо. Т.о. образом, если отбросить тех, кому лень заглянуть в документацию при переходе на новую платформу, то возвражений против более краткого названия вроде как не прозвучало.
Ты все время пытаешься подменить тему. Я возражаю не против короткого названия. Уже писал об этом. Так же писал что Map короче Dictionary в 3 с лишним раза.
L>К чему тогда этот спор?
Спора нет.
1) я пытаюсь понять, что я такого должен был увидить в википедии, что бы стало ясно, что я не прав?
2) я показал тебе несколько мест в статье википедии, которые указывают на то, что связный список подразумевается под термином List по умолчанию. И ты ничего из этого оспаривать не стал.
Ну вот он я, тыкай меня в википедию А там, глядишь, может и до спора дойдет.
Re[25]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Да у тебя утверждение из разряда "потому что тут так принято". От плохих привычек избавляться нужн, а не потакать им. S>И чем плоха та привычка? И чем лучше вводить новые плохие привычки?
Тем, что прививает ошибочное мнение, что список — это обязательно связанный список.
L>>Ну вот и хорошо. Т.о. образом, если отбросить тех, кому лень заглянуть в документацию при переходе на новую платформу, то возвражений против более краткого названия вроде как не прозвучало. S>Ты все время пытаешься подменить тему. Я возражаю не против короткого названия. Уже писал об этом. Так же писал что Map короче Dictionary в 3 с лишним раза.
Ты взражаешь против использования более короткого названия, так где оно уместно, и единственный твой аргумент — тут так приянто.
Я не считаю, что это валидный аргумент. Гораздо более правильный подход (имхо), использовать сокращения для наиболее часто используемых имен. То, что список на основе массива используется в java/.net чаще связанного списка, я думаю ты вряд ли будешь оспаривать.
L>>К чему тогда этот спор? S>Спора нет. S>1) я пытаюсь понять, что я такого должен был увидить в википедии, что бы стало ясно, что я не прав? S>2) я показал тебе несколько мест в статье википедии, которые указывают на то, что связный список подразумевается под термином List по умолчанию. И ты ничего из этого оспаривать не стал. S>Ну вот он я, тыкай меня в википедию А там, глядишь, может и до спора дойдет.
Ты опять аппелируешь к аргументу "тут так принято".
В википедии черным по белому написано, что список — это структура данных. Да, во многих языках списком принято называть исменно связанный список, но из этого не следует делать вывода, что список может иметь только такую раелизацию. И уж тем более не стоит исходя из этого кого-то во что-то тыкать.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, mucks, Вы писали:
M>>Ага. А если бы подобный алгоритм написал на плюсах, то обвинили бы в перерасходе памяти. M>>Так что таки "конкретные особенности системы типов и рантайма"
L>А где тут перерасход памяти?
видимо потому что не inplace алгоритм.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, denisko, Вы писали:
D>Снизь планку до 70 -- пойдут нормальные люди. Вообще парадоксально, ставил 120, шла в основном школота с хабра, которая вообще не разбиралась ни программировании, ни в математике. Поставил 70, нанял двух нормальных мужиков лет 30, работают, что не знают быстро осваивают. Есличо, то самый эффективный за последний год работник у меня работает за 40. Так что корреляция качества с ценой сейчас довольно странная.
Интересная идея, предложу начальству попробовать. Про 40 всё таки не верится
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>А ты уверен, что тебе действительно нужен человек, который будет отличать? В большинстве случаев, при грамотной постановке задач, подойдут разработчики чуть умнее обезьяны. Для остальных, крайней редких задач,, планку стоило бы, конечно, на 30-50% поднять.
Мне кажется, что умение программировать на Java/C#, знать стандартные структуры данных и многопоточность на уровне мьютексов и мануал-ресет-эвентов — это и есть чуть умнее обезьяны.
2. Уточняющий вопрос вида: "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?"
Хвала тебе, дальше даже конкретное решение не надо спрашивать.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>1) Что за пять минут придумать можно решение только крайне примитивной задачи. Решение мало-мальски сложной задачи за пять минут можно только вспомнить, если знал его раньше.
Здравствуйте, ArtemGorikov, Вы писали:
AG>Лучше правильно сформулируй текст вакансии "Требуется программист с опытом решения задач про громов в кепках. Опыт решения задач про гномов с х алмазом во лбу преведствуется. Моральная устойчивость от начальника-самодура обязательна".
Я не проверяю опыт решение подобных задач. Для меня опыт вообще вторичен. В IT опыт не делает из дурака умного, и вообще обесценивается очень быстро.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Wolverrum, Вы писали:
W>Здравствуйте, Паблик Морозов:
W>А что ты хочешь услышать от соискателя?
W>1. Алгоритм разворота W>Позор тебе, плохой, негодный работодатель.
W>2. Уточняющий вопрос вида: "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?" W>Хвала тебе, дальше даже конкретное решение не надо спрашивать.
1.
Потому что только дибил будет спрашивать "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?" после того, как ему объяснят, что разворачивать будем односвязный список, обсудят, что это такое и нарисуют примеры входных и выходных данных.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Да у тебя утверждение из разряда "потому что тут так принято". От плохих привычек избавляться нужн, а не потакать им. S>>И чем плоха та привычка? И чем лучше вводить новые плохие привычки?
L>Тем, что прививает ошибочное мнение, что список — это обязательно связанный список.
Ну т.е. использовать эффект неожиданности что бы не расслаблялись/
L>Ты взражаешь против использования более короткого названия, так где оно уместно, и единственный твой аргумент — тут так приянто.
Я возражаю не против более короткого названия. Я возражаю против недоразумений. L>Я не считаю, что это валидный аргумент. Гораздо более правильный подход (имхо), использовать сокращения для наиболее часто используемых имен. То, что список на основе массива используется в java/.net чаще связанного списка, я думаю ты вряд ли будешь оспаривать.
Во всем дотнете — наверное List используется чаще чем связный список. Но если брать F#, то там list путевый.
Так что по поводу Dictionary/Map? Почему же не использовали более короткое имя?
L>>>К чему тогда этот спор? S>>Спора нет. S>>1) я пытаюсь понять, что я такого должен был увидить в википедии, что бы стало ясно, что я не прав? S>>2) я показал тебе несколько мест в статье википедии, которые указывают на то, что связный список подразумевается под термином List по умолчанию. И ты ничего из этого оспаривать не стал. S>>Ну вот он я, тыкай меня в википедию А там, глядишь, может и до спора дойдет.
L>Ты опять аппелируешь к аргументу "тут так принято".
апеллирую L>В википедии черным по белому написано, что список — это структура данных. Да, во многих языках списком принято называть исменно связанный список, но из этого не следует делать вывода, что список может иметь только такую раелизацию. И уж тем более не стоит исходя из этого кого-то во что-то тыкать.
Я не говорю что список может иметь только такую реализацию. Я говорю что стандартный способ реализации списка отличен от массивов, отсюда и путаница. Путаница не у меня. Я начинал еще с паскаля/делфи, потому привыкший, хотя и впервые столкнулся именно со связным списком.
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Тем, что прививает ошибочное мнение, что список — это обязательно связанный список. S>Ну т.е. использовать эффект неожиданности что бы не расслаблялись/
Расслабляться — не самая лучшая практика при переходе на новую платформу. И оправдывать такое поведение — тоже.
L>>Я не считаю, что это валидный аргумент. Гораздо более правильный подход (имхо), использовать сокращения для наиболее часто используемых имен. То, что список на основе массива используется в java/.net чаще связанного списка, я думаю ты вряд ли будешь оспаривать. S>Во всем дотнете — наверное List используется чаще чем связный список. Но если брать F#, то там list путевый. S>Так что по поводу Dictionary/Map? Почему же не использовали более короткое имя?
Почему не использовали Map вместо Dictionary?
В 1-м фреймворке был hashtable, в java — hashmap, почему был выбран именно Dictionary могу только предполагать: Map и Table имеет дополнительный смыслы, которые которые могли сбить с толку пользователя, Dictionary в этом смысле более "чист".
L>>Ты опять аппелируешь к аргументу "тут так принято". S>апеллирую
Нарушение правил.
L>>В википедии черным по белому написано, что список — это структура данных. Да, во многих языках списком принято называть исменно связанный список, но из этого не следует делать вывода, что список может иметь только такую раелизацию. И уж тем более не стоит исходя из этого кого-то во что-то тыкать. S>Я не говорю что список может иметь только такую реализацию. Я говорю что стандартный способ реализации списка отличен от массивов, отсюда и путаница.
Мне кажется, использование слова "стандартный" тут не совсем уместно, т.к. тем самым другие реализации становятся "несандартными", а это слово имеет негативный оттенок.
S>Путаница не у меня. Я начинал еще с паскаля/делфи, потому привыкший, хотя и впервые столкнулся именно со связным списком.
А зачем тогда кого-либо тыкать?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали: W>>А что ты хочешь услышать от соискателя? W>>1. Алгоритм разворота W>>Позор тебе, плохой, негодный работодатель. W>>2. Уточняющий вопрос вида: "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?" W>>Хвала тебе, дальше даже конкретное решение не надо спрашивать. ПМ>1. ПМ>Потому что только дибил будет спрашивать "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?" после того, как ему объяснят, что разворачивать будем односвязный список, обсудят, что это такое и нарисуют примеры входных и выходных данных.
Значит, ты тролль, либо плохой, негодный писатель. Ибо в стартовом сообщении нет слова "односвязный". Нисево лисьнова.
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Ну т.е. использовать эффект неожиданности что бы не расслаблялись/
L>Расслабляться — не самая лучшая практика при переходе на новую платформу. И оправдывать такое поведение — тоже.
Ну в общем, для тонуса
L>Почему не использовали Map вместо Dictionary? L>В 1-м фреймворке был hashtable, в java — hashmap, почему был выбран именно Dictionary могу только предполагать: Map и Table имеет дополнительный смыслы, которые которые могли сбить с толку пользователя, Dictionary в этом смысле более "чист".
Вот ты сам говоришь о дополнительных смыслах, которые могут сбить с толку. У списка есть такие же смыслы.
S>>апеллирую
L>Нарушение правил.
Это не со зла и без злорадства. Меня тоже недавно поправили. Будешь настаивать — схожу в баню, не против.
S>>Я не говорю что список может иметь только такую реализацию. Я говорю что стандартный способ реализации списка отличен от массивов, отсюда и путаница.
L>Мне кажется, использование слова "стандартный" тут не совсем уместно, т.к. тем самым другие реализации становятся "несандартными", а это слово имеет негативный оттенок.
Это слово применено в википедии, в которую ты предлагал потыкать
.
S>>Путаница не у меня. Я начинал еще с паскаля/делфи, потому привыкший, хотя и впервые столкнулся именно со связным списком.
L>А зачем тогда кого-либо тыкать?
Тот же вопрос можно адресовать и тебе
Здравствуйте, samius, Вы писали:
L>>Почему не использовали Map вместо Dictionary? L>>В 1-м фреймворке был hashtable, в java — hashmap, почему был выбран именно Dictionary могу только предполагать: Map и Table имеет дополнительный смыслы, которые которые могли сбить с толку пользователя, Dictionary в этом смысле более "чист". S>Вот ты сам говоришь о дополнительных смыслах, которые могут сбить с толку. У списка есть такие же смыслы.
У самого слова "список" нет таких смыслов.
S>>>Я не говорю что список может иметь только такую реализацию. Я говорю что стандартный способ реализации списка отличен от массивов, отсюда и путаница.
L>>Мне кажется, использование слова "стандартный" тут не совсем уместно, т.к. тем самым другие реализации становятся "несандартными", а это слово имеет негативный оттенок. S>Это слово применено в википедии, в которую ты предлагал потыкать
Нет, там применено другое слово. Более того, там даже другой язык, и я не уверен, что в английском есть этот негативный оттенок.
S>>>Путаница не у меня. Я начинал еще с паскаля/делфи, потому привыкший, хотя и впервые столкнулся именно со связным списком.
L>>А зачем тогда кого-либо тыкать? S>Тот же вопрос можно адресовать и тебе
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Вот ты сам говоришь о дополнительных смыслах, которые могут сбить с толку. У списка есть такие же смыслы.
L>У самого слова "список" нет таких смыслов.
Есть, я приводил цитаты.
L>>>Мне кажется, использование слова "стандартный" тут не совсем уместно, т.к. тем самым другие реализации становятся "несандартными", а это слово имеет негативный оттенок. S>>Это слово применено в википедии, в которую ты предлагал потыкать
.
L>Нет, там применено другое слово. Более того, там даже другой язык, и я не уверен, что в английском есть этот негативный оттенок.
Негативный оттенок ты придумал. В русском его тоже нет. А как можно еще перевести standard way?
L>>>А зачем тогда кого-либо тыкать? S>>Тот же вопрос можно адресовать и тебе
.
L>Я вроде как объяснил, разве нет? Или ты до сих пор уверен, что список — это обязательно связанный спиок?
Ты как будто не читаешь, что я пишу. Я наверное раз 8 написал что не считаю. Написать еще пару?
Ты не объяснил, почему то предлагаешь потыкать, то предлагаешь не тыкать.
Re[31]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Вот ты сам говоришь о дополнительных смыслах, которые могут сбить с толку. У списка есть такие же смыслы.
L>>У самого слова "список" нет таких смыслов. S>Есть, я приводил цитаты.
Сравните с примером, который я привел. Map — это, например, карта. Table — таблица. Эти смыслы вообще никак не связаны с сутью класса Dictionary.
L>>>>Мне кажется, использование слова "стандартный" тут не совсем уместно, т.к. тем самым другие реализации становятся "несандартными", а это слово имеет негативный оттенок. S>>>Это слово применено в википедии, в которую ты предлагал потыкать
.
L>>Нет, там применено другое слово. Более того, там даже другой язык, и я не уверен, что в английском есть этот негативный оттенок. S>Негативный оттенок ты придумал. В русском его тоже нет.
В русском есть негативные оттенок.
S>А как можно еще перевести standard way?
Если о реализации, то что-то типа "наиболее часто встречающаяся реализация".
L>>>>А зачем тогда кого-либо тыкать? S>>>Тот же вопрос можно адресовать и тебе
.
L>>Я вроде как объяснил, разве нет? Или ты до сих пор уверен, что список — это обязательно связанный спиок? S>Ты как будто не читаешь, что я пишу. Я наверное раз 8 написал что не считаю. Написать еще пару?
Зачем тогда тыкать человеку, что класс List в .Net — не список?
Статья, на которую ты же и сослался, говорит, что список — это тип данных, List в .Net вполне подходит под такое опреление. Где был неправ твой собеседник, зачем его понадобилось "тыкать"?
S>Ты не объяснил, почему то предлагаешь потыкать, то предлагаешь не тыкать.
Чего? Ты сам-то понял, что написал?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, vshemm, Вы писали:
V>>Условно всех людей можно поделить на 2 категории. Первая (их больше пресловутых 95%) познают мир путем запоминания фактов, V>>в результате чего картина у них получается весьма разрозненной. Вторые не тянут в голову всякую мелочь (запас памяти ограничен), V>>а держат в кеше только фундаментальные сущности с их свойствами и связями, подгружая в случае необходимости конкретную V>>информацию из внешних источников.
U>Деление людей на запоминальщиков и понимальщиков правильное, а вот выводы вы делаете неверные.
Вывод я сделал только один: Морозов с gandjustas явно не сработаются, более того, их методы по наему не тождественны.
Надеюсь, спорить с этим выводом никто не будет.
U>Как раз понимальщик никогда не будет давать задачек на собеседовании, т.к. понимальщик прекрасно понимает:
"Понимальщик" как раз будет пытаться набирать к себе людей таких же, как он (при прочих равных). Не буду себя цитировать.
U>1) Что за пять минут придумать можно решение только крайне примитивной задачи. Решение мало-мальски сложной задачи за пять минут можно только вспомнить, если знал его раньше.
Согласен полностью. Но задача "реверс списка" — примитивная (могу выдать примитивный мыслепроцесс решения, но тогда эта
задача уйдет в прошлое). Мало мальскую сложную задачу задавать бесмыссленно — я это уже говорил. Но суть не в нахождении
решения, а в именно процессе
Хотя всегда есть нюансы. SkyDance написал, например, что "И тем не менее — нечто похожее (самую длинную повторяющуюся
подпоследовательность найти) меня спросили прямо на входе в одну большую контору". Ну да, если он в яндекс собеседовался
на позицию чела, который будет работать с данными — это нормально Меня тоже как-то просили стек написать за 5 минут,
а, после того как я это сделал, говорили: "а теперь сделайте этот стек lock-free". Но я же не жалуюсь, что это плохой подход.
U>2) Что при реальной работе программист как правило имеет дело с хорошо знакомым контекстом. На собеседовании контекст не знаком совершенно, ни в плане поставленных задач, ни в плане людей поставивших эти задачи.
Согласен. Только реальные навыки работы проверить на собеседовании невозможно, даже на испытательном сроке нужно
прилагать усилия для этой проверки.
U>3) Что в реальной работе от программиста практически никогда не требуется решение за пять минут. И тем более от программиста никогда не требуется решить задачу за пять минут в незнакомом контексте.
См п.2. Но пару слов скажу. Бумажка и карандаш (доска — маркер) — знакомый контекст. Предметная область тоже знакомая
(иначе интервьюер плохо выбрал задачку). Все. Проверка же не на написание кода идет.
U>Соответственно отбор по решению задачек на собеседовании это типичный отрицательный отбор, т.е. способ отбора, который дает худшие результаты нежели отбор кандидатов случайным образом.
Не совсем. В данном случае — с задачей реверса односвязного списка — это отбор по инверсному критерию. Т.е. те, кто "отобрался"
— сразу отсеиваются. Почему такой отбор многим чужд? Хз. Может, проблемы в консерватории? Или вы никогда дебилов на работу не брали?
V>>Морозов входит во вторую группу (или старается туда входить) — это прямо следует из его постов
U>Что-то я не заметил в каком месте Морозов входит во вторую группу. Вроде по постам это типичный запоминальщик, который запомнил решение какой-то задачи и на этом основании считает, что она очень простая.
Вот тут у меня прямо противоположное мнение. Например, ПМ, анализируя выражение x & (x + 1) родил табличку. И это знакомый
мне подход. А вот gandjustas только решения пишет (кроме вывода реверса односвязного списка — но это решение я уже покритиковал),
что значит копипаст, скорее всего. И т.д., тут много незначительных деталей, которые по совокупности позволяют сделать мне такой вывод.
Re[32]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>У самого слова "список" нет таких смыслов. S>>Есть, я приводил цитаты.
L>Сравните с примером, который я привел. Map — это, например, карта. Table — таблица. Эти смыслы вообще никак не связаны с сутью класса Dictionary.
Один из смыслов слова map — отображение (мат.) И именно термин map используется для производных контейнеров типа multimap, bidirectional map, hashmap/hashtable. Почему не multidictionary, hashdictionary?
S>>Негативный оттенок ты придумал. В русском его тоже нет.
L>В русском есть негативные оттенок.
не вижу ничего негативного.
S>>А как можно еще перевести standard way?
L>Если о реализации, то что-то типа "наиболее часто встречающаяся реализация".
Имхо, стандартный путь реализации немного сильнее, чем наиболее часто встречающаяся. Остаток статьи в википедии так или иначе указывает на это. Набор операций, абстрактное определение, отсылка к LISP-у.
S>>Ты как будто не читаешь, что я пишу. Я наверное раз 8 написал что не считаю. Написать еще пару?
L>Зачем тогда тыкать человеку, что класс List в .Net — не список? L>Статья, на которую ты же и сослался, говорит, что список — это тип данных, List в .Net вполне подходит под такое опреление. Где был неправ твой собеседник, зачем его понадобилось "тыкать"?
Во-первых, я не тыкал. Может, Ромашке так показалось, или он просто так выразился. А может это и не я был.
Во-вторых, я уже ответил, что у массива и списка совершенно разные характеристики и показания к использованию. Поэтому, разработчик на дотнете должен знать, как именно реализован List. Я считаю, что должен. Особенно в контексте того, что название выбрано неудачно. Потому, когда я встречаю, что дотнетовский List упоминают в контексте связного списка, я непременно поправляю.
S>>Ты не объяснил, почему то предлагаешь потыкать, то предлагаешь не тыкать.
L>Чего? Ты сам-то понял, что написал?
Понял. Так ты за то что бы тыкать, или не тыкать? Потому как показания расходятся.
Re[33]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Сравните с примером, который я привел. Map — это, например, карта. Table — таблица. Эти смыслы вообще никак не связаны с сутью класса Dictionary. S>Один из смыслов слова map — отображение (мат.)
А другой из смыслов — карта.
S>И именно термин map используется для производных контейнеров типа multimap, bidirectional map, hashmap/hashtable. Почему не multidictionary, hashdictionary?
Потому что multidictionary — это о другом, а hashdictionary — избыточен, т.к. нет необходимости указывать для наиболее часто встречающихся названий такие детали.
S>>>Ты как будто не читаешь, что я пишу. Я наверное раз 8 написал что не считаю. Написать еще пару?
L>>Зачем тогда тыкать человеку, что класс List в .Net — не список? L>>Статья, на которую ты же и сослался, говорит, что список — это тип данных, List в .Net вполне подходит под такое опреление. Где был неправ твой собеседник, зачем его понадобилось "тыкать"?
S>Во-первых, я не тыкал. Может, Ромашке так показалось, или он просто так выразился. А может это и не я был.
Ок. Что именно было или не было там между вами я не знаю, я полагаюсь исключительно на информация из сообщений.
S>Во-вторых, я уже ответил, что у массива и списка совершенно разные характеристики и показания к использованию. Поэтому, разработчик на дотнете должен знать, как именно реализован List. Я считаю, что должен. Особенно в контексте того, что название выбрано неудачно. Потому, когда я встречаю, что дотнетовский List упоминают в контексте связного списка, я непременно поправляю.
Да, все верно, согласен со всем, за исключением неудачности названия. Но как бы то ни было, это не делает реализацию списка на массивах не-списком.
S>>>Ты не объяснил, почему то предлагаешь потыкать, то предлагаешь не тыкать.
L>>Чего? Ты сам-то понял, что написал? S>Понял. Так ты за то что бы тыкать, или не тыкать? Потому как показания расходятся.
Я за то, чтобы не тыкать, тем, кто утверждает, что List — это список.
И за то, чтобы тыкать тем, кто тыкает тем, кто утверждает, что List — это список.
Re[34]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Один из смыслов слова map — отображение (мат.)
L>А другой из смыслов — карта.
А другой из смыслов list — вербовать.
S>>И именно термин map используется для производных контейнеров типа multimap, bidirectional map, hashmap/hashtable. Почему не multidictionary, hashdictionary?
L>Потому что multidictionary — это о другом, а hashdictionary — избыточен, т.к. нет необходимости указывать для наиболее часто встречающихся названий такие детали.
Я о том, почему стали использовать map для производных контейнеров, а не dictionary?
L>Да, все верно, согласен со всем, за исключением неудачности названия. Но как бы то ни было, это не делает реализацию списка на массивах не-списком.
Согласен, не делает.
S>>Понял. Так ты за то что бы тыкать, или не тыкать? Потому как показания расходятся.
L>Я за то, чтобы не тыкать, тем, кто утверждает, что List — это список.
Я не тыкаю тем, кто утверждает что List это список. Я тыкаю только тогда, когда вижу что под List подразумевается связный список, т.е. видно что человек находится в заблуждении относительно природы реализации List-а. L>И за то, чтобы тыкать тем, кто тыкает тем, кто утверждает, что List — это список.
На грани понимания
Re[35]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>А другой из смыслов — карта. S>А другой из смыслов list — вербовать.
Ну и часто такой смысл используется? Не говоря уж о том, что это другая часть речи.
S>>>И именно термин map используется для производных контейнеров типа multimap, bidirectional map, hashmap/hashtable. Почему не multidictionary, hashdictionary?
L>>Потому что multidictionary — это о другом, а hashdictionary — избыточен, т.к. нет необходимости указывать для наиболее часто встречающихся названий такие детали. S>Я о том, почему стали использовать map для производных контейнеров, а не dictionary?
Не знаю. Думаю, просто тот же принцып "тут так принято". Другого объяснения не нахожу.
L>>Да, все верно, согласен со всем, за исключением неудачности названия. Но как бы то ни было, это не делает реализацию списка на массивах не-списком. S>Согласен, не делает.
S>>>Понял. Так ты за то что бы тыкать, или не тыкать? Потому как показания расходятся.
L>>Я за то, чтобы не тыкать, тем, кто утверждает, что List — это список. S>Я не тыкаю тем, кто утверждает что List это список. Я тыкаю только тогда, когда вижу что под List подразумевается связный список, т.е. видно что человек находится в заблуждении относительно природы реализации List-а.
Я повторюсь, я не знаю, что конкретно было сказано в реале. Все что я знаю, что несколькими постами выше было сказано:
List в C#, как меня недавно ткнули носом, нифига не список, а массив.
Я предполагал, что написанное соответствовало действительности, и посоветовал в ответ на это ткнуть носом тыкальщика в ответ в википедию.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Мне кажется, что умение программировать на Java/C#, знать стандартные структуры данных и многопоточность на уровне мьютексов и мануал-ресет-эвентов — это и есть чуть умнее обезьяны.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>А другой из смыслов — карта. S>>А другой из смыслов list — вербовать.
L>Ну и часто такой смысл используется? Не говоря уж о том, что это другая часть речи.
Если говорить о частоте, то в программировании список куда чаще употребляется для обозначения именно связного списка. Статистику я не видел, но чисто по ощущениям — чаще. Так же как map используется чаще dictionary.
S>>Я о том, почему стали использовать map для производных контейнеров, а не dictionary?
L>Не знаю. Думаю, просто тот же принцып "тут так принято". Другого объяснения не нахожу.
Тогда наверное не нужно забивать на этот принцип?
S>>Я не тыкаю тем, кто утверждает что List это список. Я тыкаю только тогда, когда вижу что под List подразумевается связный список, т.е. видно что человек находится в заблуждении относительно природы реализации List-а.
L>Я повторюсь, я не знаю, что конкретно было сказано в реале. Все что я знаю, что несколькими постами выше было сказано: L>
L>List в C#, как меня недавно ткнули носом, нифига не список, а массив.
L>Я предполагал, что написанное соответствовало действительности, и посоветовал в ответ на это ткнуть носом тыкальщика в ответ в википедию.
Так там ведь не написано обратное, что массив это список? Там написано что массив это лишь частная реализация абстрактного списка, причем не самая типичная.
Re[37]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Ну и часто такой смысл используется? Не говоря уж о том, что это другая часть речи. S>Если говорить о частоте, то в программировании список куда чаще употребляется для обозначения именно связного списка.
Я говорю о частоте использования саписка на основе массива. В .Net-е, о ктором идет речь, связанные список используется не особо часто.
S>Статистику я не видел, но чисто по ощущениям — чаще. Так же как map используется чаще dictionary.
Про это я тоже уже отвечал.
L>>Не знаю. Думаю, просто тот же принцып "тут так принято". Другого объяснения не нахожу.
S>Тогда наверное не нужно забивать на этот принцип?
Да не, как раз надо. Если что-то не дает никаких ништяков, то зачем оно? Только для того, чтобы ублажить тех, кто не готов потратить несколько минут на просмотр документации по классу List?
L>>Я повторюсь, я не знаю, что конкретно было сказано в реале. Все что я знаю, что несколькими постами выше было сказано: L>>
L>>List в C#, как меня недавно ткнули носом, нифига не список, а массив.
L>>Я предполагал, что написанное соответствовало действительности, и посоветовал в ответ на это ткнуть носом тыкальщика в ответ в википедию. S>Так там ведь не написано обратное, что массив это список?
А я где-то в этой ветке утверждал, что там написано, что массив — это список?
S>Там написано что массив это лишь частная реализация абстрактного списка, причем не самая типичная.
Нет, там написано, что класс List .Net-а — не список. Точка.
Re[38]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Там написано что массив это лишь частная реализация абстрактного списка, причем не самая типичная.
L>Нет, там написано, что класс List .Net-а — не список. Точка.
(не видел там упоминаний дотнета)
Так о чем тогда спор? Раз не список, то все должны об этом знать.
Re[39]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Там написано что массив это лишь частная реализация абстрактного списка, причем не самая типичная.
L>>Нет, там написано, что класс List .Net-а — не список. Точка. S>(не видел там упоминаний дотнета)
List в C#, как меня недавно ткнули носом, нифига не список, а массив.
S>Так о чем тогда спор? Раз не список, то все должны об этом знать.
Да, все должны знать, что List в .Net-е это все-таки список, несмотря на то, что его реализация отличается от связанного списка.
Re[40]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>>>Там написано что массив это лишь частная реализация абстрактного списка, причем не самая типичная.
L>>>Нет, там написано, что класс List .Net-а — не список. Точка. S>>(не видел там упоминаний дотнета)
L>
L>List в C#, как меня недавно ткнули носом, нифига не список, а массив.
Там — это ты не про википедию уже? Ты отвечал на мою фразу про википедию.
S>>Так о чем тогда спор? Раз не список, то все должны об этом знать.
L>Да, все должны знать, что List в .Net-е это все-таки список, несмотря на то, что его реализация отличается от связанного списка.
Так же все должны знать, что это не список, а массив по реализации.
Re[41]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>>>Нет, там написано, что класс List .Net-а — не список. Точка. S>>>(не видел там упоминаний дотнета)
L>>
L>>List в C#, как меня недавно ткнули носом, нифига не список, а массив.
S>Там — это ты не про википедию уже? Ты отвечал на мою фразу про википедию.
В википедии написано, что список — это тип данных. И именно это существенно, а не то, что в haskell/lisp/c списком называют связанный список.
S>>>Так о чем тогда спор? Раз не список, то все должны об этом знать.
L>>Да, все должны знать, что List в .Net-е это все-таки список, несмотря на то, что его реализация отличается от связанного списка. S>Так же все должны знать, что это не список, а массив по реализации.
Никто не должен это знать, т.к. это не соответсвует действительности. List в .Net-е — это список, но его реализация — не связанный список, а постороена на массиве.
Re[42]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>В википедии написано, что список — это тип данных. И именно это существенно, а не то, что в haskell/lisp/c списком называют связанный список.
Так же там написано что термин list используется для обозначения конкретных структур данных. И это тоже существенно.
S>>>>Так о чем тогда спор? Раз не список, то все должны об этом знать.
L>Никто не должен это знать, т.к. это не соответсвует действительности. List в .Net-е — это список, но его реализация — не связанный список, а постороена на массиве.
Вот скажи мне, List в дотнете это абстрактная структура данных, или конкретная?
Re[43]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>В википедии написано, что список — это тип данных. И именно это существенно, а не то, что в haskell/lisp/c списком называют связанный список. S>Так же там написано что термин list используется для обозначения конкретных структур данных. И это тоже существенно.
Я так не считаю.
L>>Никто не должен это знать, т.к. это не соответсвует действительности. List в .Net-е — это список, но его реализация — не связанный список, а постороена на массиве. S>Вот скажи мне, List в дотнете это абстрактная структура данных, или конкретная?
Конкретная.
Re[44]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Так же там написано что термин list используется для обозначения конкретных структур данных. И это тоже существенно.
L>Я так не считаю.
А вот это действительно не существенно.
S>>Вот скажи мне, List в дотнете это абстрактная структура данных, или конкретная?
L>Конкретная.
Как конкретная структура данных она имеет неверное название, т.к. List — это имя абстрактной структуры данных. В то время как конкретные структуры данных с термином List в названии не имеют ничего общего с массивами.
Re[45]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Так же там написано что термин list используется для обозначения конкретных структур данных. И это тоже существенно.
L>>Я так не считаю. S>А вот это действительно не существенно.
Повторно отсылаю вас перечитать правила поведения на форуме.
S>>>Вот скажи мне, List в дотнете это абстрактная структура данных, или конкретная?
L>>Конкретная. S>Как конкретная структура данных она имеет неверное название, т.к. List — это имя абстрактной структуры данных.
1. Как из того, что List-ом называют абстрактную структуру данных, следует, что это название не следует использовать для имени класса?
2. Из вашего утверждения следует, что плюсовый std::list назван тоже неверно. Я вас правильно понял?
S>В то время как конкретные структуры данных с термином List в названии не имеют ничего общего с массивами.
Это утвержжение неварно: конекретная структура данных List из .Net реализована на массиве, и потому не не может не иметь ничего общего с ними.
Re[46]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Я так не считаю. S>>А вот это действительно не существенно.
L>Повторно отсылаю вас перечитать правила поведения на форуме.
Хорошо, перечитаю. А пока — мои извинения.
L>>>Конкретная. S>>Как конкретная структура данных она имеет неверное название, т.к. List — это имя абстрактной структуры данных.
L>1. Как из того, что List-ом называют абстрактную структуру данных, следует, что это название не следует использовать для имени класса?
Я уже писал по поводу того, почему не следует использовать это название. L>2. Из вашего утверждения следует, что плюсовый std::list назван тоже неверно. Я вас правильно понял?
Да, и к нему у меня есть претензии. Хоть я последний год пишу на C++, я не помню, какую именно конкретную структуру данных он использует. Но в том что не массив — я уверен.
S>>В то время как конкретные структуры данных с термином List в названии не имеют ничего общего с массивами.
L>Это утвержжение неварно: конекретная структура данных List из .Net реализована на массиве, и потому не не может не иметь ничего общего с ними.
А какую конкретную структуру данных реализует List из .Net? Можно указать что-либо в этом перечне, что имело бы слово List в названии?
Re[46]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Я так не считаю. S>>А вот это действительно не существенно.
L>Повторно отсылаю вас перечитать правила поведения на форуме.
Перечитал. Не нашел ничего такого, что бы я мог нарушить, кроме указания орфографической ошибки (ранее), и, возможно, "и т.д.".
Re[47]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>1. Как из того, что List-ом называют абстрактную структуру данных, следует, что это название не следует использовать для имени класса? S>Я уже писал по поводу того, почему не следует использовать это название.
Я прекрасно помню, что вы писали.
Но до этого вы не делали вывод, что "из того, что List-ом называют абстрактную структуру данных, следует, что это название не следует использовать для имени класса".
Не могли бы вы более подробно расписать, почему вы так считаете?
L>>2. Из вашего утверждения следует, что плюсовый std::list назван тоже неверно. Я вас правильно понял? S>Да, и к нему у меня есть претензии. Хоть я последний год пишу на C++, я не помню, какую именно конкретную структуру данных он использует. Но в том что не массив — я уверен.
Тогда я вас еще меньше понимаю. Если продолжить в том же духе, то от википедийного опеределения останется только часть про абстрактный тип данных. Но в таком случае непонятно, во что конкретно тыкали Ромашку.
S>>>В то время как конкретные структуры данных с термином List в названии не имеют ничего общего с массивами.
L>>Это утвержжение неварно: конекретная структура данных List из .Net реализована на массиве, и потому не не может не иметь ничего общего с ними. S>А какую конкретную структуру данных реализует List из .Net?
Да хрен его знает, как оно правильно называется.
S>Можно указать что-либо в этом перечне, что имело бы слово List в названии?
А вам зачем? Вы же начали такцевать от вопроса, конкретная или нет сруктура данных List в .Net-е, а теперь приводите список стуктур данных, не имеющий ничего общего с .Net-ом. Вы зачем меня путаете?
Re[47]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>>>Я так не считаю. S>>>А вот это действительно не существенно.
L>>Повторно отсылаю вас перечитать правила поведения на форуме.
S>Перечитал. Не нашел ничего такого, что бы я мог нарушить, кроме указания орфографической ошибки (ранее), и, возможно, "и т.д.".
Не допускается проявление ... неуважительного отношения к другим участникам форума.
Re[48]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>
L>Не допускается проявление ... неуважительного отношения к другим участникам форума.
Не вижу ничего неуважительного в том, что ваше мнение не считаю существенным в данном вопросе. Свое тоже не считаю, если что. Это не признак неуважения.
Re[49]: Задача на собеседовании - обращение списка.
L>>Не допускается проявление ... неуважительного отношения к другим участникам форума.
S>Не вижу ничего неуважительного в том, что ваше мнение не считаю существенным в данном вопросе. Свое тоже не считаю, если что. Это не признак неуважения.
Перечитайте еще раз. Правила не ограничивают вам в праве иметь то или иное мнение.
Re[48]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Я уже писал по поводу того, почему не следует использовать это название.
L>Я прекрасно помню, что вы писали. L>Но до этого вы не делали вывод, что "из того, что List-ом называют абстрактную структуру данных, следует, что это название не следует использовать для имени класса". L>Не могли бы вы более подробно расписать, почему вы так считаете?
Потому что в случае, когда допустимо более одной реализации (как раз наш случай), по такому имени невозможно понять, какая именно реализация выбрана. К тому же, имя List для конкретной структуры данных намекает на то, что в качестве реализации выбрана одна из типичных конкретных структур с именем List. А это не так.
L>Тогда я вас еще меньше понимаю. Если продолжить в том же духе, то от википедийного опеределения останется только часть про абстрактный тип данных. Но в таком случае непонятно, во что конкретно тыкали Ромашку.
Я его не тыкал. Я его поддерживал.
S>>А какую конкретную структуру данных реализует List из .Net?
L>Да хрен его знает, как оно правильно называется.
Правильно называется DynamicArray
S>>Можно указать что-либо в этом перечне, что имело бы слово List в названии?
L>А вам зачем? Вы же начали такцевать от вопроса, конкретная или нет сруктура данных List в .Net-е, а теперь приводите список стуктур данных, не имеющий ничего общего с .Net-ом. Вы зачем меня путаете?
Я не путаю. Я привожу список конкретных линейных структур данных. Причем тут дотнет — вообще не понятно. Разве он когда-либо являлся определяющим в отношении структур данных? Вот LISP — да. В отношении списков он де факто определяет погоду.
Re[50]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>Перечитайте еще раз. Правила не ограничивают вам в праве иметь то или иное мнение.
Я определенно не вижу, в чем я проявил неуважение. Не могли бы вы мне указать конкретнее?
Re[49]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Я уже писал по поводу того, почему не следует использовать это название.
L>>Я прекрасно помню, что вы писали. L>>Но до этого вы не делали вывод, что "из того, что List-ом называют абстрактную структуру данных, следует, что это название не следует использовать для имени класса". L>>Не могли бы вы более подробно расписать, почему вы так считаете? S>Потому что в случае, когда допустимо более одной реализации (как раз наш случай), по такому имени невозможно понять, какая именно реализация выбрана. К тому же, имя List для конкретной структуры данных намекает на то, что в качестве реализации выбрана одна из типичных конкретных структур с именем List. А это не так.
1. Вы ответили на какой-то другой вопрос. Ведь по вашей логике и класс, реализующий linked list нельзя назвать LinkedList, т.к. в этом случае имя структуры linked list будет использовано для имени класса.
2. По имени можно заглянуть в документацию и все выяснить. Дело двух минут. А вот с длинными именами вам придется жить всю жизнь, даже после того, как вы на 146 процентов будете знать всю подноготную вышеупомянутого List-а.
L>>Тогда я вас еще меньше понимаю. Если продолжить в том же духе, то от википедийного опеределения останется только часть про абстрактный тип данных. Но в таком случае непонятно, во что конкретно тыкали Ромашку. S>Я его не тыкал. Я его поддерживал.
Опаньки. Неожиданный разворот беседы.
S>>>А какую конкретную структуру данных реализует List из .Net?
L>>Да хрен его знает, как оно правильно называется. S>Правильно называется DynamicArray
Пусть будет так.
S>>>Можно указать что-либо в этом перечне, что имело бы слово List в названии?
L>>А вам зачем? Вы же начали такцевать от вопроса, конкретная или нет сруктура данных List в .Net-е, а теперь приводите список стуктур данных, не имеющий ничего общего с .Net-ом. Вы зачем меня путаете? S>Я не путаю. Я привожу список конкретных линейных структур данных. Причем тут дотнет — вообще не понятно. Разве он когда-либо являлся определяющим в отношении структур данных?
Тык вы же сами захотели поговорить про абстрактные структуры данных в дотнете. Я только поддержал тему.
S>Вот LISP — да. В отношении списков он де факто определяет погоду.
Ой да ну, в lisp-е кроме cons-ов нифига и нет и поэтому там все через списки эмулируется. Какой-то фиговый вы образчик выбрали.
Re[51]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Перечитайте еще раз. Правила не ограничивают вам в праве иметь то или иное мнение. S>Я определенно не вижу, в чем я проявил неуважение. Не могли бы вы мне указать конкретнее?
Считать, что мнение собеседника — несущественно является проявлением неуважения.
Re[50]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Не могли бы вы более подробно расписать, почему вы так считаете? S>>Потому что в случае, когда допустимо более одной реализации (как раз наш случай), по такому имени невозможно понять, какая именно реализация выбрана. К тому же, имя List для конкретной структуры данных намекает на то, что в качестве реализации выбрана одна из типичных конкретных структур с именем List. А это не так.
L>1. Вы ответили на какой-то другой вопрос. Ведь по вашей логике и класс, реализующий linked list нельзя назвать LinkedList, т.к. в этом случае имя структуры linked list будет использовано для имени класса.
связный список — это конкретная структура данных, а не абстрактная. Потому называть класс так можно и нужно, если этот класс реализует именно связный список, а не массив. L>2. По имени можно заглянуть в документацию и все выяснить. Дело двух минут. А вот с длинными именами вам придется жить всю жизнь, даже после того, как вы на 146 процентов будете знать всю подноготную вышеупомянутого List-а.
Я за говорящие имена
S>>Я его не тыкал. Я его поддерживал.
L>Опаньки. Неожиданный разворот беседы.
Почему неожиданный? Я давал ссылку на ту дискуссию.
S>>Я не путаю. Я привожу список конкретных линейных структур данных. Причем тут дотнет — вообще не понятно. Разве он когда-либо являлся определяющим в отношении структур данных?
L>Тык вы же сами захотели поговорить про абстрактные структуры данных в дотнете. Я только поддержал тему.
Вы же сказали что List — это конкретная структура данных. Что-то поменялось?
S>>Вот LISP — да. В отношении списков он де факто определяет погоду.
L>Ой да ну, в lisp-е кроме cons-ов нифига и нет и поэтому там все через списки эмулируется. Какой-то фиговый вы образчик выбрали.
Можно взять ML. Там кроме cons-ов есть кое-что еще, а списки все равно односвязные.
Re[52]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Перечитайте еще раз. Правила не ограничивают вам в праве иметь то или иное мнение. S>>Я определенно не вижу, в чем я проявил неуважение. Не могли бы вы мне указать конкретнее?
L>Считать, что мнение собеседника — несущественно является проявлением неуважения.
Тогда вы тоже нарушили правила. Объясняю в чем:
Я написал, что написанное в википедии существенно. Это совпадает с моим мнением. На что вы ответили, что так не считаете, т.е. это означает, что вы не считаете написанное в википеди существенным (но ссылаетесь на нее). А раз мое мнение совпадает с написанным в википедии, то значит что мое мнение вы не считаете существенным.
А вы свое мнение считаете существеннее, чем мнение в википедии? Ну не вообще, а хотя бы в данном вопросе?
спасибо за головоломнейшую задачу! Чуть менее часа пыхтел (это при том, что алгоритм сосед подсказал!)
Вроде всё просто, но голову клинит.
Да, кстати, в Java/.NET такое решение негодицца, ибо GarbageCollector сработает
struct Item
{
int value;
Item *next;
};
void ReverseList (Item **v)
{
if ( v == NULL )
return;
if ( *v == NULL )
return;
if ((*v)->next == NULL)
return;
Item *cur = *v;
Item *prev = NULL;
Item *next;
while ( cur->next != NULL )
{
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
cur->next = prev;
(*v) = cur;
}
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>Мне так, уже, не кажется.
Ой ребе, ну шо ви как будто творчество индусов впервые увидели. Там жеж жесть и ахтунг.
Эти гарні парубки на чём хошь говно напишут, с песнями и плясками.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
BBI>Здравствуйте, kaa.python, Вы писали:
KP>>Мне так, уже, не кажется. BBI>Ой ребе, ну шо ви как будто творчество индусов впервые увидели. Там жеж жесть и ахтунг. BBI>Эти гарні парубки на чём хошь говно напишут, с песнями и плясками.
Я как раз о другом пишу. То что они никаких разворот списка в глаза не видели, им это не мешает решать задачи. И для языков на которых наговнять довольно сложно, уровня "чуть умнее обезьяны" хватает.
И еще. Чем больше пересекаюсь по работе с индусами, тем больше замечаю то, что легенда про их кривые руки не более чем легенда использующаяся что бы почесать ЧСВ ряда не индусских разработчиков. Из коих говноднлов ничуть не меньше.
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Я не говорю что список может иметь только такую реализацию. Я говорю что стандартный способ реализации списка отличен от массивов, отсюда и путаница. Путаница не у меня. Я начинал еще с паскаля/делфи, потому привыкший, хотя и впервые столкнулся именно со связным списком.
Так как главный архитектор C# тоже начинал с паскаля/дельфи наверно это и есть главная причина ненормального списка в шарпе
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Но задача "реверс списка" — примитивная.
Это задача с битами примитивная. Вся её сложность заключается в "своеобразности" операций.
Задача на разворот списка требует понимания рекурсии и умения сводить рекурсию к итерации. Или хороший навык работы с указателями.
Человек, который пишет на ЯВУ вполне может не обладать первым и скорее всего не обладает вторым. Причем в обоих случаях как разработчик решений он хуже не становится.
V>могу выдать примитивный мыслепроцесс решения
Выдай.
V>Но суть не в нахождении решения, а в именно процессе
При условии что этот процесс приведет к правильному решению.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>"Понимальщик" как раз будет пытаться набирать к себе людей таких же, как он (при прочих равных). Не буду себя цитировать.
Откуда это следует? Я, например, для рутинных или шаманских (допустим, знание тонкостей фрамеворка, не имеющего внутренней логики) задач скорее выберу запоминальщика, а не понимальщика.
V>Согласен полностью. Но задача "реверс списка" — примитивная (могу выдать примитивный мыслепроцесс решения, но тогда эта V>задача уйдет в прошлое). Мало мальскую сложную задачу задавать бесмыссленно — я это уже говорил. Но суть не в нахождении V>решения, а в именно процессе
Реверс списка действительно простая задача, т.к. в среднем в спокойной рабочей обстановке (заметь, не в стрессовой на собеседовании) ее решение у хорошего программиста займет пару часов, в то время как решение сложных задач занимает дни, а иногда и недели. При этом у меня не возникнет никаких вопросов к программисту, если на решение конкретной задачи на пару часов он потратит день, вопросы возникнут только если программист будет систематически тратить по дню на пару часовые задачи.
V>См п.2. Но пару слов скажу. Бумажка и карандаш (доска — маркер) — знакомый контекст. Предметная область тоже знакомая V>(иначе интервьюер плохо выбрал задачку). Все. Проверка же не на написание кода идет.
Ты какие третьестепенные моменты выдаешь за контекст. Контекст это, во-первых, понимание зачем решение нужно. На практике программист очень редко пишет сферические алгоритмы в вакууме, обычно он решает конкретную прикладную задачу. Соответственно в реальной работе обычно детали и тонкости вытекают из прикладной задачи, а не из самого алгоритма и тем более не из мнения гуру-собеседующего. Во-вторых, контекст это единообразное понимание терминов. В-третьих, это понимание особенностей мышления человека ставящего задачу.
В данном случае оказалось, что под списком топикстартер понимает не динамический массив (используемый на практике очень широко), а односвязный список (на практике бесполезный и никогда не используемый). Т.е. термины собеседующий и собеседумые скорей всего понимают по разному. Также у меня возникло впечатление (возможно ложное), что иное чем у него самого понимание терминов для топикстартера вселенская проблема и прегрешение, т.е. в мышлении топикстартера бегают особо крупные тараканы, о чем собеседуемый разумеется знать не может.
V>Не совсем. В данном случае — с задачей реверса односвязного списка — это отбор по инверсному критерию. Т.е. те, кто "отобрался" V>- сразу отсеиваются. Почему такой отбор многим чужд? Хз. Может, проблемы в консерватории?
Не понял. Ты предлагаешь тех кто решил задачки на собеседовании на работу не брать? Интересный подход, но что-то мне подсказывает, что фильтр все равно получится отрицательный.
V>Или вы никогда дебилов на работу не брали?
Я не провожу собеседования, хотя обычно присутствую при их проведении. Но с дебилами мне работать не приходилось. Выборка, конечно, если говорить о программистах, не особо велика — человека пятнадцать, но вполне статистически значима. Т.е. случайностью вряд ли объяснима, при этом на обоих работах где я работал задачек на собеседовании либо вообще не давали, либо они были словесными и имели второстепенное значение, интересуясь вместо этого предыдущим опытом работы.
Также замечу, что два худших программиста, из тех с которыми мне пришлось работать, в скором времени после этого устроились в гугль, т.е. задачки на собеседованиях они решали прекрасно. Зато в реальной работе для логически примитивных задач писали решения запредельной сложности, которые соответственно работали через пень-колоду, либо вообще не работали, и были вообще не поддерживаемы, либо поддерживаемы с большим трудом.
V>Вот тут у меня прямо противоположное мнение. Например, ПМ, анализируя выражение x & (x + 1) родил табличку.
И какое отношение эта табличка имеет к теме топика? Т.е. ПМ уже забыл о поднятом им вопросе и углубился в детали не имеющие никакого отношения к теме. Это по-твоему качество понимальщика?
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Также замечу, что два худших программиста, из тех с которыми мне пришлось работать, в скором времени после этого устроились в гугль, т.е. задачки на собеседованиях они решали прекрасно. Зато в реальной работе для логически примитивных задач писали решения запредельной сложности, которые соответственно работали через пень-колоду, либо вообще не работали, и были вообще не поддерживаемы, либо поддерживаемы с большим трудом.
А эти два программиста могут за себя постоять и изложить свою точку зрения на произошедшее, а так же мнение по поводу Undying. Было бы интересно.
Re[28]: Задача на собеседовании - обращение списка.
L>>>Ты опять аппелируешь к аргументу "тут так принято". S>>апеллирую
L>Нарушение правил.
в кои-то веки с samius-ом надо согласиться
терминология шарпа была взята в резком разрезе с общепринятой, и это шарп отнюдь не красит
то, что слово оказалось короче, шарп не оправдывает
классически List -- это структура данных со вставкой и удалением в О(1)
единственное, что может на слабую троечку с двумя минусами оправдать наглый захват термина -- это то, что в современной практически последовательной памяти константа в О(1) может оказаться больше, чем ln N (скажем, если проход по указателю заставит вылезти из L3 кэша в оперативку)
Re[3]: Задача на собеседовании - обращение списка.
ПМ>Кстати, многие серьёзные организации (Майкрософт, Гугль, Фейсбук) отсеивают программистов по алгоритмическим задачам. Неверное не зря.
ну и платят там не жалкие 100 тыр.
оценивать человека по алгоритмическим задачам в принципе похвально, но я сомневаюсь, что вам действительно нужны *такие* программисты в большом количестве
CRM это же вроде рутина типа формочек и sql, там алгоритмы не нужны вообще, не?
если ты скажем взялся оценивать решение алгоритмических задач, то
1. их должно быть много, чтобы нивелировать случаи "человек просто знает решение"
2. решение должно заканчиваться изложением алгоритма на человеческом языке (так как п.1)
3. ты должен представлять сложность задач
4. ты должен предствалять относительную сложность задач, а то из тебя валятся удивительные высказывания про то, что знание хаскельного reverse не помогает сделать мутирующий reverse
ну и наконец, не 100% верное, но правдоподобное высказываение -- были бы у тебя самого шустрые мозги, ты бы спокойно и доброжелательно относился к людям-тормозам, при условии, что они не понтуются
Здравствуйте, kaa.python, Вы писали:
KP>Я как раз о другом пишу. То что они никаких разворот списка в глаза не видели, им это не мешает решать задачи.
Это верно.
KP> И для языков на которых наговнять довольно сложно, уровня "чуть умнее обезьяны" хватает.
Увы не хватает. Талант всегда находит как изговнять всё даже на языке со встроенными памперсами.
KP>И еще. Чем больше пересекаюсь по работе с индусами, тем больше замечаю то, что легенда про их кривые руки не более чем легенда использующаяся что бы почесать ЧСВ ряда не индусских разработчиков.
Один из наших заказчиков с до крови расчёсаным ЧСВ как то отдал нам проект, полностью загубленный такими некриворукими на полную переделку.
Ну а наш регулярно общающийся с индусами народ покуда подтверждает мой личный опыт: я за всё время из всей армии индусов знаю пока только одного вменяемого.
KP> Из коих говноднлов ничуть не меньше.
Да их везде толпы. Просто в Индии их производство поставлено на поток, оттого и такой жуткий процент брака.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, m e, Вы писали:
G>>Я не перепутал, я именно их и имел ввиду. Потому что в твоем способе разница нужна между парой рядомстоящих локальных экстремумах.
ME>почему рядомстоящих?
Хз, забыл уже. Цепочку рассуждений восстанавливать некайф. Скорее всего данная идея алгоритма не приведет к положительному результату.
ME>>почему рядомстоящих?
G>Хз, забыл уже. Цепочку рассуждений восстанавливать некайф. Скорее всего данная идея алгоритма не приведет к положительному результату.
ну а как насчет smoke test прежде чем писать что-то на форум?
я вот думаю, что нужно взять глобальный минимум и глобальный максимум, и будет тебе как раз решение
Re[53]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Считать, что мнение собеседника — несущественно является проявлением неуважения. S>Тогда вы тоже нарушили правила. Объясняю в чем: S>Я написал, что написанное в википедии существенно. Это совпадает с моим мнением. На что вы ответили, что так не считаете, т.е. это означает, что вы не считаете написанное в википеди существенным (но ссылаетесь на нее). А раз мое мнение совпадает с написанным в википедии, то значит что мое мнение вы не считаете существенным.
не-не-не, родной, у нас все ходы записаны. у тебя к использованию названия list в других языках тоже есть претензии.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Интересная идея, предложу начальству попробовать. Про 40 всё таки не верится
Студентка, довольно быстро разобралась в области, смогла предложить пару решений очень простых, но на которые внимание не обращали, т.к. глаз замылился.
<Подпись удалена модератором>
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, denisko, Вы писали:
D>>Есличо, то самый эффективный за последний год работник у меня работает за 40.
L>Ему есть к чему стремиться, в отличие от тех, кто получает за 100.
Да нет, просто есть народ из тусовки (рсдн, хабр), который верит, что у нас все плохо и "программистзаменьшестатышдолженвредить", есть народ не из тусовки и про эту мантру не знает. Уровень вторых часто сильнее уровня людей из первой группы. Плюс, есть некоторый иммунитет к попаданию в тусовку.
<Подпись удалена модератором>
Re[51]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>>>Не могли бы вы более подробно расписать, почему вы так считаете? S>>>Потому что в случае, когда допустимо более одной реализации (как раз наш случай), по такому имени невозможно понять, какая именно реализация выбрана. К тому же, имя List для конкретной структуры данных намекает на то, что в качестве реализации выбрана одна из типичных конкретных структур с именем List. А это не так.
L>>1. Вы ответили на какой-то другой вопрос. Ведь по вашей логике и класс, реализующий linked list нельзя назвать LinkedList, т.к. в этом случае имя структуры linked list будет использовано для имени класса. S>связный список — это конкретная структура данных, а не абстрактная. Потому называть класс так можно и нужно, если этот класс реализует именно связный список, а не массив.
В таком случае, List в .Net — не конкретная структара данных, а ее реализация. И мы снова приходим к проблеме коллизии имен.
L>>2. По имени можно заглянуть в документацию и все выяснить. Дело двух минут. А вот с длинными именами вам придется жить всю жизнь, даже после того, как вы на 146 процентов будете знать всю подноготную вышеупомянутого List-а. S>Я за говорящие имена
После 2-м минут смотрения в документацию имя List таким и станет.
S>>>Я не путаю. Я привожу список конкретных линейных структур данных. Причем тут дотнет — вообще не понятно. Разве он когда-либо являлся определяющим в отношении структур данных?
L>>Тык вы же сами захотели поговорить про абстрактные структуры данных в дотнете. Я только поддержал тему. S>Вы же сказали что List — это конкретная структура данных. Что-то поменялось?
Ага, поменялась формулировка. То была "структуры данных в дотнете", то стала "конкретная структура данных". Но никто не заметил подмены, продолжайте.
S>>>Вот LISP — да. В отношении списков он де факто определяет погоду.
L>>Ой да ну, в lisp-е кроме cons-ов нифига и нет и поэтому там все через списки эмулируется. Какой-то фиговый вы образчик выбрали. S>Можно взять ML. Там кроме cons-ов есть кое-что еще, а списки все равно односвязные.
А зачем мне брать ML, если можно взять шарп, который по распространенности заткнет все ML-и, haskell-ы и лиспы вместе взятые?
Здравствуйте, m e, Вы писали:
ME>>>почему рядомстоящих?
G>>Хз, забыл уже. Цепочку рассуждений восстанавливать некайф. Скорее всего данная идея алгоритма не приведет к положительному результату.
ME>ну а как насчет smoke test прежде чем писать что-то на форум? ME>я вот думаю, что нужно взять глобальный минимум и глобальный максимум, и будет тебе как раз решение
А как насчет smoke test?
Здравствуйте, denisko, Вы писали:
D>Да нет, просто есть народ из тусовки (рсдн, хабр), который верит, что у нас все плохо и "программистзаменьшестатышдолженвредить", есть народ не из тусовки и про эту мантру не знает. Уровень вторых часто сильнее уровня людей из первой группы. Плюс, есть некоторый иммунитет к попаданию в тусовку.
т.е. человек просто не в курсе, сколько он может стоит, поэтому работает по дешевке. как только поймет — свалит от вас, назвав самыми не хорошими, но правдивыми, словами.
Re[8]: Задача на собеседовании - обращение списка.
KP>т.е. человек просто не в курсе, сколько он может стоит, поэтому работает по дешевке. как только поймет — свалит от вас, назвав самыми не хорошими, но правдивыми, словами.
Ога, это стандартный коммент человека из тусовки. Мне такие не нужны по разным причинам.
<Подпись удалена модератором>
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, denisko, Вы писали:
D>>Ога, это стандартный коммент человека из тусовки. Мне такие не нужны по разным причинам.
KP>За еду работать не хотят, гады?!
Еще один стандартный коммент. Все-таки от программиста ждешь более нешаблонного мышления.
<Подпись удалена модератором>
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Углубимся. Контекст данных веток — собеседование. Посылка: каждый собеседующий берет на работу людей, которые мыслят схожим V>с ним образом. Даже не так, каждый ДОЛЖЕН брать людей, которые мыслят схожим с ним образом. Иначе они тупо не сработаются — это V>очевидно. Именно поэтому методы ПМ и gj должны быть разными (хотя и могут пересекаться). Именно поэтому "задавание задачек" V>на собеседовании для ПМ — один из работающих инструментов, а для gj — бессмысленная херня.
Это не очевидно. Особенно в отношениях начальник-подчинённый.
И каждый день — без права на ошибку...
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>В данном случае оказалось, что под списком топикстартер понимает не динамический массив (используемый на практике очень широко)
Однако, интересные заявочки. У меня почему то всегда список всегда понимался как linked list, и никогда как array.
U> а односвязный список (на практике бесполезный и никогда не используемый).
Ну почему никогда не используемый и бесполезный?
Для него есть область применения где он очень используемый и нужный. Особенно во всяком lock-free.
U>Также замечу, что два худших программиста, из тех с которыми мне пришлось работать, в скором времени после этого устроились в гугль, т.е. задачки на собеседованиях они решали прекрасно. Зато в реальной работе для логически примитивных задач писали решения запредельной сложности, которые соответственно работали через пень-колоду, либо вообще не работали, и были вообще не поддерживаемы, либо поддерживаемы с большим трудом.
Встречал таких, с аналогичным результатом: свалили куда то, при этом так и не написав ничего, что можно было бы пустить в production.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Вы не написали, на какую должность и в какой области набираете персонал.
А это важно, потому что соответствующий уровень абстракции, на котором человек в этой
области работает, может позволять не знать такие детали. Хотя, к примеру, для сишника или
плюсовика не решить эту задачу или не уметь найти хоть какое-то, пусть и не оптимальное
решение — позор. Тем более, что пишется это в пару десятков строк кода, как для односвязанных,
так и для двухсвязанных списков, нужна лишь элементарная аккуратность с указателями.
ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Если человек никогда не работал с этой структурой данных, он может на некоторое время
задуматься, но вообще, на мой взгляд, в задаче нет ничего экстраординарного.
То есть, включаем соображалку, представляем себе в уме эти next/prev и прикидываем,
как наиболее эффективно выполнить reverse, желательно с минимальными переаллокациями.
Для этого не нужны никакие скиллы или тайные знания, а просто соображалка и 5-10 минут времени.
А если соображалка у человека не работает, то и программировать ему будет трудно.
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Может быть, не стоит сразу завершать собеседование на первой же ошибке собеседуемого ?
Мало ли — вдруг и впрямь ему по работе ни разу не приходилось сталкиваться со списками, а
читал он про них в последний раз лет десять назад ? Дайте ему вторую задачку, пусть из той же оперы.
Если совсем глухо, тогда да — надо закругляться.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, m e, Вы писали:
ME>ну и платят там не жалкие 100 тыр.
Платят там по рынку. Причем по рынку американскому, на котором напрямую не следует, что рядовой кодер зарабатывает раз в 8 учителя в школе.
ME>CRM это же вроде рутина типа формочек и sql, там алгоритмы не нужны вообще, не?
У меня другая философия. Есть код, который можно написать и забыть про него, и есть код, который остаётся на сопровождении. Фирма, занимающаяся разрабокой кастомных решений отличается о фирмы, производящей тиражный софт или контор, которые пишут для себя, тем, что в ней очень много "неактивного" кода (т.е. такого, который написали давно и после этого не трогали) на сопровождении, на одного программиста может приходиться несколько достаточно крупных проектов. И постоянно возникают задачи этот код чуть-чуть подправить в каком-нибудь совершенно случайном месте. Поэтому код должен быть качественным, чтобы квалифицированный программист в любой момент мог взять, быстро в нём разобраться и модифицировать, и чтобы при этом ничего не развалилось. Конечно можно нанять для написание этого кода говнокодеров, и они как-то напишут говнокод, который будет решать поставленную задачу, но что дальше с ним делать? Результат труда программиста — это не экзешник, это код.
ME>если ты скажем взялся оценивать решение алгоритмических задач, то
Если бы я хотел проверять умение решения алгоритмических задач — я бы давал что-нибудь с Project Euler. Обращение списка (и тому подобное) — это проверка общей вменяемости.
ME>ну и наконец, не 100% верное, но правдоподобное высказываение -- были бы у тебя самого шустрые мозги, ты бы спокойно и доброжелательно относился к людям-тормозам, при условии, что они не понтуются
Я спокойно и доброжелательно отношусь к тормозам, даже если они понтуются. Я просто опасаюсь брать таких на должности сеньёр-разработчиков.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Wolverrum, Вы писали:
W>Здравствуйте, Паблик Морозов, Вы писали: W>>>А что ты хочешь услышать от соискателя? W>>>1. Алгоритм разворота W>>>Позор тебе, плохой, негодный работодатель. W>>>2. Уточняющий вопрос вида: "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?" W>>>Хвала тебе, дальше даже конкретное решение не надо спрашивать. ПМ>>1. ПМ>>Потому что только дибил будет спрашивать "Какой список будем обращать: псвязный, массив, всписок, что-там-еще?" после того, как ему объяснят, что разворачивать будем односвязный список, обсудят, что это такое и нарисуют примеры входных и выходных данных. W>Значит, ты тролль, либо плохой, негодный писатель. Ибо в стартовом сообщении нет слова "односвязный". Нисево лисьнова.
На эти вопросы я ответил во втором или третьем сообщении, как только их задали. Так что дело не в писателе, а в читателе.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Я написал, что написанное в википедии существенно. Это совпадает с моим мнением. На что вы ответили, что так не считаете, т.е. это означает, что вы не считаете написанное в википеди существенным (но ссылаетесь на нее). А раз мое мнение совпадает с написанным в википедии, то значит что мое мнение вы не считаете существенным.
L>не-не-не, родной, у нас все ходы записаны. у тебя к использованию названия list в других языках тоже есть претензии.
Есть. А как это относится к теме "ты меня уважаешь"?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>связный список — это конкретная структура данных, а не абстрактная. Потому называть класс так можно и нужно, если этот класс реализует именно связный список, а не массив.
L>В таком случае, List в .Net — не конкретная структара данных, а ее реализация. И мы снова приходим к проблеме коллизии имен.
Что-то больно тонко, не пойму в чем подвохЪ.
S>>Я за говорящие имена
L>После 2-м минут смотрения в документацию имя List таким и станет.
А после секундного смотрения в другую документацию перестанет.
L>>>Тык вы же сами захотели поговорить про абстрактные структуры данных в дотнете. Я только поддержал тему. S>>Вы же сказали что List — это конкретная структура данных. Что-то поменялось?
L>Ага, поменялась формулировка. То была "структуры данных в дотнете", то стала "конкретная структура данных". Но никто не заметил подмены, продолжайте.
А кто подменял-то? Так все-таки конкретная или абстрактная?
S>>Можно взять ML. Там кроме cons-ов есть кое-что еще, а списки все равно односвязные.
L>А зачем мне брать ML, если можно взять шарп, который по распространенности заткнет все ML-и, haskell-ы и лиспы вместе взятые?
Ну так можно взять C/C++, если речь зашла о распространенности.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>В таком случае, List в .Net — не конкретная структара данных, а ее реализация. И мы снова приходим к проблеме коллизии имен. S>Что-то больно тонко, не пойму в чем подвохЪ.
Что именно непонятно?
L>>После 2-м минут смотрения в документацию имя List таким и станет. S>А после секундного смотрения в другую документацию перестанет.
Если перестанет, то не смотрите в такую документацию. Она того не стоит.
S>>>Вы же сказали что List — это конкретная структура данных. Что-то поменялось? L>>Ага, поменялась формулировка. То была "структуры данных в дотнете", то стала "конкретная структура данных". Но никто не заметил подмены, продолжайте. S>А кто подменял-то?
Ну, точно не я. Методом исключения остается только 1 вариант.
S>Так все-таки конкретная или абстрактная?
Класс List — это реализация, а не конкретная/абстрактная структура данных.
L>>А зачем мне брать ML, если можно взять шарп, который по распространенности заткнет все ML-и, haskell-ы и лиспы вместе взятые? S>Ну так можно взять C/C++, если речь зашла о распространенности.
Ну ты уж определись, что именно ты берешь.
Re[55]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>не-не-не, родной, у нас все ходы записаны. у тебя к использованию названия list в других языках тоже есть претензии. S>Есть. А как это относится к теме "ты меня уважаешь"?
Подумай на досуге. Людей поспрашивай, может объяснят.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, okman, Вы писали:
O>Если человек никогда не работал с этой структурой данных, он может на некоторое время O>задуматься, но вообще, на мой взгляд, в задаче нет ничего экстраординарного. O>То есть, включаем соображалку, представляем себе в уме эти next/prev и прикидываем, O>как наиболее эффективно выполнить reverse, желательно с минимальными переаллокациями. O>Для этого не нужны никакие скиллы или тайные знания, а просто соображалка и 5-10 минут времени. O>А если соображалка у человека не работает, то и программировать ему будет трудно.
С какими еще переаллокациями? Сами элементы не трогаются, надо только поменять указатели.
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, m e, Вы писали:
ME>терминология шарпа была взята в резком разрезе с общепринятой, и это шарп отнюдь не красит ME>то, что слово оказалось короче, шарп не оправдывает
Не совсем так.
В 1-й версии не-generic версия называлась ArrayList, вполне в соответствии с тем, за что так ратует samius.
Так что разработчикам framework-а нельзя поставить в вину, что они не знали, как на самом деле называется их реализация списка.
Когда писали generic-версию, то назвали ее List.
Объяснение такого выбора, данное samius-ом (если его сформулировать по-простому) заключается в том, что разработчики framework-а — безграмотные болваны, не знающие основ. Но эта точка зрения "конфликтует" с тем фактом, что в 1-й версии было использовано другое имя.
Мое же объяснение заключается в том, что на основе фидбэка от пользователей и исходя из статистики использования, было решение дать списку имя попроще и покороче, и поэтому и был выбран List.
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, FR, Вы писали:
FR>Так как главный архитектор C# тоже начинал с паскаля/дельфи наверно это и есть главная причина ненормального списка в шарпе
Не очень убедительно, учитывая, что в 1-й версии List назывался ArrayList
Re[54]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>В таком случае, List в .Net — не конкретная структара данных, а ее реализация. И мы снова приходим к проблеме коллизии имен. S>>Что-то больно тонко, не пойму в чем подвохЪ.
L>Что именно непонятно?
см ниже
S>>А после секундного смотрения в другую документацию перестанет.
L>Если перестанет, то не смотрите в такую документацию. Она того не стоит.
Не вам решать, куда мне смотреть, и стоит ли оно того.
L>>>Ага, поменялась формулировка. То была "структуры данных в дотнете", то стала "конкретная структура данных". Но никто не заметил подмены, продолжайте. S>>А кто подменял-то?
L>Ну, точно не я. Методом исключения остается только 1 вариант.
Я спрашивал "List в дотнете конкретная или асбтрактная структура данных". Вы подменяете на "структура данных в дотнете". Некрасиво.
S>>Так все-таки конкретная или абстрактная?
L>Класс List — это реализация, а не конкретная/абстрактная структура данных.
Не понятно в чем разница между абстрактной структурой данных и конкретной, учитывая то что реализация по-вашему ни тем ни другим не является
Уход от вопроса детектед
L>>>А зачем мне брать ML, если можно взять шарп, который по распространенности заткнет все ML-и, haskell-ы и лиспы вместе взятые? S>>Ну так можно взять C/C++, если речь зашла о распространенности.
L>Ну ты уж определись, что именно ты берешь.
Ты уж определись, выкаешь ты мне или тыкаешь. Задолбало подстраиваться.
Как ты не упирайся, C# в этом вопросе определяющим не является, хоть брать ML, хоть C, хоть LISP.
Re[56]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>не-не-не, родной, у нас все ходы записаны. у тебя к использованию названия list в других языках тоже есть претензии. S>>Есть. А как это относится к теме "ты меня уважаешь"?
L>Подумай на досуге. Людей поспрашивай, может объяснят.
Мне больше людей нечем допекать, чем вопросами относительно логики высказываний Lloyd-а?
Re[55]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>>>В таком случае, List в .Net — не конкретная структара данных, а ее реализация. И мы снова приходим к проблеме коллизии имен. S>>>Что-то больно тонко, не пойму в чем подвохЪ.
L>>Что именно непонятно? S>см ниже
Извини, но теперь непонятно мне. "больно тонко" (с)
S>>>А после секундного смотрения в другую документацию перестанет.
L>>Если перестанет, то не смотрите в такую документацию. Она того не стоит. S>Не вам решать, куда мне смотреть, и стоит ли оно того.
Да бога ради, если вас устаивает смотреть в документацию, в которой написано, что List построен не на массиве — смотрите, дело ваше.
Только не жалуйтесь, что имена неудачно подобраны.
L>>>>Ага, поменялась формулировка. То была "структуры данных в дотнете", то стала "конкретная структура данных". Но никто не заметил подмены, продолжайте. S>>>А кто подменял-то?
L>>Ну, точно не я. Методом исключения остается только 1 вариант. S>Я спрашивал "List в дотнете конкретная или асбтрактная структура данных". Вы подменяете на "структура данных в дотнете". Некрасиво.
Прежде чем обвинять, перечитал бы своее сообщение.
Вот скажи мне, List в дотнете это абстрактная структура данных, или конкретная?
Оно может быть двояко понятно. Некрасиво так формулировать предложения, а потом тыкать на то, что выбрана другая трактовка.
S>>>Так все-таки конкретная или абстрактная?
L>>Класс List — это реализация, а не конкретная/абстрактная структура данных. S>Не понятно в чем разница между абстрактной структурой данных и конкретной, учитывая то что реализация по-вашему ни тем ни другим не является
Ты мне задаешь вопрос, про то, является ли List абстрактной или конкретной структурой данных. И при этом пишешь, что непонятно в чем между ними разница?!
На кой тогда тебе ответ на вопрос, если ты не видишь между ними отличий?
S>Уход от вопроса детектед
Был дан четкий ответ.
L>>>>А зачем мне брать ML, если можно взять шарп, который по распространенности заткнет все ML-и, haskell-ы и лиспы вместе взятые? S>>>Ну так можно взять C/C++, если речь зашла о распространенности.
L>>Ну ты уж определись, что именно ты берешь. S>Ты уж определись, выкаешь ты мне или тыкаешь. Задолбало подстраиваться.
Не тебе решать, тыкать мне или выкать.
S>Как ты не упирайся, C# в этом вопросе определяющим не является, хоть брать ML, хоть C, хоть LISP.
Ну так определись с чем-то одним, раз без разницы. Или "Уход от вопроса детектед".
Re[57]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Подумай на досуге. Людей поспрашивай, может объяснят.
S>Мне больше людей нечем допекать, чем вопросами относительно логики высказываний Lloyd-а?
Этим точно не стоит допекать, а вот поинтересоваться по поводу твоей фразы точно стоит.
Советую, а то мало ли, попадешь на менее уравновешеного собеседника, на еще не дай бог в офлайне.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, antonio_banderas, Вы писали:
_>С какими еще переаллокациями? Сами элементы не трогаются, надо только поменять указатели.
С двусвязным списком все просто — можно просто пройтись с обоих концов к середине и поменять
местами хранящиеся значения. Или пройтись по списку с конца, разворачивая указатели, а затем
сделать последний элемент головным. Или еще как-нибудь, вариантов наверняка полно.
А с односвязным не все так просто, так как он итерируется лишь в одном направлении.
То есть, либо получим рекурсивный алгоритм, который на больших объемах данных не
работает (ввиду переполнения стека), либо многократные проходы по списку, что неэффективно.
Проще сделать так — пройти все элементы списка, с начала в конец, и для каждого
элемента выполнить вставку в голову списка, после чего исходный элемент удалить.
Получим перевернутый список, не злоупотребляя выделением памяти и лишними проходами туда-сюда.
Re[58]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Мне больше людей нечем допекать, чем вопросами относительно логики высказываний Lloyd-а?
L>Этим точно не стоит допекать, а вот поинтересоваться по поводу твоей фразы точно стоит. L>Советую, а то мало ли, попадешь на менее уравновешеного собеседника, на еще не дай бог в офлайне.
Советом, пожалуй, не воспользуюсь.
Ввиду утраты надежды на конструктив предлагаю прекратить эти терки. Обсуждать переспективы встречи с неуровновешенными в оффлайне мне не интересно.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, okman, Вы писали:
O>А с односвязным не все так просто, так как он итерируется лишь в одном направлении. O>То есть, либо получим рекурсивный алгоритм, который на больших объемах данных не O>работает (ввиду переполнения стека), либо многократные проходы по списку, что неэффективно.
ЧЯДНТ?
Список:
public class Node<T>
{
public T Value { get; set; }
public Node<T> Next { get; set; }
}
Разворот:
public static Node<T> ReverseInPlace<T>(Node<T> root)
{
Node<T> prev = null;
Node<T> curr = root;
while (curr != null)
{
var next = curr.Next;
curr.Next = prev;
prev = curr;
curr = next;
}
return prev;
}
Тест:
Node<string> result;
result = ReverseInPlace((Node<string>)null);
Debug.Assert(result == null);
var data = new Node<string>
{
Value = "drink",
Next = new Node<string>
{
Value = "without",
Next = new Node<string>
{
Value = "putting",
Next = new Node<string>
{
Value = "up",
Next = new Node<string>
{
Value = "into",
Next = new Node<string>
{
Value = "this",
Next = new Node<string>
{
Value = "moment",
Next = null
}
}
}
}
}
}
};
result = ReverseInPlace(data);
Debug.Assert(result.Value == "moment");
Debug.Assert(result.Next.Value == "this");
Debug.Assert(result.Next.Next.Value == "into");
Debug.Assert(result.Next.Next.Next.Value == "up");
Debug.Assert(result.Next.Next.Next.Next.Value == "putting");
Debug.Assert(result.Next.Next.Next.Next.Next.Value == "without");
Debug.Assert(result.Next.Next.Next.Next.Next.Next.Value == "drink");
Debug.Assert(result.Next.Next.Next.Next.Next.Next.Next == null);
Re[59]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Этим точно не стоит допекать, а вот поинтересоваться по поводу твоей фразы точно стоит. L>>Советую, а то мало ли, попадешь на менее уравновешеного собеседника, на еще не дай бог в офлайне.
S>Советом, пожалуй, не воспользуюсь. S>Ввиду утраты надежды на конструктив предлагаю прекратить эти терки.
Поддерживаю.
S>Обсуждать переспективы встречи с неуровновешенными в оффлайне мне не интересно.
Ну смотри, мое дело предупредить.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
U>>В данном случае оказалось, что под списком топикстартер понимает не динамический массив (используемый на практике очень широко) BBI>Однако, интересные заявочки. У меня почему то всегда список всегда понимался как linked list, и никогда как array.
Вероятно потому что мы программируем на разных языках. В шарпе класс List это динамический массив. Ты как я понимаю программируешь на плюсах, а там по другому.
BBI>Ну почему никогда не используемый и бесполезный? BBI>Для него есть область применения где он очень используемый и нужный. Особенно во всяком lock-free.
А они нужны эти lock-free? В реальных задачах, как правило, нужно лочить транзакцию (т.е. синхронное изменение нескольких переменных) и чем тут lock-free может помочь? Да и просто задачу где время локов критично еще поискать нужно.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>А эти два программиста могут за себя постоять и изложить свою точку зрения на произошедшее, а так же мнение по поводу Undying. Было бы интересно.
И что ты этим хочешь добиться? Речь о том, что одними из самых опасных людей для проекта являются те, кто делают простое сложным. При этом как правило такие люди далеко не глупы и абстрактные задачки решают очень неплохо. С чем ты собрался спорить? С существованием таких людей в принципе? С их опасностью для проекта? Или с тем, что они способны успешно решать задачки на собеседованиях?
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, denisko, Вы писали:
D>>Еще один стандартный коммент. Все-таки от программиста ждешь более нешаблонного мышления.
KP>Шаблонное поведение вызывает не менее шаблонную ответну реакцию. Я думал тебе это должно быть очевидно
И опять шаблонный ответ неумелого тролля. Вот скажи за что тебе платить, если с тобой даже поговорить не о чем?
<Подпись удалена модератором>
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, samius, Вы писали:
S>>А эти два программиста могут за себя постоять и изложить свою точку зрения на произошедшее, а так же мнение по поводу Undying. Было бы интересно.
U>И что ты этим хочешь добиться?
Я уже написал, что было бы интересно сравнить разные точки зрения.
U>Речь о том, что одними из самых опасных людей для проекта являются те, кто делают простое сложным.
Без конкретных примеров тут обсуждать нечего.
U>При этом как правило такие люди далеко не глупы и абстрактные задачки решают очень неплохо. С чем ты собрался спорить? С существованием таких людей в принципе? С их опасностью для проекта? Или с тем, что они способны успешно решать задачки на собеседованиях?
Я еще спорить не собрался. Я просто увидел что ты обвинил пару неглупых, судя по всему, программистов, и не увидел у них возможности реабилитироваться.
Мне бы было неприятно, если бы я узнал что кто-то из бывших моих коллег обвиняет меня в чем-то подобном, особенно без намерения привлечь меня к обсуждению. Мне есть что сказать в защиту принятых мной решений.
L>Когда писали generic-версию, то назвали ее List. L>Объяснение такого выбора, данное samius-ом (если его сформулировать по-простому) заключается в том, что разработчики framework-а — безграмотные болваны, не знающие основ. Но эта точка зрения "конфликтует" с тем фактом, что в 1-й версии было использовано другое имя.
я выдам свою версию -- разработчикам было насрать на общепринятую терминологию, что, конечно же, не есть хорошо
Array они сделали; если это имя было занято -- тогда Lane, Swath, ... да мало ли в английском подходящих односложных? а еще и двусложные есть
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали: L>Здравствуйте, __kot2, Вы писали: L>>>ЧЯДНТ? __>>тест плохой L>чем именно?
тесты должны быть минимально возможными и покрывать в том числе все пограничные случаи
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, __kot2, Вы писали:
__>>>тест плохой L>>чем именно? __>тесты должны быть минимально возможными и покрывать в том числе все пограничные случаи
Какой случай не покрыт?
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, __kot2, Вы писали:
__>>>>тест плохой L>>>чем именно? __>>тесты должны быть минимально возможными и покрывать в том числе все пограничные случаи
L>Какой случай не покрыт?
1 элемент и 2 элемента. покрыто только 0 или <3 и более>. больше 3 проверять бессмысленно — логика не изменится. то есть для проверки нужно 4 теста — 0, 1, 2 и 3 элемента
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, __kot2, Вы писали: __>1 элемент и 2 элемента. покрыто только 0 или <3 и более>. больше 3 проверять бессмысленно — логика не изменится. то есть для проверки нужно 4 теста — 0, 1, 2 и 3 элемента
поясню, почему.
у списка есть голова, хвост и промежуточные элементы. соотв-но 3 элемента это уже полноценный список со всеми его составляющими. алгоритм может по-разному отрабаывать на голове, хвосте и промежуточных элементах, но все промежуточные обрабатывает единообразно, поэтому самый максимальный тест это когда есть все три части списка — голова, хвост и промежуточный элемент. больше элементов проверять смысла нет
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, __kot2, Вы писали:
L>>Какой случай не покрыт? __>1 элемент и 2 элемента. покрыто только 0 или <3 и более>. больше 3 проверять бессмысленно — логика не изменится. то есть для проверки нужно 4 теста — 0, 1, 2 и 3 элемента
Почему вы 1 и 2 относите к пограничным случаям? Имхо, пограничный случай тут может быть только один — 0 эдементов.
Re[30]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>В 1-й версии не-generic версия называлась ArrayList, вполне в соответствии с тем, за что так ратует samius. L>Так что разработчикам framework-а нельзя поставить в вину, что они не знали, как на самом деле называется их реализация списка.
Я не ставил им в вину такого.
L>Когда писали generic-версию, то назвали ее List. L>Объяснение такого выбора, данное samius-ом (если его сформулировать по-простому) заключается в том, что разработчики framework-а — безграмотные болваны, не знающие основ. Но эта точка зрения "конфликтует" с тем фактом, что в 1-й версии было использовано другое имя.
Конфликт здесь назревает в том, что ты вместо меня формулируешь то, чего так и не смог понять. То, что разработчики болваны — это лишь твоя формулировка.
К сведению, я использовал дотнет с версии 1.0, т.е. с 2002 года. И мне как минимум приходилось использовать ArrayList вплоть до версии 2.0.
L>Мое же объяснение заключается в том, что на основе фидбэка от пользователей и исходя из статистики использования, было решение дать списку имя попроще и покороче, и поэтому и был выбран List.
Какой же ты маньяк подменять тему. Я объяснял чем плохо название List. А ты объяснил версию того, почему его выбрали. Не находишь, что мы объясняли совершенно разные вещи?
Re[31]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Мое же объяснение заключается в том, что на основе фидбэка от пользователей и исходя из статистики использования, было решение дать списку имя попроще и покороче, и поэтому и был выбран List. S>Какой же ты маньяк подменять тему. Я объяснял чем плохо название List. А ты объяснил версию того, почему его выбрали. Не находишь, что мы объясняли совершенно разные вещи?
Поскольку я объяснил почему его выбрали, то тем самым, я объяснил, почему выбраное имя не-плохо. Нахожу, что это одно и то же.
Re[32]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Какой же ты маньяк подменять тему. Я объяснял чем плохо название List. А ты объяснил версию того, почему его выбрали. Не находишь, что мы объясняли совершенно разные вещи?
L>Поскольку я объяснил почему его выбрали, то тем самым, я объяснил, почему выбраное имя не-плохо. Нахожу, что это одно и то же.
Может быть ты даже считаешь что то что писал я и то что ты сформулировал за меня тоже одно и то же. Но прошу тебя впредь так не делать, потому как я не считаю это одним и тем же.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Я еще спорить не собрался. Я просто увидел что ты обвинил пару неглупых, судя по всему, программистов, и не увидел у них возможности реабилитироваться.
Т.е. обмениваться опытом, включающим в себя оценку качеств других программистов, на форуме нельзя? Топикстартер вон обвинил в тупости кучу программистов, также не дав им возможности реабилитироваться. Где твой возмущенный пост топикстартеру?
S>Мне бы было неприятно, если бы я узнал что кто-то из бывших моих коллег обвиняет меня в чем-то подобном, особенно без намерения привлечь меня к обсуждению. Мне есть что сказать в защиту принятых мной решений.
Имен этих программистов я не называл, данных, по которым сторонний человек мог бы восстановить их имена я также не дал, соответственно не понимаю в чем может заключаться обида.
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали: L>Почему вы 1 и 2 относите к пограничным случаям? Имхо, пограничный случай тут может быть только один — 0 эдементов.
чуть выше пояснил
Re[33]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Какой же ты маньяк подменять тему. Я объяснял чем плохо название List. А ты объяснил версию того, почему его выбрали. Не находишь, что мы объясняли совершенно разные вещи?
L>>Поскольку я объяснил почему его выбрали, то тем самым, я объяснил, почему выбраное имя не-плохо. Нахожу, что это одно и то же.
S>Может быть ты даже считаешь что то что писал я и то что ты сформулировал за меня тоже одно и то же.
Нет, это не одно и то же, я просто домыслил за тебя следующий шаг размышления, который ты так и не решился высказать.
Если ты считаешь чье-то решение неправильным, следующим шагом должно стать объяснение, почему такое решение было выбрано. С удовольствием выслушаю твою версию.
S>Но прошу тебя впредь так не делать,
Не тебе решать, что и когда мне делать
S>потому как я не считаю это одним и тем же.
А вот это действительно не существенно.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, __kot2, Вы писали:
L>>Почему вы 1 и 2 относите к пограничным случаям? Имхо, пограничный случай тут может быть только один — 0 эдементов. __>чуть выше пояснил
Ок. По поводу 1 элемента согласен. Но что по поводу теста с 2-мя?
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали: L>Ок. По поводу 1 элемента согласен. Но что по поводу теста с 2-мя?
для правильной реализации да, тест с двумя не нужен. но если у нас неизвестная реализация, написанная школьником в бреду, или же алгоритм чуток другой или список по-другому устроен, то мы все равно можем ожидать, что в коде будет отдельно обрабатываться начало, конец и середина списка в цикле.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>В шарпе класс List это динамический массив.
Это они зря его так назвали.
U>А они нужны эти lock-free?
Очень. Даже в рантайме дотнета есть.
U>Да и просто задачу где время локов критично еще поискать нужно.
Да например банальная аллокация памяти в многопоточке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали: BBI>Здравствуйте, Undying, Вы писали: U>>В шарпе класс List это динамический массив. BBI>Это они зря его так назвали.
больше всего у меня удивление вызвало именование контейнеров в C#. это такой капец, так стыдно за них.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, samius, Вы писали:
S>>Я еще спорить не собрался. Я просто увидел что ты обвинил пару неглупых, судя по всему, программистов, и не увидел у них возможности реабилитироваться.
U>Т.е. обмениваться опытом, включающим в себя оценку качеств других программистов, на форуме нельзя? Топикстартер вон обвинил в тупости кучу программистов, также не дав им возможности реабилитироваться. Где твой возмущенный пост топикстартеру?
Обмениваться можно, если позволяет чувство такта.
К топикстартеру в этом отношении у меня претензий нет, т.к. во-первых, я с ним согласен в отношении того что обратить список программист должен уметь. Во вторых, он сделал это обезличенно, типа пришла толпа "программистов", облажалась и он их выставил. Куда они после этого устроились он не сообщил.
В твоем случае стало известно что ты с ними работал. Если бы ты написал что "знаю некоторых программистов", или "встречал", это было бы тоже обезличенно. Но раз это твои бывшие коллеги, то это уже позволяет в определенных кругах догадываться о конкретных личностях. Я в эти круги не вхож, понятия не имею о ком ты. Но мне за тебя неловко.
А то что они после этого устроились в гугль, делает их уже как минимум не тупыми соискателями, не справившимися с разворотом списка. Поэтому мне и стало интересно их мнение на твой отзыв о них.
S>>Мне бы было неприятно, если бы я узнал что кто-то из бывших моих коллег обвиняет меня в чем-то подобном, особенно без намерения привлечь меня к обсуждению. Мне есть что сказать в защиту принятых мной решений.
U>Имен этих программистов я не называл, данных, по которым сторонний человек мог бы восстановить их имена я также не дал, соответственно не понимаю в чем может заключаться обида.
У меня никакой обиды нет. Ты можешь писать что угодно о ком угодно, я могу писать нравится ли мне это или нет. Пока это не касается лично меня или моего круга знакомых, никаких обид.
А вот обижаться им или нет — пусть решают они. Но для этого у них должна быть как минимум возможность узнать что о них тут выражено нелестное мнение.
Но все эти воззвания к такту по отношению к бывшим коллегам — это мишура. Единственное что меня интересует — это ответное мнение о тебе твоих бывших коллег, судя по всему, нетупым. Не так уж что бы очень интересует. Так, любопытно. Естественно, ты не обязан его удовлетворять.
Re[34]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>Нет, это не одно и то же, я просто домыслил за тебя следующий шаг размышления, который ты так и не решился высказать.
Домыслил — ключевое.
L>Если ты считаешь чье-то решение неправильным, следующим шагом должно стать объяснение, почему такое решение было выбрано. С удовольствием выслушаю твою версию.
Напрашиваешься на то что бы я тебе обломал удовольствие.
S>>Но прошу тебя впредь так не делать,
L>
L>Не тебе решать, что и когда мне делать
Я не решал, я просил. Воспринимаю твой ответ как отказ.
S>>потому как я не считаю это одним и тем же.
L>
L>А вот это действительно не существенно.
.
Re[35]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Если ты считаешь чье-то решение неправильным, следующим шагом должно стать объяснение, почему такое решение было выбрано. С удовольствием выслушаю твою версию. S>Напрашиваешься на то что бы я тебе обломал удовольствие.
Меня не удивляет твой ответ, т.к. единственное, что ты можешь ответить, я уже озвучил парой постов выше.
Но т.к. такой ответ вряд ли кого может красить, то ты скорее предпочтешь увиливать, чем признать, что мои "домыслы" соответствовали действительности.
Re[36]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Напрашиваешься на то что бы я тебе обломал удовольствие.
L>Меня не удивляет твой ответ, т.к. единственное, что ты можешь ответить, я уже озвучил парой постов выше.
Ты продолжаешь ошибаться на мой счет.
L>Но т.к. такой ответ вряд ли кого может красить, то ты скорее предпочтешь увиливать, чем признать, что мои "домыслы" соответствовали действительности.
Такой ответ вряд ли красит тебя в первую очередь. И не обольщайся по поводу своих домыслов.
Re[37]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Напрашиваешься на то что бы я тебе обломал удовольствие.
L>>Меня не удивляет твой ответ, т.к. единственное, что ты можешь ответить, я уже озвучил парой постов выше. S>Ты продолжаешь ошибаться на мой счет.
L>>Но т.к. такой ответ вряд ли кого может красить, то ты скорее предпочтешь увиливать, чем признать, что мои "домыслы" соответствовали действительности. S>Такой ответ вряд ли красит тебя в первую очередь. И не обольщайся по поводу своих домыслов.
Вильни еще, у тебя хорошо получается.
Re[38]: Задача на собеседовании - обращение списка.
Здравствуйте, m e, Вы писали:
L>>Когда писали generic-версию, то назвали ее List. L>>Объяснение такого выбора, данное samius-ом (если его сформулировать по-простому) заключается в том, что разработчики framework-а — безграмотные болваны, не знающие основ. Но эта точка зрения "конфликтует" с тем фактом, что в 1-й версии было использовано другое имя.
ME>я выдам свою версию -- разработчикам было насрать на общепринятую терминологию, что, конечно же, не есть хорошо
я бы предпочел найти более более позитивное объяснение.
ME>Array они сделали; если это имя было занято -- тогда Lane, Swath, ... да мало ли в английском подходящих односложных? а еще и двусложные есть
Lane: переулок
Swath: просека
Не думаю, что наличие переулков и просек в коде, сделает его понятнее. У list/dictionary таких чужеродных смыслов нет.
Re[39]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
U>>В шарпе класс List это динамический массив. BBI>Это они зря его так назвали.
Вроде проблем это никаких не создает. ArrayList из первого фрамеворка был худшим вариантом.
U>>А они нужны эти lock-free? BBI>Очень. Даже в рантайме дотнета есть.
Т.е. в каких-то очень низкоуровневых задачах.
U>>Да и просто задачу где время локов критично еще поискать нужно. BBI>Да например банальная аллокация памяти в многопоточке.
Опять же это очень низкоуровневая задача.
Т.е. в шарпе я смутно представляю себе где такие знания могут понадобиться.
Re[40]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>>>В шарпе класс List это динамический массив. BBI>>Это они зря его так назвали. U>Вроде проблем это никаких не создает.
Ну как видишь уже есть подозрения на неправильное понимание терминологии.
U> ArrayList из первого фрамеворка был худшим вариантом.
Отнюдь, тут хоть понятно что именно там внутри.
U>>>А они нужны эти lock-free? BBI>>Очень. Даже в рантайме дотнета есть. U>Т.е. в каких-то очень низкоуровневых задачах.
В задачах где надо быстрое межпотоковое взаимодействие.
U>>>Да и просто задачу где время локов критично еще поискать нужно. BBI>>Да например банальная аллокация памяти в многопоточке. U>Опять же это очень низкоуровневая задача.
Это был пример.
U>Т.е. в шарпе я смутно представляю себе где такие знания могут понадобиться.
Не, раз тебе не надо так и не парься.
Тебе видимо в шарпе и про boxing ничего знать не надо — низкоуровневое ведь.
Или всё таки представляешь зачем это знание может понадобиться?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, vshemm, Вы писали:
V>>Углубимся. Контекст данных веток — собеседование. Посылка: каждый собеседующий берет на работу людей, которые мыслят схожим V>>с ним образом. Даже не так, каждый ДОЛЖЕН брать людей, которые мыслят схожим с ним образом. Иначе они тупо не сработаются — это V>>очевидно. Именно поэтому методы ПМ и gj должны быть разными (хотя и могут пересекаться). Именно поэтому "задавание задачек" V>>на собеседовании для ПМ — один из работающих инструментов, а для gj — бессмысленная херня.
BFE>Это не очевидно. Особенно в отношениях начальник-подчинённый.
Речь шла о горизонтальных связях. Если у начальника с подчиненным таковых нет или они слабые (например, проджект менеджер набирает
нового программиста), то да, не очевидно. Но хороший менеджер будет набирать нового человека который схож с уже имеющейся командой.
В общем, на одном уровне в иерархии компании люди должны быть как можно более однородны, имхо. Если есть контрпримеры — пожалуйста
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, vshemm, Вы писали:
V>>Но задача "реверс списка" — примитивная. G>Это задача с битами примитивная. Вся её сложность заключается в "своеобразности" операций. G>Задача на разворот списка требует понимания рекурсии и умения сводить рекурсию к итерации. Или хороший навык работы с указателями. G>Человек, который пишет на ЯВУ вполне может не обладать первым и скорее всего не обладает вторым. Причем в обоих случаях как разработчик решений он хуже не становится.
Не согласен. Задача от мыщъх отсеет больше людей, чем переворот списка, т.к. она более навороченная
и более узкоспециализированная, имхо. Одним из классических примеров на биты является следующее:
"Есть 32-битный регистр устройства, в котором 5-11 биты отвечают за выбор канала. Необходимо написать
функцию, которая принимает на вход номер канала и записывает его в этот регистр".
Все числа генерируются на ходу собеседующим. Вакансия тоже соответствующая. И даже не представляете,
сколько народу, который "имеет огромный опыт в написании драйверов под туеву хучу железок под туеву
хучу ОС, с DMA, scatter-gather" и т.п. только мычат в ответ.
Хотя задачка реальная, на данной должности ее будут решать по 20 раз на дню, т.е. в реальной работе
над ней не нужно задумываться ни секунды.
Решается только на знаниях двоичной сч и понятии "регистр устройства".
V>>могу выдать примитивный мыслепроцесс решения G>Выдай.
Ок, постараюсь сегодня-завтра, т.к. там будет много графики.
V>>Но суть не в нахождении решения, а в именно процессе G>При условии что этот процесс приведет к правильному решению.
Не факт. В идеале, собеседующий задает задачу (сложную) на которую сам не знает ответ. И вместе с
кандидатом пытается его найти. Что уж ближе к будущей реальной работе-то (не по задаче, а по процессу)?
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, vshemm, Вы писали:
V>>>Но задача "реверс списка" — примитивная. G>>Это задача с битами примитивная. Вся её сложность заключается в "своеобразности" операций. G>>Задача на разворот списка требует понимания рекурсии и умения сводить рекурсию к итерации. Или хороший навык работы с указателями. G>>Человек, который пишет на ЯВУ вполне может не обладать первым и скорее всего не обладает вторым. Причем в обоих случаях как разработчик решений он хуже не становится.
V>Не согласен. Задача от мыщъх отсеет больше людей, чем переворот списка, т.к. она более навороченная V>и более узкоспециализированная, имхо.
Навороченной — нет, узкоспециализированной — да.
V>Одним из классических примеров на биты является следующее: V>"Есть 32-битный регистр устройства, в котором 5-11 биты отвечают за выбор канала. Необходимо написать V>функцию, которая принимает на вход номер канала и записывает его в этот регистр".
V>Все числа генерируются на ходу собеседующим. Вакансия тоже соответствующая. И даже не представляете, V>сколько народу, который "имеет огромный опыт в написании драйверов под туеву хучу железок под туеву V>хучу ОС, с DMA, scatter-gather" и т.п. только мычат в ответ.
V>Хотя задачка реальная, на данной должности ее будут решать по 20 раз на дню, т.е. в реальной работе V>над ней не нужно задумываться ни секунды. V>Решается только на знаниях двоичной сч и понятии "регистр устройства".
Баранов много. Нов данном случае задача очень в тему, потому что заниматься придется именно этим.
А вот если контора занимается CRM, то разворот списка спрашивать крайне глупо. Просто тратить время соискателя и деньги работодателя чтобы самолюбие потешить.
V>>>Но суть не в нахождении решения, а в именно процессе G>>При условии что этот процесс приведет к правильному решению.
V>Не факт. В идеале, собеседующий задает задачу (сложную) на которую сам не знает ответ. И вместе с V>кандидатом пытается его найти. Что уж ближе к будущей реальной работе-то (не по задаче, а по процессу)?
Ближе, но что-то не видел таких. Обычно собеседующие как раз спрашивают то что знают и то что не нужно.
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, denisko, Вы писали:
D>И опять шаблонный ответ неумелого тролля. Вот скажи за что тебе платить, если с тобой даже поговорить не о чем?
Троллинг — это указанаие на то, что работающие у тебя за еду люди просто не в курсе текущего положения дел на рынке труда? А что, интересный подход, думаю, что в таком случае, рассказ этим людям о реальном положении дел на рынке труда будет приравнен к саботажу.
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, kaa.python, Вы писали:
KP>Троллинг — это указанаие на то, что работающие у тебя за еду люди просто не в курсе текущего положения дел на рынке труда? А что, интересный подход, думаю, что в таком случае, рассказ этим людям о реальном положении дел на рынке труда будет приравнен к саботажу.
В тему: http://belnetmon.livejournal.com/1786438.html
Наш инженер вернулся с установки на достаточно большом предприятии и поведал такую историю. Установка сложная, с интеграцией в сеть предприятия, настройкой маршрутизаторов и т.п. Но "начальник АСУ" категорически отказывается приводить админа, все замыкая на себя и просто тупо без понятия через себя передавая информацию. Непривычно. А потом все раскрылось, когда наш инженер услышал наставления начальника работникам:
— ..Вы запомнили? Ни в коем случае никаким этим конторам не давайте телефон Вадима. А то и его тоже к себе переманят!...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
BBI>Тебе видимо в шарпе и про boxing ничего знать не надо — низкоуровневое ведь. BBI>Или всё таки представляешь зачем это знание может понадобиться?
Не представляю в общем-то. В 1.0, да, теоретически это полезное знание. А начиная с 2.0 это как надо код писать, чтобы получить боксинг как критическое место по производительности? Т.е. для общего развития про боксинг может знать и полезно, но в практических задачах это совершенно бессмысленное знание.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
BBI>В задачах где надо быстрое межпотоковое взаимодействие.
Не просто быстрое. А сверхчастое. Можно пример такой бизнес-задачи? Вроде обычно на реальных задачах можно декомпозицию задачи провести так, что обменов между потоками будет минимум и соответственно тормоза ими вносимые будут различимы разве что в микроскоп. На простоте кода это также очень положительно сказывается.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Banned by IT, Вы писали:
BBI>Ну как видишь уже есть подозрения на неправильное понимание терминологии.
Список это последовательность данных. И динамический массив и односвязный список являются частными случаями списка. Соответственно не понятно, почему название списком одного частного случая ты считаешь правильным, а другого частного случая — недопустимым. Это вкусовщина и дело привычки, в шарпе принято одно, в плюсах другое. О чем тут спорить-то можно?
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, Banned by IT, Вы писали:
BBI>>Ну как видишь уже есть подозрения на неправильное понимание терминологии.
U>Список это последовательность данных. И динамический массив и односвязный список являются частными случаями списка. Соответственно не понятно, почему название списком одного частного случая ты считаешь правильным, а другого частного случая — недопустимым. Это вкусовщина и дело привычки, в шарпе принято одно, в плюсах другое. О чем тут спорить-то можно?
Это не вкусовщина, это — терминология. В любой классической книжке по алгоритмам и структурам данных под списком понимается связанный список со стоимостью вставки/удаления в любое место за О(1), а под массивом — произвольный доступ по индексу за О(1).
И называть списком массив — это ломать устоявшуюся терминологию, с соответствующими последствиями. Что шарперы и сделали, похоже
Здравствуйте, vshemm, Вы писали:
V>Хотя задачка реальная, на данной должности ее будут решать по 20 раз на дню, т.е. в реальной работе
Ээээ, вот тут-то и можно оценить всю глубину непонимания вами с г-ном Пабликом самой сути разработки ПО.
Подобная задача решается ровно один раз за весь проект. После этого все просто пользуются написанным функционалом.
Если у Вас на проекте одну и ту же задачу приходится заново решать по 20 раз в день, то пишете вы говнокод без вариантов. Been there, seen that, ran away scared to death.
Здравствуйте, jazzer, Вы писали:
J>Это не вкусовщина, это — терминология. В любой классической книжке по алгоритмам и структурам данных под списком понимается связанный список со стоимостью вставки/удаления в любое место за О(1), а под массивом — произвольный доступ по индексу за О(1).
В русском языке термины 'список' и 'последовательность' синонимы, и являются много более общими понятиями нежели односвязный или двухсвязный список. В английском подозреваю все тоже самое. Т.е. в свое время академические источники взяли устоявшееся и имеющее в языке общий смысл понятие и придали ему узкоспециализированный смысл. После того как программирование из академического стало широко распространенным абсурдность такой подмены понятий стала очевидной и термину список было возвращено его исходное значение. Что в это неправильного и катастрофического? Термины это же не догма, а худо-бедно общепринятый набор сокращений, который нужно регулярно подстраивать под практические реалии, а никак не наоборот.
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, jazzer, Вы писали:
J>>Это не вкусовщина, это — терминология. В любой классической книжке по алгоритмам и структурам данных под списком понимается связанный список со стоимостью вставки/удаления в любое место за О(1), а под массивом — произвольный доступ по индексу за О(1).
U>В русском языке термины 'список' и 'последовательность' синонимы, и являются много более общими понятиями нежели односвязный или двухсвязный список. В английском подозреваю все тоже самое. Т.е. в свое время академические источники взяли устоявшееся и имеющее в языке общий смысл понятие и придали ему узкоспециализированный смысл. После того как программирование из академического стало широко распространенным абсурдность такой подмены понятий стала очевидной и термину список было возвращено его исходное значение. Что в это неправильного и катастрофического? Термины это же не догма, а худо-бедно общепринятый набор сокращений, который нужно регулярно подстраивать под практические реалии, а никак не наоборот.
Речь идет о программировании, более того, о собеседовании программиста (с программистскими "практическими реалиями"), "список" — это вполне определенный термин в программировании, и тут вдруг оказывается, что гораздо важнее общий смысл в русском и английском языке. И безо всякого смайлика вопрошается, что же тут неправильного.
У меня такое ощущение, что я ошибся форумом и попал в КСВ, где спорят ради спора
Здравствуйте, jazzer, Вы писали:
J>Речь идет о программировании, более того, о собеседовании программиста (с программистскими "практическими реалиями"), "список" — это вполне определенный термин в программировании, и тут вдруг оказывается, что гораздо важнее общий смысл в русском и английском языке. И безо всякого смайлика вопрошается, что же тут неправильного.
Что ж поздравляю у тебя догматическое мышление, т.е. ты безоговорочно доверяешь авторитетам и при их обсуждении здравый смысл у тебя отключается полностью.
Замена общего определения термина на узкоспециализированное профессиональное может быть оправдана в тех случаях, когда в своей профессиональной деятельности человек с общим определением термина практически не сталкивается. Но с термином 'список' это не так. Когда программисты обсуждая бизнес-задачу ведут речь о списке сотрудников или там списке машин они что имеют в виду? Неужели односвязанный или двухсвязный список сотрудников? Или настоящие программисты о списке сотрудников не говорят, а говорят только о динамическом массиве сотрудников? Сам понимаешь, что это абсурд. И в чем тогда смысл академического сужения определения термина списка, если в своей профессиональной деятельности программист постоянно сталкивается с термином список в его широком значении?
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, jazzer, Вы писали:
J>>Речь идет о программировании, более того, о собеседовании программиста (с программистскими "практическими реалиями"), "список" — это вполне определенный термин в программировании, и тут вдруг оказывается, что гораздо важнее общий смысл в русском и английском языке. И безо всякого смайлика вопрошается, что же тут неправильного.
U>Что ж поздравляю у тебя догматическое мышление, т.е. ты безоговорочно доверяешь авторитетам и при их обсуждении здравый смысл у тебя отключается полностью.
U>Замена общего определения термина на узкоспециализированное профессиональное может быть оправдана в тех случаях, когда в своей профессиональной деятельности человек с общим определением термина практически не сталкивается. Но с термином 'список' это не так. Когда программисты обсуждая бизнес-задачу ведут речь о списке сотрудников или там списке машин они что имеют в виду? Неужели односвязанный или двухсвязный список сотрудников? Или настоящие программисты о списке сотрудников не говорят, а говорят только о динамическом массиве сотрудников? Сам понимаешь, что это абсурд. И в чем тогда смысл академического сужения определения термина списка, если в своей профессиональной деятельности программист постоянно сталкивается с термином список в его широком значении?
Давай еще список покупок сюда приплети, покупки же всем приходится делать, не только программистам.
И обсуждай обращение списка именно в смысле списка покупок. А лучше — списка прихожан соседней церкви, на предмет их обращения в сатанизм.
А еще бывает партийный список и обращение к избирателям.
Тоже очень продуктивно в контексте темы "Задача на собеседовании — обращение списка".
Фигли сужать.
Здравствуйте, jazzer, Вы писали:
J>Давай еще список покупок сюда приплети, покупки же всем приходится делать, не только программистам.
Ты читать точно умеешь? Эту фразу:
Замена общего определения термина на узкоспециализированное профессиональное может быть оправдана в тех случаях, когда в своей профессиональной деятельности человек с общим определением термина практически не сталкивается.
способен понять?
J>У меня просто слов нет, сорри.
В этом и состоит разница между догматиком и практиком. Практик может сослаться как на мнение Википедии, так и на логику и здравый смысл, а догматик только на замшелое мнение авторитетов.
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>В этом и состоит разница между догматиком и практиком. Практик может сослаться как на мнение Википедии, так и на логику и здравый смысл, а догматик только на замшелое мнение авторитетов.
То, что ты хочешь пообсуждать меня, а не списки, мы выяснили 3 сообщения назад, нет необходимости повторяться.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, jazzer, Вы писали:
J>>Это не вкусовщина, это — терминология. В любой классической книжке по алгоритмам и структурам данных под списком понимается связанный список со стоимостью вставки/удаления в любое место за О(1), а под массивом — произвольный доступ по индексу за О(1).
U>В русском языке термины 'список' и 'последовательность' синонимы,
Полагаю, что ты это вывел с помощью логики и "здравого" смысла. Однако, если догматически заглянуть в словарь, то
U> и являются много более общими понятиями нежели односвязный или двухсвязный список.
Конечно. Только что бы выяснить смысл слова в русском языке, я не буду обращаться к твоей логике и здравому смыслу. Я загляну, например, в словарь Ушакова. http://www.vseslova.ru/index.php?dictionary=ushakov&word=spisok
U>В английском подозреваю все тоже самое. Т.е. в свое время академические источники взяли устоявшееся и имеющее в языке общий смысл понятие и придали ему узкоспециализированный смысл. После того как программирование из академического стало широко распространенным абсурдность такой подмены понятий стала очевидной и термину список было возвращено его исходное значение.
Интересно было бы посмотреть как ты выполнишь обращение списка в исходном значении терминов. С исходным значением термина "обращение" можно познакомиться здесь (http://www.vseslova.ru/index.php?dictionary=ushakov=zatemno&word=obraschenie).
U>Что в это неправильного и катастрофического? Термины это же не догма, а худо-бедно общепринятый набор сокращений, который нужно регулярно подстраивать под практические реалии, а никак не наоборот.
Проблема в том, что практические реалии у все разные. И если каждый начнет подстраивать термины под себя, то прийти к общему пониманию терминов будет непросто. Особенно непросто в свете того, что при попытке объяснить твое понимание термина собеседнику, будешь использовать другие искаженные термины.
Re[14]: Задача на собеседовании - обращение списка.
Список. Документ, записка, содержащие перечень каких-н. лиц или предметов.
Обращение это перечисление элементов списка в обратном порядке. Т.е., например, если у нас был список сотрудников отсортированный по возрастанию зарплаты, то обращение это получение списка сотрудников отсортированного по убыванию зарплаты. Типовая операция даже не для программиста.
Re[15]: Задача на собеседовании - обращение списка.
U>Список. Документ, записка, содержащие перечень каких-н. лиц или предметов.
Окей, пусть так, хотя это и не основное значение слова. Но тебе придется обращать таки не перечень, а документ, записку. Иначе задача была бы сформулирована как "обращение перечня".
U>Обращение это перечисление элементов списка в обратном порядке. Т.е., например, если у нас был список сотрудников отсортированный по возрастанию зарплаты, то обращение это получение списка сотрудников отсортированного по убыванию зарплаты. Типовая операция даже не для программиста.
Ну это ты ведь сам выдумал, а не посмотрел исходный смысл. Кроме того, что такое элемент списка? Список — это документ, записка. Что такое элемент документа, элемент записки?
Все-таки посмотри на исходный смысл. Ты же за него так ратовал.
Re[16]: Задача на собеседовании - обращение списка.
U>>Список. Документ, записка, содержащие перечень каких-н. лиц или предметов.
S>Окей, пусть так, хотя это и не основное значение слова. Но тебе придется обращать таки не перечень, а документ, записку. Иначе задача была бы сформулирована как "обращение перечня".
При обращении списка, обращают тоже не сам список, а его элементы.
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Окей, пусть так, хотя это и не основное значение слова. Но тебе придется обращать таки не перечень, а документ, записку. Иначе задача была бы сформулирована как "обращение перечня".
L>При обращении списка, обращают тоже не сам список, а его элементы.
Да что ты? Т.е. при обращении списка строк нам надо обратить строки?
Re[18]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>При обращении списка, обращают тоже не сам список, а его элементы. S>Да что ты? Т.е. при обращении списка строк нам надо обратить строки?
Нет, нам нужно обратить элементы списка.
Дабы не возникало дольнейщих вопросов: обратить элементы != применить обращение к каждому элементу.
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>При обращении списка, обращают тоже не сам список, а его элементы. S>>Да что ты? Т.е. при обращении списка строк нам надо обратить строки?
L>Нет, нам нужно обратить элементы списка.
Элементы списка строк — строки. Обратить что-то — значит применить обращение к чему-то. Дальше делай простую подстановку.
L>Дабы не возникало дольнейщих вопросов: обратить элементы != применить обращение к каждому элементу.
Какие тут могут быть вопросы? Тут наоборот, все вопросы снимаются.
Re[20]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Нет, нам нужно обратить элементы списка. S>Элементы списка строк — строки. Обратить что-то — значит применить обращение к чему-то. Дальше делай простую подстановку.
Да, применить обращение к строкам как к совокупности, но не к каждой строке индивидуально.
Возьми для примера фразу "разогнать толпу". К элементу толпы слово "разогнать" вообще неприменимо.
L>>Дабы не возникало дольнейщих вопросов: обратить элементы != применить обращение к каждому элементу. S>Какие тут могут быть вопросы? Тут наоборот, все вопросы снимаются.
Я рад.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Окей, пусть так, хотя это и не основное значение слова. Но тебе придется обращать таки не перечень, а документ, записку. Иначе задача была бы сформулирована как "обращение перечня".
Для тебя русский язык точно родной? Мне как русскому человеку очевидно, что список и перечень это слова синонимы, и пользоваться словарями для того чтобы это понимать мне не нужно. Кстати, в этом словаре и в определении слова 'обращение' нет смысла производного от обратный/противоположный. Т.е. просто словарь очень не полон, что и неудивительно, т.к. русский язык штука очень сложная и смыслов у слов имеется множество.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
L>>ЧЯДНТ?
ПМ>Для списка из одного элемента ответ будет неверным, от генерик-параметра в процедуре разворота лучше избавиться, а в остальном всё так.
Да это мелочи. Просто меня удивляет, что элементарные вещи выставляются как что-то из ряда вон выходящее, к которым без "матана" и подойти страшно.
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>Да, применить обращение к строкам как к совокупности, но не к каждой строке индивидуально.
Обращение совокупности — еще интереснее.
L>Возьми для примера фразу "разогнать толпу". К элементу толпы слово "разогнать" вообще неприменимо.
Разгонять толпу будешь в теме "Задача на собеседовании — разгонение толпы".
Re[22]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Да, применить обращение к строкам как к совокупности, но не к каждой строке индивидуально. S>Обращение совокупности — еще интереснее.
Что, неужели еще непонятно?
L>>Возьми для примера фразу "разогнать толпу". К элементу толпы слово "разогнать" вообще неприменимо. S>Разгонять толпу будешь в теме "Задача на собеседовании — разгонение толпы".
Ну если тебе непонятно на примере "обратить элементы списка", то приходится придумывать что-нибудь попроще.
Неужели и с этим примером непонятно?! Ну тогда я даже и не знаю, как проще объяснить.
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, samius, Вы писали:
S>>Окей, пусть так, хотя это и не основное значение слова. Но тебе придется обращать таки не перечень, а документ, записку. Иначе задача была бы сформулирована как "обращение перечня".
U>Для тебя русский язык точно родной? Мне как русскому человеку очевидно, что список и перечень это слова синонимы, и пользоваться словарями для того чтобы это понимать мне не нужно.
Как тебе "односвязный перечень"?
U>Кстати, в этом словаре и в определении слова 'обращение' нет смысла производного от обратный/противоположный. Т.е. просто словарь очень не полон, что и неудивительно, т.к. русский язык штука очень сложная и смыслов у слов имеется множество.
Ты хотел исходный смысл? Я тебе дал ссылку. А то что смыслов у слов имеется множество — это я и пытаюсь намекнуть. Задача стоит явно не в обращении копии документа, картины или стихов декабристов. В программировании у списка совершенно определенный смысл. Интересуйся историей.
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Да, применить обращение к строкам как к совокупности, но не к каждой строке индивидуально. S>>Обращение совокупности — еще интереснее.
L>Что, неужели еще непонятно?
Еще нет. Я воспринимаю совокупность в данном контексте как множество. А понятие обращения множества для меня существует лишь в смысле обращения элементов множества, но никак не порядка перечисления.
L>Ну если тебе непонятно на примере "обратить элементы списка", то приходится придумывать что-нибудь попроще. L>Неужели и с этим примером непонятно?! Ну тогда я даже и не знаю, как проще объяснить.
Мне еще не понятно, что для тебя значит "обратить элемент". Тоже изменить его порядок?
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>>>Да, применить обращение к строкам как к совокупности, но не к каждой строке индивидуально. S>>>Обращение совокупности — еще интереснее.
L>>Что, неужели еще непонятно? S>Еще нет. Я воспринимаю совокупность в данном контексте как множество. А понятие обращения множества для меня существует лишь в смысле обращения элементов множества, но никак не порядка перечисления.
Совокупность — более широкое понятие, чем множество, в частности, упорядоченный набор — это тоже совокупность.
Слово "совокупность" во фразе "применить обращение к строкам как к совокупности" было использовано для того, чтобы противопоставить "операцию над каждым элементом" и "операция над всеми элементами как целым".
L>>Ну если тебе непонятно на примере "обратить элементы списка", то приходится придумывать что-нибудь попроще. L>>Неужели и с этим примером непонятно?! Ну тогда я даже и не знаю, как проще объяснить. S>Мне еще не понятно, что для тебя значит "обратить элемент". Тоже изменить его порядок?
"обратить элемент" имеет смысл только в том случае, если элемент — это тоже последоваткельность элементов. Да "обратить элемент" означает "изменить порядок следования последоваткельности подэлементов этого элемента".
Re[15]: Задача на собеседовании - обращение списка.
01.03.2012 13:30, Undying пишет: > Обращение это перечисление элементов списка в обратном порядке. Т.е., > например, если у нас был список сотрудников отсортированный по > возрастанию зарплаты, то обращение это получение списка сотрудников > отсортированного по убыванию зарплаты. Типовая операция даже не для > программиста.
Ну и пройди с конца его, зачем что-то и куда-то ворочать.
Posted via RSDN NNTP Server 2.1 beta
Re[25]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Еще нет. Я воспринимаю совокупность в данном контексте как множество. А понятие обращения множества для меня существует лишь в смысле обращения элементов множества, но никак не порядка перечисления.
L>Совокупность — более широкое понятие, чем множество, в частности, упорядоченный набор — это тоже совокупность.
Действительно более широкое. L>Слово "совокупность" во фразе "применить обращение к строкам как к совокупности" было использовано для того, чтобы противопоставить "операцию над каждым элементом" и "операция над всеми элементами как целым".
Ясно.
S>>Мне еще не понятно, что для тебя значит "обратить элемент". Тоже изменить его порядок?
L>"обратить элемент" имеет смысл только в том случае, если элемент — это тоже последоваткельность элементов. Да "обратить элемент" означает "изменить порядок следования последоваткельности подэлементов этого элемента".
Ты лишаешь термин "обратить" смысла "получить обратный". Например, взять обратную функцию. См. обратный элемент.
Re[26]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Мне еще не понятно, что для тебя значит "обратить элемент". Тоже изменить его порядок?
L>>"обратить элемент" имеет смысл только в том случае, если элемент — это тоже последоваткельность элементов. Да "обратить элемент" означает "изменить порядок следования последоваткельности подэлементов этого элемента". S>Ты лишаешь термин "обратить" смысла "получить обратный".
В данном обсуждении речь идет об обращении списка, или в общем случае последовательности, именно этот смысл я ему и придаю.
S>Например, взять обратную функцию. См. обратный элемент.
Причем тут обратная функция, если речь идет о последовательностях?
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Т.е. просто словарь очень не полон, что и неудивительно, т.к. русский язык штука очень сложная и смыслов у слов имеется множество.
Мда.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Ты лишаешь термин "обратить" смысла "получить обратный".
L>В данном обсуждении речь идет об обращении списка, или в общем случае последовательности, именно этот смысл я ему и придаю.
А я обращению элементов придаю другой смысл вне зависимости от того, чьи это элементы. И обращение элементов для меня не то же самое, что обращение списка (последовательности).
S>>Например, взять обратную функцию. См. обратный элемент.
L>Причем тут обратная функция, если речь идет о последовательностях?
Притом что элементом последовательности может быть все что угодно, в том числе и функция. Смысл у обращения функции отличный от того, что ты предлагаешь, вне зависимости, является ли функция элементом списка или нет.
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Ты лишаешь термин "обратить" смысла "получить обратный".
L>>В данном обсуждении речь идет об обращении списка, или в общем случае последовательности, именно этот смысл я ему и придаю. S>А я обращению элементов придаю другой смысл вне зависимости от того, чьи это элементы. И обращение элементов для меня не то же самое, что обращение списка (последовательности).
Да, я понял, как ты понял мою фразу. Как я уже писал, фраза "обращение совокупности элементов" может быть трактована двояко. Позже я объяснил, какой именно смысл я вкладывал в эту фразу.
Кажется, вопрос исчерпан.
S>>>Например, взять обратную функцию. См. обратный элемент.
L>>Причем тут обратная функция, если речь идет о последовательностях? S>Притом что элементом последовательности может быть все что угодно, в том числе и функция. Смысл у обращения функции отличный от того, что ты предлагаешь, вне зависимости, является ли функция элементом списка или нет.
Обращение функций не является предметом обсуждения тут.
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>А я обращению элементов придаю другой смысл вне зависимости от того, чьи это элементы. И обращение элементов для меня не то же самое, что обращение списка (последовательности).
L>Да, я понял, как ты понял мою фразу. Как я уже писал, фраза "обращение совокупности элементов" может быть трактована двояко. Позже я объяснил, какой именно смысл я вкладывал в эту фразу.
L>Кажется, вопрос исчерпан.
Исчерпан, учитывая то, что твоя трактовка обращения в отношении списков наводит на мысли о совершенно другой операции.
S>>>>Например, взять обратную функцию. См. обратный элемент.
S>>Притом что элементом последовательности может быть все что угодно, в том числе и функция. Смысл у обращения функции отличный от того, что ты предлагаешь, вне зависимости, является ли функция элементом списка или нет.
L>Обращение функций не является предметом обсуждения тут.
Обращение в отношении функций было лишь частным примером в отношении употребления термина "обращение", т.е. "взятие обратного". К спискам/последовательностям термин обращение имеет в точности такое же отношение, как и к функциям. Нетрудно показать наличие бинарной операции o с нейтральным элементом [], такой что L1 o L2 = []
Re[30]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Кажется, вопрос исчерпан. S>Исчерпан, учитывая то, что твоя трактовка обращения в отношении списков наводит на мысли о совершенно другой операции.
Если не сложно, говоря А, говори и Б, пожалуйста. О какой "совершенно другой операции" идет речь?
L>>Обращение функций не является предметом обсуждения тут. S>Обращение в отношении функций было лишь частным примером в отношении употребления термина "обращение", т.е. "взятие обратного". К спискам/последовательностям термин обращение имеет в точности такое же отношение, как и к функциям. Нетрудно показать наличие бинарной операции o с нейтральным элементом [], такой что L1 o L2 = []
Это тоже является офтопом, в этой ветке под "обращением списка" подразумевается вполне определенный вид обращения.
Re[18]: Задача на собеседовании - обращение списка.
01.03.2012 16:36, Banned by IT пишет:
> U>Т.е. просто словарь очень не полон, что и неудивительно, т.к. русский > язык штука очень сложная и смыслов у слов имеется множество. > Мда.
Ну какой-то ж выход от троллефермы должен быть.
Posted via RSDN NNTP Server 2.1 beta
Re[31]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
S>>Исчерпан, учитывая то, что твоя трактовка обращения в отношении списков наводит на мысли о совершенно другой операции.
L>Если не сложно, говоря А, говори и Б, пожалуйста. О какой "совершенно другой операции" идет речь?
О поднятии в список обращения элемента
S>>Обращение в отношении функций было лишь частным примером в отношении употребления термина "обращение", т.е. "взятие обратного". К спискам/последовательностям термин обращение имеет в точности такое же отношение, как и к функциям. Нетрудно показать наличие бинарной операции o с нейтральным элементом [], такой что L1 o L2 = []
L>Это тоже является офтопом, в этой ветке под "обращением списка" подразумевается вполне определенный вид обращения.
Я тебе показываю, как этот определенный вид обращения связан с понятием обратного элемента.
Re[32]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
L>>Если не сложно, говоря А, говори и Б, пожалуйста. О какой "совершенно другой операции" идет речь? S>О поднятии в список обращения элемента
Э-э-э, а кто его уронил?
L>>Это тоже является офтопом, в этой ветке под "обращением списка" подразумевается вполне определенный вид обращения. S>Я тебе показываю, как этот определенный вид обращения связан с понятием обратного элемента.
Зачем ты все усложняешь? Тема простая — обращение списка.
Понятно, что наверное такая операция является частным случаем более "абстрактной" операции взятия обратного элемента.
Но зачем переходить к этой более абстрактной трактовке, что это даст этому обсуждению?
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>А вот если контора занимается CRM, то разворот списка спрашивать крайне глупо. Просто тратить время соискателя и деньги работодателя чтобы самолюбие потешить.
Если брать по принципу знания CRM — то велика вероятность набрать дураков со знанием CRM. Выучить API CRM можно за две недели. Научиться думать — не знаю за сколько можно.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Я еще спорить не собрался. Я просто увидел что ты обвинил пару неглупых, судя по всему, программистов, и не увидел у них возможности реабилитироваться.
Обвинение в тупости и неэффективности программистов, которые из ООО "Вектор" ушли работать в Гуголь кем-нибудь из сотрудников ООО "Вектор" всегда очень доставляло. Потому что тут же возникает вопрос:
— Если ви таки такой вумный, почему в Гуголе теперь работают они, а не ви?
— Очевидно, потому что тупые менеджеры в Гуголе дают на собеседованиях тупые задачки, не имеющие ничего общего с реальной жизнью™.
— Но если менеджеры Гуголя такие тупие, откуда таки у Гуголя такой гешефт?
..и вот тут закрадывается тень сомнения..
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>А вот если контора занимается CRM, то разворот списка спрашивать крайне глупо. Просто тратить время соискателя и деньги работодателя чтобы самолюбие потешить.
ПМ>Если брать по принципу знания CRM — то велика вероятность набрать дураков со знанием CRM. Выучить API CRM можно за две недели. Научиться думать — не знаю за сколько можно.
А если спрашивать разворот списка, то можно набрать дураков со знанием разворота списка.
Выучить API CRM или другой крупной системы за 2 недели можно, а вот научиться писать приложения для него — 2 недели никак не хватит, и 2 месяца, и за 2 года не все осиливают.
Корреляция с умением разворачивать список нулевая.
ЗЫ. Задача про максимальную подпоследовательность в силе — дерзай.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, ArtK, Вы писали:
AK>Много где работа сводится к написанию программ, которые дёргают библиотечные функции, и вся квалификация сводится к знанию тонкостей этих библиотек.
А где то работа может сводиться к другому? (ну кроме института)
По просьбам трудящихся привожу подробное (примитивное) решение в картинках.
Итак, у нас есть классический односвязный список
который необходимо развернуть, т.е. получить следующее
Кандидат знаком с этой структурой данных (может, даже листал Кнута) и знает что такое "указатель".
Мелочи в постановке задачи (что считать признаком конца списка) уточняются перед решением.
Сравнивая эти картинки можно заметить, что указатель внутри каждого элемента изменил значение,
из чего можно сделать вывод, что придется "пощупать" каждый элемент списка, т.е. нижняя оценка
сложности O(n).
Очевидно, что в начальном состоянии можно "бежать" по списку только "вправо", от A к Z, а в
конечном состоянии — "влево", т.е. от Z к A. Более продвинутые товарищи скажут "от головы к хвосту".
Значит, что раз мы не можем изменить указатели в элементах за один присест, будет промежуточное
состояние, из которого можно двигаться в обоих направлениях. Изобразим его:
Несложно заметить, что левая часть списка (левее R) уже находится в нужном состоянии. Учитывая,
что циклов в данной структуре нет, можно сделать вывод о ненужности движения "влево" (и получить
верхнюю оценку сложности — O(n)). На данном этапе уже можно представить пробежку по списку в виде
цикла (программного).
Итак, что необходимо для изменения конкретного элемента списка? Указатель на этот элемент, указатель
на предыдущий элемент и еще где-то нужно сохранить указатель на начало правой части списка, иначе мы
его потеряем:
Тут уже можно начать писать код (тело цикла):
void *temp = p->next;
p->next = prev;
Далее необходимо перейти к следующему элементу (S), т.е.:
что довольно просто, если не забывать про порядок перехода:
Сверка кода со схемой показывает, что ошибок нет. Остается найти условие выхода из цикла, начальные и
конечные данные.
Так как признаком конца списка является указатель NULL, то становится очевидным условие выхода из
цикла — текщий элемент p равен NULL. Также легко заметить, что prev указывает на новую голову (больше
некому), которую мы и будем возвращать:
Остается инициализация. Очевидно, что первым текущим элементом должна стать голова, а пройдя цикл
по шагам 1 раз находим значение и для prev (NULL со второй картинки).
Остается еще раз проверить по шагам старт алгоритма, обработку промежуточного элемента и завершение
алгоритма, а также граничные условия — список пуст и список состоит из одного элемента. Задача решена.
Обращаю внимание, что большинство приведенных рассуждений примитивны и занимают секунды, а три последних
рисунка — суть один, но в разные моменты времени. Цепочка рассуждений прямее линии партии, и нет
никакой рекурсии и прочих высших сущностей (знание "О-большого" для решения несущественно).
Какие часы? 5 минут максимум
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>А если спрашивать разворот списка, то можно набрать дураков со знанием разворота списка.
Я не беру людей со знанием разворота списка, я не беру людей, которые не имеют способностей к написанию кода.
G>Выучить API CRM или другой крупной системы за 2 недели можно, а вот научиться писать приложения для него — 2 недели никак не хватит, и 2 месяца, и за 2 года не все осиливают.
G>Корреляция с умением разворачивать список нулевая.
Вот тех, кто за 2 года не осиливает, брать бы не хотелось. И обычно способность к такому осиливанию очень хорошо кореллирует со способностью решения программистких задач.
G>ЗЫ. Задача про максимальную подпоследовательность в силе — дерзай.
Я не на собеседовании.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, vshemm, Вы писали:
V>>"Понимальщик" как раз будет пытаться набирать к себе людей таких же, как он (при прочих равных). Не буду себя цитировать.
U>Откуда это следует? Я, например, для рутинных или шаманских (допустим, знание тонкостей фрамеворка, не имеющего внутренней логики) задач скорее выберу запоминальщика, а не понимальщика.
, где я уже ограничил круг вакансий (последняя строчка).
V>>Согласен полностью. Но задача "реверс списка" — примитивная (могу выдать примитивный мыслепроцесс решения, но тогда эта V>>задача уйдет в прошлое). Мало мальскую сложную задачу задавать бесмыссленно — я это уже говорил. Но суть не в нахождении V>>решения, а в именно процессе
U>Реверс списка действительно простая задача, т.к. в среднем в спокойной рабочей обстановке (заметь, не в стрессовой на собеседовании) ее решение у хорошего программиста займет пару часов, в то время как решение сложных задач занимает дни, а иногда и недели. При этом у меня не возникнет никаких вопросов к программисту, если на решение конкретной задачи на пару часов он потратит день, вопросы возникнут только если программист будет систематически тратить по дню на пару часовые задачи.
См. мое решение выше. На ЭТО нужны часы?
V>>См п.2. Но пару слов скажу. Бумажка и карандаш (доска — маркер) — знакомый контекст. Предметная область тоже знакомая V>>(иначе интервьюер плохо выбрал задачку). Все. Проверка же не на написание кода идет.
U>Ты какие третьестепенные моменты выдаешь за контекст. Контекст это, во-первых, понимание зачем решение нужно. На практике программист очень редко пишет сферические алгоритмы в вакууме, обычно он решает конкретную прикладную задачу. Соответственно в реальной работе обычно детали и тонкости вытекают из прикладной задачи, а не из самого алгоритма и тем более не из мнения гуру-собеседующего. Во-вторых, контекст это единообразное понимание терминов. В-третьих, это понимание особенностей мышления человека ставящего задачу.
Это контекст собеседования. Цель данной задачи — отсеять дебилов в контексте вакансии. Все остальное проверяется другими способами.
U>В данном случае оказалось, что под списком топикстартер понимает не динамический массив (используемый на практике очень широко), а односвязный список (на практике бесполезный и никогда не используемый). Т.е. термины собеседующий и собеседумые скорей всего понимают по разному. Также у меня возникло впечатление (возможно ложное), что иное чем у него самого понимание терминов для топикстартера вселенская проблема и прегрешение, т.е. в мышлении топикстартера бегают особо крупные тараканы, о чем собеседуемый разумеется знать не может.
Так это прекрасно. На практике под списком понимается классическая структура данных, которая описана в не менее
классических источниках (сиречь Кнут). Если человек меняет терминологию или путает фундаментальные сущности с
конкретной реализацией — то до свидания. Задача успешно сделала отсев.
V>>Не совсем. В данном случае — с задачей реверса односвязного списка — это отбор по инверсному критерию. Т.е. те, кто "отобрался" V>>- сразу отсеиваются. Почему такой отбор многим чужд? Хз. Может, проблемы в консерватории?
U>Не понял. Ты предлагаешь тех кто решил задачки на собеседовании на работу не брать? Интересный подход, но что-то мне подсказывает, что фильтр все равно получится отрицательный.
Я предлагаю кто не решил — сразу не брать, а с теми кто решил говорить дальше (без принятия решения "брать").
Задачка — один из инструментов, не более того.
V>>Или вы никогда дебилов на работу не брали?
U>Я не провожу собеседования, хотя обычно присутствую при их проведении. Но с дебилами мне работать не приходилось. Выборка, конечно, если говорить о программистах, не особо велика — человека пятнадцать, но вполне статистически значима. Т.е. случайностью вряд ли объяснима, при этом на обоих работах где я работал задачек на собеседовании либо вообще не давали, либо они были словесными и имели второстепенное значение, интересуясь вместо этого предыдущим опытом работы.
Вам очень повезло, что не приходилось. Поэтому много вещей и кажутся чуждыми/лишними (это если отбросить вариант, что вы сами входите в эту группу .
V>>Вот тут у меня прямо противоположное мнение. Например, ПМ, анализируя выражение x & (x + 1) родил табличку.
U>И какое отношение эта табличка имеет к теме топика? Т.е. ПМ уже забыл о поднятом им вопросе и углубился в детали не имеющие никакого отношения к теме. Это по-твоему качество понимальщика?
Ключевое слово — "родил", а не табличка.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, samius, Вы писали:
ПМ>- Но если менеджеры Гуголя такие тупие, откуда таки у Гуголя такой гешефт?
ПМ>..и вот тут закрадывается тень сомнения..
Да тень от этого сомнения покруче лунного затмения
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, landerhigh, Вы писали:
L>Здравствуйте, vshemm, Вы писали:
V>>Хотя задачка реальная, на данной должности ее будут решать по 20 раз на дню, т.е. в реальной работе
L>Ээээ, вот тут-то и можно оценить всю глубину непонимания вами с г-ном Пабликом самой сути разработки ПО.
L>Подобная задача решается ровно один раз за весь проект. После этого все просто пользуются написанным функционалом.
L>Если у Вас на проекте одну и ту же задачу приходится заново решать по 20 раз в день, то пишете вы говнокод без вариантов. Been there, seen that, ran away scared to death.
Скорее можно оценить глубину понимания вами предметной области, из которой эта задачка родилась, ну и способность
выдергивания слов из контекста
Дело в том, что эта задачка на умение манипулировать битами, и именно это придется делать 20 раз на дню. Не забывайте,
что регистров десятки, а полей в них — сотни.
Если у вас есть универсальное решение, которое избавит программиста от подобных манипуляций — я с радостью его выслушаю.
Re[33]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, samius, Вы писали:
L>>>Если не сложно, говоря А, говори и Б, пожалуйста. О какой "совершенно другой операции" идет речь? S>>О поднятии в список обращения элемента
L>Э-э-э, а кто его уронил?
никто не ронял. Речь об получении из функции обращения элемента f::a->a функции обращения элементов списка f'::[a]->[a]. И о том, что это не то же самое, что обращение списка в смысле получения списка с обратным порядком следования элементов.
L>>>Это тоже является офтопом, в этой ветке под "обращением списка" подразумевается вполне определенный вид обращения. S>>Я тебе показываю, как этот определенный вид обращения связан с понятием обратного элемента.
L>Зачем ты все усложняешь? Тема простая — обращение списка. L>Понятно, что наверное такая операция является частным случаем более "абстрактной" операции взятия обратного элемента. L>Но зачем переходить к этой более абстрактной трактовке, что это даст этому обсуждению?
Я пытаюсь объяснить тебе что ты не прав, утверждая что
При обращении списка, обращают тоже не сам список, а его элементы.
Согласен, что к теме это не имеет отношения. А вот к твоему непониманию темы — имеет. Так же осознаю, что моя попытка тебе что-то объяснить хуже бесплатного совета, которого не просили. Так что спиши это на мои личные проблемы.
Re[2]: Задача на собеседовании - обращение списка.
V>>>Хотя задачка реальная, на данной должности ее будут решать по 20 раз на дню, т.е. в реальной работе L>>Ээээ, вот тут-то и можно оценить всю глубину непонимания вами с г-ном Пабликом самой сути разработки ПО. L>>Подобная задача решается ровно один раз за весь проект. После этого все просто пользуются написанным функционалом.
L>>Если у Вас на проекте одну и ту же задачу приходится заново решать по 20 раз в день, то пишете вы говнокод без вариантов. Been there, seen that, ran away scared to death.
V>Скорее можно оценить глубину понимания вами предметной области, из которой эта задачка родилась, ну и способность V>выдергивания слов из контекста
В моей предметной области (хитровытраханные индустриальные протоколы, всякоразные PLC и прочее язычество) битовые манипуляции, причем зачастую в весьма извращенных формах, встречаются чуть чаще, чем всегда. Тем не менее они всегда локализованы в коде и никогда явное не появляются в исходном тексте решения прикладной задачи.
V>Дело в том, что эта задачка на умение манипулировать битами, и именно это придется делать 20 раз на дню. Не забывайте, V>что регистров десятки, а полей в них — сотни.
Сотни битовых полей в регистрах? Что это за железо у вас такое с такой конской разрядностью? Или речь идет о битовых массивах?
Но даже если их и правда десятки, то данной прикладной задачей используется дай бог штук пять. Вот для них и пишется в самом начале набор классов-оберток, и никаких манипуляций по 20 раз на дню. Чтобы в коде не было никаких явных манипуляций с битами. А то больно будет. Впрочем, переиспользуемость кода — одно из основных правил, в принципе применямых при создании программных продуктов.
V>Если у вас есть универсальное решение, которое избавит программиста от подобных манипуляций — я с радостью его выслушаю.
Универсального решения нет. Есть универсальный подход о недопустимости дублирования кода и избегании магических констант. А то, знаете ли, даже в самых-самых официальных спеках нет-нет, да и проскочит ошибка, из-за которой бит 9 на самом деле становится битом 29, а биты 1-7 мало того, что инвертированы, так еще и транспонированы. Вот если умение манипулировать битами применялось по 20 раз на дню, то я лично могу лишь пожелать успехов в рефакторинге.
Здравствуйте, landerhigh, Вы писали:
L>Здравствуйте, vshemm, Вы писали:
V>>>>Хотя задачка реальная, на данной должности ее будут решать по 20 раз на дню, т.е. в реальной работе L>>>Ээээ, вот тут-то и можно оценить всю глубину непонимания вами с г-ном Пабликом самой сути разработки ПО. L>>>Подобная задача решается ровно один раз за весь проект. После этого все просто пользуются написанным функционалом.
L>>>Если у Вас на проекте одну и ту же задачу приходится заново решать по 20 раз в день, то пишете вы говнокод без вариантов. Been there, seen that, ran away scared to death.
V>>Скорее можно оценить глубину понимания вами предметной области, из которой эта задачка родилась, ну и способность V>>выдергивания слов из контекста
L>В моей предметной области (хитровытраханные индустриальные протоколы, всякоразные PLC и прочее язычество) битовые манипуляции, причем зачастую в весьма извращенных формах, встречаются чуть чаще, чем всегда. Тем не менее они всегда локализованы в коде и никогда явное не появляются в исходном тексте решения прикладной задачи.
Очень хорошо.
V>>Дело в том, что эта задачка на умение манипулировать битами, и именно это придется делать 20 раз на дню. Не забывайте, V>>что регистров десятки, а полей в них — сотни.
L>Сотни битовых полей в регистрах? Что это за железо у вас такое с такой конской разрядностью? Или речь идет о битовых массивах?
Угу. Десять 32-битных регистров дают 320 значащих битов. Даже если половина из них reserved, остается далеко за сотню.
А, как правило, значащие биты в регистры набивают под завязку — с целью упрощения и удешевления самой микросхемы.
L>Но даже если их и правда десятки, то данной прикладной задачей используется дай бог штук пять. Вот для них и пишется в самом начале набор классов-оберток, и никаких манипуляций по 20 раз на дню. Чтобы в коде не было никаких явных манипуляций с битами. А то больно будет. Впрочем, переиспользуемость кода — одно из основных правил, в принципе применямых при создании программных продуктов.
Прикладная задача доступа к регистрам иметь не должна. Есть отличная абстракция для этого — драйвер устройства. Для средней
сложности железки размер С-шного кода легко переваливает за сотню килобайт. Вот там-то этих манипуляций предостаточно.
Да, драйвер тоже декомпозируется на OS- и HW-зависимые части, некоторые части выделяются в отдельные функции/обертки и
прочее, но это не избавляет от "жонглирования" битами. И не может избавить.
Справедливости ради стоит вспомнить всякие микроконтроллеры для которых подобная абстракция слишком тяжеловесна, вот там
на сцену выходят всякие обертки для прикладной программы. Но это ничего не меняет.
V>>Если у вас есть универсальное решение, которое избавит программиста от подобных манипуляций — я с радостью его выслушаю.
L>Универсального решения нет. Есть универсальный подход о недопустимости дублирования кода и избегании магических констант. А то, знаете ли, даже в самых-самых официальных спеках нет-нет, да и проскочит ошибка, из-за которой бит 9 на самом деле становится битом 29, а биты 1-7 мало того, что инвертированы, так еще и транспонированы.
И тут спору нет. Но я так и не понял, откуда вы взяли, что я это все отрицаю? Да еще такие выводы делаете. Это ваши фантазии.
И причем тут моя задача?
L>Вот если умение манипулировать битами применялось по 20 раз на дню, то я лично могу лишь пожелать успехов в рефакторинге.
Спасибо
Конкретный пример. Функция e1000_write_smbus_addr ничего не напоминает?
Пройдитесь по коду вверх-вниз и оцените количество манипуляций с битами. При этом повторяющиеся куски выделены в отдельные
функции, константы обмакрены говорящими именами, непосредственная запись/чтение в железку тоже абстрагирована (не забываем
про endianness и io- и mem-mapped registers), даже полиморфизм времени исполнения есть — полный фарш. При этом от ручной
работы с битами уйти не удается и ее полно. Как думаете, почему?
Re[18]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Как тебе "односвязный перечень"?
Список сотрудников и перечень сотрудников это синонимы. Слова односвязный в первом посте топика нет вообще, соответственно как там ставит задачу на собеседовании топикстартер большой вопрос.
S>Ты хотел исходный смысл? Я тебе дал ссылку. А то что смыслов у слов имеется множество — это я и пытаюсь намекнуть. Задача стоит явно не в обращении копии документа, картины или стихов декабристов. В программировании у списка совершенно определенный смысл. Интересуйся историей.
С тобой даже Википедия не согласна, не говоря уж о таких не знакомых тебе вещах как логика и здравый смысл.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>крута, спасиба за развёрнутый ответ
THE>надеюсь, понятно, почему эта задача не имеет отношения к промышленному программированию, а, скорее, годится для районной олимпиады по информатике
Эту фразу следует понимать, как "мне ни разу не потребовалось, поэтому никому не надо".
Обобщать не нужно, промышленное программирование — оно разное.
То, что вам с gandjustas'ом это не требуется не означает, что не нужно знать, что творится "под капотом". ИМХО.
_____________________
С уважением,
Stanislav V. Zudin
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>А если спрашивать разворот списка, то можно набрать дураков со знанием разворота списка. ПМ>Я не беру людей со знанием разворота списка, я не беру людей, которые не имеют способностей к написанию кода.
Только ты их не проверяешь.
G>>Выучить API CRM или другой крупной системы за 2 недели можно, а вот научиться писать приложения для него — 2 недели никак не хватит, и 2 месяца, и за 2 года не все осиливают. G>>Корреляция с умением разворачивать список нулевая. ПМ>Вот тех, кто за 2 года не осиливает, брать бы не хотелось. И обычно способность к такому осиливанию очень хорошо кореллирует со способностью решения программистких задач.
Я больше с SharePoint работаю и вижу как хорошие .NET программисты не умеют делать решения на SharePoint. Для CRM\SAP и кучи подобных платформ картина аналогичная.
G>>ЗЫ. Задача про максимальную подпоследовательность в силе — дерзай. ПМ>Я не на собеседовании.
Если ты сейчас не можешь, то и на собеседовании не сможешь.
Re[6]: Задача на собеседовании - обращение списка.
, где я уже ограничил круг вакансий (последняя строчка). V>Также есть вакансии на которые мыслящий работник не нужен (быдлокодерство по разжеванным требованиям). В этом случае задавать задачки — терять время.
Быдлокодер это человек пищуший говнокод. Решение рутинной задачи оптимальным образом быдлокодерством не может быть по определению.
Это первое. Второе, искусство программирования в общем-то и состоит в том, чтобы сделать повторное решение любой задачи рутинной. Соответственно при наличии на проекте нормального программиста-технолога оказывается, что большинство новых задач являются рутинными, т.к. в том или ином виде они уже встречались ранее и для них уже написана обвязка, сводящая их решение к рутинному.
V>См. мое решение выше. На ЭТО нужны часы?
В решении десяток строчек кода. Плюс нужны хоть какие-то тесты, это еще по меньшей мере десять строчек, т.е. всего двадцать. Вот здесь http://rsdn.ru/forum/job/4605175.1.aspx
я писал, что программист в среднем пишет несколько сот строчек кода в день. На что получил гневный отлуп, что уважающий себя программист должен писать много меньше. Но ладно возьмем все-таки производительность труда суровых челябинских программистов, не изнеженных отладкой, документированием и митингами. Если средняя производительность 200 строк в день, то в среднем в спокойной обстановке, решая в основном привычные задачи, на написание двадцати строк кода программист тратит почти час грязного времени и около получаса чистого. Вы же хотите, чтобы на собеседовании в стрессовой обстановке, решая непривычную задачу (за десять лет практики я ни разу не работал с односвязным списком, т.к. это весьма экзотическая коллекция оптимальная на весьма экзотических задачах), программист написал двадцать строчек кода за 5 минут. Стоит ли после этого удивляться, что вам кажется, что на собеседования ходят одни идиоты?
V>Так это прекрасно. На практике под списком понимается классическая структура данных, которая описана в не менее V>классических источниках (сиречь Кнут). Если человек меняет терминологию или путает фундаментальные сущности с V>конкретной реализацией — то до свидания. Задача успешно сделала отсев.
Т.е. на собеседовании вы вместо способностей к программированию и умения решать реальные задачи проверяете читал ли программист Кнута. Стоит ли после этого удивляться, что вы никак не можете найти нормальных программеров, на что так жалуется топикстартер?
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>То, что вам с gandjustas'ом это не требуется не означает, что не нужно знать, что творится "под капотом". ИМХО.
Я не говорил что не нужно знать, я говорил что не нужно это спрашивать на собеседовании, особенно в первую очередь.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Обращаю внимание, что большинство приведенных рассуждений примитивны и занимают секунды, а три последних V>рисунка — суть один, но в разные моменты времени. Цепочка рассуждений прямее линии партии, и нет V>никакой рекурсии и прочих высших сущностей (знание "О-большого" для решения несущественно). V>Какие часы? 5 минут максимум
Вот только решение ты знаешь заранее. А покажи тоже самое на задаче где решения ты не знаешь.
Нужно найти подпоследовательность максимальной суммы за один проход, для упрощения берем конечный массив и нужно вернуть только сумму.
Покажи класс.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>- Если ви таки такой вумный, почему в Гуголе теперь работают они, а не ви?
Потому что они целеустремленные. Они хотят работать в гугле.
ПМ>- Очевидно, потому что тупые менеджеры в Гуголе дают на собеседованиях тупые задачки, не имеющие ничего общего с реальной жизнью™.
С таким потоком кандидатов как у гугля можно не париться по поводу неэффективности отбора.
ПМ>- Но если менеджеры Гуголя такие тупие, откуда таки у Гуголя такой гешефт?
Реклама — 96% дохода. Можно вообще большую часть разработки в гугле закрыть и его доходы не упадут.
Re[4]: Задача на собеседовании - обращение списка.
я сказал в предыдущем посте, что указанная задача не годится для проверки профессиональных инженеров-программистов, но зато хорошо сгодится для олимпиады по информатике
предложеное решение (я, кстати, тоже его привёл) является "грязным хаком", за такое руки надо отрывать (если это в продакшене, а не на олимпиаде)
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, samius, Вы писали:
S>>Как тебе "односвязный перечень"?
U>Список сотрудников и перечень сотрудников это синонимы.
В программировании это не синонимы. В условии задачи нет упоминания сотрудников. Логично предположить что список в данном контексте это не перечень, а структура данных.
U>Слова односвязный в первом посте топика нет вообще, соответственно как там ставит задачу на собеседовании топикстартер большой вопрос.
Это большой вопрос для тех, кто не знаком с культурой программирования, в том числе с абстрактным определением списка. Но и его можно решить простым уточнением. Поинтересуйся, подойдет ли решение задачи для динамического массива
S>>Ты хотел исходный смысл? Я тебе дал ссылку. А то что смыслов у слов имеется множество — это я и пытаюсь намекнуть. Задача стоит явно не в обращении копии документа, картины или стихов декабристов. В программировании у списка совершенно определенный смысл. Интересуйся историей.
U>С тобой даже Википедия не согласна, не говоря уж о таких не знакомых тебе вещах как логика и здравый смысл.
Кто я такой, что бы википедия со мной соглашалась. А ты ее, кстати, читал? Открывал другие варианты кроме английского?
Ну и если твой здравый смысл тебе подсказывает что задачу нужно решать на массивах, то ты меня таким здравым смыслом не напугаешь.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>не надо ля-ля
THE>я сказал в предыдущем посте, что указанная задача не годится для проверки профессиональных инженеров-программистов, но зато хорошо сгодится для олимпиады по информатике
THE>предложеное решение (я, кстати, тоже его привёл) является "грязным хаком", за такое руки надо отрывать (если это в продакшене, а не на олимпиаде)
Ну хорошо, тогда как проверить знания кандидата?
По-поводу "отрыва рук"...
Вы одним махом исключили из продакшена разработчиков библиотек, C-программистов, разработчиков, поддерживающих непопсовые платформы...
Несколько лет назад компилятор под HP-UX не дружил с шаблонами и контейнеры приходилось реализовывать вручную. А в zOS до сих пор проблемы с использованием std::vector.
_____________________
С уважением,
Stanislav V. Zudin
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Только ты их не проверяешь.
Проверяю прямо на собеседовании, так сказать в реальном времени. И практика показывает, что многие из тех, кто умеют писать резюме, не умеют писать программы.
G>Я больше с SharePoint работаю и вижу как хорошие .NET программисты не умеют делать решения на SharePoint. Для CRM\SAP и кучи подобных платформ картина аналогичная.
С чего ты взял, что они хорошие?
G>>>ЗЫ. Задача про максимальную подпоследовательность в силе — дерзай. ПМ>>Я не на собеседовании. G>Если ты сейчас не можешь, то и на собеседовании не сможешь.
С чего ты взял, что я не могу?
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>- Если ви таки такой вумный, почему в Гуголе теперь работают они, а не ви? G>Потому что они целеустремленные. Они хотят работать в гугле.
ПМ>>- Очевидно, потому что тупые менеджеры в Гуголе дают на собеседованиях тупые задачки, не имеющие ничего общего с реальной жизнью™. G>С таким потоком кандидатов как у гугля можно не париться по поводу неэффективности отбора.
ПМ>>- Но если менеджеры Гуголя такие тупие, откуда таки у Гуголя такой гешефт? G>Реклама — 96% дохода. Можно вообще большую часть разработки в гугле закрыть и его доходы не упадут.
Ну кто бы сомневался, что специалист по настройке шарепоинта из ООО "Вектор" умнее всего департамента разрботки Гуголя.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>крута, спасиба за развёрнутый ответ
THE>надеюсь, понятно, почему эта задача не имеет отношения к промышленному программированию, а, скорее, годится для районной олимпиады по информатике
Надеюсь также понятно, почему к промышленному программированию не годится варщик творога, который не в состоянии эту задачу решить, даже если у него вся задница заклеена фантиками-сертификатами от MS.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Выделенное случается крайне редко и является признаком плохого проектирования.
База MS CRM плохо спроектирована, например. Из-за того, что все сущности хранятся в 2-х таблицах (одна со стандартными аттрибутами, другая — с пользовательскими) часто невозможно построить эффективный индекс.
G>Ниче не понял, но понял что работает неэффекттивно. Эффективно заставлять базу считать, она умет оптимизировать считывание с диска, в отличие от программного кода.
Канешно неэффективно, если код пишут "практики", для которых обращение списка — сложная задача, а о том, что такое вычислительная сложность они даже понятия не имеют. Таким только и остаётся молиться на волшебную базу данных, которая магическим образом умет оптимизировать считывание с диска, чего конечно же не умеет программный код (видимо в базе не программный код, а святые монады диск читают).
Re[13]: Задача на собеседовании - обращение списка.
On 02.03.2012 14:59, Паблик Морозов wrote: > G>Выделенное случается крайне редко и является признаком плохого > проектирования. > > База MS CRM плохо спроектирована, например. Из-за того, что все сущности > хранятся в 2-х таблицах (одна со стандартными аттрибутами, другая — с > пользовательскими) часто невозможно построить эффективный индекс.
Непонятно. Задачки с гномиками на интервью в МС есть, списки кандидаты
разворачивают успешно, а БД спроектирована плохо. Может всё же не в
знании "вычислительной сложности алгоритмов" сермяжная правда 8-) ?
--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, hrensgory, Вы писали:
H>Непонятно. Задачки с гномиками на интервью в МС есть, списки кандидаты H>разворачивают успешно, а БД спроектирована плохо. Может всё же не в H>знании "вычислительной сложности алгоритмов" сермяжная правда 8-) ?
On 02.03.2012 19:18, Паблик Морозов wrote: > H>Непонятно. Задачки с гномиками на интервью в МС есть, списки кандидаты > H>разворачивают успешно, а БД спроектирована плохо. Может всё же не в > H>знании "вычислительной сложности алгоритмов" сермяжная правда 8-) ? > > Подозреваю nirvana fallacy > <http://en.wikipedia.org/wiki/Nirvana_fallacy> или просто желание > что-нибудь сказать не подумав <http://lurkmore.to/Butthurt>. Тот абзац, > который проектируют быдлокодеры, не знающие устройства списков и выч. > сложность вообще не поддаётся никакому описанию.
Я честно сказать не понял, что имелось в виду под этим самым nirvana
fallacy и т.п. но лично мой опыт работы с людьми, которые запросто
перевернули бы все известные списки, даже будучи разбужены ночью после
лютой пьянки, говорит о том что:
1. Да, они сильно не косячили.
2. Нет, их код и проектные решения (даже в тех областях, где знание
алгоритмических теорий представлялось довольно важным) не отличались в
лучшую сторону от решений и кода тех, кто этого бы явно не сделал.
Т.е. с моей точки зрения упомянутый способ отсеивает слишком уж дохрена
народу. Если вы работаете в гугле, микрософте или сбербанке — это ок, но
для ООО, занимающегося CRM, всё это со стороны выглядит как-то странно.
Ну, примерно, как если бы вы от кандидатов требовали отжаться раз хотя
бы 40, или, например, не брали бы лысых: ничего особо выдающегося, но
очевидно что подойдут не все и зачем это надо — непонятно.
Хотя и "наезды" на этот метод тоже выглядят наверное не лучше — в конце
концов это ваша контора, вам и решать какие методы использовать при
найме. Если невидимая рука рынка исправно пополняет ваш расчётный счёт —
значит такой подход вполне себе жизнеспособен.
--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Вот только решение ты знаешь заранее. А покажи тоже самое на задаче где решения ты не знаешь. G>Нужно найти подпоследовательность максимальной суммы за один проход, для упрощения берем конечный массив и нужно вернуть только сумму.
G>Покажи класс.
Спасибо за задачку. Поначалу кажется сложной, но в итоге оказывается примитиваной до безобразия.
static int GetMaxSubsequenceSum(IEnumerable<int> seq)
{
int prevSum = 0;
int currSum = 0;
foreach (int item in seq)
{
if (item < 0)
{
prevSum = currSum;
currSum = 0;
}
else
{
currSum += item;
}
}
return prevSum > currSum ? prevSum : currSum;
}
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Tissot, Вы писали:
T>Спасибо за задачку. Поначалу кажется сложной, но в итоге оказывается примитиваной до безобразия.
Примитивным оказывается это решение, а не задача.
Упс...
[2, -1, 2]
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
T>>Спасибо за задачку. Поначалу кажется сложной, но в итоге оказывается примитиваной до безобразия. S>Примитивным оказывается это решение, а не задача.
S>Упс... S>[2, -1, 2]
Спасибо. Не зря я чувствовал, что где-то подвох.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
T>>Спасибо за задачку. Поначалу кажется сложной, но в итоге оказывается примитиваной до безобразия. S>Примитивным оказывается это решение, а не задача.
S>Упс... S>[2, -1, 2]
Попытка №2:
static int GetMaxSubsequenceSum(IEnumerable<int> seq)
{
int maxSum = 0;
int currSum = 0;
foreach (int item in seq)
{
currSum += item;
if (currSum < 0)
{
currSum = 0;
}
else if (currSum > maxSum)
{
maxSum = currSum;
}
}
return maxSum;
}
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>А разве что-то есть в условии, запрещающее максимальной сумме подпоследовательности быть отрицательной?
В любой последовательности есть подпоследоваетльность, сумма которой больше любого отрицательного числа.
Что это за подпоследовательность, предлагаю определить самосоятельно.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>шютка!
THE>я бы такую задачу не хотел на собеседовании получить, особенно если говорят "не надо размышлений, просто напишите мне код решения"
это кусочек задачки первого курса универа, в типовике таких 10
на лабах ещё 4 решают, при том за одну лабу нужно написать 2 задания, так что если "пыхтел чуть менее часа" — незачёт обеспечен
после деревьев у людей списки от зубов отскакивает. думать над такими задачами не надо.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
G>>Я больше с SharePoint работаю и вижу как хорошие .NET программисты не умеют делать решения на SharePoint. Для CRM\SAP и кучи подобных платформ картина аналогичная. ПМ>С чего ты взял, что они хорошие?
С того что они писали хороший код.
G>>>>ЗЫ. Задача про максимальную подпоследовательность в силе — дерзай. ПМ>>>Я не на собеседовании. G>>Если ты сейчас не можешь, то и на собеседовании не сможешь. ПМ>С чего ты взял, что я не могу?
Вроде же написано — сейчас не можешь и на собеседовании не сможешь, или тебе надо готовиться заранее.
Ты как-то не показываешь что ты сможешь решать такие задачи
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>Выделенное случается крайне редко и является признаком плохого проектирования.
ПМ>База MS CRM плохо спроектирована, например. Из-за того, что все сущности хранятся в 2-х таблицах (одна со стандартными аттрибутами, другая — с пользовательскими) часто невозможно построить эффективный индекс.
Думаю в CRM есть средства борьбы с этим, только видимо их изучать нужно.
G>>Ниче не понял, но понял что работает неэффекттивно. Эффективно заставлять базу считать, она умет оптимизировать считывание с диска, в отличие от программного кода.
ПМ>Канешно неэффективно, если код пишут "практики", для которых обращение списка — сложная задача, а о том, что такое вычислительная сложность они даже понятия не имеют. Таким только и остаётся молиться на волшебную базу данных, которая магическим образом умет оптимизировать считывание с диска, чего конечно же не умеет программный код (видимо в базе не программный код, а святые монады диск читают).
Ты что сказать пытаешься? Чтобы оптимизировать работу с базой видимо нужно знать как это делать. Разворот списка тут не при чем вообще.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Tissot, Вы писали:
T>Здравствуйте, samius, Вы писали:
S>>А разве что-то есть в условии, запрещающее максимальной сумме подпоследовательности быть отрицательной?
T>В любой последовательности есть подпоследоваетльность, сумма которой больше любого отрицательного числа. T>Что это за подпоследовательность, предлагаю определить самосоятельно.
Я не видел точного условия, не могу сказать, будет сумма пустой подпоследовательности считаться решением.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Tissot, Вы писали:
T>Здравствуйте, samius, Вы писали:
T>В любой последовательности есть подпоследоваетльность, сумма которой больше любого отрицательного числа. T>Что это за подпоследовательность, предлагаю определить самосоятельно.
Но в любом случае то решение неверное.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Tissot, Вы писали:
T>Здравствуйте, gandjustas, Вы писали:
G>>Вот только решение ты знаешь заранее. А покажи тоже самое на задаче где решения ты не знаешь. G>>Нужно найти подпоследовательность максимальной суммы за один проход, для упрощения берем конечный массив и нужно вернуть только сумму.
G>>Покажи класс.
T>Спасибо за задачку. Поначалу кажется сложной, но в итоге оказывается примитиваной до безобразия. T>
Здравствуйте, gandjustas, Вы писали:
G>Близко, но не то. G>Проверь на таких последовательностях G>{1,2,-1,2} — должно быть 4 G>{3,-3,2,-2,1,-1} — должно быть 3
Мне уже показали на ошибку. Двумя постами ниже я исправил решение, и на этих данных оно работае.
G>А также ход решения и сколько времени заняло.
Сначала увидел формулировку. Через какое-то время опять наткнулся на пост, и достаточно быстро решение пришло само.
Сложно посчитать сколько времени это заняло.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
T>>В любой последовательности есть подпоследоваетльность, сумма которой больше любого отрицательного числа. T>>Что это за подпоследовательность, предлагаю определить самосоятельно.
S>Но в любом случае то решение неверное.
Ну что поделаешь, "кто без греха, пусть первым бросит в меня камень".
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Tissot, Вы писали:
T>>Здравствуйте, samius, Вы писали:
S>>>А разве что-то есть в условии, запрещающее максимальной сумме подпоследовательности быть отрицательной?
T>>В любой последовательности есть подпоследоваетльность, сумма которой больше любого отрицательного числа. T>>Что это за подпоследовательность, предлагаю определить самосоятельно.
S>Я не видел точного условия, не могу сказать, будет сумма пустой подпоследовательности считаться решением.
Да, будет. Обратного нигде не говорилось.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Tissot, Вы писали:
T>Сначала увидел формулировку. Через какое-то время опять наткнулся на пост, и достаточно быстро решение пришло само. T>Сложно посчитать сколько времени это заняло.
Вот видишь код решения простой. Ты говоришь "само пришло", причем не с первого раза. Ты не можешь ход решения расписать.
Алгоритм решения сложен. В стрессовой ситуации интуиция подведет.
Разворот списка — аналогичная задача. Код простой, алгоритм сложный, ты его расписал потому что уже знаешь.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
T>>Сложно посчитать сколько времени это заняло.
G>Вот видишь код решения простой. Ты говоришь "само пришло", причем не с первого раза. Ты не можешь ход решения расписать.
G>Алгоритм решения сложен. В стрессовой ситуации интуиция подведет.
Наоборот, алгоритм оказался на удивление простым, не ожидал.
Но в условиях собеседования, согласен, я бы не смог придумать решения.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Tissot, Вы писали:
T>Здравствуйте, gandjustas, Вы писали:
T>>>Сложно посчитать сколько времени это заняло.
G>>Вот видишь код решения простой. Ты говоришь "само пришло", причем не с первого раза. Ты не можешь ход решения расписать.
G>>Алгоритм решения сложен. В стрессовой ситуации интуиция подведет.
T>Наоборот, алгоритм оказался на удивление простым, не ожидал.
Это решение. Алгоритм сложен тогда когда его сложно придумать. Тут сложность именно алгоритма.
T>Но в условиях собеседования, согласен, я бы не смог придумать решения.
Ну вот, разворот списка — из той же оперы, только более распространен.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>>>Алгоритм решения сложен. В стрессовой ситуации интуиция подведет.
T>>Наоборот, алгоритм оказался на удивление простым, не ожидал. G>Это решение. Алгоритм сложен тогда когда его сложно придумать.
Это какое-то странное определение сложности.
Re[7]: Задача на собеседовании - обращение списка.
, где я уже ограничил круг вакансий (последняя строчка). V>>Также есть вакансии на которые мыслящий работник не нужен (быдлокодерство по разжеванным требованиям). В этом случае задавать задачки — терять время.
U>Быдлокодер это человек пищуший говнокод. Решение рутинной задачи оптимальным образом быдлокодерством не может быть по определению.
По Вашему определению. Говнокод пишет говнокодер, хотя есть мнение, что это вообще не кодер
Свое мнение я уже сказал, и, так как ощутимая часть моей работы связана с написанием кода по
разжеванным требованиям — я быдлокодер. Какие проблемы?
Вопрос в том, кто это все разжевывает. Увы, это тоже мне приходится делать.
Но не будем углубляться в терминологию.
U>Это первое. Второе, искусство программирования в общем-то и состоит в том, чтобы сделать повторное решение любой задачи рутинной. Соответственно при наличии на проекте нормального программиста-технолога оказывается, что большинство новых задач являются рутинными, т.к. в том или ином виде они уже встречались ранее и для них уже написана обвязка, сводящая их решение к рутинному.
V>>См. мое решение выше. На ЭТО нужны часы?
U>В решении десяток строчек кода. Плюс нужны хоть какие-то тесты, это еще по меньшей мере десять строчек, т.е. всего двадцать. Вот здесь http://rsdn.ru/forum/job/4605175.1.aspx
я писал, что программист в среднем пишет несколько сот строчек кода в день. На что получил гневный отлуп, что уважающий себя программист должен писать много меньше. Но ладно возьмем все-таки производительность труда суровых челябинских программистов, не изнеженных отладкой, документированием и митингами. Если средняя производительность 200 строк в день, то в среднем в спокойной обстановке, решая в основном привычные задачи, на написание двадцати строк кода программист тратит почти час грязного времени и около получаса чистого. Вы же хотите, чтобы на собеседовании в стрессовой обстановке, решая непривычную задачу (за десять лет практики я ни разу не работал с односвязным списком, т.к. это весьма экзотическая коллекция оптимальная на весьма экзотических задачах), программист написал двадцать строчек кода за 5 минут. Стоит ли после этого удивляться, что вам кажется, что на собеседования ходят одни идиоты?
Ваши цифры — интегральная оценка по проекту. С учетом дизайна, отладки и т.п. Посылка ложная.
И из нее легко сделать вывод, что идиотов много. Как и любой другой, впрочем.
V>>Так это прекрасно. На практике под списком понимается классическая структура данных, которая описана в не менее V>>классических источниках (сиречь Кнут). Если человек меняет терминологию или путает фундаментальные сущности с V>>конкретной реализацией — то до свидания. Задача успешно сделала отсев.
U>Т.е. на собеседовании вы вместо способностей к программированию и умения решать реальные задачи проверяете читал ли программист Кнута. Стоит ли после этого удивляться, что вы никак не можете найти нормальных программеров, на что так жалуется топикстартер?
А вот это ложь. Я не проверяю чтение Кнута, как никогда и не жаловался на "никак не можете найти нормальных программеров".
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Вот только решение ты знаешь заранее. А покажи тоже самое на задаче где решения ты не знаешь. G>Нужно найти подпоследовательность максимальной суммы за один проход, для упрощения берем конечный массив и нужно вернуть только сумму.
Воот. Сейчас я выдам пару бездоказательных утверждений:
1. Я до сих пор не знаю решения. Я знаю подход. И, каждый раз, когда мне будут задавать этот
вопрос — я буду заново его выводить. Хотя это вывод займет 20-30 сек, это правда.
2. Это решение мое личное, вряд ли вы его нагуглите. И его я "родил" в стрессовой ситуации с нуля
как раз за 5-10 минут (не на собеседовании).
Показать тоже самое на другой задаче на форуме невозможно. Времени много, я легко могу обратится к "гуру" и т.п.
Тем более, что в данной ветке кто-то уже выдал 80% решения. Так что смысла в этом я не вижу.
G>Покажи класс.
От 50 евро в час )) Или приглашайте на собеседование ))
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Нужно найти подпоследовательность максимальной суммы за один проход, для упрощения берем конечный массив и нужно вернуть только сумму.
Вот конкретно эта задача, не очень удачный пример. И как раз таки не очень удачная задачка для тестирования. Потому, что она требует немного не тривиального/олимпиадного мышления. А та задача с переворотом списка, требует тривиальных знаний и базовых навыков программирования. Задачка уровня старших классов и первого курса технического ВУЗа.
G>Покажи класс.
Давай, я попробую изложить ход своих мыслей при решении этой задачи. Ранее с такой задачей вроде не встречался, может быть в свои школьные олимпиадные времена.
И так, первым делом взял и от балды составил последовательность:
1 2 -1 2 -3 4 5
(кстати говоря, потом понял, что получил на самом деле очень удачную последовательность)
Теперь, думаем. Первое, что пришло в голову, начать с самого начала, накапливая сумму и при нахождении отрицательного элемента обрубать накопленную сумму. При этом, в этой же итерации, за одно ищем максимум.
Но я протупил. Понял я это тестируя на разных крайних случаях. Например, последовательность 2 -1 2, тут ответом должна быть 3-ка. Мой алгоритм даст 2-ку. Помните, я говорил выше, что получил изначально и чисто случайно удачную последовательность. Это потому, что на том примере мой алгоритм тоже работает неверно. Ответ там 10, а не 9-ка которую выдаст мой алгоритм.
Вообщем, понятно. Подход с отрубанием суммы при отрицательных элементах не правильный. И тут меня осенило. Что никак не соответствует системному подходу (и вот почему я думаю, что это неудачная задача для теста). А осенила мысль такая, что если мы встретим отрицательный элемент и накопившаяся сумма вместе с этим отрицательным элементом будет меньше нуля, то именно тут и надо обрубать накопление суммы. Т.к. в случае, если мы возьмем заранее отрицательный суммарный груз, то последующая сумма будет меньше, чем та, если бы мы взяли без этого отрицательного груза.
Да, мысль сумбурная и может быть трудно понять сходу. Но если вдуматься, в этом есть логика.
Для проверки, я немного изменил свою исходную последовательность:
1 2 -1 2 -6 4 5
1 3 2 4 0 4 9 => 9
Ура! Чувство морального удовлетворения
PS: кстати, хорошая задачка. Я ошибся, ее можно задавать на собеседовании. Демонстрирует навык умения рассматривать крайние случаи (а это значит, на практике, умение писать юнит-тесты), находить решения задач в не стандартных ситуациях.
PSS: я не учел вариант, когда все элементы отрицательные, в этом случае нужно просто найти максимальное отрицательное число.
PSSS: на собеседовании важно не то, сможет ли он решить задачу (хотя это важно), знает ли он наизусть библиотечные функции или ньюансы языка программирования (привет виртуальные деструкторы), а то, как он мыслит, важно проследить ход его мыслей.
Computer science is no more about computers than astronomy is about telescopes (c) Edsger Dijkstra
Re[6]: Задача на собеседовании - обращение списка.
SVZ>Вы одним махом исключили из продакшена разработчиков библиотек, C-программистов, разработчиков, поддерживающих непопсовые платформы... SVZ>Несколько лет назад компилятор под HP-UX не дружил с шаблонами и контейнеры приходилось реализовывать вручную. А в zOS до сих пор проблемы с использованием std::vector.
ничего подобного
я не против программирования на C (хе-хе. это было бы смешно), я против разворота списка "на месте"
а что, если теперь его не развернуть надо, а отсортировать? всё, заново велосипед изобретаем?
паттерны, общие структуры данных и шаблонные алгоритмы используются для того, чтобы можно было потом "переиспользовать", а подобная задачка в этом смысле бесполезна и задавать её инженерам-программистам бессмысленно.
IMHO...
Re[4]: Задача на собеседовании - обращение списка.
во-во, вот оно:
Ф> от зубов отскакивает. думать над такими задачами не надо.
где-то я уже это слышал думать не надо! надо зубами отбивать!
Ф> на лабах ещё 4 решают
я ж и говорю — хорошая задачка для районной олимпиады по информатике. олимпиады! для школьников!
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>я не против программирования на C (хе-хе. это было бы смешно), я против разворота списка "на месте" THE>а что, если теперь его не развернуть надо, а отсортировать? всё, заново велосипед изобретаем?
А в чём проблема отсортировать список in-place? Даже односвязный сортируется влёт.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Алгоритм решения сложен. В стрессовой ситуации интуиция подведет.
Дело даже не в сложности а в том что именно нужно задействовать интуицию, а это непредсказуемо
по времени, можно и моментально догадаться, а можно долго биться и не решить, но на следующее утро
проснутся с готовым решением в голове. Для интуиции это нормально, так что собеседование
должно минимум сутки длится
Стрессовая ситуация кстати по очень по разному воздействует на интуицию, у многих она обостряется,
скажем я так немало экзаменов сдал в студенчестве
G>Разворот списка — аналогичная задача. Код простой, алгоритм сложный, ты его расписал потому что уже знаешь.
Для программиста С++ разворот списка не является такой задачей. Он обязан понимать как работают указатели,
"интуитивный затык" в этой задаче только в понимании как работает указатель, если это есть, то задача
вырождается в рутинную задачу на внимательность.
Твоя же задача, если забыл (или не знал) математику, чисто на интуицию.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>я не против программирования на C (хе-хе. это было бы смешно), я против разворота списка "на месте" THE>а что, если теперь его не развернуть надо, а отсортировать? всё, заново велосипед изобретаем?
THE>паттерны, общие структуры данных и шаблонные алгоритмы используются для того, чтобы можно было потом "переиспользовать", а подобная задачка в этом смысле бесполезна и задавать её инженерам-программистам бессмысленно.
Рассуждаешь правильно, НО!
Думаю, ты со мной согласишься, что инженер-программист должен иметь представление, во что выливается использование различных контейнеров, алгоритмов. А если для него все едино, что массив, что связный список, то он такого наворотит в продакшене... А как определить, что он не только слышал о структурах данных и алгоритмах, но и умеет их распознать, выбрать нужный и правильно использовать? Ну вот только такими дурацкими синтетическими задачками. Потому что если ему дать реальную задачку (даже сильно ее упростив), то решаться она будет несколько часов. Есть у меня такие задачки, можем их обсудить.
_____________________
С уважением,
Stanislav V. Zudin
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, __lambda__, Вы писали:
___>Здравствуйте, gandjustas, Вы писали:
G>>Нужно найти подпоследовательность максимальной суммы за один проход, для упрощения берем конечный массив и нужно вернуть только сумму.
___>Вот конкретно эта задача, не очень удачный пример. И как раз таки не очень удачная задачка для тестирования. Потому, что она требует немного не тривиального/олимпиадного мышления. А та задача с переворотом списка, требует тривиальных знаний и базовых навыков программирования. Задачка уровня старших классов и первого курса технического ВУЗа.
Задача разворачивания списка не отличается. Разворачивание списка требует даже больше знаний.
Только некоторые не могут понять что может быть сложен алгоритм, но при этом простой код решения. И думают раз код простой, то и писать такой без предварительной подготовки должны уметь все.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, FR, Вы писали:
G>>Разворот списка — аналогичная задача. Код простой, алгоритм сложный, ты его расписал потому что уже знаешь.
FR>Для программиста С++ разворот списка не является такой задачей. Он обязан понимать как работают указатели.
Тогда уж C, а не C++. Программист на C++ ниче кроме std::reverse не должен писать.
FR>Твоя же задача, если забыл (или не знал) математику, чисто на интуицию.
Любая задача чисто на интуицию если ты не занимался таким постоянно.
Еще раз повторю что решение таких задач — определенный скилл, не имеющий отношение к работе в большинстве случаев. Поэтому и нет смвсла задавать такой вопрос на собеседовании ибо на него ответят люди, которые умеют решать такие задачи. Со способностями создавать value корреляции нет вообще.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
FR>>Для программиста С++ разворот списка не является такой задачей. Он обязан понимать как работают указатели. G>Тогда уж C, а не C++. Программист на C++ ниче кроме std::reverse не должен писать.
Нет, С++ тоже, не понимая указателей в нем делать нечего.
FR>>Твоя же задача, если забыл (или не знал) математику, чисто на интуицию. G>Любая задача чисто на интуицию если ты не занимался таким постоянно.
Не согласен, существует множество задач которые не требуют интуиции.
Ну и для программиста на Си, С++ который хочет — не хочет, но с указателями дело имеет, эта задача не на интуицию,
и в общем тривиальна, даже если он списков в глаза не видел и задачу с разворотом легко решит, ошибки будут только по
невнимательности.
Вот для твоей задачи кроме преподавателя математики я не вижу того кто бы мог подобным заниматься постоянно.
G>Еще раз повторю что решение таких задач — определенный скилл, не имеющий отношение к работе в большинстве случаев. Поэтому и нет смвсла задавать такой вопрос на собеседовании ибо на него ответят люди, которые умеют решать такие задачи. Со способностями создавать value корреляции нет вообще.
Тут согласен.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, FR, Вы писали:
FR>>>Твоя же задача, если забыл (или не знал) математику, чисто на интуицию. G>>Любая задача чисто на интуицию если ты не занимался таким постоянно.
FR>Не согласен, существует множество задач которые не требуют интуиции.
Например?
FR>Ну и для программиста на Си, С++ который хочет — не хочет, но с указателями дело имеет, эта задача не на интуицию, FR>и в общем тривиальна, даже если он списков в глаза не видел и задачу с разворотом легко решит, ошибки будут только по FR>невнимательности.
Если ты прочитаешь тему сначала, то узнаешь что контора топистартера занимается .NET: CRM, SharePoint, BI и на Java что-то пишет.
C++ и указателями там не пахнет.
FR>Вот для твоей задачи кроме преподавателя математики я не вижу того кто бы мог подобным заниматься постоянно. G>>Еще раз повторю что решение таких задач — определенный скилл, не имеющий отношение к работе в большинстве случаев. Поэтому и нет смвсла задавать такой вопрос на собеседовании ибо на него ответят люди, которые умеют решать такие задачи. Со способностями создавать value корреляции нет вообще. FR>Тут согласен.
То есть требовать от всех программистов уметь решать такие задачи на собеседовании — очень плохой фильтр, скорее даже отрицательный.
Re[11]: Задача на собеседовании - обращение списка.
FR>>Не согласен, существует множество задач которые не требуют интуиции. G>Например?
Вычислить сумму массива действительных чисел
Ты похоже впадаешь в другую крайность.
G>Если ты прочитаешь тему сначала, то узнаешь что контора топистартера занимается .NET: CRM, SharePoint, BI и на Java что-то пишет. G>C++ и указателями там не пахнет.
вопросы вообще отпадают.
FR>>Тут согласен. G>То есть требовать от всех программистов уметь решать такие задачи на собеседовании — очень плохой фильтр, скорее даже отрицательный.
Не стал бы обобщать, зависит от места.
Например для С++ программиста вполне адекватная задачка.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, gandjustas, Вы писали:
FR>>>Не согласен, существует множество задач которые не требуют интуиции. G>>Например?
FR>Вычислить сумму массива действительных чисел FR>Ты похоже впадаешь в другую крайность.
Я про нетривиальные задачи говорю, решение которых требует больше чем одного цикла\оператора if\функции
FR>>>Тут согласен. G>>То есть требовать от всех программистов уметь решать такие задачи на собеседовании — очень плохой фильтр, скорее даже отрицательный.
FR>Не стал бы обобщать, зависит от места. FR>Например для С++ программиста вполне адекватная задачка.
Если он потом будет писать эти развороты списков, то да. Иначе хороший программист на C++ должен выдать std::reverse и убедить собеседующего что не надо писать такой цикл руками.
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, gandjustas, Вы писали:
G>>С того что они писали хороший код. ПМ>И как ты определил, что он был хорошим?
Я с ними работал над другими проектами
G>>Ты как-то не показываешь что ты сможешь решать такие задачи ПМ>А я должен что-то показывать?
Ты ниче не должен. А я не должен не утверждать что ты не знаешь.
Так что продолжаю это утверждать.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, __lambda__, Вы писали:
___>Вообщем, понятно. Подход с отрубанием суммы при отрицательных элементах не правильный. И тут меня осенило. Что никак не соответствует системному подходу (и вот почему я думаю, что это неудачная задача для теста). А осенила мысль такая, что если мы встретим отрицательный элемент и накопившаяся сумма вместе с этим отрицательным элементом будет меньше нуля, то именно тут и надо обрубать накопление суммы. Т.к. в случае, если мы возьмем заранее отрицательный суммарный груз, то последующая сумма будет меньше, чем та, если бы мы взяли без этого отрицательного груза.
неверное утверждение. проверь
13 -12 1
должно быть 13, боюсь что у тебя будет 2
жадный алгоритм для этой задачи не работает, и она не решается за О(n) с константной памятью (в худшем случае). впрочем, О оценка это и есть "ограничение сверху" поэтому она для этой задачи — О(n*n).
Viva el Junta Militar! Viva el Presidente!
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Ligen, Вы писали:
L>неверное утверждение. проверь L>13 -12 1 L>должно быть 13, боюсь что у тебя будет 2
Специально посмотрел, что будет (автор не я). В этом случае ответ будет 13. Берется не последнее значение, берется максимум "текущих" значений за все время подсчета. Генерируются следующие значения: [0, 13, 1, 2] (первое — до запуска итерации).
L>жадный алгоритм для этой задачи не работает, и она не решается за О(n) с константной памятью (в худшем случае).
Решается. И именно жадным алгоритмом. В задаче можно выделить два шага.
Первый шаг — для каждой позиции (между двумя числами, а не "в" числах) строится "максимальная" последовательность "слева" от этой позиции. Можно показать, что там как раз работает "жадный" алгоритм — либо приписывание к новому префиксу, либо 0. Это делается доказательством от противного. Допустим, что последовательность получается не по алгоритму. Если случаев несколько — берется самый левый. И рассматривается, короче или длиннее "правильная" последовательность последовательности "по-алгоритму". В обоих случаях получается, что либо "правильная" последовательность — неправильная, либо на предыдущем шаге мы выбрали "неоптимальный" вариант (а это противоречит выбору самого первого противоречия).
Второй шаг — выбрать максимум среди получившихся чисел. __labmda__ сразу написал, что он это делает по ходу генерации чисел. На олимпиаде в подобной задаче мы вроде бы строили массив и уже в нем искали максимум. Так было проще (меньше вероятность ошибки).
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, gandjustas, Вы писали:
G>Только некоторые не могут понять что может быть сложен алгоритм, но при этом простой код решения. И думают раз код простой, то и писать такой без предварительной подготовки должны уметь все.
gandjustas, не надо передергивать. в данном случае алгоритм — простой.
может до него и не так просто дойти в условиях собеседования, но тем не менее, ничего сложного в нем нет.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, maxkar, Вы писали:
M>Специально посмотрел, что будет (автор не я). В этом случае ответ будет 13.
хм, ну я аппелировал к выделеному мной утверждению, но возможно я его не правильно понял, все таки без кода не словах не то.
а про саму задачу — спасибо, я тупанул, действительно решается за О(n)
Viva el Junta Militar! Viva el Presidente!
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
А зиготу от гаметы, или связи ковалентные от ионных ты тоже с такой же легкостью отличаешь до сих пор?
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Sharowarsheg, Вы писали:
L>>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
S>А зиготу от гаметы, или связи ковалентные от ионных ты тоже с такой же легкостью отличаешь до сих пор?
Нет, но все-таки математика к программированию несколько поближе, чем биология/химия.
Re[7]: Задача на собеседовании - обращение списка.
Я прочёл много ваших постов и у меня к вам возник один, может быть несколько неожиданный, вопрос.
Если верить anekdot.ru, то только:
Шесть из десяти человек не могут дать правильного ответа на вопрос: „В каком году нашей эры был казнен Христос в возрасте 33 лет?”
Это ведь элементарный и очевидный вопрос, ответ на который я нашёл за 3 секунды. Итак, какой будет ваш ответ на поставленный вопрос? (Время не забудьте засечь)
И каждый день — без права на ошибку...
Re[2]: Задача на собеседовании - обращение списка.
BFE>Шесть из десяти человек не могут дать правильного ответа на вопрос: „В каком году нашей эры был казнен Христос в возрасте 33 лет?”
BFE>Это ведь элементарный и очевидный вопрос, ответ на который я нашёл за 3 секунды. Итак, какой будет ваш ответ на поставленный вопрос? (Время не забудьте засечь)
Э-э-э, 33-м?
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>крута, спасиба за развёрнутый ответ THE>надеюсь, понятно, почему эта задача не имеет отношения к промышленному программированию, а, скорее, годится для районной олимпиады по информатике
Ну, я не против, чтобы большинство именно так и думало.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, THESERG, Вы писали:
THE>я не против программирования на C (хе-хе. это было бы смешно), я против разворота списка "на месте"
Это ещё почему?
THE>а что, если теперь его не развернуть надо, а отсортировать? всё, заново велосипед изобретаем?
ИМХО, пора внедрять новый мем: количество сторонних библиотек в продукте растёт до тех пор, пока не превысит способности программиста. Аллюзия, надеюсь, понятна.
THE>паттерны, общие структуры данных и шаблонные алгоритмы используются для того, чтобы можно было потом "переиспользовать", а подобная задачка в этом смысле бесполезна и задавать её инженерам-программистам бессмысленно.
Прекрасная задача на элементарную соображалку. Что за баттхёрт, вообще? Какие ещё, на фиг, "велосипеды"? Нормальный базовый навык программиста.
Ни фига я что-то не понимаю в современном программировании: кто все эти люди?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
BBI>>В задачах где надо быстрое межпотоковое взаимодействие.
U>Не просто быстрое. А сверхчастое. Можно пример такой бизнес-задачи? Вроде обычно на реальных задачах можно декомпозицию задачи провести так, что обменов между потоками будет минимум и соответственно тормоза ими вносимые будут различимы разве что в микроскоп. На простоте кода это также очень положительно сказывается.
Была тут задачка, совершенно практическая, есть скажем 16TB данных и примерно 24*1024^3 последовательностей байт. Последовательности даются частично списком, частично правилами генерации, правила довольно сложные. Нужно посчитать число вхождений для каждой последовательности и после этого по каким-то еще правилам отобрать заранее неизвестное число лучших. Правила отбора не слишком сложные, но требуют знать, сколько раз последовательность встречалась в данных.
Вот тебе и задачка. И синхронизации, и локфри местами тоже пошло неплохо, и боксинг, и NUMA, и всё что хочешь. Простота кода получилась на выходе, условная, скажем прямо.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, minorlogic, Вы писали:
M>>34 ? BFE>Я полагаю, что да. В 34-ом. BFE>Жаль, что Паблик Морозов так и не ответил.
Это был бы правильный ответ, если бы он родился и правда в 1 году после. Только он взял и родился где-то между 2 и 7 до, в основном считается что в 4 году до рх и казнен был между 30 и 36.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
__>>Потому, что у std::list есть свой reverse(), и отнюдь не для красоты.
M>Ваша оценка быстродействия для обоих вариантов ?
Сложность в стандарте указана, так что никаких моих оценок нет. Линейная и begin()-end() пополам обменов.
>Сразу напомню о существовании std::iter_swap
Не спасет.
Так что за исключением списков из чего-нибудь тривиального типа интов...
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Sharowarsheg, Вы писали:
S>Здравствуйте, Lloyd, Вы писали:
L>>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
S>А зиготу от гаметы, или связи ковалентные от ионных ты тоже с такой же легкостью отличаешь до сих пор?
зиготу от гаметы скорее всего не отличу (хотя есть предположение, что у гамет непарное число хромосом, а у зиготы -- парное) — потому, что скорее всего эти термины избыточны (т.е. предназначены для удобства речи, а не названия существенных моделей)
ковалентную связь от ионной — ну тут ясно, что ковалентная это в H_2, а ионная это в чем-то типа воды
после этого я гляну в википедию, и обнаружил, что у воды связь считают ковалентной, а скажем у NaCl ионной — что говорит о хреновой определенности термина — ведь молекулы воды *тоже* диссоциируют, хотя существенно меньше, чем NaCl
в общем, эти термины не стоят того, чтобы их точно помнить
Re[10]: Задача на собеседовании - обращение списка.
что тут можно помнить — это разная степень полярности связи
wiki> Ионная связь — крайний случай поляризации ковалентной полярной связи.
да и то лучше это не помнить — потому, что это достаточно глубоко в квантовую механику, а то, что рассказывают про это в школе, является Сборником Магических Рецептов И Разрозненных Сведений
когда сведения разрознены имеется 2 пути:
1. забыть их
2. выучить еще больше сведений, чтобы разрозненность исчезла, и появились *логические* связи
годятся оба варианта
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, m e, Вы писали:
ME>в общем, эти термины не стоят того, чтобы их точно помнить
Ну вот и вычисления интегралов примерно так же не стоят того, чтобы их помнить. Даже интегралы сами-то не особо. Я скажем как из института лет десять назад выпустился, ни разу интеграл не видел и не кодил.
Re[13]: Задача на собеседовании - обращение списка.
ME>>в общем, эти термины не стоят того, чтобы их точно помнить
S>Ну вот и вычисления интегралов примерно так же не стоят того, чтобы их помнить. Даже интегралы сами-то не особо. Я скажем как из института лет десять назад выпустился, ни разу интеграл не видел и не кодил.
обрати внимание, что в моих аргументах не было "я ни разу ни кодил ковалентных связей"
а интеграл, кстати, ты скорее всего кодил, если хоть раз суммировал массив — любая конечная сумма является интегралом лебега от константы по дискретной мере
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, m e, Вы писали:
ME>>>в общем, эти термины не стоят того, чтобы их точно помнить
S>>Ну вот и вычисления интегралов примерно так же не стоят того, чтобы их помнить. Даже интегралы сами-то не особо. Я скажем как из института лет десять назад выпустился, ни разу интеграл не видел и не кодил.
ME>обрати внимание, что в моих аргументах не было "я ни разу ни кодил ковалентных связей"
Если бы ты кодил ковалентные связи, наверняка помнил бы, и не относился бы к ним так пренебрежительно.
Re[15]: Задача на собеседовании - обращение списка.
ME>>обрати внимание, что в моих аргументах не было "я ни разу ни кодил ковалентных связей"
S>Если бы ты кодил ковалентные связи, наверняка помнил бы
да
S>и не относился бы к ним так пренебрежительно.
нет
разница между ковалентными и ионными связями примерно как между желтым и красным цветом — границу можно провести по какой-то длине волны, но она будет чисто с потолка, как, полагаю, с потолка взяты и 1.7В разницы в электроотрицательности в определении ионной связи
а вот к самому понятию "длина волны" уже отношение будет уважительным
Re[16]: Задача на собеседовании - обращение списка.
Здравствуйте, m e, Вы писали:
ME>разница между ковалентными и ионными связями примерно как между желтым и красным цветом — границу можно провести по какой-то длине волны, но она будет чисто с потолка, как, полагаю, с потолка взяты и 1.7В разницы в электроотрицательности в определении ионной связи
ME>а вот к самому понятию "длина волны" уже отношение будет уважительным
Это привычка математика к четким определениям. Так повезло математикам, и, скорее всего, больше никому. Остальным приходится довольствоваться размытыми понятиями, потому что других не завезли.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Pyromancer, Вы писали:
M>>>34 ? BFE>>Я полагаю, что да. В 34-ом. BFE>>Жаль, что Паблик Морозов так и не ответил.
P>Это был бы правильный ответ, если бы он родился и правда в 1 году после.
Как вы пришли к такому выводу?
P>Только он взял и родился где-то между 2 и 7 до, в основном считается что в 4 году до рх и казнен был между 30 и 36.
А вам не кажется, что этот ваш ответ похож на большинство ответов про обращение списка? Вы же не смогли ответить на элементарный вопрос...
И каждый день — без права на ошибку...
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Undying, Вы писали:
U>1) Что за пять минут придумать можно решение только крайне примитивной задачи. Решение мало-мальски сложной задачи за пять минут можно только вспомнить, если знал его раньше.
U>2) Что при реальной работе программист как правило имеет дело с хорошо знакомым контекстом. На собеседовании контекст не знаком совершенно, ни в плане поставленных задач, ни в плане людей поставивших эти задачи.
U>3) Что в реальной работе от программиста практически никогда не требуется решение за пять минут. И тем более от программиста никогда не требуется решить задачу за пять минут в незнакомом контексте.
Именно поэтому я на собеседовании спрашиваю, какую самую интересную задачу кандидат решил на предыдущем (текущем) месте работы — обычно кандидат начинает взахлёб рассказывать о ней, и затем просто беседую в данном контексте — задавая вопросы а-ля "какие были альтернативные решения?", "почему было выбрано именно то решение, которое было выбрано, а не какое-то из альтернативных?".
Задачки про всяких гномиков, списки и т.п. считаю неподходящими для интервью — их лучше обсуждать на тимбилдинге под пиво
Здравствуйте, ArtK, Вы писали:
AK>Много где работа сводится к написанию программ, которые дёргают библиотечные функции, и вся квалификация сводится к знанию тонкостей этих библиотек. AK>И этим можно заниматься годами, а потом гордо писать — "5 лет опыта разработки на C++".
Интересно, а где работа "на С++" сводится не к вызову библиотечных функций? А в случае рокетсаенса чем опыт на С++ будет отличаться от опыта на Паскале?
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[5]: Задача на собеседовании - обращение списка.
29.03.2012 12:34, Cadet написал:
> Интересно, а где работа "на С++" сводится не к вызову библиотечных > функций?
Ну некоторые каждый раз новый велосипед с прямоугольными колесами
изобретают.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг? ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
ПМ>З.Ы. На прошлой работе HR заставляла соискателей решать задачи про переливание воды, цветные шары и гномов в кепках. По-моему очень хорошая практика была, полные идиоты сразу отсеивались, сейчас контора гораздо более бюрократичная, тонко настроить фильтры HR-ов гораздо сложнее, приходится фильтровать самому.
Все подобные задачи выдумывают люди, которые на самом деле не являются программистами, или по крайней мере очень слабые программисты, и наивно думают, что программисты решают какие-то заковыристные задачи на работе.
Я вас разочарую, но в 99% работа программистов не связана с решение каких-либо логичесаких головоломок. Работа программистов вообще не в этом состоит! Работа программистов состоит в написании грамотного, легко читаемого кода!
Поэтому напрашивается вопрос, что вы сами как раз очень слабый программист, если этого не понимаете!
Меня вообще смешат такие интервьюиры, которые сами решили какую-то задачку и наивно считают, что дрругие обязаны знать решение этой задачии. То есть это крайне оограниченные люди, которые наивно думают, что все обязаны знать именно то, что этот ограниченный человек для себя открыл только вчера!
Самое смешное, что интернет завален решением этой задачи, так как, похоже, горе-интервьюиры ничего другого не знают, о чем можно спросить программиста.
Программистам просто на подобном собеседовании надо сразу же делать вывод, что на этйо фирме работают не профессиональные программисты, а дураки, кичащиеся знанием решения совершенно никчемной задачи!
Здравствуйте, ArtK, Вы писали:
AK>Здравствуйте, Паблик Морозов, Вы писали:
ПМ>>Здравствуйте, Sni4ok, Вы писали:
S>>>конечно сразу нафиг
ПМ>>Но как-то они же работали на предыдущих работах несколько лет? Или от того новую работу и ищут, что так набыдлокодили, что теперь легче работу сменить, чем разбираться?
AK>Много где работа сводится к написанию программ, которые дёргают библиотечные функции, и вся квалификация сводится к знанию тонкостей этих библиотек. AK>И этим можно заниматься годами, а потом гордо писать — "5 лет опыта разработки на C++".
А о чем можно гордо писать таму, который лишь знает решение никчемной задачи, но не знает библиотечных функций?! Что он пять лет занимался "переливанием воды и цветными шариками?!
29.03.2012 13:59, Сыроежка написал:
> Поэтому напрашивается вопрос, что вы сами как раз очень слабый > программист, если этого не понимаете!
Он вообще не программист.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Все подобные задачи выдумывают люди, которые на самом деле не являются программистами, или по крайней мере очень слабые программисты, и наивно думают, что программисты решают какие-то заковыристные задачи на работе. С>Я вас разочарую, но в 99% работа программистов не связана с решение каких-либо логичесаких головоломок. Работа программистов вообще не в этом состоит! Работа программистов состоит в написании грамотного, легко читаемого кода!
Вот что меня удивляет, так это то, что сейчас принято свое невежество преподносить как удаль. Взгляните на любое обсуждение собеседований, обязательно найдется дюжина-другая сообщений в этом стиле.
"Я, мол, необразованный, я таких задач не решаю и не умею решать, я этого ни разу не стесняюсь и даже книжку в руки не возьму, я — герой".
Да, есть задачи, где достаточно мышкой контролы таскать на форму. И это работа программиста.
В моем проекте такому программисту работы не найдется (у П.Морозова — тоже). Но найдется в другом проекте. Ничего страшного нет.
Все найдут себе и работу, и работников по вкусу
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>А как тогда отсеять людей, не способных программировать? Давать на дом тестовые задания? Я так понял, в среде программистов отношение к ним очень негативное. Задавать технические вопросы? Вот на них ответы человек действительно может не знать, если раньше не работал. Кроме того, мне ведь программист нужен, а не зубрилка. Сейчас интернет есть, если человек с мозгами любую техническую информацию он за 5 минут найдёт (кстати, у меня есть идея проверять навык поиска тех.инфы в интернете, просто я еще не придумал, как это грамотно реализовать).
Если вы не понимаете как отсеивать, нафига вообще взялись за это дело?
Есть такие понятия как уровень сознания, культура разработки. Вы не слышали никогда о таких? Или хотя бы не задумывались о них?
Так вот у джуниора уровень сознания один, у девелопера другой, у сеньера — третий, архитектора — четвертый и т.д. Это понимание законов разработки, сформированная и аргументированная позиция о том, что такое хорошо, а что такое плохо. Если человек не умеет определять то, какими категориями мыслит человек (что скорее говорит о том, что он сам ещё зеленый инженер), то браться за собеседования запрещено.
Если интервьюер на собеседовании дает всякие задачи оборачиваний списков и прочую лабуду, о нем можно сделать только один вывод — это человек низкой квалификации, кодер. Может быть гуру-кодер, но кодер. Кодерок Я прямо отвечаю что не знаю как оборачивать списки, встаю и со спокойной душой ухожу, удовлетворенный тем, что такой человек сам отсекся в первые 5 минут собеседования.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, michael_isu, Вы писали:
_>Если интервьюер на собеседовании дает всякие задачи оборачиваний списков и прочую лабуду, о нем можно сделать только один вывод — это человек низкой квалификации, кодер. Может быть гуру-кодер, но кодер. Кодерок Я прямо отвечаю что не знаю как оборачивать списки, встаю и со спокойной душой ухожу, удовлетворенный тем, что такой человек сам отсекся в первые 5 минут собеседования.
Во! Слова и действие истинного джедая!!!
Может тогда Мастер расскажет, что позволено у него спрашивать на собеседовании?
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Во! Слова и действие истинного джедая!!! SVZ>Может тогда Мастер расскажет, что позволено у него спрашивать на собеседовании?
Вы либо понимаете что спрашивать, либо не понимаете и даете задачи из задачника для школьников. Мой ответ вас не спасет.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Программистам просто на подобном собеседовании надо сразу же делать вывод, что на этйо фирме работают не профессиональные программисты, а дураки, кичащиеся знанием решения совершенно никчемной задачи!
Мне тяжело представить , чем занимается програмист если не может решить задачу разворота списка. Может термины перепутали ?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Задача на собеседовании - обращение списка.
29.03.2012 15:27, minorlogic написал:
> Мне тяжело представить , чем занимается програмист если не может решить > задачу разворота списка. Может термины перепутали ?
Программирует, а не занимается всякой ерундой. Остались же, наверное,
местные програмерские конторы, где не только списки разворачивать надо
(кстати зачем), а работать, программы писать.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Kernan, Вы писали:
H>>>Раньше ещё была задача с "переворотом строки" — это случайно не про то H>>>же самое? K>>Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
L>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца.
Список и строки это разные вещи.. Чуток разница есть..
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, batu, Вы писали:
K>>>Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
L>>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца. B>Список и строки это разные вещи.. Чуток разница есть..
Уже обсосали со всех сторон. Не надоело?
P.S. Со связанным списком ненамного сложнее.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
M>Мне тяжело представить , чем занимается програмист если не может решить задачу разворота 1
списка. Может термины перепутали ?
Если вам тяжело представить, то может все же не в программисте дело?
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, batu, Вы писали:
K>>>>Я так понимаю это базовый принцип построения алгоритмов используя рекурсию.
L>>>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца. B>>Список и строки это разные вещи.. Чуток разница есть..
L>Уже обсосали со всех сторон. Не надоело? L>P.S. Со связанным списком ненамного сложнее.
Я больше не буду Но разница все-таки есть..Молчу, молчу..
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, batu, Вы писали:
L>>Уже обсосали со всех сторон. Не надоело? L>>P.S. Со связанным списком ненамного сложнее. B>Я больше не буду Но разница все-таки есть..Молчу, молчу..
На разных платформах принята разная терминология. И это, кстати, тоже обсуждалось.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, batu, Вы писали:
L>>>Уже обсосали со всех сторон. Не надоело? L>>>P.S. Со связанным списком ненамного сложнее. B>>Я больше не буду Но разница все-таки есть..Молчу, молчу..
L>На разных платформах принята разная терминология. И это, кстати, тоже обсуждалось.
Значит задача поставлена не корректно! Вот в чем проблема собеседования
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Pyromancer, Вы писали:
M>>>>34 ? BFE>>>Я полагаю, что да. В 34-ом. BFE>>>Жаль, что Паблик Морозов так и не ответил.
P>>Это был бы правильный ответ, если бы он родился и правда в 1 году после. BFE> Как вы пришли к такому выводу?
P>>Только он взял и родился где-то между 2 и 7 до, в основном считается что в 4 году до рх и казнен был между 30 и 36. BFE> А вам не кажется, что этот ваш ответ похож на большинство ответов про обращение списка? Вы же не смогли ответить на элементарный вопрос...
Если задача сформулирована как "a оберните мне список" без определений что такое в этом случае список и что такое обернуть то да, наверняка. Возможно что вопрос как раз на это и если без уточнения условий хоть кандидат стал кидать понты что это не нужно, хоть начал писать код, все одно завалил вопрос.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, batu, Вы писали:
L>>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца. B>Список и строки это разные вещи.. Чуток разница есть..
открываем Кнута или Дейкстру или Вирта, лень лезть уточнять, и обнаруживаем что список — это суть массив в котором на i месте лежит индекс следующего элемента, а на i+1 — ссылка на данные. Ну а строка всегда была массивом в котором по 0 индексу хранится длинна
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, batu, Вы писали:
L>>>Какая рекурсия?! Тупо цикл от начала до середины с перествалением i-того от начала элемента с i-м с конца. B>>Список и строки это разные вещи.. Чуток разница есть..
J>открываем Кнута или Дейкстру или Вирта, лень лезть уточнять, и обнаруживаем что список — это суть массив в котором на i месте лежит индекс следующего элемента, а на i+1 — ссылка на данные. Ну а строка всегда была массивом в котором по 0 индексу хранится длинна
Я не вижу что в этой теме обсуждать.. Уже не рад что влез.. Сори.
Re[7]: Задача на собеседовании - обращение списка.
29.03.2012 16:27, Pyromancer написал:
> Если задача сформулирована как "a оберните мне список" без определений > что такое в этом случае список и что такое обернуть то да, наверняка. > Возможно что вопрос как раз на это и если без уточнения условий хоть > кандидат стал кидать понты что это не нужно, хоть начал писать код, все > одно завалил вопрос.
Тут что одни школьники и студенты собрались? Собеседования ты как
экзамен воспринимаешь?
Описанный тобой выше вариант наводит на мысль о том, что на конторе
отсутсвуют постановки задач. Нада тебе такая контора или нет — сам решай.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>29.03.2012 16:42, minorlogic написал:
>> >> Что вы этим термином называете ? V>Программировать — писать программы на языках программирования.
Постарайтесь более полно передать ваше определение.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, Сыроежка, Вы писали:
С>>Все подобные задачи выдумывают люди, которые на самом деле не являются программистами, или по крайней мере очень слабые программисты, и наивно думают, что программисты решают какие-то заковыристные задачи на работе. С>>Я вас разочарую, но в 99% работа программистов не связана с решение каких-либо логичесаких головоломок. Работа программистов вообще не в этом состоит! Работа программистов состоит в написании грамотного, легко читаемого кода!
SVZ>Вот что меня удивляет, так это то, что сейчас принято свое невежество преподносить как удаль. Взгляните на любое обсуждение собеседований, обязательно найдется дюжина-другая сообщений в этом стиле. SVZ>"Я, мол, необразованный, я таких задач не решаю и не умею решать, я этого ни разу не стесняюсь и даже книжку в руки не возьму, я — герой".
SVZ>Да, есть задачи, где достаточно мышкой контролы таскать на форму. И это работа программиста. SVZ>В моем проекте такому программисту работы не найдется (у П.Морозова — тоже). Но найдется в другом проекте. Ничего страшного нет. SVZ>Все найдут себе и работу, и работников по вкусу
Это как раз говорит о важем личном невежестве и не понимание работы программиста! Самое страшное — это когда проект возглавляют дураки, которые сами по жизни на самом деле никогда не были профессиональными прогораммистами, и именно поэтому полезли менеджерами проекта!
Если бы вы были хоть чуточку умнее, то понимали, что в проекте существует коллективный разум! Один может в данный момент решить одну задачу, а другой в другой момент — другую задачу. У одного человека голова может быть забита одним, а у другого — другим. И квалификация программиста не зависит от того, ответил ли он в данную минуту на ваш идиотский вопрос!
А если бы вы были еще умнее, то понимали, что программистов ставит в ступор такие задачии, так как они не видят в них никакого смысла! Если эта задача распространенная, тоу любого программиста возникает естественный вопрос, а почему тогда в библиотеки еще нет нужного интерфейса или алгоритма?! А если на практике эта задача не распространенная, то заяем тратить на нее время?
Но вы же не в состоянии это поянть! Как говорится, дуракам закон не писан! Они как с писаной торбой будут ко всем приставать со своей никчемной задачей, не понимая, что выглядят просто идиотами!
Я уже заметил закон жизни: чем человек менее профессионален, менее квалифицирован, то он обязательно лезет на верх по административной лестнице! Потому что для этого как раз нужны совершенно другие качества, а не профессионализм и квалификация!
Здравствуйте, msk78, Вы писали:
M>Здравствуйте, Vzhyk, Вы писали:
V>>24.02.2012 15:38, Паблик Морозов пишет:
>>> кандидатов на публичных сайтах вакансий не ищем. V>>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и V>>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует V>>слать резюме. M>Могу дать ответ на этот вопрос M>Компания BrightConsult.
Оо.. имел я как-то дело с некоторыми людьми из числа тех. руководителей сией конторы. Под их началом никогда не стал бы работать
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Это как раз говорит о важем личном невежестве и не понимание работы программиста! Самое страшное — это когда проект возглавляют дураки, которые сами по жизни на самом деле никогда не были профессиональными прогораммистами, и именно поэтому полезли менеджерами проекта! С>Если бы вы были хоть чуточку умнее, то понимали, что в проекте существует коллективный разум! Один может в данный момент решить одну задачу, а другой в другой момент — другую задачу. У одного человека голова может быть забита одним, а у другого — другим. И квалификация программиста не зависит от того, ответил ли он в данную минуту на ваш идиотский вопрос! С>А если бы вы были еще умнее, то понимали, что программистов ставит в ступор такие задачии, так как они не видят в них никакого смысла! Если эта задача распространенная, тоу любого программиста возникает естественный вопрос, а почему тогда в библиотеки еще нет нужного интерфейса или алгоритма?! А если на практике эта задача не распространенная, то заяем тратить на нее время? С>Но вы же не в состоянии это поянть! Как говорится, дуракам закон не писан! Они как с писаной торбой будут ко всем приставать со своей никчемной задачей, не понимая, что выглядят просто идиотами! С>Я уже заметил закон жизни: чем человек менее профессионален, менее квалифицирован, то он обязательно лезет на верх по административной лестнице! Потому что для этого как раз нужны совершенно другие качества, а не профессионализм и квалификация!
Спасибо, за новый фильтр неадекватов.
Предлагаем кандидату обернуть список и смотрим на реакцию. Если глаза налились кровью, кандидат сжал кулаки и убежал хлопнув дверью, либо высказал похожую тираду — значит фильтр сработал.
Если серьезно — бывают ситуации, когда поиск библиотек не дал результатов либо существующие библиотеки не подходят по каким-либо причинам, либо стоят дорого, производительность не устраивает, либо архитектурно нецелесообразно подключать мощную библиотеку для решения небольшой но сложной задачи, и еще сотня причин, по которым придется решать "ничтожную" с вашей точки зрения задачу.
Если кандидат от такой задачи впадает в ступор — это больше его психологические проблемы.
С другой стороны, чтобы это не выглядело как экзамен, собеседующий мог бы прояснить контекст задачи: например "оборот списка используется в таком то алгоритме шифрования, давайте подумаем как можно его оптимально реализовать".
Если вы параноик — это еще не значит, что за вами никто не следит
Re[5]: Задача на собеседовании - обращение списка.
30.03.2012 9:52, c3p0 написал:
> С другой стороны, чтобы это не выглядело как экзамен, собеседующий мог > бы прояснить контекст задачи: например "оборот списка используется в > таком то алгоритме шифрования, давайте подумаем как можно его оптимально > реализовать".
И зачем там это надо?
Объясните хоть кто-то, зачем нужна задача обращения списка? Почему
нельзя пройти список с конца в начало? Или местное население уже дошло
до той стадии, когда знает только одно направление обхода?
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>И зачем там это надо? V>Объясните хоть кто-то, зачем нужна задача обращения списка? Почему V>нельзя пройти список с конца в начало? Или местное население уже дошло V>до той стадии, когда знает только одно направление обхода?
Вот зануда.
Вот тебе реальный пример использования этой задачи:
Графический редактор (САПР печатных плат).
Вершины полилинии хранятся в односвязном списке.
Односвязный список выбран по причине экономии памяти. Реализован односвязный список на базе массива (в качестве ссылки на следующий элемент списка используется индекс в массиве). Индекс вершины — ключевой атрибут, поэтому стандартный std::list, указатели и итераторы не годятся. Хранить вершины в массиве тоже не годится, т.к. при изменении числа вершин индексы поплывут.
При совпадении концов двух полилиний их нужно объединить в одну. Если соединяется "голова" с "головой" или "хвост" с "хвостом", то одну из полилиний нужно развернуть.
И вот здесь используется наш любимый разворот односвязного списка.
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Может тогда Мастер расскажет, что позволено у него спрашивать на собеседовании?
Оххх. Никакого конструктива. Отправлю уж на общественный суд некоторый списочек, которого придерживаюсь.
Базовая:
1) О себе
2) Почему выбрали Java, какие сильные и слабые стороны ее, чего не хватает, какие еще языки знаете.
3) Как сами себя оцениваете, какой уровень, сколько опыта.
4) Какие наиболее интересные задачи доводилось решать, чем можете гордиться.
5) Какие навыки чаще всего были востребованы, кто такой хороший программист, что он должен знать.
Общее:
1) Какие парадигмы программирования поддерживает Java. Какой парадигме сами отдаете предпочтения
2) Можно ли писать в ООП стиле на Си?
3) Проектирование. SOLID, AOP. Декомпозиция, абстракция. Компромиссы, когда придерживаетесь рекомендуемых практик, когда нет.
4) Что такое мемоизация. Как будете делать на Java
5) Ajax — что такое. На уровне http
6) ESB, SOA — что такое.
7) Чем сервлет контейнер отличается от сервера приложений
Java
1) Исключения, бест практики, чекед и анчекед. Throwable — доводилось ли ловить, как отнесетесь, если в проекте будут ловить
2) Для чего переопределять хешкоды, каких практик придерживаетесь.
3) Приложение зависло, что будете делать, как будете определять. Дедлок, сталкивались ли на практике.
Фреймворки и БД
1) Стратегии наследования в хибернейт
2) Уровни изоляции транзакций
3) Базы данных, ОО базы. Нормализация, как относитесь, когда хорошо, когда плохо. Какие механизмы обновления структуры базы использовали.
4) Как будете решать проблемы с конкурирующим доступом к одним и тем же данным
5) Управление транзакциями, аспекты, как использовали, как они работают. Вложенные транзакции.
6) События в спринге — как относитесь, для чего применяются, применяли ли.
7) Как работают Lazy связи в hibernate. Разделение на слои типичного веб приложения, как особенности хибернейта влияют на архитектуру.
Опыт
1) Рефакторинг — как будете делать, какие бест практики выработали.
2) Тестирование — какие подходы применяли, какой по вашему должен быть процент покрытия тестами, фреймворки.
3) Какие паттерны применяли, когда паттерны хорошо, когда плохо.
4) Что такое хороший код, что плохой. Бест практики. Что видели самое страшное, что самое лучшее. Что делать, когда сроки жесткие и требуется все очень быстро.
5) Оптимизация по скорости. Что то тормозит — что будете делать. Кеши.
6) Что такое high load. Производительность — какие методы повышения производительности можете назвать.
Остальное:
Какие ресурсы регулярно посещаете. Какую книгу по специальности прочитали последний раз
Ну и в заключении — попросить высказать мнение о каком то куске кода, сказать предложения о его улучшении.
Правильных ответов на вопросы нет, главное не пороть откровенной чуши. Вопросы не экзаменационные — цель просто поговорить и поделиться опытом. Опыт может не совпадать, вопросы видоизменяются в этом случае, но суть не сильно меняется. Очень бы хотелось услышать какие новые для меня нестандартные подходы, но увы, умеющих обращать список на порядок больше тех, с кем интересно побеседовать — к сожалению к такому списку вопросов кандидаты совершенно не готовы. Типичный кандидат считает, что нужно кодить не думая, главное это знания языка и различных деталей, язык знает один — остальные от лукавого, уровень знания языка на уровне получения сертификата в лучшем случае. У кого формального опыта побольше — те давно уже не кодят, а типа водят руками и назначают таски между подчиненными-студентами, остаточных знаний чаще всего не густо, а последнюю книгу читали в институте (в лучшем случае читали доки по определенным технологиям). При этом внятно объяснить чем занимались не могут, в основном весь опыт — это багофиксинг системы 10летней давности, решений никаких не принимали и делали только то, что скажет заказчик. В лучшем случае из поводов для гордости, что процессы выстроили.
Re[7]: Задача на собеседовании - обращение списка.
30.03.2012 11:38, Stanislav V. Zudin написал:
> Вот зануда.
Обычный программист. По другому в нашей профессии нельзя. Хотя нонче уже
все можно.
> При совпадении концов двух полилиний их нужно объединить в одну. Если > соединяется "голова" с "головой" или "хвост" с "хвостом", то одну из > полилиний нужно развернуть.
Но если вы их объединяете в одну, зачем одну из них разворачивать.
Обойдите с конца в начало?
Posted via RSDN NNTP Server 2.1 beta
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> При совпадении концов двух полилиний их нужно объединить в одну. Если >> соединяется "голова" с "головой" или "хвост" с "хвостом", то одну из >> полилиний нужно развернуть. V>Но если вы их объединяете в одну, зачем одну из них разворачивать. V>Обойдите с конца в начало?
Я специально отметил, что список _односвязный_, поэтому "с конца в начало" выливается в O(N^2).
Разве что воспользоваться дополнительным массивом, но это оверхед по памяти.
А разворот списка — операция линейная и без дополнительной памяти.
_____________________
С уважением,
Stanislav V. Zudin
Re[6]: Задача на собеседовании - обращение списка.
Толковый список. Я надеялся, что michael_isu напишет что-то подобное.
E>
E>Общее:
E>4) Что такое мемоизация. Как будете делать на Java
E>5) Ajax — что такое. На уровне http
E>6) ESB, SOA — что такое.
E>7) Чем сервлет контейнер отличается от сервера приложений
E>Фреймворки и БД
E>1) Стратегии наследования в хибернейт
E>6) События в спринге — как относитесь, для чего применяются, применяли ли.
E>7) Как работают Lazy связи в hibernate. Разделение на слои типичного веб приложения, как особенности хибернейта влияют на архитектуру.
Однако среди общих вопросов есть и те, которые относятся к специфике твоих проектов. И правильно, а как иначе проверить, сможет кандидат выполнять свою работу или нет?
В проектах, где я участвовал, другая специфика, поэтому и вопросы по частностям немного другие.
E>Ну и в заключении — попросить высказать мнение о каком то куске кода, сказать предложения о его улучшении. E>Правильных ответов на вопросы нет, главное не пороть откровенной чуши. Вопросы не экзаменационные — цель просто поговорить и поделиться опытом. Опыт может не совпадать, вопросы видоизменяются в этом случае, но суть не сильно меняется. Очень бы хотелось услышать какие новые для меня нестандартные подходы, но увы, умеющих обращать список на порядок больше тех, с кем интересно побеседовать — к сожалению к такому списку вопросов кандидаты совершенно не готовы. Типичный кандидат считает, что нужно кодить не думая, главное это знания языка и различных деталей, язык знает один — остальные от лукавого, уровень знания языка на уровне получения сертификата в лучшем случае. У кого формального опыта побольше — те давно уже не кодят, а типа водят руками и назначают таски между подчиненными-студентами, остаточных знаний чаще всего не густо, а последнюю книгу читали в институте (в лучшем случае читали доки по определенным технологиям). При этом внятно объяснить чем занимались не могут, в основном весь опыт — это багофиксинг системы 10летней давности, решений никаких не принимали и делали только то, что скажет заказчик. В лучшем случае из поводов для гордости, что процессы выстроили.
Все верно, у многих богатое резюме, хотя, если судить по ответам, половина наврана. Умеющих, хотя бы на пальцах, рассказать, как перевернуть список — считанные единицы. Можно ли им поручить что-то посложнее? Не уверен, придется потом самому переписывать.
Даже языка, на котором пишут, толком не знают.
Здесь много раз выдвигался тезис, мол, зачем учить, когда все есть в гугле. Видимо, нам попадаются именно такие гуглопользователи — т.е. задачи решали разные, но глубина познаний — никакая. Т.е. не имеют ни малейшего представления, что происходит в их коде, чем чревато использование тех функций, которые они используют. Т.е. не удосужились даже страницу документации дочитать до конца. Гугл поможет, только если знаешь, что тебе надо, но забыл название или сигнатуру.
_____________________
С уважением,
Stanislav V. Zudin
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>30.03.2012 9:52, c3p0 написал:
>> С другой стороны, чтобы это не выглядело как экзамен, собеседующий мог >> бы прояснить контекст задачи: например "оборот списка используется в >> таком то алгоритме шифрования, давайте подумаем как можно его оптимально >> реализовать". V>И зачем там это надо? V>Объясните хоть кто-то, зачем нужна задача обращения списка? Почему V>нельзя пройти список с конца в начало? Или местное население уже дошло V>до той стадии, когда знает только одно направление обхода?
Так в том-то и дело, что это — никчемная задача! То есть совершенно тупая задача, цель которой продемонстрировать, мол, какой интервьюир остроуминый.
естественно у любого программиста возникает вопрос, а зачем выбирали такую организацию данных, чтобы затем станвоиться в позу буквы "зю" и корячиться по совершенно не свойственному для этой организации данных алгоритму.
Весь каждый профессиональный программист, а этот c3p0 к ним никогда не относился и не относится хорошо понимает, что с каждой организацией данных связаны определенные алгоритмы. То есть не существуют сами по себе организации данных от тех алгоритмов, которые для нее предназначены.
Если бы этот c3p0 был хоть чуточку профессиоанльным программистом, и, например, когда-нибудь в жизни занимался проектированием баз аднных, то ззнал бы, что проектирование баз данных начинается с вопросов, какие запросы к этой ббазе данных будут выполняться. Отсюда и исходят при выборе организации базы данных. Если вы выбирраете организацию базы дданных, которая не эффективно выполняет ваши запросы, то это ошибка проектироващика.
Но это не дано понять c3p0. Ему главное — это продемонстрировать перед интервьюиром, какой он — умник/b]. Причем налицо [b]хамское отношение к собеседнику, Он почему-то наивно считает, что може задавать любые вопросы: идиотские или нет. С таким хамьем надо вести себя адекватно. Соглашаться с ним и в ответ говорить: "Хорошо, я решу вашу задачу. А вы решите мою задачу!" И посомтрите, как он себя поведет: хлопнет ли дверью или нет.
Как говорил один киногерой в фильме с участием со Шварцнеггером: "Я люблю умных людей, но не люблю умников."
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, Vzhyk, Вы писали:
V>>И зачем там это надо? V>>Объясните хоть кто-то, зачем нужна задача обращения списка? Почему V>>нельзя пройти список с конца в начало? Или местное население уже дошло V>>до той стадии, когда знает только одно направление обхода?
SVZ>Вот зануда. SVZ>Вот тебе реальный пример использования этой задачи:
SVZ>Графический редактор (САПР печатных плат). SVZ>Вершины полилинии хранятся в односвязном списке.
SVZ>Односвязный список выбран по причине экономии памяти. Реализован односвязный список на базе массива (в качестве ссылки на следующий элемент списка используется индекс в массиве). Индекс вершины — ключевой атрибут, поэтому стандартный std::list, указатели и итераторы не годятся. Хранить вершины в массиве тоже не годится, т.к. при изменении числа вершин индексы поплывут.
SVZ>При совпадении концов двух полилиний их нужно объединить в одну. Если соединяется "голова" с "головой" или "хвост" с "хвостом", то одну из полилиний нужно развернуть. SVZ>И вот здесь используется наш любимый разворот односвязного списка.
Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память! Что может вообще привести к аварийному завершению программы. Вы пишите бред идиота лишь бы любой ценой оправдать свою глупость! Мой вам совет: научитесь сначала программировать!
Здравствуйте, Vzhyk, Вы писали:
V>И зачем там это надо? V>Объясните хоть кто-то, зачем нужна задача обращения списка? Почему V>нельзя пройти список с конца в начало? Или местное население уже дошло V>до той стадии, когда знает только одно направление обхода?
1. Обойти односвязный список с конца в начало, пожалуй, более сложная задача, чем его обращение.
2. Если бы тема называлась "обход списка с конца", то вы видимо задались бы вопросом "почему не обернуть список"? Я угадал?
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память! Что может вообще привести к аварийному завершению программы. Вы пишите бред идиота лишь бы любой ценой оправдать свою глупость! Мой вам совет: научитесь сначала программировать!
Во-первых, Сыроежка, Ваше хамство не делает Вам чести. Вы обвиняете всех в непрофессионализме, однако пока не подтвердили собственную компетентность.
Во-вторых, упомянутая задача решается линейно, без рекурсии и без дополнительной памяти. Так что Вам двойка за незнание основ и нежелание думать.
Я бы Вас на работу не взял
_____________________
С уважением,
Stanislav V. Zudin
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
SVZ>>При совпадении концов двух полилиний их нужно объединить в одну. Если соединяется "голова" с "головой" или "хвост" с "хвостом", то одну из полилиний нужно развернуть. SVZ>>И вот здесь используется наш любимый разворот односвязного списка.
С>Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память!
не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия?
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память! Что может вообще привести к аварийному завершению программы. Вы пишите бред идиота лишь бы любой ценой оправдать свою глупость! Мой вам совет: научитесь сначала программировать!
Я че-то не понимаю. Вот, например, я набросал на коленке.
Здравствуйте, Панда, Вы писали:
П>Здравствуйте, Сыроежка, Вы писали:
С>>Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память! Что может вообще привести к аварийному завершению программы. Вы пишите бред идиота лишь бы любой ценой оправдать свою глупость! Мой вам совет: научитесь сначала программировать!
П>Я че-то не понимаю. Вот, например, я набросал на коленке.
П>
П>Где тут рекурсия, где расход стековой памяти? Один проход по списку и две вспомогательные переменные.
Придется повторить уже написанный мною ранее ответ.
Это все хорошо, только до вас не доходит, что вы не имеете доступа к внутреннему строению контейнера! Все эти ссылки на следующий элемент класса являются закрытыми членами класса контейнера и относятся к его реализации. Если вам не понятно, то возьмите контейнер std::forward_list и попробуйте сделать то, что вы проделали. Поэтому единсчтвенный путь — это делать реверсию значений узлов! А для этого без рекурсивного вызова не обойтись.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, Сыроежка, Вы писали:
С>>Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память! Что может вообще привести к аварийному завершению программы. Вы пишите бред идиота лишь бы любой ценой оправдать свою глупость! Мой вам совет: научитесь сначала программировать!
SVZ>Во-первых, Сыроежка, Ваше хамство не делает Вам чести. Вы обвиняете всех в непрофессионализме, однако пока не подтвердили собственную компетентность. SVZ>Во-вторых, упомянутая задача решается линейно, без рекурсии и без дополнительной памяти. Так что Вам двойка за незнание основ и нежелание думать.
SVZ>Я бы Вас на работу не взял
Это все хорошо, только до вас не доходит, что вы не имеете доступа к внутреннему строению контейнера! Все эти ссылки на следующий элемент класса являются закрытыми членами класса контейнера и относятся к его реализации. Если вам не понятно, то возьмите контейнер std::forward_list и попробуйте сделать то, что вы проделали. Поэтому единсчтвенный путь — это делать реверсию значений узлов! А для этого без рекурсивного вызова не обойтись.
Поэтому вам в ответ, чтобы вы не занимались фантазированием, я предложил бы сделать вашу задачу с использованием конкретного стандартного контейнера С++ std::forward_list. Это же односвязный список, не так ли? И все стало бы на свои места. И сразу же всплыло, что вы изобретаете велосипед, сочиняя свои контейнеры, которые не работают с итераторами, и что вы напрямую обращаетесь к реализации своих контейнеров в клиентском коде, и что вы подменяете стандартную библиотеку, и что вы не тот контейнер выбрали, если вам требуется такая операция, и и.д.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Сыроежка, Вы писали:
SVZ>>>При совпадении концов двух полилиний их нужно объединить в одну. Если соединяется "голова" с "головой" или "хвост" с "хвостом", то одну из полилиний нужно развернуть. SVZ>>>И вот здесь используется наш любимый разворот односвязного списка.
С>>Да не фантазируйте! Какая экономия памяти?! Вы пишите плохой код, а потом корячитесь с ним всю оставшуюся жизнь! Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций, которые отнимают больше памяти, чем вы пытаетесь сэкономить, и причем эта память — стековая память!
L>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия?
Да без проблем! Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию.
Здравствуйте, Сыроежка, Вы писали:
L>>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия?
С>Да без проблем!
Точно? А что с демонстрацией-то? Где она?
С>Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию.
Все понимаю, пятница, вечер, тяжелая неделя... Вот я и проделал 3мя строчками. А почему это нельзя сделать без рекурсии — так и не понял.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
L>>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия?
С>Да без проблем! Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию.
std::forward_list::reverse
Следующая попытка.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Если вам не понятно, то возьмите контейнер std::forward_list и попробуйте сделать то, что вы проделали. Поэтому единсчтвенный путь — это делать реверсию значений узлов! А для этого без рекурсивного вызова не обойтись.
Зачем для реверсии значений узлов нужна рекурсия?
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
С>>Да без проблем! S>Точно? А что с демонстрацией-то? Где она?
С>>Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию. S>Все понимаю, пятница, вечер, тяжелая неделя... Вот я и проделал 3мя строчками. А почему это нельзя сделать без рекурсии — так и не понял.
Забей
У некоторых программистов очень странные правила игры.
Они считают, что использовать можно только стандартные контейнеры, хотя в определенных случаях самописный велосипед может дать массу преимуществ (а иногда велосипед — единственно возможный способ, не все компиляторы одинаково полезны). И будут, как истинные комсомольцы, создавать себе массу проблем, лишь бы не отступить от этого правила.
Они считают, что до С++'11 компиляторов не существовало (как бы мне поюзать std::forward_list в VS2008 ).
И еще они считают, что все алгоритмы за них уже написаны и лежат в библиотеках. Поэтому все, кто пишет что-то свое — лохи и не являются программистами (а кто же тогда пишет библиотеки?).
Тех, кто узнал в этом описании себя, прошу не обижаться тяпница, вечер...
_____________________
С уважением,
Stanislav V. Zudin
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Забей SVZ>У некоторых программистов очень странные правила игры.
Да дело не в правилах игры. Ситуации бывают всякие, иногда оправданы стандартные решения, иногда нужны свои.
Но при таком обилии высокомерного поноса в сторону задачи и тех, кто такие задает на собеседованиях, будет интересно как этот гуру будет разгребать свои заблуждения относительно единственности методов решения через рекурсию.
Задача определенно классная. Как минимум, в качестве теста на тягу кандидата поучить программировать.
Если с фразы "ну что, с чего начнем? Разворот списка или гномики?" у кандидата крышу не сдуло, можно спокойно продолжать на интересующие темы
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций
Чего?
С>Мой вам совет: научитесь сначала программировать!
Брысь, неуч.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Во-первых, Сыроежка, Ваше хамство не делает Вам чести. Вы обвиняете всех в непрофессионализме, однако пока не подтвердили собственную компетентность.
А он тут местный петросян. Не обращайте внимания.
SVZ>Я бы Вас на работу не взял
В этом вы не одиноки.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Это все хорошо, только до вас не доходит, что вы не имеете доступа к внутреннему строению контейнера!
Интересно, а что мешает выбрать для этих целей подходящий контейнер?
С> Все эти ссылки на следующий элемент класса являются закрытыми членами класса контейнера и относятся к его реализации.
Т.е. все контейнеры, которых нет в std не существуют и ересь?
С> Если вам не понятно, то возьмите контейнер std::forward_list и попробуйте сделать то, что вы проделали.
А зачем брать этот контейнер? Он фигово подходит к задаче.
С> Поэтому единсчтвенный путь — это
... начать таки думать своей головой.
С>вы изобретаете велосипед, сочиняя свои контейнеры
Это плохо? Сделать контейнер, идеально подходящий под задачу, тогда как все стандартные не годятся — нормальное решение.
С> которые не работают с итераторами
Чтоб написать контейнер, который работает с итераторами надо совсем чуть чуть.
С> и что вы напрямую обращаетесь к реализации своих контейнеров в клиентском коде
Вызов метода reverse () это напрямую? Раз у нас свой контейнер то и метод разворота легко впихивается в имплементацию.
С> и что вы подменяете стандартную библиотеку
Которая не есть серебряная пуля, а всего то набор инструментов для наиболее часто встречающихся задач.
С> и что вы не тот контейнер выбрали, если вам требуется такая операция
Предлагать std::forward_list — это как раз случай когда контейнер выбран неправильно.
Скажи, вьюношЪ с горящими глазами, ты над реальными проектами работал когда нибудь?
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Они считают, что использовать можно только стандартные контейнеры, хотя в определенных случаях самописный велосипед может дать массу преимуществ
Самое смешное что всё что сейчас находится в библиотеках и фреймворках — это бывшие велосипеды.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Так в том-то и дело, что это — никчемная задача! То есть совершенно тупая задача, цель которой продемонстрировать, мол, какой интервьюир остроуминый.
Ух какой баттхёрт!
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Программирует, а не занимается всякой ерундой. Остались же, наверное, V>местные програмерские конторы, где не только списки разворачивать надо V>(кстати зачем), а работать, программы писать.
Слабый вброс, совсем никакой.
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Трололоша, Вы писали:
Т>Здравствуйте, Сыроежка, Вы писали:
С>>Это все хорошо, только до вас не доходит, что вы не имеете доступа к внутреннему строению контейнера! Т>Интересно, а что мешает выбрать для этих целей подходящий контейнер?
С>> Все эти ссылки на следующий элемент класса являются закрытыми членами класса контейнера и относятся к его реализации. Т>Т.е. все контейнеры, которых нет в std не существуют и ересь?
С>> Если вам не понятно, то возьмите контейнер std::forward_list и попробуйте сделать то, что вы проделали. Т>А зачем брать этот контейнер? Он фигово подходит к задаче.
С>> Поэтому единсчтвенный путь — это Т>... начать таки думать своей головой.
С>>вы изобретаете велосипед, сочиняя свои контейнеры Т>Это плохо? Сделать контейнер, идеально подходящий под задачу, тогда как все стандартные не годятся — нормальное решение.
С>> которые не работают с итераторами Т>Чтоб написать контейнер, который работает с итераторами надо совсем чуть чуть.
С>> и что вы напрямую обращаетесь к реализации своих контейнеров в клиентском коде Т>Вызов метода reverse () это напрямую? Раз у нас свой контейнер то и метод разворота легко впихивается в имплементацию.
С>> и что вы подменяете стандартную библиотеку Т>Которая не есть серебряная пуля, а всего то набор инструментов для наиболее часто встречающихся задач.
С>> и что вы не тот контейнер выбрали, если вам требуется такая операция Т>Предлагать std::forward_list — это как раз случай когда контейнер выбран неправильно.
Т>Скажи, вьюношЪ с горящими глазами, ты над реальными проектами работал когда нибудь?
Вот вы и демонстрируете свою полную безграмотность, как программист! Я вам с самого начала говорил, что надо подбирать правильный контейнер, а не заниматься самодеятельностью! Что же вы сейчас как попка-дурак за мной повторяете слова, которые я сказал с самого начала?!
Вы уже не знаете, как выкрутиться со своей глупой задачей, а потому со своей больной головыц сваливаете на здоровую! Вы пишите: "Т>Т.е. все контейнеры, которых нет в std не существуют и ересь?" Я где-нибудь это заявлял?! Что вы мне свою безгорамотность навязываете? Вопрос не в том, что контейнеры, которых нет в std:: — это ересь. А в том, что если вам надо леать реверсию списка, то изначально следует выбирать тот контейнер, который для этого наиболее подходит! То есть нужно выбирать двухнаправленный список, который вы можете обходить и в прямом нарпавлении и в обратном, потому что итератор у двухнаправленного контейнера является реверсивный!
Так что собеседование с вами показало, что это именно вы — совершенно безграмотный программист! вы даже задачу не можете грамотно софрмулировать. А задача должна была звучать так: написать реализацию односвзяного списка, имеющего в качестве открытого интерфейса функцию-член, выполняющую реверсию контейнера. Между этой формулировкой и вашей формулировкой — две большие разницы! В первом случае программист понимает, что ему надо изобрести велосипед и реализовать односвязный список с данной функциональностью, а при вашей формулировке программист не понимает, зачем выбран контейнер, у которого нет такой операции и нужно через одно место, то есть открытый интерфейс реализовывать эту функцию!
Я вам продемонстрировал как мысли профессиональный программист. Вы продемонстрировали как мысли безграмотный программист, который сломя голову бежит изобретать велосипед, даже не задумываясь о том, что все выглядет нонсенсом! Только и всего!
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Сыроежка, Вы писали:
L>>>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия?
С>>Да без проблем! S>Точно? А что с демонстрацией-то? Где она?
С>>Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию. S>Все понимаю, пятница, вечер, тяжелая неделя... Вот я и проделал 3мя строчками.
Вы меня спросили, почему нужна рекурсия, я вам ответил приведя реальный односвязный список. Если вы можете его реверсировать без рекурсии, как вы это утверждали, то что-то я не вижу вашего решения! Давайте уж быть последовательным. А то вы перескакиваете с одного вопроса на другой.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Сыроежка, Вы писали:
L>>>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия?
С>>Да без проблем! Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию.
L>std::forward_list::reverse
L>Следующая попытка.
Так что вы мне показываете функцию-член класса?! Изначальная задача же состоит в том, чтобы самостоятельно для этого контейнера написать подобную функцию да причем без рекурсивного вызова. Ну и что скажите, умник?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Сыроежка, Вы писали:
С>>Если вам не понятно, то возьмите контейнер std::forward_list и попробуйте сделать то, что вы проделали. Поэтому единсчтвенный путь — это делать реверсию значений узлов! А для этого без рекурсивного вызова не обойтись.
L>Зачем для реверсии значений узлов нужна рекурсия?
Я вам привел контейнер std::forward_list. напишите самостоятельно для него функцию reverse буз рекурентного вызова. Какие проблемы?! Меньше слов, больше дел!
Здравствуйте, Трололоша, Вы писали:
Т>Здравствуйте, Сыроежка, Вы писали:
С>>Вы ддаже не понимаете, что такая задача по инвертированию списка решается с помощью рекурсивного вызова функций Т>Чего?
С>>Мой вам совет: научитесь сначала программировать! Т>Брысь, неуч.
Ну так напишите эту функцию для sttd::forward_list без рекурсивного вызова! Какие проблемы, умник?! С нетерпением жду решения!
Здравствуйте, Сыроежка, Вы писали:
L>>>>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия? С>>>Да без проблем! Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию. L>>std::forward_list::reverse L>>Следующая попытка. С>Так что вы мне показываете функцию-член класса?!
Так вы откройте её реализацию, покажите там рекурсию
Забанен с формулировкой "клинический дисидент".
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
L>>Зачем для реверсии значений узлов нужна рекурсия?
С>Я вам привел контейнер std::forward_list. напишите самостоятельно для него функцию reverse буз рекурентного вызова. Какие проблемы?! Меньше слов, больше дел!
Так уж и быть, показывай свой рекурсивный разворот. Помогу тебе его переписать в вариант без рекурсии, если самому не сдюжить.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Вот вы и демонстрируете свою полную безграмотность, как программист! Я вам с самого начала говорил, что надо подбирать правильный контейнер, а не заниматься самодеятельностью!
Жги ещё!
С>то изначально следует выбирать тот контейнер, который для этого наиболее подходит! То есть нужно выбирать двухнаправленный список, который вы можете обходить и в прямом нарпавлении и в обратном
ОМФГ! Опять бред понёсся.
Зачем двунаправленный список когда однонаправленный реверсится лёгким движением руки?
С>Я вам продемонстрировал как мысли профессиональный программист.
АААААааааахахахаха!
Ещё!! Ещё жги!!!
... << RSDN@Home>>
Да, йа зелёный тролль!
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, b-3, Вы писали:
b-3>Здравствуйте, Сыроежка, Вы писали:
L>>>>>не могли бы вы продемонстрировать, зачем для обращения списка нужна рекурсия? С>>>>Да без проблем! Вместо того, чтобы фантазировать, возьмите стандартный контейнер std::forward_list в С++ ( это же односвязный список, не так ли? ) и проделайте эту операцию. L>>>std::forward_list::reverse L>>>Следующая попытка. С>>Так что вы мне показываете функцию-член класса?!
b-3>Так вы откройте её реализацию, покажите там рекурсию
Все, спекся, умник! До тебя даже не доходят простые вещи, о которых я говорил с самого начала. Первое, если нужна реверсия списка, то надо выбирать соответствующий контейнер, а не изобретать велосипед. Второе, для заданнного контейнера, являющегося односвязным списком, писать реверсию контейнера через его интерфейс — не эффективно. А потому изначально задача никчемная и бессмылсенная. Потому что профессиональный программист прежде, чем изобретать велосипед, смотрит,а что уже имеется аналогичного, переносимого и проверенного, начиная со стандартной библиотеки. И только не квалифиуированный программист бросится сходу изобретать велосипед, так как его знания крайне ограничены, а потому он все, начиная с простого контейнера, делает рукопашным программированием.
Поэтому и ставит это зданаие серьезных программистов в тупик, потому что они совершенно не понимают, а зачем это делать?! Ради удовлетворения чувства самолюбования очередного интервьюира?!
Здравствуйте, Сыроежка, Вы писали:
С>Здравствуйте, samius, Вы писали:
S>>Все понимаю, пятница, вечер, тяжелая неделя... Вот я и проделал 3мя строчками.
С>Вы меня спросили, почему нужна рекурсия, я вам ответил приведя реальный односвязный список.
Вместо ответа вы скомандовали взять forward_list и проделать эту операцию. Ответом на вопрос это не является и даже поводом к размышлениям, приводящим к ответу на вопрос — тоже.
С>Если вы можете его реверсировать без рекурсии, как вы это утверждали, то что-то я не вижу вашего решения!
А разве вы просили предоставить решение? Не, не было такого. А вот вас просили неоднократно предоставить демонстрацию. Ее так и не последовало.
C>Давайте уж быть последовательным. А то вы перескакиваете с одного вопроса на другой.
Это я-то не последователен? Операцию над forward_list я проделал, а демонстрацию не получил...
Я никуда не скакал. Все еще в ожидании демонстрации необходимости рекурсии
Re[9]: Задача на собеседовании - обращение списка.
30.03.2012 13:43, Stanislav V. Zudin написал:
> Я специально отметил, что список _односвязный_, поэтому "с конца в > начало" выливается в O(N^2). > Разве что воспользоваться дополнительным массивом, но это оверхед по памяти. > А разворот списка — операция линейная и без дополнительной памяти.
Ну и еще один вопрос, а зачем вы такой список делали?
Т.е. фактически ситуация — сначала велосипед с квадратными колесами, а
потом успешная борьба по округлению колес.
Я ни разу в жизни не сталкивался с подобными проблемами (может потому,
что думаю перед тем, как код писать)
Posted via RSDN NNTP Server 2.1 beta
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Односвязный список выбран по причине экономии памяти. Реализован односвязный список на базе массива (в качестве ссылки на следующий элемент списка используется индекс в массиве).
А почему нельзя использовать массив построенный на дереве? Например красно-чёрное дерево. Или bi-tree ? Вы в самом деле экономите всё до последнего байта?
SVZ>Индекс вершины — ключевой атрибут, поэтому стандартный std::list, указатели и итераторы не годятся. Хранить вершины в массиве тоже не годится, т.к. при изменении числа вершин индексы поплывут.
а std::map<Индекс вершины, вершина> чем не угодил?
Кстати, расскажите, как вы ищите вершину по её индексу? У меня есть подозрение, что вы, таки, решаете эту задачу не на односвязном списке.
И каждый день — без права на ошибку...
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>30.03.2012 13:43, Stanislav V. Zudin написал:
Если не возражаешь, начну с конца
V>Я ни разу в жизни не сталкивался с подобными проблемами (может потому, V>что думаю перед тем, как код писать)
Полностью одобряю твою позицию. Более того, сам поступаю также.
Но специфика проектов у нас с тобой разная. Поэтому и подходы используются разные. Даже в одном проекте все будет зависеть от решаемых задач. Где-то мой метод подойдет, где-то — нет.
>> Я специально отметил, что список _односвязный_, поэтому "с конца в >> начало" выливается в O(N^2). >> Разве что воспользоваться дополнительным массивом, но это оверхед по памяти. >> А разворот списка — операция линейная и без дополнительной памяти. V>Ну и еще один вопрос, а зачем вы такой список делали? V>Т.е. фактически ситуация — сначала велосипед с квадратными колесами, а V>потом успешная борьба по округлению колес.
Чтобы лучше понять такие структуры данных надо познакомиться с внутренним устройством СУБД. Сейчас достаточно много литературы (тот же Д.Ульман) по внутренней начинке таблиц, индексов и проч.
Для многих алгоритмов, применяемых в программе, стандартные контейнеры, предлагаемые языком, не очень подходят. Поэтому использовались свои. Затачивались они на те данные, которые в них будут храниться.
К слову, разворот списка — это не самоцель, это просто маленький пункт, который легко решается на имеющихся структурах данных.
Дальше, почему список именно такой.
Используя индексы, вместо указателей, очень легко реализовывать отношение между множествами. Особенно это полезно для временных связей, которые нужны только на короткий промежуток времени.
Например, если мне потребуется построить связь от вершины полилинии к самой полилинии при решении какой-то задачи, мне достаточно создать массив, размер которого будет совпадать с массивом, в котором лежат вершины. Для каждой вершины положить в этот массив индекс ее полилинии.
Один раз строим отношение, а потом получаем время доступа О(1). Когда задача решена — убиваем временный массив и все. Ничего лишнего.
Если решать подобную задачу на привычных большинству контейнерах, то придется
— либо постоянно хранить указатель/итератор своего родителя, что избыточно для большинства случаев (а еще нужно помнить, что у некоторых контейнеров указатели могут портиться при добавлении/удалении элементов),
— либо бегать по всем полилиниям и искать, какой из них принадлежит вершина, что будет долго, а поэтому неприемлемо.
— либо строить хеш. Размер хеша будет больше простого массива, а с учетом вычисления значения хеша и коллизий, среднее время доступа будет чуточку хуже, чем у простого массива. Иногда это может иметь значение.
Наконец, никто не учитывает накладные расходы в менеджере памяти на хранение элементов списка. Если элементы списка маленькие, то оверхед может быть значительным (по сравнению с полезными данными). Собственный аллокатор и менеджер памяти может помочь, а может и нет. А тут получаем еще и оптимизацию по расходу памяти — все мелкие элементы лежат в сплошном блоке памяти, из накладных расходов — только индекс следующего элемента.
_____________________
С уважением,
Stanislav V. Zudin
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, B0FEE664, Вы писали:
BFE>А почему нельзя использовать массив построенный на дереве? Например красно-чёрное дерево. Или bi-tree ? Вы в самом деле экономите всё до последнего байта?
Ну, наверное потому, что хранить полилинию в виде R-B дерева — не самое естественное решение. По своей сути полилиния — упорядоченное множество вершин, поэтому список для этого очень хорошо подошел.
SVZ>>Индекс вершины — ключевой атрибут, поэтому стандартный std::list, указатели и итераторы не годятся. Хранить вершины в массиве тоже не годится, т.к. при изменении числа вершин индексы поплывут.
BFE>а std::map<Индекс вершины, вершина> чем не угодил?
Например тем, что O(1) лучше O(log N)
BFE>Кстати, расскажите, как вы ищите вершину по её индексу? У меня есть подозрение, что вы, таки, решаете эту задачу не на односвязном списке.
Кое-что про использование структуры я написал здесь
Здравствуйте, Сыроежка, Вы писали:
С>Вы уже не знаете, как выкрутиться со своей глупой задачей, а потому со своей больной головыц сваливаете на здоровую! Вы пишите: "Т>Т.е. все контейнеры, которых нет в std не существуют и ересь?" Я где-нибудь это заявлял?! Что вы мне свою безгорамотность навязываете? Вопрос не в том, что контейнеры, которых нет в std:: — это ересь. А в том, что если вам надо леать реверсию списка, то изначально следует выбирать тот контейнер, который для этого наиболее подходит! То есть нужно выбирать двухнаправленный список, который вы можете обходить и в прямом нарпавлении и в обратном, потому что итератор у двухнаправленного контейнера является реверсивный!
Объясните пожалуйста, какой смысл выбирать двусвязный список, если, например, требуются immutable структуры данных и список разворачивать надо очень редко (а чаще надо делать, например, append)? И разворачивать его надо копированием, естественно. Такая задача в моей практике очень часто вылезает.
Другой часто встречающийся вариант — односвязный список не простой, а, например, ленивый. И развернуть его надо только один раз, так что не жалко, а вот накладных расходов на реализацию двусвязного списка наоборот очень даже жалко. Тоже часто встречается в практике.
С>Так что собеседование с вами показало, что это именно вы — совершенно безграмотный программист! вы даже задачу не можете грамотно софрмулировать.
Обычно, когда задают подобную задачу (в каком либо google или microsoft), то уточняют, что надо реализовать на чистом ANSI C и определить структуру списка самостоятельно. При такой формулировке неоднозначностей восприятия быть не может. И задача действительно хорошая, правильная.
Re[11]: Задача на собеседовании - обращение списка.
02.04.2012 17:10, Stanislav V. Zudin написал:
> Дальше, почему список именно такой. > Используя индексы, вместо указателей, очень легко реализовывать > отношение между множествами. Особенно это полезно для временных связей, > которые нужны только на короткий промежуток времени. > > Например, если мне потребуется построить связь от вершины полилинии к > самой полилинии при решении какой-то задачи, мне достаточно создать > массив, размер которого будет совпадать с массивом, в котором лежат > вершины. Для каждой вершины положить в этот массив индекс ее полилинии. > Один раз строим отношение, а потом получаем время доступа О(1). Когда > задача решена — убиваем временный массив и все. Ничего лишнего. > > Если решать подобную задачу на привычных большинству контейнерах, то > придется > > — либо постоянно хранить указатель/итератор своего родителя, что > избыточно для большинства случаев (а еще нужно помнить, что у > некоторых контейнеров указатели могут портиться при > добавлении/удалении элементов), > — либо бегать по всем полилиниям и искать, какой из них принадлежит > вершина, что будет долго, а поэтому неприемлемо. > — либо строить хеш. Размер хеша будет больше простого массива, а с > учетом вычисления значения хеша и коллизий, среднее время доступа > будет чуточку хуже, чем у простого массива. Иногда это может иметь > значение. > > > Наконец, никто не учитывает накладные расходы в менеджере памяти на > хранение элементов списка. Если элементы списка маленькие, то оверхед > может быть значительным (по сравнению с полезными данными). Собственный > аллокатор и менеджер памяти может помочь, а может и нет. А тут получаем > еще и оптимизацию по расходу памяти — все мелкие элементы лежат в > сплошном блоке памяти, из накладных расходов — только индекс следующего > элемента.
Вот видишь сколько всего и какая незначительная часть — разворот списка.
Так не выгоднее-ли на собеседовании описать подобную задачу соискателю и
попросить его предложить решения, как он видит. Когда он будет
предлагать, тебе нужно уточнять различные моменты, в том числе по хэшам,
массивам, спискам и т.д.
В результате такой беседы будет видно, как человек думает, что знает и
умеет.
Положить перед ним ручку и бумагу, пусть на бумаге поясняет свои мысли,
делает наброски кода.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Все подобные задачи выдумывают люди, которые на самом деле не являются программистами, или по крайней мере очень слабые программисты, и наивно думают, что программисты решают какие-то заковыристные задачи на работе.
Я видел эту задачу в каком-то учебнике по программированию, написанным программистом.
С>Я вас разочарую, но в 99% работа программистов не связана с решение каких-либо логичесаких головоломок. Работа программистов вообще не в этом состоит! Работа программистов состоит в написании грамотного, легко читаемого кода!
Полностью согласен, но если человек не в состоянии решить простую логическую задачку (т.е. просто туповат и не умеет программировать), о каком грамотном красивом коде можно говорить?
С>Поэтому напрашивается вопрос, что вы сами как раз очень слабый программист, если этого не понимаете!
Это вы уже за меня придумали, что я это не понимаю.
С>Меня вообще смешат такие интервьюиры, которые сами решили какую-то задачку и наивно считают, что дрругие обязаны знать решение этой задачии.
Не знать решение, а уметь решать подобные задачи. Я вообще не требую знания каких-то задач и алгоритмов (их десятки тысяч, наверное, все знать невозможно), но когда "профессональный программист" на проверку оказывается глупее девятиклассника, это уже слишком.
С>Самое смешное, что интернет завален решением этой задачи
Из этого следует, что если человек её не знает, он, скорее всего, не умеет пользоваться интернетом. Программист, не пользующийся интренетом, вызывает некоторые подозрения, как минимум.
С>Программистам просто на подобном собеседовании надо сразу же делать вывод, что на этйо фирме работают не профессиональные программисты, а дураки, кичащиеся знанием решения совершенно никчемной задачи!
А 90% людей, называющих себя профессиональными программистами и так ими не являются, это ни для кого не секрет. Простой вопрос для самопроверки — вы программируете на Хаскелле (ML, Агде, Эпиграмме)? Если нет, то у меня для вас плохие новости.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Программировать — писать программы на языках программирования.
Задача — написать программу для разворота списка на <ваш_любимый_язык>. Кандидат этого сделать не в состоянии. Вывод — не может программировать. Вывод — "списибо, мы вам перезвоним." Не?
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>А 90% людей, называющих себя профессиональными программистами и так ими не являются, это ни для кого не секрет. Простой вопрос для самопроверки — вы программируете на Хаскелле (ML, Агде, Эпиграмме)? Если нет, то у меня для вас плохие новости.
Хммм... т.е. профессиональные программисты — это те, кто пишет программы на одном из вышеперечисленных языков? Забавное утверждение
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, Codechanger, Вы писали:
C>Хммм... т.е. профессиональные программисты — это те, кто пишет программы на одном из вышеперечисленных языков? Забавное утверждение
Нет. Знание одного из этих языков не говорит о том, что человек профессиональный программист. А вот незнание (вернее незнание областей cs и дизайна с ними связанных, языки — это просто детекторы, как лакмусовая бумажка) однозначно указывает на быдлокодера.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, Codechanger, Вы писали:
C>>Хммм... т.е. профессиональные программисты — это те, кто пишет программы на одном из вышеперечисленных языков? Забавное утверждение
ПМ>Нет. Знание одного из этих языков не говорит о том, что человек профессиональный программист. А вот незнание (вернее незнание областей cs и дизайна с ними связанных, языки — это просто детекторы, как лакмусовая бумажка) однозначно указывает на быдлокодера.
Знаете, Паблик, в общении с вами мне вспоминается один старый анекдот:
-чем отличается выпускник вуза от выпускника техникума?
-выпускник вуза знает, как устроен телевизор, но не может его починить, а выпускник техникума не знает, как работает телевизор, но может его починить.
Вообще, делить программистов по стеку технологий на профессионалов и непрофессионалов несколько, гм, непрофессионально. Человек может сколь угодно круто знать, допустим, криптографические алгоритмы, но при этом писать код, абсолютно негодный для продакшна. Или, например, применять везде, где только можно, паттерны, но профессионалом он от этого не станет. Далее. Обширные знания cs и прочей rocket science ничто без практики их применения. Посему предлагаю вам подкрепить ваши знания практическим доказательством их применения и все-таки предоставить код, который вы пишете не для себя, а участвуя в каком-либо более-менее крупном проекте(будь то система автоматизации чего-либо, коробочный продукт, неважно, главное, чтобы проект был командным и имел сроки).
Засим прощаюсь.
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, Codechanger, Вы писали:
C>>Знаете, Паблик, в общении с вами мне вспоминается один старый анекдот: J>...
J>вы до сих пор обращаете внимание на писанину Паблика? Тогда он придет к вам и чего-нибудь напишет
Здравствуйте, Codechanger, Вы писали:
C>Знаете, Паблик, в общении с вами мне вспоминается один старый анекдот:
C>-чем отличается выпускник вуза от выпускника техникума? C>-выпускник вуза знает, как устроен телевизор, но не может его починить, а выпускник техникума не знает, как работает телевизор, но может его починить.
Когда кончаются факты, начинаются аналогии
C> Вообще, делить программистов по стеку технологий на профессионалов и непрофессионалов несколько, гм, непрофессионально.
Я же говорю, что стек технологий — это всего лишь индикатор. Примерно как задача разворота списка. Понятное дело, вероятность того, что решение реальной задачи потребует реализовать этот алгоритм, ничтожна. Но если человек, называющий себя программистом, не в состоянии её решить, это очень дурной показатель.
C> Человек может сколь угодно круто знать, допустим, криптографические алгоритмы, но при этом писать код, абсолютно негодный для продакшна.
Конечно. Но если человек чего-то не знает, то и применить он этого не сможет. Поэтому в любом случае лучше брать того, кто знает, чем того, кто не знает.
C>Засим прощаюсь.
Чао-какао!
Re[2]: Задача на собеседовании - обращение списка.
L>>>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
Ф>>а в моём универе вычмат начался на третьем курсе. Ф>>сразу после матана
L>Вы школе учиться надо было, а не пивасик с приятелями квасить.
Численное интегрирование в школе?
У меня не было.
Или вы имеете в виду S x^2 dx аналитически?
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
C>> Человек может сколь угодно круто знать, допустим, криптографические алгоритмы, но при этом писать код, абсолютно негодный для продакшна.
ПМ>Конечно. Но если человек чего-то не знает, то и применить он этого не сможет. Поэтому в любом случае лучше брать того, кто знает, чем того, кто не знает.
Из моего опыта, незнание "чего-то" не приводит к серьезным проблемам при разработке. Часто разбираюсь на месте . Хотя знать сразу, конечно, приятнее.
Полезнее в продакшене знать сразу выч. сложности этих алгоритмов, чтоб прикинуть что лучше использовать хотя это само с опытом запоминается.
+ многие вещи которые раньше изучались, забываются при неиспользовании, но вспоминаются при беглом прочтении статьи при необходимости
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Michaels1, Вы писали:
M>Из моего опыта, незнание "чего-то" не приводит к серьезным проблемам при разработке. Часто разбираюсь на месте .
Это применимо только к какой-нибудь фигне, вроде знания API основных библиотек, или пары костылей особенностей джавы/C++. Если отсутсвуют целые блоки фундаментальных знаний, "на месте" обычно человек не разбирается, а лепит говнокод и думает, что так и надо.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, gandjustas, Вы писали:
G>>Ну напиши работающий код, который string в C# разворачивает.
KV>In-place, что-ли?
KV>https://gist.github.com/kochetkov/4721637
KV>Ты бы еще написал, что в CLR выполняющиеся сборки в рантайме не пропатчишь
Контекст как раз заключался в том что подобные задачи на общие навыки программирования проверяют, а знание конкретных особенностей.
Что ты и продемонстрировал своим кодом.
Здравствуйте, sumson, Вы писали:
S>в завершение озвучьте пожалуйста название конторы где вы собеседуете или примерный район. S>чтобы для экономии времени не идти туда на собеседование.
У меня это IT Dominanta срашивала. Я им развернул список 2 способами, но они всё-равно меня нагло отшили. Пришлось устраиваться напрямую в ту контору, куда они предполагали меня продать.
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Я по своей работе сталкиваюсь в частности с программистами в других компаниях, нередко вижу людей на одинаковых позициях, но совершенно разных по квалификации, причем в пределах одной компании.
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг?
Иногда этого бывает достаточно чтобы год-два получать зарплату в некоторых конторах Лично я бы не брал и на junior developer, но зависит от конторы.
ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
Дать несколько задачек. Я в свое время давал три задания, одно — уровня переворота списка, другие — на простейший дизайн классов. Если все плохо, HR найдут как попрощаться — это их работа.
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Опять же т.з. Уточнения будут при любом т.з.: за примером далеко ходить не надо — в сосденей ветке выяснилось, что задачу "выбрать N элементов из массива случайным образом" люди понимают поразному. Когда речь идёт о тестовом задании, возможности уточнять задание как правило нет. И еще эта схема не работает, когда отдел HR сам ищет сотрудников. Звонок от HR и фраза: "мы посмотрели ваше резюме, оно нам понравилось, напишите-ка нам тестовое задание" — немного странно будет звучать.
Ну у нас так делают, вроде бы ничего. Странно не звучит. Более того, мы просто отправляем по емайлу тестовое задание, которое расчитано на 2-3 часа.
Кандидат когда хочет, тогда и присылает его обратно. Если не хочет, то не присылает совсем.
А>>Было тут у кого-то задание: написать веб сервер. Ниче так заданьице, да? ПМ>И лично мне совершенно не понятно, что плохого в этом задании? А каким должно быть нормальное? Чем написание веб-сервера хуже написания какой-нибудь записной книжки на джаве, или еще что-нибудь в этом роде?
Все зависит от того, что этот веб-сервер должен уметь. Если он только GET запросы поддерживать должен, то это одно. А если еще POST, сессии, а может еще и сразу поддержку для php встроить или перла и т.д.
Ну и в любом случае, если к вам приходит кандидат, который должен будет, скажем, перерворачивать списки, ему давать веб-сервер в качестве тестового задания на мой взгляд перебор.
ПМ>Ну да, согласен. Было бы интересно узнать хорошие методики. Таки тестовые задания? И как тогда осуществлять активный поиск с использованием тестовых заданий?
Перед отправкой тестового задания, мы еще отправляем анкету, которую кандидат должен заполнить и прислать. Это сразу отсеивает лентяев.
class Program
{
static void Main(string[] args)
{
var list = new List<Int32> { 1, 2, 3 };
list.Reverse();
var str = "string";
var rstr = new String(str.Reverse().ToArray());
}
}
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Обвинение в тупости и неэффективности программистов, которые из ООО "Вектор" ушли работать в Гуголь кем-нибудь из сотрудников ООО "Вектор" всегда очень доставляло. Потому что тут же возникает вопрос: ПМ>- Если ви таки такой вумный, почему в Гуголе теперь работают они, а не ви?
Потому что в гуголе около 90% посредсвенностей и 10% действительно талантов. Вот эти 10% и тянут на себе все.
ПМ>- Очевидно, потому что тупые менеджеры в Гуголе дают на собеседованиях тупые задачки, не имеющие ничего общего с реальной жизнью™.
Ну, например, они любят спрашивать "Оцените количество окон в Нью-Йорке". Что это имеет общего с реальной жизнью?
ПМ>- Но если менеджеры Гуголя такие тупие, откуда таки у Гуголя такой гешефт?
Гуголь очень большая контора. Плохому и среднему программисту там "спрятаться" гораздо легче, чем в маленькой или средней по размере конторе.
Я вот раз взял на работу чувака провалившего обращение списка и не пожалел. Правда парень хорошо подходил под наши требования, по собеседованию было видно что толковый ну и задачу мы задали в самом конце. Понятия не имею почему он её провалил... то ли переволновался, то ли мы за час общения переключили его в какой-то не тот режим. Вобщем отлично поработал он на нашем проекте, потом забрали у нас его на другой с повышением и карьерными перспективами.
Вообще проваленная задача на кодирование — жирный минус, но не сказал бы что моментальный отсев... ну реально всякое бывает. Как проводить собеседование: в самом начале задачу на написание кода, потом вопросы.. Если вдруг провалился на связном списке — поспрашивать что-то другое, важное, если после пары вопросов плывёт — вежливо прощатся, есле есть таки надежда что человек подойдёт — забываем про провал и продолжаем разговор.
Re[2]: Задача на собеседовании - обращение списка.
On 08.02.2013 12:59, superman wrote:
> Понятия не имею почему он её провалил... то ли переволновался, то > ли мы за час общения переключили его в какой-то не тот режим. Вобщем > отлично поработал он на нашем проекте, потом забрали у нас его на другой > с повышением и карьерными перспективами.
Ему повезло, что не все идиоты на вашей конторе.
> Вообще проваленная задача на кодирование — жирный минус, но не сказал бы > что моментальный отсев... ну реально всякое бывает. Как проводить > собеседование: в самом начале задачу на написание кода, потом вопросы.. > Если вдруг провалился на связном списке — поспрашивать что-то другое, > важное, если после пары вопросов плывёт — вежливо прощатся, есле есть > таки надежда что человек подойдёт — забываем про провал и продолжаем > разговор.
То есть в переводе на местный язык вы ищите кодеров. То бишь тех, кто
чисто механически нечто кодирует.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>То есть в переводе на местный язык вы ищите кодеров. То бишь тех, кто V>чисто механически нечто кодирует.
кто такие, эти самые мифические кодеры о которых все говорят, но никто их не видел? Люди, которые будут писать от забора и до обеда код типа if Число = 1 then Четное := False else if Число = 2 then Четное := True else if ...
Re[4]: Задача на собеседовании - обращение списка.
On 08.02.2013 13:38, jhfrek wrote:
> Люди, которые будут писать от забора и до обеда код типа if > Число = 1 then Четное := False else if Число = 2 then Четное := True > else if ...
Да. Да неважно что, главное быстро.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> Люди, которые будут писать от забора и до обеда код типа if >> Число = 1 then Четное := False else if Число = 2 then Четное := True >> else if ... V>Да. Да неважно что, главное быстро.
а где-то такие работают?
Re[6]: Задача на собеседовании - обращение списка.
Можешь мне объяснить — зачем его вообще разворачивать, если можно по нему пробежаться итератором в обратном направлении? .end() -> .begin() Или если это массив указателей на объекты — просто в обратном порядке по указателям... Процессорное время девать некуда?
Я подобные вопросы считаю абсурдными, меня бы интересовал только вопрос как удалить или вставить элемент... А вообще меня мало интересуют подобные вопросы... Меня больше интересует практическое применение... понимание объектов ядра, процессов, потоков, понимание дедлоков, работа с сокетами, сигналами и работа с памятью — механизмы защиты и с каким проблемами сталкивался человек... На это есть ряд задачек — причем часто имеющих несколько правильных очевидных ответов — по ним я понимаю, что человек из себя представляет... Иногда я даю отрицательное заключение даже при 100% правильных ответах, просто наблюдая за психологией человека — как он отвечает на вопросы... как он относится к постановленной задаче даже самой легкой, внимательность, аккуратность, острота ума...
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
I>Можешь мне объяснить — зачем его вообще разворачивать, если можно по нему пробежаться итератором в обратном направлении? .end() -> .begin() Или если это массив указателей на объекты — просто в обратном порядке по указателям... Процессорное время девать некуда?
Речь идет о линейном односвязном списке. Каждый элемент хранит указатель на хвост списка.
I>Я подобные вопросы считаю абсурдными, меня бы интересовал только вопрос как удалить или вставить элемент... А вообще меня мало интересуют подобные вопросы... Меня больше интересует практическое применение... понимание объектов ядра, процессов, потоков, понимание дедлоков, работа с сокетами, сигналами и работа с памятью — механизмы защиты и с каким проблемами сталкивался человек... На это есть ряд задачек — причем часто имеющих несколько правильных очевидных ответов — по ним я понимаю, что человек из себя представляет... Иногда я даю отрицательное заключение даже при 100% правильных ответах, просто наблюдая за психологией человека — как он отвечает на вопросы... как он относится к постановленной задаче даже самой легкой, внимательность, аккуратность, острота ума...
Троеточия в конце фраз уже давно не в моде.
Re[3]: Задача на собеседовании - обращение списка.
G>Речь идет о линейном односвязном списке. Каждый элемент хранит указатель на хвост списка.
В исходной задаче об этом не сказано — сказано "список", но не сказано какой — односвязанный или двухсвязанный... И зачем использовать односвязанный список, если когда встает такая задача как разворот — можно использовать двухсвязанный список... и пробежаться итератором в обратном направлении... В STL все списки двухсвязанные, и есть уже готовые функции, а в своей реализации превратить односвязанный список в двухсвязанный — это дописать около 10 строчек кода, который не будет в последствии тратить ресурсов процессора на никому не нужную задачу разворота.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
I>В исходной задаче об этом не сказано — сказано "список", но не сказано какой — односвязанный или двухсвязанный... И зачем использовать односвязанный список, если когда встает такая задача как разворот — можно использовать двухсвязанный список... и пробежаться итератором в обратном направлении... В STL все списки двухсвязанные, и есть уже готовые функции, а в своей реализации превратить односвязанный список в двухсвязанный — это дописать около 10 строчек кода, который не будет в последствии тратить ресурсов процессора на никому не нужную задачу разворота.
потому что в книжках типа алгоритмов и структур данных, список — это набор рекордов вида (ссылка на данные; ссылка на следующий элемент) и для набора существует стандартный набор операций: добавить, найти, добавить после/перед найденным, удалить, развернуть и т.п., реализация которых требует некоторой сообразительности для понимания как правильно выполнить процедуру обмена над ссылками, что бы список не потерял элементы и умение работать с граничными элементами списка.
люди имеющие институтский бэкграунд эту задачу мгновенно решают, не имеющие — недоумевают в чем подвох при наличии метода Reverse и итератора умеющего бегать в обе стороны у стандартных типов языка.
Так что, при грамотно сформулированном условии (список — это структура данных вида..., решите операцию обращения списка для данной структуры), задача имеет право на жизнь на собедовании, без этого условия — выдает узость мышления и незнание современных языков и библиотек у интервьюера
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Так что, при грамотно сформулированном условии (список — это структура данных вида..., решите операцию обращения списка для данной структуры) задача имеет право на жизнь на собедовании, без этого условия — выдает узость мышления и незнание современных языков и библиотек у интервьюера
Глядя на таким образом сформулированное условие, я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных. Уточнение подразумеваемой структуры данных может иметь место после того как интервьюемый продемонстрировал "ширину" мышления и не понял, о чем речь.
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, ishmakov, Вы писали:
I>>В исходной задаче об этом не сказано — сказано "список", но не сказано какой — односвязанный или двухсвязанный... И зачем использовать односвязанный список, если когда встает такая задача как разворот — можно использовать двухсвязанный список... и пробежаться итератором в обратном направлении... В STL все списки двухсвязанные, и есть уже готовые функции, а в своей реализации превратить односвязанный список в двухсвязанный — это дописать около 10 строчек кода, который не будет в последствии тратить ресурсов процессора на никому не нужную задачу разворота.
J>потому что в книжках типа алгоритмов и структур данных, список — это набор рекордов вида (ссылка на данные; ссылка на следующий элемент) и для набора существует стандартный набор операций: добавить, найти, добавить после/перед найденным, удалить, развернуть и т.п., реализация которых требует некоторой сообразительности для понимания как правильно выполнить процедуру обмена над ссылками, что бы список не потерял элементы и умение работать с граничными элементами списка.
Вот и ответ — потому что в книжках... на практике все это не нужно или давно реализовано и два раза изобретать велосипед не нужно... Умение работать с ссылками и указателями проверяется другими методами... Вы задаете вопросы на собеседовании — для чего? Эрудицию проверить или определить навыки с которые вам будут полезны в проекте и в компании?
Для эрудиции была такая передача — Своя Игра
У вас не шоу — а поиск человека, который займется конкретной работой.
J>люди имеющие институтский бэкграунд эту задачу мгновенно решают, не имеющие — недоумевают в чем подвох при наличии метода Reverse и итератора умеющего бегать в обе стороны у стандартных типов языка.
Вот вы и получите юниора, который легко ответит на этот вопрос, но никогда человека с опытом, который не использует вообще этот метод за ненадобностью...
Я их могу спокойно озвучить, и если кто-то подготовится и найдет для себя понимание — это будет плюс х)
Расскажите как устроена операционная система, что такое процесс, что такое поток, как ОС работает с потоками, с какими библиотеками работали, что такое память на стеке, что такое динамическая память, что такое объекты синхронизации, что они лочат и как, что такое файлы, можно ли файл сделать блоком памяти, что такое сигналы и eventы, что такое сокеты, как они работают, модель OSI, как работает UDP и TCP с какими проблемы в сетевой передаче вы сталкивались... Что такое динамическая библиотека... Когда она вызывается. Что из себя представляет объектный файл, библиотека, в чем разница между статической и динамической библиотекой. По языку есть ряд секретный вопросов по которым я понимаю с какими архитектурами работал человек — ничего сложного (но не скажу — до собеседования)... Есть хитрые вопросы — например рассчитать ответ логических операций... по ним я понимаю — либо человек аккуратный и считает, либо проявляет смекалку... и умение оперировать с двоичными числами и учитывает где я хочу получить результат в С или С++... Обычные часто встречающиеся моменты в проектах... как установить 1 в двоичном числе на определенном месте... как определить, что на этом месте 1, а не 0... ну и дальше в чем отличии ссылки от указателя, что такое односвязанный список, что такое двухсвязанный, как туда добавляется или удаляется элемент, что будете если... например вызвать исключение в конструкторе или конструкторе... В общем и все... я беседую, что бы понять с чем действительно имел опыт человек... и так по разным темам — язык С, С++, системное программирование Windows/Linux, GUI или MacOS... Ибо по MacOS тоже есть ряд хитрых вопросов... которые знает человек только работающий с этой ОС...
Для меня не страшно, если где-то человек не ответит на вопросы... если у меня сформируется представление о том, что человек 100% подходит для решения тех или иных задач — я буду готов его рекомендовать взять... А бывает по тому, как человек отвечает, правильно — я понимаю, человек раздолбай и слишком высокого о себе мнения... с ним будет трудно работать и это будет мешать коллективу — я даже при 100% правильных ответах рекомендую не брать...
p.s. Вообще у меня последнее время при собеседованиях создается одно желание, дарить людям ряд книг... В первую очередь, что хочется подарить 99% собеседуемым:
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Такое впечатление что 9 из 10 присутвующих в этой ветке в программировании совершенно случайные люди.
Элементарная, блин, задача. На пять минут делов-то. И какая, нахрен, рекурсия ???
struct list
{
int v;
struct list* next;
list(): v(),next() {}
};
void printlist(const char* cap,list* p) {
printf("%s:",cap);
for( ; p ; p = p->next)
printf("%d ",p->v);
printf("\n");
}
int main(int argc, char* argv[])
{
list* root = 0;
for( int n = 0; n < 10; ++n )
{
list* t = new list;
t->v = n;
t->next = root;
root = t;
}
printlist("original",root);
list* r = 0;
for( list* t = root; t;)
{
list* tt = t->next;
t->next = r;
r = t;
t = tt;
}
printlist("reversed",r);
return 0;
}
Re[2]: Задача на собеседовании - обращение списка.
Это очевидно — но теперь объясни мне зачем тратить ресурсы? — у тебя триллион таких вот элементов... сколько времени займет этот разворот, и какова цена превратить этот список в двух-связанный, что бы пробегаться в обратном порядке
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
J>>люди имеющие институтский бэкграунд эту задачу мгновенно решают, не имеющие — недоумевают в чем подвох при наличии метода Reverse и итератора умеющего бегать в обе стороны у стандартных типов языка. I>Вот вы и получите юниора, который легко ответит на этот вопрос, но никогда человека с опытом, который не использует вообще этот метод за ненадобностью...
вы перепутали адресата или необоснованно решили что я — Паблик Морозов
Ну или у вас шамано-ориентированное мышление, раз вы считаете что человек озвучивший гипотезу является причиной событий
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>Так что, при грамотно сформулированном условии (список — это структура данных вида..., решите операцию обращения списка для данной структуры) задача имеет право на жизнь на собедовании, без этого условия — выдает узость мышления и незнание современных языков и библиотек у интервьюера S>Глядя на таким образом сформулированное условие, я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных. Уточнение подразумеваемой структуры данных может иметь место после того как интервьюемый продемонстрировал "ширину" мышления и не понял, о чем речь.
Человек, который программировал по требованиям заказчика должен знать что даже общепринятая терминология может различаться у разных людей. Даже здесь значительная часть программистов считает что список — это структура данных из библиотеки. А каждый кто сдавал экзамены (участвовал в олимпиадах и т.п.) знает что условие задачи формулируется максимально подробно и однозначно.
Так что не уподобляйтесь Паблику Морозову и не думайте за других. Видите какой срач развернулся из-за того что он думал как и вы.
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
J>Человек, который программировал по требованиям заказчика должен знать что даже общепринятая терминология может различаться у разных людей. Даже здесь значительная часть программистов считает что список — это структура данных из библиотеки. А каждый кто сдавал экзамены (участвовал в олимпиадах и т.п.) знает что условие задачи формулируется максимально подробно и однозначно.
Формулировка задачи не была привязана к конкретным языкам и библиотекам. Потому, считать что это структура данных из какой-то конкретной библиотеки немного наивно.
J>Так что не уподобляйтесь Паблику Морозову и не думайте за других. Видите какой срач развернулся из-за того что он думал как и вы.
ИМХО, срач развернулся из-за незнания фундаментальных вещей.
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>Человек, который программировал по требованиям заказчика должен знать что даже общепринятая терминология может различаться у разных людей. Даже здесь значительная часть программистов считает что список — это структура данных из библиотеки. А каждый кто сдавал экзамены (участвовал в олимпиадах и т.п.) знает что условие задачи формулируется максимально подробно и однозначно. S>Формулировка задачи не была привязана к конкретным языкам и библиотекам. Потому, считать что это структура данных из какой-то конкретной библиотеки немного наивно.
если собеседование было на позицию программиста. А если собеседование было на позицию программиста С++, то вполне логично что он воспользуется привычными инструментами
J>>Так что не уподобляйтесь Паблику Морозову и не думайте за других. Видите какой срач развернулся из-за того что он думал как и вы. S>ИМХО, срач развернулся из-за незнания фундаментальных вещей.
имно, фундаментальные вещи отдают некоторой долей снобизма — вы же не научного сотрудника ищите для бесед и теоретических изысканий. Для работник нужен работник который будет работать работу.
Нафига ему знать что список это набор рекордов со ссылками, если библиотечного листа ему достаточно для работы? А если нам зачем-то нужно проверить его умение построить АТД список, то ему обязательно нужно в начале объяснить внутреннее устройство и только потом просить построить и реализовать операции над этим типом.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали:
I>Это очевидно — но теперь объясни мне зачем тратить ресурсы? — у тебя триллион таких вот элементов... сколько времени займет этот разворот, и какова цена превратить этот список в двух-связанный, что бы пробегаться в обратном порядке
а лишний триллион памяти под обратные ссылки у тебя есть?
Re[9]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Формулировка задачи не была привязана к конкретным языкам и библиотекам. Потому, считать что это структура данных из какой-то конкретной библиотеки немного наивно.
J>если собеседование было на позицию программиста. А если собеседование было на позицию программиста С++, то вполне логично что он воспользуется привычными инструментами
со стороны интервьюируемого — в этом может быть какая-то логика. Но со стороны интервьюера, сформулировавшего задачу в устоявшихся терминах, такая логика отстутствует. По-вашему программист C++ и программист C# выберут для решения совершенно различные структуры данных (ориентируясь по их названиям в библиотеках). Кто будет прав?
S>>ИМХО, срач развернулся из-за незнания фундаментальных вещей.
J>имно, фундаментальные вещи отдают некоторой долей снобизма — вы же не научного сотрудника ищите для бесед и теоретических изысканий. Для работник нужен работник который будет работать работу.
J>Нафига ему знать что список это набор рекордов со ссылками, если библиотечного листа ему достаточно для работы?
Мне кажется что в общем случае интервьюеру виднее, чего достаточно для работы, а чего — нет. Для того и проверяются конкретные навыки, что бы не объяснять каждый раз будущему работнику, что подразумевается в задаче.
J>А если нам зачем-то нужно проверить его умение построить АТД список, то ему обязательно нужно в начале объяснить внутреннее устройство и только потом просить построить и реализовать операции над этим типом.
Под АТД подразумевается абстрактный тип данных? Если да, то зачем уметь его строить? Нет у абстрактного типа данных внутреннего устройства. Это лишь набор контрактов.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Формулировка задачи не была привязана к конкретным языкам и библиотекам. Потому, считать что это структура данных из какой-то конкретной библиотеки немного наивно. J>>если собеседование было на позицию программиста. А если собеседование было на позицию программиста С++, то вполне логично что он воспользуется привычными инструментами S>со стороны интервьюируемого — в этом может быть какая-то логика. Но со стороны интервьюера, сформулировавшего задачу в устоявшихся терминах, такая логика отстутствует. По-вашему программист C++ и программист C# выберут для решения совершенно различные структуры данных (ориентируясь по их названиям в библиотеках). Кто будет прав?
ну да, я про сторону интервьюируемого и пишу. Интервьюер должен точно определять что он имеет в виду — АТД или структуру из библиотеки и какой именно библиотеки. Интервьюируемый не должен решать загадки на тему "что думал интервьюер когда задавал этот вопрос", разве что интервьюер хотел выяснить сможет ли интервьюируемый вытребовать у него уточнение спецификации, достаточен ли у него кругозор что бы понять что спецификация не полна или он кинется сразу решать что-то свое.
J>>Нафига ему знать что список это набор рекордов со ссылками, если библиотечного листа ему достаточно для работы? S>Мне кажется что в общем случае интервьюеру виднее, чего достаточно для работы, а чего — нет. Для того и проверяются конкретные навыки, что бы не объяснять каждый раз будущему работнику, что подразумевается в задаче.
э.. а зачем вам работник решающий свою, а не вашу задачу?
J>>А если нам зачем-то нужно проверить его умение построить АТД список, то ему обязательно нужно в начале объяснить внутреннее устройство и только потом просить построить и реализовать операции над этим типом. S>Под АТД подразумевается абстрактный тип данных? Если да, то зачем уметь его строить? Нет у абстрактного типа данных внутреннего устройства. Это лишь набор контрактов.
что бы проверить как программист сумеет данное внутреннее устройство реализовывать. А то вы захотите проверить знает ли он деревья на примере списка, а он вам массив для списка поиспользует — оно вам надо терять свое и его время не решение ненужной задачи.
Re[10]: Задача на собеседовании - обращение списка.
On 11.02.2013 11:06, samius wrote:
> со стороны интервьюируемого — в этом может быть какая-то логика. Но со > стороны интервьюера, сформулировавшего задачу в устоявшихся терминах, > такая логика отстутствует. По-вашему программист C++ и программист C# > выберут для решения совершенно различные структуры данных (ориентируясь > по их названиям в библиотеках). Кто будет прав?
Тот кто решит задачу наиболее быстро (имеено задачу, а не нечто,
делающее совсем не то, что требовалось), с наименьшим количеством багов
и с в достаточно понятном стиле для большинства программистов (с целью
дальнейшей поддержки кода).
З.Ы. Возможно у вас все задачи в переворачивании покалеченных списков.
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Задача на собеседовании - обращение списка.
On 10.02.2013 23:25, ishmakov wrote:
> Вот вы и получите юниора, который легко ответит на этот вопрос, но > никогда человека с опытом, который не использует вообще этот метод за > ненадобностью...
А если именно это и требуется тому, кто нанимает?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
On 11.02.2013 0:05, ishmakov wrote:
> Расскажите как устроена операционная система, что такое процесс, что > такое поток, как ОС работает с потоками, с какими библиотеками работали, > что такое память на стеке, что такое динамическая память, что такое > объекты синхронизации, что они лочат и как, что такое файлы, можно ли > файл сделать блоком памяти, что такое сигналы и eventы, что такое > сокеты, как они работают, модель OSI, как работает UDP и TCP с какими > проблемы в сетевой передаче вы сталкивались...
Я так понимаю, что вы занимаетесь дровами под кучу разного странного
железа из стандартных осей?
Posted via RSDN NNTP Server 2.1 beta
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
J>ну да, я про сторону интервьюируемого и пишу. Интервьюер должен точно определять что он имеет в виду — АТД или структуру из библиотеки и какой именно библиотеки. Интервьюируемый не должен решать загадки на тему "что думал интервьюер когда задавал этот вопрос", разве что интервьюер хотел выяснить сможет ли интервьюируемый вытребовать у него уточнение спецификации, достаточен ли у него кругозор что бы понять что спецификация не полна или он кинется сразу решать что-то свое.
Да, этот вопрос в частности — отличный повод выяснить, будет ли интервьюируемый уточнять задачу, сверять свое понимание, или кинется реализовывать велосипедный код над стандартным конейнером C++.
Задача сформулирована достаточно полно для тех кто знает, что подразумевается под списком в общем и частном случаях.
S>>Мне кажется что в общем случае интервьюеру виднее, чего достаточно для работы, а чего — нет. Для того и проверяются конкретные навыки, что бы не объяснять каждый раз будущему работнику, что подразумевается в задаче.
J>э.. а зачем вам работник решающий свою, а не вашу задачу?
А мне как раз такой работник не нужен. При прочих равных условиях предпочту того, кто будет решать нужную мне задачу. И тест на обращение списка — прекрасный способ отделить таких разработчиков, а так же тех, кто предпочитает препинаться и конфликтовать.
S>>Под АТД подразумевается абстрактный тип данных? Если да, то зачем уметь его строить? Нет у абстрактного типа данных внутреннего устройства. Это лишь набор контрактов.
J>что бы проверить как программист сумеет данное внутреннее устройство реализовывать. А то вы захотите проверить знает ли он деревья на примере списка, а он вам массив для списка поиспользует — оно вам надо терять свое и его время не решение ненужной задачи.
Внутреннее устройство есть у конкретных структур данных, а не у абстрактных. И да, массив — одна из реализаций абстракции "Список".
Re[11]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Тот кто решит задачу наиболее быстро (имеено задачу, а не нечто, V>делающее совсем не то, что требовалось), с наименьшим количеством багов V>и с в достаточно понятном стиле для большинства программистов (с целью V>дальнейшей поддержки кода).
Полагаю что у тех, кто использовал библиотечные структуры данных C++/C#, мало шансов выполнить то, что требовалось в условии задачи.
V>З.Ы. Возможно у вас все задачи в переворачивании покалеченных списков.
У меня — нет. А почему покалеченных?
Re[2]: Задача на собеседовании - обращение списка.
On 11.02.2013 0:51, c-smile wrote:
> Такое впечатление что 9 из 10 присутвующих в этой ветке в > программировании совершенно случайные люди. > > Элементарная, блин, задача. На пять минут делов-то. И какая, нахрен, > рекурсия ??? > > > struct list > { > int v; > struct list* next; > list(): v(),next() {} > }; > > void printlist(const char* cap,list* p) { > printf("%s:",cap); > for( ; p ; p = p->next) > printf("%d",p->v); > printf("\n"); > } > > int main(int argc,char* argv[]) > { > list* root = 0; > for(int n = 0; n < 10; ++n ) > { > list* t =new list; > t->v = n; > t->next = root; > root = t; > } > > printlist("original",root); > > list* r = 0; > for( list* t = root; t > { > list* tt = t->next; > t->next = r; > r = t; > t = tt; > } > > printlist("reversed",r); > return 0; > }
Извиняюсь, конечно, но это что теперь такое вот и требуется для
работодателей, клогда спрашивают эту чушь???
З.Ы. Я не вижу даже смысла тут прикапываться к мелочам. Это все можно
просто выкинуть, как вредительский код. Или это просто была попытка
показать, что ты знаешь несколько операторов С или С++ (я так и не понял)?
З.З.Ы. Неужели непонятно, что задача с оборачиванием списка не имеет
решения, потому что ничего не сказано было ни разу ни одним из
собеседователей здесь, что за список, что понимается под его
оборачиванием, и зачем это вообще нужно, какие дополнительные требования
нужно учесть, память, бестродействие, чем не подходят стандартные
списки. Эта задача ставиться всеми здесь исключительно в одной
постановке "сходи туда, не знаю куда, принеси то, не знаю что".
Posted via RSDN NNTP Server 2.1 beta
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Мне кажется что в общем случае интервьюеру виднее, чего достаточно для работы, а чего — нет. Для того и проверяются конкретные навыки, что бы не объяснять каждый раз будущему работнику, что подразумевается в задаче. J>>э.. а зачем вам работник решающий свою, а не вашу задачу? S>А мне как раз такой работник не нужен. При прочих равных условиях предпочту того, кто будет решать нужную мне задачу. И тест на обращение списка — прекрасный способ отделить таких разработчиков, а так же тех, кто предпочитает препинаться и конфликтовать.
Как он будет решать нужную вам задачу, если вы не объяснили ему в чем именно состоит его задача. "Обрати список" — это не корректная постановка задачи, она допускает множество толкований и реализаций. Причем программист, возможно, способен реализовать их все, но вы почему-то не сказали ему какой вам нужен
S>>>Под АТД подразумевается абстрактный тип данных? Если да, то зачем уметь его строить? Нет у абстрактного типа данных внутреннего устройства. Это лишь набор контрактов. J>>что бы проверить как программист сумеет данное внутреннее устройство реализовывать. А то вы захотите проверить знает ли он деревья на примере списка, а он вам массив для списка поиспользует — оно вам надо терять свое и его время не решение ненужной задачи. S>Внутреннее устройство есть у конкретных структур данных, а не у абстрактных. И да, массив — одна из реализаций абстракции "Список".
так задача на внутреннее устройство. В АТД ничего реализовывать не надо, он для того и абстрактный что бы тупо иметь метод reverse
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>А мне как раз такой работник не нужен. При прочих равных условиях предпочту того, кто будет решать нужную мне задачу. И тест на обращение списка — прекрасный способ отделить таких разработчиков, а так же тех, кто предпочитает препинаться и конфликтовать.
J>Как он будет решать нужную вам задачу, если вы не объяснили ему в чем именно состоит его задача. "Обрати список" — это не корректная постановка задачи, она допускает множество толкований и реализаций. Причем программист, возможно, способен реализовать их все, но вы почему-то не сказали ему какой вам нужен
Формулировка достаточно полна. И интервьюемый может уточнять. Уточнять — это даже плюс. Сканадлить — минус.
S>>Внутреннее устройство есть у конкретных структур данных, а не у абстрактных. И да, массив — одна из реализаций абстракции "Список".
J>так задача на внутреннее устройство. В АТД ничего реализовывать не надо, он для того и абстрактный что бы тупо иметь метод reverse
У абстракции списка нет метода reverse
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>З.З.Ы. Неужели непонятно, что задача с оборачиванием списка не имеет V>решения, потому что ничего не сказано было ни разу ни одним из V>собеседователей здесь, что за список, что понимается под его V>оборачиванием, и зачем это вообще нужно, какие дополнительные требования V>нужно учесть, память, бестродействие, чем не подходят стандартные V>списки. Эта задача ставиться всеми здесь исключительно в одной V>постановке "сходи туда, не знаю куда, принеси то, не знаю что".
Столько ненависти к такой простой задаче
Цель простая. Отличить людей, умеющих писать код от людей, которые умеют его только читать.
По моему опыту отсеивать приходится 9 из 10.
Подозреваю, что основная причина такой низкой квалификации кандидатов — сопровождение старого кода.
По сути они код не пишут, а вставляют точечные исправления "по образу и подобию". Как результат — навык написания кода отсутствует.
По-поводу формулировки.
Название топика — не формулировка задачи, а крик души Павлика Морозова .
Задача всегда формулируется предельно ясно. Явно обращается внимание на то, что список "односвязный", даже приводится пример элемента списка (некоторые "С++ программисты" впадают в ступор от просьбы написать структуру с указателем).
По-поводу "зачем" я когда-то уже писал. Не все решается эффективно существующими библиотеками.
Иногда приходится реализовывать свои контейнеры.
Если ты не понимаешь, зачем это надо, значит ты просто не сталкивался с такими задачами. И наверняка никогда с ними не столкнешься. Везет тебе
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: Задача на собеседовании - обращение списка.
On 11.02.2013 11:53, samius wrote:
> Полагаю что у тех, кто использовал библиотечные структуры данных C++/C#, > мало шансов выполнить то, что требовалось в условии задачи.
В смысле? В обращении сферического списка в вакууме?
В реальной же задаче обычно применение стандартных библиотек дает более
быстрое решение задачи с меньшим количеством багов и легко поддерживаемое.
> > V>З.Ы. Возможно у вас все задачи в переворачивании покалеченных списков. > У меня — нет. А почему покалеченных?
Ну потому, что все эти велосипеды обычно с квадратными колесами у всех.
Если не подходит библиотечный, стандартный и отлаженный, то для начала
нужно разобраться почему. Чаще всего оказывается, что не в списке
проблема, а чем-то другом.
Posted via RSDN NNTP Server 2.1 beta
Re[14]: Задача на собеседовании - обращение списка.
On 11.02.2013 12:15, samius wrote:
> Формулировка достаточно полна.
Да вот нет типичный вариант: "Сходи туда, не знаю куда. принеси то, не
знаю что".
> У абстракции списка нет метода reverse
Как я понимаю у обсуждаемой абстракции вообще ничего нет?
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Задача на собеседовании - обращение списка.
On 11.02.2013 12:20, Stanislav V. Zudin wrote:
> Цель простая. Отличить людей, умеющих писать код от людей, которые умеют > его только читать. > По моему опыту отсеивать приходится 9 из 10. > Подозреваю, что основная причина такой низкой квалификации кандидатов — > сопровождение старого кода. > По сути они код не пишут, а вставляют точечные исправления "по образу и > подобию". Как результат — навык написания кода отсутствует.
Раньше было бы смешно, а уже плакать хочется. Похоже знаменитому
русскому программингу приходит конец.
> По-поводу "зачем" я когда-то уже писал. Не все решается эффективно > существующими библиотеками. > Иногда приходится реализовывать свои контейнеры. > Если ты не понимаешь, зачем это надо, значит ты просто не сталкивался с > такими задачами. И наверняка никогда с ними не столкнешься. Везет тебе
То бишь: "сходи туда, не знаю куда, принеси то, не знаю что"?
Не, не Иванушка Дурачок, предпочитаю с таким не связываться, даже за
полкоролевства с бабой впридачу.
Posted via RSDN NNTP Server 2.1 beta
Re[13]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 11:53, samius wrote:
V>В смысле? В обращении сферического списка в вакууме? V>В реальной же задаче обычно применение стандартных библиотек дает более V>быстрое решение задачи с меньшим количеством багов и легко поддерживаемое.
Да, обычно. Но не всегда.
>> V>З.Ы. Возможно у вас все задачи в переворачивании покалеченных списков. >> У меня — нет. А почему покалеченных? V>Ну потому, что все эти велосипеды обычно с квадратными колесами у всех. V>Если не подходит библиотечный, стандартный и отлаженный, то для начала V>нужно разобраться почему. Чаще всего оказывается, что не в списке V>проблема, а чем-то другом.
Вот здесь как раз проблема в том, что интервьюируемый не желает решать поставленную задачу и ищет отмазки, пытается решить реальные проблемы интервьюера по тестовой задаче на интервью, цель которой в отсеве кандидатов.
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 12:15, samius wrote:
>> У абстракции списка нет метода reverse V>Как я понимаю у обсуждаемой абстракции вообще ничего нет?
Почему бы просто не изучить обсуждаемую абстракцию?
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
>> По сути они код не пишут, а вставляют точечные исправления "по образу и >> подобию". Как результат — навык написания кода отсутствует. V>Раньше было бы смешно, а уже плакать хочется. Похоже знаменитому V>русскому программингу приходит конец.
Гм, а был ли мальчик? Кмк соотношение хороших программистов к посредственным везде примерно одинаково.
>> По-поводу "зачем" я когда-то уже писал. Не все решается эффективно >> существующими библиотеками. >> Иногда приходится реализовывать свои контейнеры. >> Если ты не понимаешь, зачем это надо, значит ты просто не сталкивался с >> такими задачами. И наверняка никогда с ними не столкнешься. Везет тебе
V>То бишь: "сходи туда, не знаю куда, принеси то, не знаю что"?
Вот заладил...
Нет никакого "сходи туда, не знаю куда...".
Алгоритмы подбираем под решаемую задачу, структуры данных выбираем, исходя из применяемых алгоритмов.
Если стандартные структуры данных не подходят, делаем свои, которые подойдут.
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
W>>а лишний триллион памяти под обратные ссылки у тебя есть? M>На всякий случай, если будет интересным есть и такие http://en.wikipedia.org/wiki/XOR_linked_list
Классная конструкция, буду иметь в виду. Но что-то я сомневаюсь, что ее имел в виду ishmakov, говоря про провязать в 2 стороны.
Re[14]: Задача на собеседовании - обращение списка.
On 11.02.2013 13:34, samius wrote:
> Да, обычно. Но не всегда.
Ну хорошо. Тогда следующий вопрос 80% ваших ресурсов решает не обычные
задачи и каждый раз ресурсы разные?
Согласись утвердительный ответ на этот вопрос будет выглядеть сильно
странно и говорить о вас в сильно негативном смысле. А по сути на любой
конторе не обычные задачи приходиться решать в лучшем случае 10%, а
остальным вполне обычные, чаще 1-2% решают не обычные задачи, а вот все
остальное — обычные.
> Вот здесь как раз проблема в том, что интервьюируемый не желает решать > поставленную задачу и ищет отмазки, пытается решить реальные проблемы > интервьюера по тестовой задаче на интервью, цель которой в отсеве > кандидатов.
Здесь соглашусь: "цель которой в отсеве кандидатов."
Так зачем в этом случае рассказывать остальные сказки, которые к этой
цели отношения не имеют? Знаю и ответ, чтобы обеспечить работу HR, чтобы
рассказывать начальству, почему не успеваете делать работу в срок.
Posted via RSDN NNTP Server 2.1 beta
Re[16]: Задача на собеседовании - обращение списка.
On 11.02.2013 13:34, samius wrote:
>>> У абстракции списка нет метода reverse > V>Как я понимаю у обсуждаемой абстракции вообще ничего нет? > Почему бы просто не изучить обсуждаемую абстракцию?
Какую? Или вообще Абстракцию? Даже если упрощу вопрос, что ты имеешь в
виду под абстракцией "Список"?
Тут в воинственных ветках спорят даже про то, есть ли у звука цвет или
наоборот, неважно, а это можно хотя бы услышать или увидеть. А ты про
некую Абстракцию "Список", под которой каждый вообще понимет все, что
ему угодно. Может ты вообще имеешь в виду список дел на бумажке и
требуешь эту бумажку перевернуть стороной к тебе?
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 13:34, samius wrote:
V>Ну хорошо. Тогда следующий вопрос 80% ваших ресурсов решает не обычные V>задачи и каждый раз ресурсы разные? V>Согласись утвердительный ответ на этот вопрос будет выглядеть сильно V>странно и говорить о вас в сильно негативном смысле. А по сути на любой V>конторе не обычные задачи приходиться решать в лучшем случае 10%, а V>остальным вполне обычные, чаще 1-2% решают не обычные задачи, а вот все V>остальное — обычные.
Мне совершенно не понятно, что вы считаете обычными задачами, что нет. Обычные задачи для одной конторы будут необычными для другой.
V>Здесь соглашусь: "цель которой в отсеве кандидатов." V>Так зачем в этом случае рассказывать остальные сказки, которые к этой V>цели отношения не имеют? Знаю и ответ, чтобы обеспечить работу HR, чтобы V>рассказывать начальству, почему не успеваете делать работу в срок.
Раз вы все знаете, зачем "пришли" на собеседование?
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 13:34, samius wrote:
>>>> У абстракции списка нет метода reverse >> V>Как я понимаю у обсуждаемой абстракции вообще ничего нет? >> Почему бы просто не изучить обсуждаемую абстракцию? V>Какую? Или вообще Абстракцию? Даже если упрощу вопрос, что ты имеешь в V>виду под абстракцией "Список"?
Абстрактный тип данных "список". Так доступно?
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, samius, Вы писали:
S>>У абстракции списка нет метода reverse
M>Этот аргумент порвал , сорри за офтопик. )
А что тут веселого?
Re[6]: Задача на собеседовании - обращение списка.
On 11.02.2013 14:10, Stanislav V. Zudin wrote:
> Гм, а был ли мальчик? Кмк соотношение хороших программистов к > посредственным везде примерно одинаково.
Был. Это и по мнению зарубежных коллег с кем приходилось работать и по
собственному, но где с 2000-х он начал умирать — этот мальчик.
Фактически, был до тех пор, пока ВУЗы не исказили программу в угоду
подготовки максимально возможного количества программитов (по сути для
90% програмерских работ достаточно 2-3 лет учебы, с чем прекрасно
справился бы и техникум, возможно даже ПТУ).
> Нет никакого "сходи туда, не знаю куда...". > Алгоритмы подбираем под решаемую задачу, структуры данных выбираем, > исходя из применяемых алгоритмов. > Если стандартные структуры данных не подходят, делаем свои, которые > подойдут.
Как с этим соотносится Абстрактный "Список" и его переворот?
Описанный тобой подход как раз и вытекает из моего тезиса выше об
образовании. Вообще-то сначала реализуется некая задача на простеших и
понятных алгоритмах, затем оценивается удовлетворенность требовании по
памяти и быстродействию, если нужно. Затем находятся узкие места, если
нужно. Затем уже эти узкие места улучшаются, если нужно. Неужели увас
эти все если случаются постоянно.
Правда есть еще один момент, вы развлекаетесь прездевременной
оптимизацией и в результате вы все пессимизируете еще сначала разработки.
З.Ы. Кстати, в алгоритмы решения дифур или систем уравнений вы вносите?
Или только структуру список и цикл по ней достоины называться
алгоритмами? А да, еще один священный забыл — "Сортировку" (особенно
прикольно видеть применение крутых сортировок на массивах из 3 элементов
в коде).
Posted via RSDN NNTP Server 2.1 beta
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>А мне как раз такой работник не нужен. При прочих равных условиях предпочту того, кто будет решать нужную мне задачу. И тест на обращение списка — прекрасный способ отделить таких разработчиков, а так же тех, кто предпочитает препинаться и конфликтовать. J>>Как он будет решать нужную вам задачу, если вы не объяснили ему в чем именно состоит его задача. "Обрати список" — это не корректная постановка задачи, она допускает множество толкований и реализаций. Причем программист, возможно, способен реализовать их все, но вы почему-то не сказали ему какой вам нужен S>Формулировка достаточно полна. И интервьюемый может уточнять. Уточнять — это даже плюс. Сканадлить — минус.
То что интервьюируемый может еще и скандалить — это ваше добавление.
Уточнять он может, про это я уже написал. Если ваша задача — узнать умеет ли интервьюируемый уточнять, надо давать задачу в таком неполном виде. Если вам нужно проверить умение ее решить, задачу надо описать максимально полно, что бы не тратить ни свое, ни его время (по-моему, я это уже писал)
S>>>Внутреннее устройство есть у конкретных структур данных, а не у абстрактных. И да, массив — одна из реализаций абстракции "Список". J>>так задача на внутреннее устройство. В АТД ничего реализовывать не надо, он для того и абстрактный что бы тупо иметь метод reverse S>У абстракции списка нет метода reverse
я у моей абстракции — есть.
Re[15]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Формулировка достаточно полна. И интервьюемый может уточнять. Уточнять — это даже плюс. Сканадлить — минус.
J>То что интервьюируемый может еще и скандалить — это ваше добавление.
Это мое наблюдение за данной темой
J>Уточнять он может, про это я уже написал. Если ваша задача — узнать умеет ли интервьюируемый уточнять, надо давать задачу в таком неполном виде. Если вам нужно проверить умение ее решить, задачу надо описать максимально полно, что бы не тратить ни свое, ни его время (по-моему, я это уже писал)
А я уже писал что формулировка полна (по-моему)
S>>У абстракции списка нет метода reverse
J>я у моей абстракции — есть.
Рад. Но насколько ваша абстракция соответствует общепринятой?
Re[16]: Задача на собеседовании - обращение списка.
On 11.02.2013 14:48, samius wrote:
> Мне совершенно не понятно, что вы считаете обычными задачами, что нет.
Почти все задачи в любой конторе обычные, кроме небольшого количества
совершенно новых. По другому просто быть не может, если контора не
существует один день.
> Обычные задачи для одной конторы будут необычными для другой.
То бишь вы все в вашей контор работаете еще в большом количестве дуругих
и случайным образом вас перебрасывают между конторами и задачами?
> Раз вы все знаете, зачем "пришли" на собеседование?
Оба на. Ну и поворот. Т.е на собеседование к вам должны идти те, кто не
знает. Хотя... — это согласуется в озвученной тобой целью.
Просто люди о твоей цели не знают и идут на собеседование, чтобы,
возможно, устроиться к вам на работу.
Как просьба, пишите в вакансиях, что у вас такая цель — другим много
времени секономите.
Posted via RSDN NNTP Server 2.1 beta
Re[18]: Задача на собеседовании - обращение списка.
On 11.02.2013 14:50, samius wrote:
> Абстрактный тип данных "список". Так доступно?
Показательно ты ответил на вопрос, что ты понимаешь по Абстракцией
"Список" — Абстрактный тип данных "список".
Кстати, ты в Бога веришь?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>Уточнять он может, про это я уже написал. Если ваша задача — узнать умеет ли интервьюируемый уточнять, надо давать задачу в таком неполном виде. Если вам нужно проверить умение ее решить, задачу надо описать максимально полно, что бы не тратить ни свое, ни его время (по-моему, я это уже писал) S>А я уже писал что формулировка полна (по-моему)
это замечательно. Вот только вы ищете программиста, или экстрасенса, который прочитает ваши мысли и узнает что есть список "по-вашему". Если программиста, то разумнее все таки описать задачу максимально полно.
S>>>У абстракции списка нет метода reverse J>>я у моей абстракции — есть. S>Рад. Но насколько ваша абстракция соответствует общепринятой?
а какая общепринятая? К примеру, Кнут приводит 9 операций для линейного списка в качестве возможных.
Ну и, увы и ах, без знания внутреннего устройства вы задачу топикстартера не решите
Re[16]: Задача на собеседовании - обращение списка.
On 11.02.2013 15:20, samius wrote:
> А я уже писал что формулировка полна (по-моему)
Это, ты учебники почитай, что-ли, не только как научиться
программировать на С++ за 21 день. Начни с той же вики по слову
"Полнота" http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0
> Рад. Но насколько ваша абстракция соответствует общепринятой?
Уверен, что не меньше, чем твоя?
Вопросы веры, они такие — измерить нельзя, кто больше верит.
Posted via RSDN NNTP Server 2.1 beta
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 14:48, samius wrote:
>> Мне совершенно не понятно, что вы считаете обычными задачами, что нет. V>Почти все задачи в любой конторе обычные, кроме небольшого количества V>совершенно новых. По другому просто быть не может, если контора не V>существует один день.
Так где же грань между обычной и необычной?
>> Обычные задачи для одной конторы будут необычными для другой. V>То бишь вы все в вашей контор работаете еще в большом количестве дуругих V>и случайным образом вас перебрасывают между конторами и задачами?
что-то я не понял пассаж
>> Раз вы все знаете, зачем "пришли" на собеседование? V>Оба на. Ну и поворот. Т.е на собеседование к вам должны идти те, кто не V>знает. Хотя... — это согласуется в озвученной тобой целью.
V>Просто люди о твоей цели не знают и идут на собеседование, чтобы, V>возможно, устроиться к вам на работу.
V>Как просьба, пишите в вакансиях, что у вас такая цель — другим много V>времени секономите.
какая "такая" цель?
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 14:50, samius wrote:
>> Абстрактный тип данных "список". Так доступно? V>Показательно ты ответил на вопрос, что ты понимаешь по Абстракцией V>"Список" — Абстрактный тип данных "список".
А как еще можно ответить? Послать в гугль? Сходите в гугль. V>Кстати, ты в Бога веришь?
нет
Re[7]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 14:10, Stanislav V. Zudin wrote:
>> Гм, а был ли мальчик? Кмк соотношение хороших программистов к >> посредственным везде примерно одинаково. V>Был. Это и по мнению зарубежных коллег с кем приходилось работать и по V>собственному, но где с 2000-х он начал умирать — этот мальчик. V>Фактически, был до тех пор, пока ВУЗы не исказили программу в угоду V>подготовки максимально возможного количества программитов (по сути для V>90% програмерских работ достаточно 2-3 лет учебы, с чем прекрасно V>справился бы и техникум, возможно даже ПТУ).
Насчет 90% согласен.
Подозреваю, что не последнюю роль здесь сыграло развитие C# — ниже порог вхождения,
позволяет для большинства задач вообще не заботиться о знании структур данных.
>> Нет никакого "сходи туда, не знаю куда...". >> Алгоритмы подбираем под решаемую задачу, структуры данных выбираем, >> исходя из применяемых алгоритмов. >> Если стандартные структуры данных не подходят, делаем свои, которые >> подойдут. V>Как с этим соотносится Абстрактный "Список" и его переворот?
Напрямую соотносится. Реализуем собственные структуры данных.
V>Вообще-то сначала реализуется некая задача на простеших и V>понятных алгоритмах, затем оценивается удовлетворенность требовании по V>памяти и быстродействию, если нужно. Затем находятся узкие места, если V>нужно. Затем уже эти узкие места улучшаются, если нужно. Неужели увас V>эти все если случаются постоянно.
Некоторые алгоритмы действительно просты и понятны, но при использовании неудачных структур данных можно нехило все затормозить.
80% узких мест можно предугадать, исходя из формулировки алгоритма.
Неожиданности всплывают как раз из-за неправильно выбранных структур. Внезапно O(N) превращается в O(N^2)
V>З.Ы. Кстати, в алгоритмы решения дифур или систем уравнений вы вносите?
Лично я не вношу. Коллегам иногда приходится общие решения заменять частными.
V>Или только структуру список и цикл по ней достоины называться V>алгоритмами?
Под "Алгоритмами" я подразумеваю, к примеру, восстановление электрических связей по геометрическим данным.
В ее рамках может работать другой алгоритм, например вычисляющий взаимное положение полигонов с вырезами.
А перевороты списков и сортировки — это так, мелкие кирпичики, которые могут или испортить общий результат, или здорово его улучшить.
_____________________
С уважением,
Stanislav V. Zudin
Re[6]: Задача на собеседовании - обращение списка.
Здравствуйте, qxWork, Вы писали:
W>>>а лишний триллион памяти под обратные ссылки у тебя есть? M>>На всякий случай, если будет интересным есть и такие http://en.wikipedia.org/wiki/XOR_linked_list W>Классная конструкция, буду иметь в виду. Но что-то я сомневаюсь, что ее имел в виду ishmakov, говоря про провязать в 2 стороны.
господа, а зачем вам список на триллион элементов?
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>А я уже писал что формулировка полна (по-моему)
J>это замечательно. Вот только вы ищете программиста, или экстрасенса, который прочитает ваши мысли и узнает что есть список "по-вашему". Если программиста, то разумнее все таки описать задачу максимально полно.
боюсь, что такие программисты, которым нужно максимально полное описание задачи, меня не интересуют в качестве кандидатов.
S>>Рад. Но насколько ваша абстракция соответствует общепринятой?
J>а какая общепринятая? К примеру, Кнут приводит 9 операций для линейного списка в качестве возможных.
возможно та, которая хорошо гуглится?
Да, и у Кнута нет в перечне 9и операций для линейного списка обращения списка.
J>Ну и, увы и ах, без знания внутреннего устройства вы задачу топикстартера не решите
Ах и увы — задача легко решается для абстрактного типа данных "Список".
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 15:20, samius wrote:
>> А я уже писал что формулировка полна (по-моему) V>Это, ты учебники почитай, что-ли, не только как научиться V>программировать на С++ за 21 день. Начни с той же вики по слову V>"Полнота" V>http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0
В учебниках я и узнал про список.
>> Рад. Но насколько ваша абстракция соответствует общепринятой? V>Уверен, что не меньше, чем твоя?
У меня нет своей собственной абстракции. Пользуюсь общепринятой. V>Вопросы веры, они такие — измерить нельзя, кто больше верит.
С вопросами веры — это на другой форум.
Re[18]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>это замечательно. Вот только вы ищете программиста, или экстрасенса, который прочитает ваши мысли и узнает что есть список "по-вашему". Если программиста, то разумнее все таки описать задачу максимально полно. S>боюсь, что такие программисты, которым нужно максимально полное описание задачи, меня не интересуют в качестве кандидатов.
то есть вам нужны те, которые сумеют вытянуть эту постановку из вас при помощи наводящих вопросов? Тоже замечательно, я и этот случай описал
S>>>Рад. Но насколько ваша абстракция соответствует общепринятой? J>>а какая общепринятая? К примеру, Кнут приводит 9 операций для линейного списка в качестве возможных. S>возможно та, которая хорошо гуглится?
некто Ахо, Хопкрофт,Ульман говорят что операций 8 — Insert, Locate, Retrieve, Delete, Next c Prevouse, MakeNull, First, Printlist. Оно?
S>Да, и у Кнута нет в перечне 9и операций для линейного списка обращения списка.
так эти 9 и не названы единственно допустимыми.
J>>Ну и, увы и ах, без знания внутреннего устройства вы задачу топикстартера не решите S>Ах и увы — задача легко решается для абстрактного типа данных "Список".
не решается
Re[3]: Задача на собеседовании - обращение списка.
On 11.02.2013 15:41, jhfrek wrote:
> это замечательно. Вот только вы ищете программиста, или экстрасенса,
Вообще он уже описал цель своих поисков — не найти.
Posted via RSDN NNTP Server 2.1 beta
Re[18]: Задача на собеседовании - обращение списка.
On 11.02.2013 15:45, samius wrote:
> Так где же грань между обычной и необычной?
Необычными являются в любой конторе не более 10% (в научной) и 3% (в
продуктовой или аутсорсинговой) — все остальные задачи обычны. Решаются
изо дня в день ттысячами программистов по всему свету и у вас, тоже
(иначе контора просто не могла бы существовать).
> что-то я не понял пассаж
Ну если у вас задачи постоянно необычные, то единственный способ это
получить или каждый день работать на новой конторе над задачей из
совершенно другой области от того. что вы делали до этого или иметь
психическое заболевание, когда твоя память не может хранить чего-либо
более нескольких часов, дней.
> какая "такая" цель?
Оба на. Похоже тут точно к врачу надо. Вот цель озвученая тобой не так
давно: "цель которой в отсеве кандидатов."
Posted via RSDN NNTP Server 2.1 beta
Re[18]: Задача на собеседовании - обращение списка.
On 11.02.2013 15:59, samius wrote:
>>> А я уже писал что формулировка полна (по-моему) > V>Это, ты учебники почитай, что-ли, не только как научиться > V>программировать на С++ за 21 день. Начни с той же вики по слову > V>"Полнота" > V>http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0 > В учебниках я и узнал про список.
И кто-то здесь еще не согласен с тотальным уровнем падения русскоязычных
программистов???
> С вопросами веры — это на другой форум.
Похоже уже нет ((
Posted via RSDN NNTP Server 2.1 beta
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>боюсь, что такие программисты, которым нужно максимально полное описание задачи, меня не интересуют в качестве кандидатов.
J>то есть вам нужны те, которые сумеют вытянуть эту постановку из вас при помощи наводящих вопросов? Тоже замечательно, я и этот случай описал
ок
S>>возможно та, которая хорошо гуглится?
J>некто Ахо, Хопкрофт,Ульман говорят что операций 8 — Insert, Locate, Retrieve, Delete, Next c Prevouse, MakeNull, First, Printlist. Оно?
Избыточно
Для определения списка достаточно операций создания пустого списка ([]), проверки списка на пустоту (nil), вставки элемента в начало списка (cons), взятия головы (car/head) и взятия хвоста (cdr/tail).
J>так эти 9 и не названы единственно допустимыми.
Никто и не говорил о единственно допустимых. Речь шла о базовых.
S>>Ах и увы — задача легко решается для абстрактного типа данных "Список".
J>не решается
решается
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 15:45, samius wrote:
>> Так где же грань между обычной и необычной? V>Необычными являются в любой конторе не более 10% (в научной) и 3% (в V>продуктовой или аутсорсинговой) — все остальные задачи обычны. Решаются V>изо дня в день ттысячами программистов по всему свету и у вас, тоже V>(иначе контора просто не могла бы существовать).
Моя не понимать. Обращение списка — это таки научная задача?
>> что-то я не понял пассаж V>Ну если у вас задачи постоянно необычные, то единственный способ это V>получить или каждый день работать на новой конторе над задачей из V>совершенно другой области от того. что вы делали до этого или иметь V>психическое заболевание, когда твоя память не может хранить чего-либо V>более нескольких часов, дней.
У меня задачи бывают разные, я лишь понять не могу, что значит обычная/не обычная для вас. Какие именно из 10и или 3х процентов задач необычные? Как ответить на этот вопрос без собеседования с тысячами программистов по всему свету изо дня в день?
>> какая "такая" цель? V>Оба на. Похоже тут точно к врачу надо. Вот цель озвученая тобой не так V>давно: "цель которой в отсеве кандидатов."
Это нормально. Цель вопросов и задач на собеседовании — отсев кандидатов. Цель собеседования — отсев кандидатов. Если отсеивать не нужно, то и собеседовать нет смысла.
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 15:59, samius wrote:
V>И кто-то здесь еще не согласен с тотальным уровнем падения русскоязычных V>программистов???
Кто не согласен? Я — согласен.
>> С вопросами веры — это на другой форум. V>Похоже уже нет ((
Все-таки на другой
Re[8]: Задача на собеседовании - обращение списка.
On 11.02.2013 15:48, Stanislav V. Zudin wrote:
> Насчет 90% согласен. > Подозреваю, что не последнюю роль здесь сыграло развитие C# — ниже порог > вхождения,
Ничего подобного. C++ уже избавил программиста от кучи рутинных дел,
которые за него делает компилятор и стандартная библиотека. А вот пока
мы на асме ковырялись и С, приходилось каждый раз велосипеды делать
(причем чаще всего с квадратными колесами). К счатью я уже лет 15 в
ттуда не лажу, ибо там больше навредить можно, чем пользы принести.
> позволяет для большинства задач вообще не заботиться о знании структур > данных.
Не надоело еще позориться сакраментальными знаниями последовательности и
дерева и несколькими функциями над ними.
> Напрямую соотносится. Реализуем собственные структуры данных.
Вы пишете эту часть С# или Java?
> 80% узких мест можно предугадать, исходя из формулировки алгоритма. > Неожиданности всплывают как раз из-за неправильно выбранных структур. > Внезапно O(N) превращается в O(N^2)
А потом приходиться запускать профилировщик, выкидывать всю эту
преждевременную оптимизацию (пессимизацию) и перписывать все заново.
Нет я не говорю, что не надо понимать, что по любому неупорядоченному
линейному массиву поиск будет идти линейно, а по дереву быстрее
(логарифмически), а также цену вставок, добавленийи затратности оперций
выделения, освобождения памяти. Но это знает и понимает любой программист.
В реальности же часто нужно выбрать между деревом или сортированным
массивом, но видно это становиться, когда уже профилируешь прогу.
Та же сортировка, если она затратна, выгодно не извращаться с ней много
раз с поиском наиболее быстрых, а сделать ее единожды, изменить алгоритм
программы так, чтобы затратную операцию нужно было делать как можно реже.
Но это все не имеет никакого отношения к Абстрактным Переворотам
Абстрактных Списков (с большой буквы пишу, ибо тут уже это воспринимают
большинством, как Боги).
> Под "Алгоритмами" я подразумеваю, к примеру, восстановление > электрических связей по геометрическим данным. > В ее рамках может работать другой алгоритм, например вычисляющий > взаимное положение полигонов с вырезами. > > А перевороты списков и сортировки — это так, мелкие кирпичики, которые > могут или испортить общий результат, или здорово его улучшить.
Вот видишь. И если этот мелкий кирпичик оказался бутылочным горлышком,
то достаточно легко его поправить и почти никогда нельзя угадать, где
окажется бутылочное горлышко.
З.Ы. За преждевременную оптимизацию я програмеров последние лет 5 по
рукам бил и заставлял сначала написать, чтобы просто работало, потом
профилирование и если нужно ликвидация "бутылочных горлышек". Пофиг, что
он использует дерево или отсортированную последовательность, главное,
чтобы его код был понятен и делал то, что нужно.
А одного такого оптимизатора пришлось уволить, его вечно заносило в
некие Абстрактные Структуры Данных и кода он вообще не написал, который
бы что-то делал требуемое.
Posted via RSDN NNTP Server 2.1 beta
Re[20]: Задача на собеседовании - обращение списка.
On 11.02.2013 16:44, samius wrote:
> Моя не понимать. Обращение списка — это таки научная задача?
В местных постановках — она антинаучная.
> V>Оба на. Похоже тут точно к врачу надо. Вот цель озвученая тобой не так > V>давно: "цель которой в отсеве кандидатов." > Это нормально. Цель вопросов и задач на собеседовании — отсев > кандидатов. Цель собеседования — отсев кандидатов. Если отсеивать не > нужно, то и собеседовать нет смысла.
Да-да-да, главное не волнуйтесь.
Posted via RSDN NNTP Server 2.1 beta
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 11.02.2013 16:44, samius wrote:
>> Моя не понимать. Обращение списка — это таки научная задача? V>В местных постановках — она антинаучная.
Почему и какая постановка по-вашему научная? Желательно с аргументами, а не эмоциями.
V>Да-да-да, главное не волнуйтесь.
А то что?
Re[20]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>некто Ахо, Хопкрофт,Ульман говорят что операций 8 — Insert, Locate, Retrieve, Delete, Next c Prevouse, MakeNull, First, Printlist. Оно? S>Избыточно S>Для определения списка достаточно операций создания пустого списка ([]), проверки списка на пустоту (nil), вставки элемента в начало списка (cons), взятия головы (car/head) и взятия хвоста (cdr/tail).
читаем вашу википедию — "спи́сок (англ. list) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза." Именно его и достаточно для определения списка.
А список операций должен быть подходящим для вашей задачи.
J>>так эти 9 и не названы единственно допустимыми. S>Никто и не говорил о единственно допустимых. Речь шла о базовых.
где написано что набор операций обязан быть базовым, т.е. где написано что АТД — это тип содержащий исключительно базовые операции. А заодно где определение и критерии базовости операции?
S>>>Ах и увы — задача легко решается для абстрактного типа данных "Список". J>>не решается S>решается
как?
Re[17]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
S>>А я уже писал что формулировка полна (по-моему) J>это замечательно. Вот только вы ищете программиста, или экстрасенса, который прочитает ваши мысли и узнает что есть список "по-вашему". Если программиста, то разумнее все таки описать задачу максимально полно.
Так в этом то и смысл, что программист-инженер задаст вопросы и уточнит задачу, а не будет требовать разжеванную и разложенную по полочкам задачу. Можно рассматривать это как задачу взвесить боинг или сколько мойщиков окон в Нью-Йорке, только в более жизненной ситуации.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[18]: Задача на собеседовании - обращение списка.
Здравствуйте, AndrewJD, Вы писали:
S>>>А я уже писал что формулировка полна (по-моему) J>>это замечательно. Вот только вы ищете программиста, или экстрасенса, который прочитает ваши мысли и узнает что есть список "по-вашему". Если программиста, то разумнее все таки описать задачу максимально полно. AJD>Так в этом то и смысл, что программист-инженер задаст вопросы и уточнит задачу, а не будет требовать разжеванную и разложенную по полочкам задачу. Можно рассматривать это как задачу взвесить боинг или сколько мойщиков окон в Нью-Йорке, только в более жизненной ситуации.
Вы поспрашивали про боинг, выяснили что он умеет уточнять и теперь вам нужно проверить какой код напишет программист для оборачивания списка из рекордов со ссылками, проверит ли он границы, хорошо ли покроет код тестами. Вы можете сформулировать задачу как "оберните список", потеряв время на уточнение задачи или как "оберните список при условии что список — это...". Я выберу второй путь, а вы?
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
J>читаем вашу википедию — "спи́сок (англ. list) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза." Именно его и достаточно для определения списка.
Строго говоря — нет. Что можно делать с абстрактным типом данных без операций над ним? Я не представляю этого. Расскажите. Можно даже взять не список, а что по-проще. Кортеж, например.
J>А список операций должен быть подходящим для вашей задачи.
Списки операций, подходящие конкретным задачам и удовлетворяющие конкретным условиям — они могут быть только у конкретных структур данных, но никак у абстрактной.
S>>Никто и не говорил о единственно допустимых. Речь шла о базовых.
J>где написано что набор операций обязан быть базовым, т.е. где написано что АТД — это тип содержащий исключительно базовые операции. А заодно где определение и критерии базовости операции?
Полагаю что ответы на эти вопросы можно частично найти в этой книге. Не читал.
А мои соображения следующие: определение избыточных операций смысла не имеет, т.к. их можно доопределить над базовыми. А нехватка базовых операций приведет к тому что не получится использовать список для решения множества задач, которые он призван решать.
Хоар определил список через те операции, которые перечислены в русской вики (в английской они тоже перечислены, но вместе с избыточными). Возможно существует эквивалентный альтернативный набор операций.
S>>решается
J>как?
Например, так:
List result = emptyList();
while (!isNull(list))
{
result = cons(head(list), result);
list = tail(list);
}
Re[19]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Вы поспрашивали про боинг, выяснили что он умеет уточнять и теперь вам нужно проверить какой код напишет программист для оборачивания списка из рекордов со ссылками, проверит ли он границы, хорошо ли покроет код тестами. Вы можете сформулировать задачу как "оберните список", потеряв время на уточнение задачи или как "оберните список при условии что список — это...". Я выберу второй путь, а вы?
А зачем спрашивать про боинг? Чем вопрос про боинг лучше чем про списки? Почему кандидат не может уточнить задачу: что за список, какие ограничения и т.д.?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[20]: Задача на собеседовании - обращение списка.
On 11.02.2013 19:44, AndrewJD wrote:
> А зачем спрашивать про боинг? Чем вопрос про боинг лучше чем про списки? > Почему кандидат не может уточнить задачу: что за список, какие > ограничения и т.д.?
Ничем. Бред и то и то. Вместо того, чтобы честно сознаться, что основная
цель отсеять, причем чем больше, тем лучше (в идеале всех) несете здесь
херню.
Это работодятлу своему можете сказки эти травить, но здесь же люди умные
и все понимают. Или считаешь, что глупые?
Posted via RSDN NNTP Server 2.1 beta
Re[21]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Это работодятлу своему можете сказки эти травить, но здесь же люди умные V>и все понимают. Или считаешь, что глупые?
Я считаю что есть разработчики(инженеры) и есть кодеры.
Если цель стоит набрать кодеров, то нужно спрашивать вопросы с максимально точной формулировкой, вопросы где нет неопределенности.
С первыми все сложнее.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[22]: Задача на собеседовании - обращение списка.
On 11.02.2013 20:08, AndrewJD wrote:
> Я считаю что есть разработчики(инженеры) и есть кодеры. > Если цель стоит набрать кодеров, то нужно спрашивать вопросы с > максимально точной формулировкой, вопросы где нет неопределенности. > С первыми все сложнее.
Понятно, что у вас работают только инженеры и ни одного кодера (ху из
ит?, как говориться).
Posted via RSDN NNTP Server 2.1 beta
Re[20]: Задача на собеседовании - обращение списка.
Здравствуйте, AndrewJD, Вы писали:
J>>Вы поспрашивали про боинг, выяснили что он умеет уточнять и теперь вам нужно проверить какой код напишет программист для оборачивания списка из рекордов со ссылками, проверит ли он границы, хорошо ли покроет код тестами. Вы можете сформулировать задачу как "оберните список", потеряв время на уточнение задачи или как "оберните список при условии что список — это...". Я выберу второй путь, а вы? AJD>А зачем спрашивать про боинг? Чем вопрос про боинг лучше чем про списки? Почему кандидат не может уточнить задачу: что за список, какие ограничения и т.д.?
не знаю, про боинг вы предложили
по поводу уточнения я уже давно ответил на ваш вопрос — "Интервьюируемый не должен решать загадки на тему "что думал интервьюер когда задавал этот вопрос", разве что интервьюер хотел выяснить сможет ли интервьюируемый вытребовать у него уточнение спецификации, достаточен ли у него кругозор что бы понять что спецификация не полна или он кинется сразу решать что-то свое".
Если перед ним стоит такая задача, то может, без сомнения. Если перед ним стоит другая задача (например, он уже убедился что интервьюируемый обладает навыком уточнения задач), давать задачи требующие уточнения — это пустая трата времени.
Re[23]: Задача на собеседовании - обращение списка.
On 11.02.2013 21:55, AndrewJD wrote:
> V>Понятно, что у вас работают только инженеры и ни одного кодера (ху из > V>ит?, как говориться). > > Нет. Есть и те и другие.
Оба на. И как они к вам просачиваются те, иные(тьфу другие). Или все с
точностью до наоборот, по обращению списка кодеры, а те инженеры по
личным приглашениям или вообще обращения списка никакого отношения к
этому не имеют.
А суть их только почесать ЧСВ одного придурка у вас, что проводит
собеседования?
З.Ы. Да, ответа на вопрос как ты отделяешь кодеров от инженеров я так и
не увидел.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Задача на собеседовании - обращение списка.
On 11.02.2013 22:54, ishmakov wrote:
> V>Я так понимаю, что вы занимаетесь дровами под кучу разного странного > V>железа из стандартных осей? > > Нет. Мы занимаемся написанием Voice&Video over IP конференциями.
Тогда не понимаю списка ваших требований. Хотя, я нынче уже много не
понимаю. Например, нынче часто лучше писать прогу с багами, чем без —
ибо слишком быстро плохо. Например нынче часто нельзя решать задачу
просто, нужно обяхательно с применением некоей новой супер-пупер
технологии, которая делает совсем не то, что нужно по задаче. Вобщем все
чаще приходиться сталкиваться именно с совковым подходом, который даже
название имел "затратный".
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
ПМ>Может быть я что-то не понимаю в этой жизни? Не могли бы более опытные товарищи поделиться опытом и ответить на следующие вопросы: ПМ>1. Если человек не в состоянии обратить список, способен ли он вообще написать что-нибудь разумное или сразу нафиг? ПМ>2. Если сраз нафиг, то как грамотно построить интервью, чтобы дать эту задачу в самом начале, не слишком сильно человека шокировав, и распрощаться втечение пяти минут, не слишком обидев?
ПМ>З.Ы. На прошлой работе HR заставляла соискателей решать задачи про переливание воды, цветные шары и гномов в кепках. По-моему очень хорошая практика была, полные идиоты сразу отсеивались, сейчас контора гораздо более бюрократичная, тонко настроить фильтры HR-ов гораздо сложнее, приходится фильтровать самому.
Обращение всмысле указатели поменять или заставить список принять ислам? я ничему не удивлюсь кстати.
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>по поводу уточнения я уже давно ответил на ваш вопрос — "Интервьюируемый не должен решать загадки на тему "что думал интервьюер когда задавал этот вопрос", разве что интервьюер хотел выяснить сможет ли интервьюируемый вытребовать у него уточнение спецификации, достаточен ли у него кругозор что бы понять что спецификация не полна или он кинется сразу решать что-то свое".
J>Если перед ним стоит такая задача, то может, без сомнения. Если перед ним стоит другая задача (например, он уже убедился что интервьюируемый обладает навыком уточнения задач), давать задачи требующие уточнения — это пустая трата времени.
На самом деле задачи из реального мира приходят в очень нечетких формулировках, именно "пойди туда, не знаю куда, принеси то, не знаю что".
Эти задачи на разных уровнях уточняются и декомпозируются на более мелкие задачи. В идеале, каждый начальник, передавая подзадачу вниз
хочет сформулировать ее как "сделай зашибись, см. письмо [клиента]" и забыть о ней, а через разумный срок получить результат который он ожидал (как минимум).
Но это в идеале.
Логично предположить, что нанимая программиста (под этим термином понимается именно инженер-программист или по современной классификации "сеньор"),
стоит проверить подобный навык. Причем отрицательным результатом будет как полное отсутствие уточнения (человек-экстрасенс), так и уточнение всех деталей,
даже очевидных (человек-зануда). Поэтому как раз полное задание условий подобных задач интервьюером на собеседовании есть пустая трата времени,
ибо мы проигрываем по времени (которое нужно на уточнение условий) + наш тест имеет меньшее покрытие. Действительно, в реальных условиях вы же не будете
досконально объяснять человеку подобную задачу, ибо тогда ее проще сразу объяснить компьютеру, сиречь — запрограммировать самому.
Разумеется, это все относится к случаю, когда такую задачу вообще стоит задавать на собеседовании.
Здравствуйте, Vzhyk, Вы писали:
V>А суть их только почесать ЧСВ одного придурка у вас, что проводит V>собеседования?
Не стоит всех судить по своему опыту
Цель собеседования — нанять хорошего работника. Мы говорим сейчас о программистах. Адресное собеседование такого человека — очень трудоемкая операция,
ибо нужно выгрузить инфу из кеша своей головы, прочитать резюме, составить план собеседования, загрузить нужный, т.е. знакомый кандидату контекст в кеш
(чтобы тупо не поплыть перед ним, а ведь еще нужен запас) и т.д. В среднем, более одного собеседования в день нормально провести сложно. Допустим, два, если
кандидаты на одну должность и похожи. Причем в планах есть своя работа, а на собеседования в нем времени не выделяется, ибо при большом потоке получится,
что тимлид только и делает, что собеседует. В итоге он собеседует за свой счет. И вы считаете, что многим хочется чесать ЧСВ такой ценой?
Наоборот, тимлид первый заинтересован в быстрейшем найме. С другой стороны, он понимает, что при найме дебила он будет страдать больше и дольше.
И тут выходит на сцену оптимизация собеседования. Доказать соответствие кандидата на должность программиста (еще раз подчеркиваю, не код-манки, не формошлепа,
а программиста) практически невозможно, ибо полную индукцию не провести. С другой стороны, доказать несоответствие намного проще — достаточно одного
контрпримера (опять же, в идеале). А это и есть те формальные методы, которые тут многие не любят и которые используют фирмы с большим потоком кандидатов.
Задавание задачек — один из инструментов. Это тупо свертка из многих вопросов/ответов, которая экономит время. И мало кто может использовать такой инструмент
эффективно, т.к. это явный компромисс и на него надо идти осознанно.
V>З.Ы. Да, ответа на вопрос как ты отделяешь кодеров от инженеров я так и V>не увидел.
А вот тут мы смотрим на ТС и понимаем, что он задавал совершенно другой вопрос, не "зачем нужны задачки на собеседованиях", а "почему 95% людей идиоты". Ответ очевиден.
А кодеров от инженеров отделять надо не задачками, а правильно построенным собеседованием (см. выше про подготовку). Кодерам такие задачи задавать бессмысленно.
Re[26]: Задача на собеседовании - обращение списка.
On 12.02.2013 20:59, vshemm wrote:
> На самом деле задачи из реального мира приходят в очень нечетких > формулировках, именно "пойди туда, не знаю куда, принеси то, не знаю что".
Если в таком виде она доходит до программистов, то от всей прослойки
избавляются так или иначе, или увольнением прослойки или кончиной конторы.
> Эти задачи на разных уровнях уточняются и декомпозируются на более > мелкие задачи. В идеале, каждый начальник, передавая подзадачу вниз > хочет сформулировать ее как "сделай зашибись, см. письмо [клиента]" и > забыть о ней, а через разумный срок получить результат который он ожидал > (как минимум). > Но это в идеале.
Понятная лень, но ему(начальнику) не за это зарплату платят. И в итоге
он набирает тех людей, которые ничего не делают и говорят, что все
сделали зашибись, а потом у начальника начинает очень сильно гореть попа.
> Цель собеседования — нанять хорошего работника.
А характеристики не написшешь твоего понимания "хорошего работника"?
> В итоге он собеседует за > свой счет. И вы считаете, что многим хочется чесать ЧСВ такой ценой?
Тем ни менее.
> Наоборот, тимлид первый заинтересован в быстрейшем найме. С другой > стороны, он понимает, что при найме дебила он будет страдать больше и > дольше.
Опять будем обсуждать неоего идельаного тимлида, которого не существует.
В реальности же у нас сильно странные собеседование на которых
спрашивают все что угодно, но только не пытаются выяснить, будет ли
человек делать дело.
> А кодеров от инженеров отделять надо не задачками, а правильно > построенным собеседованием (см. выше про подготовку).
А только так и не понял, чем кодеры от инженеров отличаются.
Posted via RSDN NNTP Server 2.1 beta
Re[26]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Логично предположить, что нанимая программиста (под этим термином понимается именно инженер-программист или по современной классификации "сеньор"), V>стоит проверить подобный навык.
логично
V>Причем отрицательным результатом будет как полное отсутствие уточнения (человек-экстрасенс), так и уточнение всех деталей, даже очевидных (человек-зануда).
не логично. В реальной жизни специалисту вы будете казаться придурком-занудой в незнакомой для вас предметной области.
V>Поэтому как раз полное задание условий подобных задач интервьюером на собеседовании есть пустая трата времени, V>ибо мы проигрываем по времени (которое нужно на уточнение условий) + наш тест имеет меньшее покрытие.
вы внимательно прочитали фразу "например, он уже убедился что интервьюируемый обладает навыком уточнения задач"? Какое покрытие? Если человек сумел вытащить из вас информацию по одной задаче, то больше его покрывать не надо. В реальных условиях это умение суть флажок — умеет не умеет, потому что на новой для вас предметной области вы сто раз со 100% вероятностью облажаетесь в вытягивании информации из специалиста, потому что не будете знать чего из него вытягивать и нужно ли вообще чего-то вытягивать. Вы даже не подумаете усомниться что все лебеди белые и уточнить этот вопрос у специалиста, потому что вы только таких всегда и видели, а ему даже в голову не придет что кто-то может не знать о существовании черных лебедей, потому что он вырос среди и тех и других.
Так что если человек понимает что постановка задачи может быть не полна и что нужно убедиться в том что он правильно ее понял, перед тем как бросаться программировать — это правильный человек.
V>Действительно, в реальных условиях вы же не будете досконально объяснять человеку подобную задачу, ибо тогда ее проще сразу объяснить компьютеру, сиречь — запрограммировать самому.
если для вас объяснить эквивалентно запрограммировать, то может вам стоит потренироваться в постановке задач? Это тоже нелегкий труд — надо иметь представление об уровне исполнителя, знать глубину погруженности его в предметную область что бы детализировать задачу с нужной для него точностью, знать его слабые стороны, что бы сразу рассказать ему о подводных камнях при реализации и т.п.
а то что проще запрограммировать самому — это понятно. Но цель компании не дать вам попрограммировать в свое удовольствие, а решить в два раза больше задачи за одно и тоже время.
Re[5]: Задача на собеседовании - обращение списка.
Просто если программируешь под ОС — нужно знать что ты делаешь и как это сказывается...
Вот я когда разрабатываю программу — не мыслю категориями языка программирования — я мыслью сущностями, которыми я оперирую — процесс, главный поток, потоки, память, сокет, файл, объекты блокировки (вы вообще в курсе как с точки зрения ОС осуществляется блокировка потока). Для меня класс или структура — это всего лишь упорядоченный блок памяти с определенными свойствами и представлением в том или ином языке программирования... Окно, сообщение и прочее...
Главная проблема программистов — что они мыслят категориями языка программирования, а не теми сущностями, которыми пытаются оперировать, просто не понимая откуда ноги ростут... Отсюда и возникает не понимание и обычно кодят красивые библиотеки сферических коней в ваккуме с извращенными конструкциями, под задачи которые вообще никогда не будут использованы в проекте... По мне так: чем проще работа с сущностями ОС — тем лучше... Язык программирования — всего лишь инструмент над сущностями, с которыми оперирует программа и понимая свойства сущностей, сразу понятно — почему так можно, а так нельзя и не нужно учить все правила из стандарта... они все следствия...
Re[22]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>читаем вашу википедию — "спи́сок (англ. list) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза." Именно его и достаточно для определения списка. S>Строго говоря — нет. Что можно делать с абстрактным типом данных без операций над ним? Я не представляю этого. Расскажите. Можно даже взять не список, а что по-проще. Кортеж, например.
подумать зачем он нам нужен и создать на его основе уточнение абстрактного типа, например стек с набором элементарных (не базовых) операций — Create, IsEmpty, Pop, Push
J>>А список операций должен быть подходящим для вашей задачи. S>Списки операций, подходящие конкретным задачам и удовлетворяющие конкретным условиям — они могут быть только у конкретных структур данных, но никак у абстрактной.
стек — это конкретная или абстрактная структура данных?
S>>>Никто и не говорил о единственно допустимых. Речь шла о базовых. J>>где написано что набор операций обязан быть базовым, т.е. где написано что АТД — это тип содержащий исключительно базовые операции. А заодно где определение и критерии базовости операции? S>Полагаю что ответы на эти вопросы можно частично найти в этой книге. Не читал.
Ха-ха-ха, хорошая шутка. Это где Хоор вводит понятие типа (не АТД, а всего лишь типа), а про операции над последовательностью постоянно пишет "для некоторых типов задач удобна операция...", "если для последовательности определена операция..."
Еще нешел у Вирта список элементарных (и этот его термин мне больше нравится) операций над последовательностью — Open(s), Write(s, item), Read(s, item) — читает и делает внутри next, Reset(s)
S>А мои соображения следующие: определение избыточных операций смысла не имеет, т.к. их можно доопределить над базовыми. А нехватка базовых операций приведет к тому что не получится использовать список для решения множества задач, которые он призван решать.
это хорошо для мира математических абстракций. А в реальности ваша базовая операция может потребовать для данной реализации списка слишком большого времени и поэтому ее лучше не включать в реализацию. К примеру, tail(list) для списка хранящегося в файле, в зависимости от операционной системы, может потребовать скопировать файл без первого элемента. Сколько лет тогда будет работать ваша реализация и кому такой базисный набор операций нужен? Врагам, что бы дать программисту гранату замедленного действия
S>Хоар определил список через те операции, которые перечислены в русской вики (в английской они тоже перечислены, но вместе с избыточными). Возможно существует эквивалентный альтернативный набор операций. S>>>решается J>>как? S>Например, так: S>
S>List result = emptyList();
S>while (!isNull(list))
S>{
S> result = cons(head(list), result);
S> list = tail(list);
S>}
S>
увы, но вы только что завалили собеседование у Паблика, ему нужно было подобное решение
On 13.02.2013 1:07, ishmakov wrote:
> Вот я когда разрабатываю программу — не мыслю категориями языка > программирования — я мыслью сущностями, которыми я оперирую — процесс, > главный поток, потоки, память, сокет, файл, объекты блокировки (вы > вообще в курсе как с точки зрения ОС осуществляется блокировка потока). > Для меня класс или структура — это всего лишь упорядоченный блок памяти > с определенными свойствами и представлением в том или ином языке > программирования... Окно, сообщение и прочее...
Это ни чем не лучше описанного тобой ниже. А что об особенностях
кодеков? Или послали вы пакеты с запакованным звуком, а на приемном
конце они пришли не в том порядке и с задержками или вообще не дошли.
Поток, процесс, сокет, файл — это всего-лишь интсрументы такие же как
контейнеры, стандартные алгоритмы и не более, уж не говорю о
"велосипедах с квадратными колесами".
И даже на рабочий хорошо нижний уровень надо еще навесить удобный для
пользователя интерфейс или несколько разных, от железяки до проги с гуем.
Так вот кирпичики программинга, будь то файлы с потоками и блокировками
или контейнеры с алгоритмами можно достаточно вольготно менять, при
одном и том же внешнем поведении и потребительских качествах.
В результете мы имеем фактически единственный интрумент в мире, которые
обеспечивает приемлемое качество аудио и видео — Skype. Все остальное —
сплошные недоделки и в лучшем случае работают в локалке. Нет, я конечно
могу нафантазировать, что у вас лучше, но об этом никто, кроме вас не
знает — а это говорит о многом.
Posted via RSDN NNTP Server 2.1 beta
Re[23]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Строго говоря — нет. Что можно делать с абстрактным типом данных без операций над ним? Я не представляю этого. Расскажите. Можно даже взять не список, а что по-проще. Кортеж, например.
J>подумать зачем он нам нужен и создать на его основе уточнение абстрактного типа, например стек с набором элементарных (не базовых) операций — Create, IsEmpty, Pop, Push
J>стек — это конкретная или абстрактная структура данных?
Стек — абстрактная структура данных.
S>>Полагаю что ответы на эти вопросы можно частично найти в этой книге. Не читал.
J>Ха-ха-ха, хорошая шутка. Это где Хоор вводит понятие типа (не АТД, а всего лишь типа), а про операции над последовательностью постоянно пишет "для некоторых типов задач удобна операция...", "если для последовательности определена операция..."
Хоар вводит определение списка именно на основе АТД (Алгебраический тип данных). И обращаю внимание на то, что это именно определение (конечно, лишь одно из), а не конкретная реализация. Но надо еще поискать реализацию списка, которую нельзя свести к списку Хоара.
А что смешного в операциях? Действительно, некоторые операции удобны для некоторых типов задач.
J>Еще нешел у Вирта список элементарных (и этот его термин мне больше нравится) операций над последовательностью — Open(s), Write(s, item), Read(s, item) — читает и делает внутри next, Reset(s)
Мне это нравится гораздо меньше, т.к. последовательность — это математическая абстракция, в то время как список — компьютерное представление этой асбтракции. То что ввел Вирт больше похоже на итератор, чем на список.
S>>А мои соображения следующие: определение избыточных операций смысла не имеет, т.к. их можно доопределить над базовыми. А нехватка базовых операций приведет к тому что не получится использовать список для решения множества задач, которые он призван решать.
J>это хорошо для мира математических абстракций. А в реальности ваша базовая операция может потребовать для данной реализации списка слишком большого времени и поэтому ее лучше не включать в реализацию. К примеру, tail(list) для списка хранящегося в файле, в зависимости от операционной системы, может потребовать скопировать файл без первого элемента. Сколько лет тогда будет работать ваша реализация и кому такой базисный набор операций нужен? Врагам, что бы дать программисту гранату замедленного действия
Аргумент про файл неуместен, т.к. список, реализованный на голубинной почте будет работать в среднем дольше.
S>>Например, так: S>>
S>>List result = emptyList();
S>>while (!isNull(list))
S>>{
S>> result = cons(head(list), result);
S>> list = tail(list);
S>>}
S>>
J>увы, но вы только что завалили собеседование у Паблика, ему нужно было подобное решение
, к тому же еще и не требующее дополнительной памяти на копию списка.
1 — я удовлетворял ваше любопытство о том как реализовать разворот на операциях, определенных для абстрактного списка. Причем тут Паблик, казалось бы?
2 — не могли бы вы теперь дать ссылку на пост Паблика, где бы он говорил что ему нужно было решение, подобное указанному вами?
3 — указанное мной решение в общем случае не нуждается в дополнительной памяти на копию списка.
Re[24]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>Здравствуйте, samius, Вы писали: J>>Ха-ха-ха, хорошая шутка. Это где Хоор вводит понятие типа (не АТД, а всего лишь типа), а про операции над последовательностью постоянно пишет "для некоторых типов задач удобна операция...", "если для последовательности определена операция..." S>Хоар вводит определение списка именно на основе АТД (Алгебраический тип данных). И обращаю внимание на то, что это именно определение (конечно, лишь одно из), а не конкретная реализация. Но надо еще поискать реализацию списка, которую нельзя свести к списку Хоара. S>А что смешного в операциях? Действительно, некоторые операции удобны для некоторых типов задач.
то что в этой книжке нет базового набора операций, и определения базового набора нет
J>>Еще нешел у Вирта список элементарных (и этот его термин мне больше нравится) операций над последовательностью — Open(s), Write(s, item), Read(s, item) — читает и делает внутри next, Reset(s) S>Мне это нравится гораздо меньше, т.к. последовательность — это математическая абстракция, в то время как список — компьютерное представление этой асбтракции. То что ввел Вирт больше похоже на итератор, чем на список.
а кого волнует ваше отношение? Я вам привел в рамках "общепринятой терминологии в структурах данных" три варианта набора операций. Пошлете претендента за то что он учился по Кнуту, а не по Хоору?
J>>это хорошо для мира математических абстракций. А в реальности ваша базовая операция может потребовать для данной реализации списка слишком большого времени и поэтому ее лучше не включать в реализацию. К примеру, tail(list) для списка хранящегося в файле, в зависимости от операционной системы, может потребовать скопировать файл без первого элемента. Сколько лет тогда будет работать ваша реализация и кому такой базисный набор операций нужен? Врагам, что бы дать программисту гранату замедленного действия S>Аргумент про файл неуместен, т.к. список, реализованный на голубинной почте будет работать в среднем дольше.
исключительно если вы проводите теоретические изыскания, а не реальные программы пишите
J>>увы, но вы только что завалили собеседование у Паблика, ему нужно было подобное решение
, к тому же еще и не требующее дополнительной памяти на копию списка. S>1 — я удовлетворял ваше любопытство о том как реализовать разворот на операциях, определенных для абстрактного списка. Причем тут Паблик, казалось бы?
вы завалили собеседование, не написав ответ на задание данное с применением "общепринятой терминологии в структурах данных", а список я и без вас умею переворачивать
S>2 — не могли бы вы теперь дать ссылку на пост Паблика, где бы он говорил что ему нужно было решение, подобное указанному вами?
не могли бы вы пройти по ссылке, которую я вам дал и почитать реплики Паблика? Если их окажеться недостаточно, посмотреть на ответы Паблика на другие похожие решения. Реализацию переворота на основе "базовых" операций вы первый привели.
S>3 — указанное мной решение в общем случае не нуждается в дополнительной памяти на копию списка.
для сферического компилятора работающего на сферической операционке в вакууме
Re[24]: PS. Задача на собеседовании - обращение списка.
PS. Смотрите какой у нас длинный тред получился, всего лишь про список для которого есть "общепринятая терминология в структурах данных" Оно вам надо на собеседовании обсуждать АТД и историю их становления? Может проще подробно сформулировать задачу на то, что вам хочется проверить?
Тем более что если человек не интересовался лиспом или хаскелем, то он и не будет знать про ваш набор операций. Или это заведомо плохие программисты которые вам не нужны?
Re[25]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>А что смешного в операциях? Действительно, некоторые операции удобны для некоторых типов задач.
J>то что в этой книжке нет базового набора операций, и определения базового набора нет
Базовые операции над списком являются частью определения списка по Хоару. Вы смотрите на определение списка Хоара и видите в нем операции. И это в той самой книжке.
S>>Мне это нравится гораздо меньше, т.к. последовательность — это математическая абстракция, в то время как список — компьютерное представление этой асбтракции. То что ввел Вирт больше похоже на итератор, чем на список.
J>а кого волнует ваше отношение? Я вам привел в рамках "общепринятой терминологии в структурах данных" три варианта набора операций. Пошлете претендента за то что он учился по Кнуту, а не по Хоору?
У Кнута представление списка соответствует определению Хоара. Кстати, посмотрел бы я, как бы вы разворачивали список, данный в терминах Вирта (Open, Write, Read, Reset). Что-то мне кажется что код будет не сильно далек от моего.
Нет, не послал бы. Посмотрел бы, что человек понимает под списком, и как бы взялся его разворачивать. Естественно без обращения к библиотечной функции разворота контейнера.
S>>Аргумент про файл неуместен, т.к. список, реализованный на голубинной почте будет работать в среднем дольше.
J>исключительно если вы проводите теоретические изыскания, а не реальные программы пишите
Я пишу реальные программы и ваш аргумент про файл неуместен. Редкий программист станет копировать файл для реализации функции tail для списка, реализованного на файле. Я бы такого точно не взял. Кстати, работа с последовательными файлами отлично ложится на концепцию списка Хоара.
S>>1 — я удовлетворял ваше любопытство о том как реализовать разворот на операциях, определенных для абстрактного списка. Причем тут Паблик, казалось бы?
J>вы завалили собеседование, не написав ответ на задание данное с применением "общепринятой терминологии в структурах данных", а список я и без вас умею переворачивать
Код, который я привел — он для вас, а не для собеседования. И если бы умели — не утверждали бы трижды что это невозможно.
J>не могли бы вы пройти по ссылке, которую я вам дал и почитать реплики Паблика? Если их окажеться недостаточно, посмотреть на ответы Паблика на другие похожие решения. Реализацию переворота на основе "базовых" операций вы первый привели.
По ссылке, которую вы дали нет реплик Паблика. Искать ответы Паблика на похожие решения мне лень.
S>>3 — указанное мной решение в общем случае не нуждается в дополнительной памяти на копию списка.
J>для сферического компилятора работающего на сферической операционке в вакууме
Ну почему же? Конкретно на C++ под виндовсом без вакуума такой код сможет работать без дополнительной памяти.
Re[25]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>PS. Смотрите какой у нас длинный тред получился, всего лишь про список для которого есть "общепринятая терминология в структурах данных" Оно вам надо на собеседовании обсуждать АТД и историю их становления? Может проще подробно сформулировать задачу на то, что вам хочется проверить?
Конечно же повторять тред на собеседовании нет возможности. Но если я хочу узнать, что человек подразумевает под списком и умеет ли пользоваться абстракцией — то нет, не проще.
J>Тем более что если человек не интересовался лиспом или хаскелем, то он и не будет знать про ваш набор операций. Или это заведомо плохие программисты которые вам не нужны?
Вовсе не нужно интересоваться лиспом и хаскелем что бы знать о стандартных операциях над списком. Для этого достаточно лишь знать что список это абстракция, и что типичной реализацией этой асбтракции является односвязный список, который часто и называют просто "списком", опуская односвязность. Лично я об этом узнал из книги для детей типа "Паскаль в картинках" (точное название не помню).
Re[26]: PS. Задача на собеседовании - обращение списка.
On 13.02.2013 12:57, samius wrote:
> Лично я об этом узнал из книги для детей типа > "Паскаль в картинках" (точное название не помню).
И почему я предполагал оное?
Posted via RSDN NNTP Server 2.1 beta
Re[27]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 13.02.2013 12:57, samius wrote:
>> Лично я об этом узнал из книги для детей типа >> "Паскаль в картинках" (точное название не помню). V>И почему я предполагал оное?
Это риторический вопрос, или мне на него нужно ответить?
Re[28]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>то что в этой книжке нет базового набора операций, и определения базового набора нет S>Базовые операции над списком являются частью определения списка по Хоару. Вы смотрите на определение списка Хоара и видите в нем операции. И это в той самой книжке.
в русском издании не нашел
J>>а кого волнует ваше отношение? Я вам привел в рамках "общепринятой терминологии в структурах данных" три варианта набора операций. Пошлете претендента за то что он учился по Кнуту, а не по Хоору? S>У Кнута представление списка соответствует определению Хоара. Кстати, посмотрел бы я, как бы вы разворачивали список, данный в терминах Вирта (Open, Write, Read, Reset). Что-то мне кажется что код будет не сильно далек от моего.
разумеется
S>Нет, не послал бы. Посмотрел бы, что человек понимает под списком, и как бы взялся его разворачивать. Естественно без обращения к библиотечной функции разворота контейнера.
то есть все таки посмотрели бы, а не "я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных."
J>>исключительно если вы проводите теоретические изыскания, а не реальные программы пишите S>Я пишу реальные программы и ваш аргумент про файл неуместен. Редкий программист станет копировать файл для реализации функции tail для списка, реализованного на файле. Я бы такого точно не взял. Кстати, работа с последовательными файлами отлично ложится на концепцию списка Хоара.
правильно, он вообще обойдется без операции tail, если ее реализация требует копирования на данной операционной системе
S>>>1 — я удовлетворял ваше любопытство о том как реализовать разворот на операциях, определенных для абстрактного списка. Причем тут Паблик, казалось бы? J>>вы завалили собеседование, не написав ответ на задание данное с применением "общепринятой терминологии в структурах данных", а список я и без вас умею переворачивать S>Код, который я привел — он для вас, а не для собеседования. И если бы умели — не утверждали бы трижды что это невозможно.
и продолжу утверждать — написать код нужный Паблику при помощи ваших операций невозможно.
J>>не могли бы вы пройти по ссылке, которую я вам дал и почитать реплики Паблика? Если их окажеться недостаточно, посмотреть на ответы Паблика на другие похожие решения. Реализацию переворота на основе "базовых" операций вы первый привели. S>По ссылке, которую вы дали нет реплик Паблика. Искать ответы Паблика на похожие решения мне лень.
то есть ваше утверждение "И если бы умели — не утверждали бы трижды что это невозможно" основано на вашей лени... прискорбно
S>>>3 — указанное мной решение в общем случае не нуждается в дополнительной памяти на копию списка. J>>для сферического компилятора работающего на сферической операционке в вакууме S>Ну почему же? Конкретно на C++ под виндовсом без вакуума такой код сможет работать без дополнительной памяти.
а для ЕС ЭВМ с данными на магнитной ленте?
Re[26]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>PS. Смотрите какой у нас длинный тред получился, всего лишь про список для которого есть "общепринятая терминология в структурах данных" Оно вам надо на собеседовании обсуждать АТД и историю их становления? Может проще подробно сформулировать задачу на то, что вам хочется проверить? S>Конечно же повторять тред на собеседовании нет возможности. Но если я хочу узнать, что человек подразумевает под списком и умеет ли пользоваться абстракцией — то нет, не проще.
массив Кнутовской машины с числом на I месте и индексом следующего элемента на I+1 месте. Знаю реализацию операций Вставить, Найти, Следущий, Удалить, Отсортировать, Перевернуть. Я прошел собеседование?
J>>Тем более что если человек не интересовался лиспом или хаскелем, то он и не будет знать про ваш набор операций. Или это заведомо плохие программисты которые вам не нужны? S>Вовсе не нужно интересоваться лиспом и хаскелем что бы знать о стандартных операциях над списком. Для этого достаточно лишь знать что список это абстракция, и что типичной реализацией этой асбтракции является односвязный список, который часто и называют просто "списком", опуская односвязность. Лично я об этом узнал из книги для детей типа "Паскаль в картинках" (точное название не помню).
а я из Вирта, у которого другой набор операций. Что нам с этим делать...
А в какой такой книжке по Паскалю определяют операции tail, head и cons?
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Базовые операции над списком являются частью определения списка по Хоару. Вы смотрите на определение списка Хоара и видите в нем операции. И это в той самой книжке.
J>в русском издании не нашел
Я думал что определение в русской википедии взято из этой книги. Разве нет?
S>>Нет, не послал бы. Посмотрел бы, что человек понимает под списком, и как бы взялся его разворачивать. Естественно без обращения к библиотечной функции разворота контейнера.
J>то есть все таки посмотрели бы, а не "я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных."
Не вижу противоречия. Посмотрел бы и подумал бы.
S>>Я пишу реальные программы и ваш аргумент про файл неуместен. Редкий программист станет копировать файл для реализации функции tail для списка, реализованного на файле. Я бы такого точно не взял. Кстати, работа с последовательными файлами отлично ложится на концепцию списка Хоара.
J>правильно, он вообще обойдется без операции tail, если ее реализация требует копирования на данной операционной системе
А я вообще не пойму, откуда взялось требования копирования файла и на какой операционной системе. Пролейте свет, плиз.
S>>Код, который я привел — он для вас, а не для собеседования. И если бы умели — не утверждали бы трижды что это невозможно.
J>и продолжу утверждать — написать код нужный Паблику при помощи ваших операций невозможно.
может все-таки дадите ссылку на критерии Паблика? Глядя на стартовое сообщение топика я не вижу критериев, которые бы нарушал мой код.
S>>По ссылке, которую вы дали нет реплик Паблика. Искать ответы Паблика на похожие решения мне лень.
J>то есть ваше утверждение "И если бы умели — не утверждали бы трижды что это невозможно" основано на вашей лени... прискорбно
Нет, они основаны на ваших утверждениях вроде "Ну и, увы и ах, без знания внутреннего устройства вы задачу топикстартера не решите" в то время как я задачу считаю решенной, а вы отказываетесь приводить требования, которых я не вижу в стартовом посте.
S>>Ну почему же? Конкретно на C++ под виндовсом без вакуума такой код сможет работать без дополнительной памяти.
J>а для ЕС ЭВМ с данными на магнитной ленте?
А что принципиально меняет лента по отношению к микросхеме кроме времени доступа?
Re[27]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Конечно же повторять тред на собеседовании нет возможности. Но если я хочу узнать, что человек подразумевает под списком и умеет ли пользоваться абстракцией — то нет, не проще.
J>массив Кнутовской машины с числом на I месте и индексом следующего элемента на I+1 месте. Знаю реализацию операций Вставить, Найти, Следущий, Удалить, Отсортировать, Перевернуть. Я прошел собеседование?
В моем собеседовании более одного вопроса. На этот вы не ответили.
Представленный вами перечень операций неполон и выразить обращение списка (как и само определение списка) через него не выйдет. Ограничиваясь данными операциями вы даже перевернуть массив не сможете, кроме как вызвать операцию Массив.Перевернуть(). Что, в общем-то не повод зачитывать ответ.
J>а я из Вирта, у которого другой набор операций. Что нам с этим делать...
Может быть переходить к следующему вопросу, если они останутся.
J>А в какой такой книжке по Паскалю определяют операции tail, head и cons?
Помню лишь что желтая обложка, куча картинок, освещен сам язык, некоторые структуры данных и работа с ними, помню что был парсер арифметических выражений на основе обратной польской нотации. Как конкретно назывались операции — не помню, но за head/tail практически уверен. cons — х.з.
Re[28]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Конечно же повторять тред на собеседовании нет возможности. Но если я хочу узнать, что человек подразумевает под списком и умеет ли пользоваться абстракцией — то нет, не проще. J>>массив Кнутовской машины с числом на I месте и индексом следующего элемента на I+1 месте. Знаю реализацию операций Вставить, Найти, Следущий, Удалить, Отсортировать, Перевернуть. Я прошел собеседование? S>В моем собеседовании более одного вопроса. На этот вы не ответили. S>Представленный вами перечень операций неполон и выразить обращение списка (как и само определение списка) через него не выйдет. Ограничиваясь данными операциями вы даже перевернуть массив не сможете, кроме как вызвать операцию Массив.Перевернуть(). Что, в общем-то не повод зачитывать ответ.
нда... прискорбно что вы проводите собеседования, не зная как реализовать все эти операции на банальном массиве и полагая что я должен ограничиваться этими операциями. У массива есть доступ к элементам, этого достаточно что бы реализовать любые операции.
J>>а я из Вирта, у которого другой набор операций. Что нам с этим делать... S>Может быть переходить к следующему вопросу, если они останутся.
не, в компанию где программисты думают что у типа есть только список базовых операций из книжки с желтой обложкой и где они не способны реализовать сам тип, лучше не устраиваться. Так что следующего вопроса не будет
J>>А в какой такой книжке по Паскалю определяют операции tail, head и cons? S>Помню лишь что желтая обложка, куча картинок, освещен сам язык, некоторые структуры данных и работа с ними, помню что был парсер арифметических выражений на основе обратной польской нотации. Как конкретно назывались операции — не помню, но за head/tail практически уверен. cons — х.з.
печалька, человек обучавшийся программированию по книге для детей с желтой обложкой типа "Паскаль в картинках" завалил человека обучавшемуся программированию по Кнуту.
Вот она цена самоуверенности и лени при формулировании задач
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
S>>>Базовые операции над списком являются частью определения списка по Хоару. Вы смотрите на определение списка Хоара и видите в нем операции. И это в той самой книжке. J>>в русском издании не нашел S>Я думал что определение в русской википедии взято из этой книги. Разве нет?
нет
S>>>Код, который я привел — он для вас, а не для собеседования. И если бы умели — не утверждали бы трижды что это невозможно. J>>и продолжу утверждать — написать код нужный Паблику при помощи ваших операций невозможно. S>может все-таки дадите ссылку на критерии Паблика? Глядя на стартовое сообщение топика я не вижу критериев, которые бы нарушал мой код.
а откуда взялись критерии? Он не озвучивал критериев, он так же как и вы полагал что список — это очевидная и однозначная вещь. Вот только однозначность оказалась не однозначной. И мое собеседование вы не прошли, не смотря на все заверения о необходимости для кандидата уточнять задачу, сами вы уточнять ничего не стали — кинулись писать код на основе своих представлений о списке.
S>Нет, они основаны на ваших утверждениях вроде "Ну и, увы и ах, без знания внутреннего устройства вы задачу топикстартера не решите" в то время как я задачу считаю решенной, а вы отказываетесь приводить требования, которых я не вижу в стартовом посте.
задача топикстартера была не перевернуть список, а перевернуть список состоящий из рекордов со ссылками. Это же список приведен и в википедии на картинке — http://en.wikipedia.org/wiki/List_(computing)
J>>а для ЕС ЭВМ с данными на магнитной ленте? S>А что принципиально меняет лента по отношению к микросхеме кроме времени доступа?
действительно, устройство с последовательным доступом и устройство с произвольным доступом, какие между ними могут быть принципиальные различия
Как вы возьмете tail от файла на ленте?
Re[29]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Представленный вами перечень операций неполон и выразить обращение списка (как и само определение списка) через него не выйдет. Ограничиваясь данными операциями вы даже перевернуть массив не сможете, кроме как вызвать операцию Массив.Перевернуть(). Что, в общем-то не повод зачитывать ответ.
J>нда... прискорбно что вы проводите собеседования, не зная как реализовать все эти операции на банальном массиве и полагая что я должен ограничиваться этими операциями. У массива есть доступ к элементам, этого достаточно что бы реализовать любые операции.
С разворотом массива через прямой доступ к элементам — это вы ошиблись топиком. Здесь пытаются развернуть список.
S>>Может быть переходить к следующему вопросу, если они останутся.
J>не, в компанию где программисты думают что у типа есть только список базовых операций из книжки с желтой обложкой и где они не способны реализовать сам тип, лучше не устраиваться. Так что следующего вопроса не будет
Нашим проще
S>>Помню лишь что желтая обложка, куча картинок, освещен сам язык, некоторые структуры данных и работа с ними, помню что был парсер арифметических выражений на основе обратной польской нотации. Как конкретно назывались операции — не помню, но за head/tail практически уверен. cons — х.з.
J>печалька, человек обучавшийся программированию по книге для детей с желтой обложкой типа "Паскаль в картинках" завалил человека обучавшемуся программированию по Кнуту.
Запылился у вас Кнут, мхом порос. Сдуйте пыль, стряхните мох, откройте первый том в районе раздела 2.2. Там увидите что список (линейный список у Кнута) это абстракция последовательности с условие на предшествование элементов друг другу. Далее рассматриваются различные способы реализации (последовательное распределение, связанное распределение, циклические списки, дважды связанные списки и многомерные массивы).
К сожалению, Кнут не рассматривает базовый набор операций над списками (в смысле минимальный полный набор), а просто указывает что с линейными списками могут выполняться следующие операции... И далее 9 операций в том числе не тривиальных (разбиение, слияние, сортировка, поиск). Но и операции "перевернуть" среди них нет. А то что вы можете перевернуть на собеседовании массив — это ваши личные успехи, которые вряд ли заинтересуют хоть какого-нибудь собеседователя.
J>Вот она цена самоуверенности и лени при формулировании задач
Да, отличный результат. Вас сдуло после первого вопроса, даже HR-ам не придется звонить вам с сообщением об отказе.
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Я думал что определение в русской википедии взято из этой книги. Разве нет?
J>нет
Ну тогда, пардон муа, отсылаю к желтой книжке про паскаль
S>>может все-таки дадите ссылку на критерии Паблика? Глядя на стартовое сообщение топика я не вижу критериев, которые бы нарушал мой код.
J>а откуда взялись критерии? Он не озвучивал критериев, он так же как и вы полагал что список — это очевидная и однозначная вещь.
Т.е. критерии вы за топикстартера выдумали? Ну что, поздравляю, хороший ход. Проблема лишь в том, что топикстартер продемонстрировал увлечение (как минимум) функциональными языками и в частности Haskell-ем, потому ваши предположения о том что он предполагал что список — это очевидная и однозначная вещь — это всего лишь ваши предположения. Мои предположения: ваши предположения далеки от действительности.
J>Вот только однозначность оказалась не однозначной. И мое собеседование вы не прошли, не смотря на все заверения о необходимости для кандидата уточнять задачу, сами вы уточнять ничего не стали — кинулись писать код на основе своих представлений о списке.
А, так это я у вас собеседование проходил? Извините, вам показалось. Я вам пытался разжевать кое-что, а не узнать, угадал ли я ваш правильный ответ.
S>>Нет, они основаны на ваших утверждениях вроде "Ну и, увы и ах, без знания внутреннего устройства вы задачу топикстартера не решите" в то время как я задачу считаю решенной, а вы отказываетесь приводить требования, которых я не вижу в стартовом посте.
J>задача топикстартера была не перевернуть список, а перевернуть список состоящий из рекордов со ссылками. Это же список приведен и в википедии на картинке — http://en.wikipedia.org/wiki/List_(computing)
Раз уж вы ссылаетесь на картинку в википедии в данной статье, то не сочтите за труд и прочитайте первый абзац о том что такое список (хинт: абстракция). Но да, таки один из наиболее частых способов реализации списка — односвязный список. Частый, но в стандарт C++ он попал лишь в 11-ом году.
S>>А что принципиально меняет лента по отношению к микросхеме кроме времени доступа?
J>действительно, устройство с последовательным доступом и устройство с произвольным доступом, какие между ними могут быть принципиальные различия
а какие могут быть принципиальные различия между фразами "не требует дополнительной памяти с последовательным доступом" и "не требует дополнительной памяти с произвольным доступом"
J>Как вы возьмете tail от файла на ленте?
Наверное прочитаю одну очередную запись.
Вообще говоря, я не понимаю ваших проблем. Ленты не используют таким образом, как их использует Машина Тюринга. Основное назначение лент — резервное копирование и архивация данных. Даже когда мои предки работали с лентами — им не хватало ума использовать ленты в качестве оперативной памяти. Максимум — для оверлеев. Рассказать почему?
Re[30]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>нда... прискорбно что вы проводите собеседования, не зная как реализовать все эти операции на банальном массиве и полагая что я должен ограничиваться этими операциями. У массива есть доступ к элементам, этого достаточно что бы реализовать любые операции. S>С разворотом массива через прямой доступ к элементам — это вы ошиблись топиком. Здесь пытаются развернуть список.
о как, вы что и правда не читали ни Кнута, ни Вирта с Дейкстрой и не знаете что список можно реализовать при помощи массива?
J>>печалька, человек обучавшийся программированию по книге для детей с желтой обложкой типа "Паскаль в картинках" завалил человека обучавшемуся программированию по Кнуту. S>Запылился у вас Кнут, мхом порос. Сдуйте пыль, стряхните мох, откройте первый том в районе раздела 2.2. Там увидите что список (линейный список у Кнута) это абстракция последовательности с условие на предшествование элементов друг другу. Далее рассматриваются различные способы реализации (последовательное распределение, связанное распределение, циклические списки, дважды связанные списки и многомерные массивы). S>К сожалению, Кнут не рассматривает базовый набор операций над списками (в смысле минимальный полный набор), а просто указывает что с линейными списками могут выполняться следующие операции... И далее 9 операций в том числе не тривиальных (разбиение, слияние, сортировка, поиск).
совершенно верно, так что ваш наезд про мох не в тему, я вам эти операции уже приводил
S>Но и операции "перевернуть" среди них нет. А то что вы можете перевернуть на собеседовании массив — это ваши личные успехи, которые вряд ли заинтересуют хоть какого-нибудь собеседователя.
и демагогия про переворот, основанная на незнании, тоже.
J>>Вот она цена самоуверенности и лени при формулировании задач S>Да, отличный результат. Вас сдуло после первого вопроса, даже HR-ам не придется звонить вам с сообщением об отказе.
куда меня сдуло? Если я увижу что у интервьюера знания об АТД базируются на никому неведомых книгах для детей, да еще если при этом он будет лениться объяснить и самоуверенно считать свои знания об АТД абсолютом, то я и сам уйду.
ЗЫ. Зачем вы влезли в мою беседу с ishmakov, если собирались хамить и обвиненять меня в некомпетентности? Развлекаетесь от лени и безделья?
Re[31]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
J>о как, вы что и правда не читали ни Кнута, ни Вирта с Дейкстрой и не знаете что список можно реализовать при помощи массива?
Нет, неправда. Разве что Вирта не читал (и не собираюсь). И знаю что можно развернуть список при помощи массива. Но вот то что вы на вопрос о развороте списка настаиваете на развороте массива — это меня смущает.
J>совершенно верно, так что ваш наезд про мох не в тему, я вам эти операции уже приводил
Да, приводили. Но вы как-то избегаете соглашаться со мной в том факте что у Кнута список — тоже абстракция.
S>>Но и операции "перевернуть" среди них нет. А то что вы можете перевернуть на собеседовании массив — это ваши личные успехи, которые вряд ли заинтересуют хоть какого-нибудь собеседователя.
J>и демагогия про переворот, основанная на незнании, тоже.
Демагогия — это у вас. Даже раздел демагогии так называется — "подмена тезиса". Мы здесь все еще обращаем список. Гляньте в название темы. Массив — это лишь частный случай реализации списка. Потому в задаче "обращение списка" зачет не получаете.
S>>Да, отличный результат. Вас сдуло после первого вопроса, даже HR-ам не придется звонить вам с сообщением об отказе.
J>куда меня сдуло? Если я увижу что у интервьюера знания об АТД базируются на никому неведомых книгах для детей, да еще если при этом он будет лениться объяснить и самоуверенно считать свои знания об АТД абсолютом, то я и сам уйду.
Вот, вы уйдете, а я прокомментирую это термином "сдуло".
J>ЗЫ. Зачем вы влезли в мою беседу с ishmakov, если собирались хамить и обвиненять меня в некомпетентности? Развлекаетесь от лени и безделья?
Мне не понравился ваш наезд "выдает узость мышления и незнание современных языков и библиотек у интервьюера" в отношении неопределенного круга лиц. Решил посмотреть на вашу узость мышления.
Re[30]: Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>а откуда взялись критерии? Он не озвучивал критериев, он так же как и вы полагал что список — это очевидная и однозначная вещь. S>Т.е. критерии вы за топикстартера выдумали? Ну что, поздравляю, хороший ход. Проблема лишь в том, что топикстартер продемонстрировал увлечение (как минимум) функциональными языками и в частности Haskell-ем, потому ваши предположения о том что он предполагал что список — это очевидная и однозначная вещь — это всего лишь ваши предположения. Мои предположения: ваши предположения далеки от действительности.
ок, специально для вашей лени (выделение мое)
H>А как выглядит "правильное решение" этой задачи?
Паблик Морозов>Да никакого подвоха. Просто дан односвязный или двусвязный список, и надо его обратить (развернуть указатели на элементы), или как-нибудь поменять элементы местами (я обычно делаю небольшие вариации, чтобы не заучивали). Алгоритм — цикл на 4-5 строчек. Никаких специальных знаний не требуется. Можно и с рекурсией написать, если человеку так удобнее, но за этим последуют дополнительные вопросы. Переворот строки — из той же серии, просто я её уже не дают, поскольку уже не все помнять, что такое null-terminated строки и как писать на Си, а на джаве или сишарпе её писать не интересно.
...
UA>С голыми списками работают только на первом курсе университета чтобы понять как оно работает но в реальной работе велосипедостроение не приветствуется.
Паблик Морозов>Понятно, что не приветсвуется, я же написал, что задача нужна только для того, чтобы проверить, сможет ли человек написать примитивный алгоритм. Ведь давать реальные задачи невозможно по вполне очевидным причинам.
J>>Вот только однозначность оказалась не однозначной. И мое собеседование вы не прошли, не смотря на все заверения о необходимости для кандидата уточнять задачу, сами вы уточнять ничего не стали — кинулись писать код на основе своих представлений о списке. S>А, так это я у вас собеседование проходил? Извините, вам показалось. Я вам пытался разжевать кое-что, а не узнать, угадал ли я ваш правильный ответ.
не угадать, а уточнить задачу у меня или прочитав сообщения интервьюера ака Паблика Морозова
J>>задача топикстартера была не перевернуть список, а перевернуть список состоящий из рекордов со ссылками. Это же список приведен и в википедии на картинке — http://en.wikipedia.org/wiki/List_(computing) S>Раз уж вы ссылаетесь на картинку в википедии в данной статье, то не сочтите за труд и прочитайте первый абзац о том что такое список (хинт: абстракция). Но да, таки один из наиболее частых способов реализации списка — односвязный список. Частый, но в стандарт C++ он попал лишь в 11-ом году.
при чем здесь стандарт С++, если это азы зарождения структурного программирования еще прошлого века.
S>>>А что принципиально меняет лента по отношению к микросхеме кроме времени доступа? J>>действительно, устройство с последовательным доступом и устройство с произвольным доступом, какие между ними могут быть принципиальные различия S>а какие могут быть принципиальные различия между фразами "не требует дополнительной памяти с последовательным доступом" и "не требует дополнительной памяти с произвольным доступом"
это такой способ уйти от ответа, задав новый вопрос?
Хорошо, я отвечу сам на свой вопрос — вы не можете обратиться к конкретной записи на ленте, не считав предыдущие. Поэтому и памяти будет нужно больше, и времени будет нужно больше. Почитайте Кнута про сортировку, там есть глава в том числе и про выбор разных алгоритмов для памяти и ленты.
J>>Как вы возьмете tail от файла на ленте? S>Наверное прочитаю одну очередную запись.
мне казалось что tail возвращает список... Получается он возвращает запись?
S>Вообще говоря, я не понимаю ваших проблем. Ленты не используют таким образом, как их использует Машина Тюринга. Основное назначение лент — резервное копирование и архивация данных. Даже когда мои предки работали с лентами — им не хватало ума использовать ленты в качестве оперативной памяти. Максимум — для оверлеев. Рассказать почему?
даже когда вы работаете с жестким диском, для него действуют те же ограничения что и для ленты. С него хоть и можно считать с произвольного места, но времени на это надо...
Re[32]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, samius, Вы писали:
J>>о как, вы что и правда не читали ни Кнута, ни Вирта с Дейкстрой и не знаете что список можно реализовать при помощи массива? S>Нет, неправда. Разве что Вирта не читал (и не собираюсь). И знаю что можно развернуть список при помощи массива. Но вот то что вы на вопрос о развороте списка настаиваете на развороте массива — это меня смущает.
я, настаиваю? Где? Я привел массив как один из возможных способов реализации списка, на котором можно реализовать абсолютно все операции для работы со списком.
J>>совершенно верно, так что ваш наезд про мох не в тему, я вам эти операции уже приводил S>Да, приводили. Но вы как-то избегаете соглашаться со мной в том факте что у Кнута список — тоже абстракция.
Вообще-то это я вам привел кнутовский список в качестве примера АТД, как доказательство того что ваша версия АТД с "базовыми" методами не единственно возможная
S>>>Но и операции "перевернуть" среди них нет. А то что вы можете перевернуть на собеседовании массив — это ваши личные успехи, которые вряд ли заинтересуют хоть какого-нибудь собеседователя. J>>и демагогия про переворот, основанная на незнании, тоже. S>Демагогия — это у вас. Даже раздел демагогии так называется — "подмена тезиса". Мы здесь все еще обращаем список. Гляньте в название темы. Массив — это лишь частный случай реализации списка. Потому в задаче "обращение списка" зачет не получаете.
не, это вы подменяете задачу "обращение списка" на задачу "обращение списка при помощи базовых операций из книжки для детей с желтой обложкой"
S>>>Да, отличный результат. Вас сдуло после первого вопроса, даже HR-ам не придется звонить вам с сообщением об отказе. J>>куда меня сдуло? Если я увижу что у интервьюера знания об АТД базируются на никому неведомых книгах для детей, да еще если при этом он будет лениться объяснить и самоуверенно считать свои знания об АТД абсолютом, то я и сам уйду. S>Вот, вы уйдете, а я прокомментирую это термином "сдуло".
ну, хамство ХР — хорошо известный факт
J>>ЗЫ. Зачем вы влезли в мою беседу с ishmakov, если собирались хамить и обвиненять меня в некомпетентности? Развлекаетесь от лени и безделья? S>Мне не понравился ваш наезд "выдает узость мышления и незнание современных языков и библиотек у интервьюера" в отношении неопределенного круга лиц. Решил посмотреть на вашу узость мышления.
а, сладкая месть принимается
вот только "я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных", с которого вы начали, — это совершенно голословное утверждение
Re[31]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
J>>>а откуда взялись критерии? Он не озвучивал критериев, он так же как и вы полагал что список — это очевидная и однозначная вещь. S>>Т.е. критерии вы за топикстартера выдумали? Ну что, поздравляю, хороший ход. Проблема лишь в том, что топикстартер продемонстрировал увлечение (как минимум) функциональными языками и в частности Haskell-ем, потому ваши предположения о том что он предполагал что список — это очевидная и однозначная вещь — это всего лишь ваши предположения. Мои предположения: ваши предположения далеки от действительности.
J>ок, специально для вашей лени (выделение мое)
J>
H>>А как выглядит "правильное решение" этой задачи?
J>Паблик Морозов>Да никакого подвоха. Просто дан односвязный или двусвязный список, и надо его обратить (развернуть указатели на элементы), или как-нибудь поменять элементы местами (я обычно делаю небольшие вариации, чтобы не заучивали).
Отлично, только интересно, почему вы выделили то что в скобках, и не выделили альтернативный вариант "или как-нибудь поменять элементы местами"?
На всякий слуачай посмотрите на пост http://www.rsdn.ru/forum/job/4632386.1
Может поймете, насколько бы устроил топикстартера ваш разворот массива, да еще и без кода.
S>>А, так это я у вас собеседование проходил? Извините, вам показалось. Я вам пытался разжевать кое-что, а не узнать, угадал ли я ваш правильный ответ.
J>не угадать, а уточнить задачу у меня или прочитав сообщения интервьюера ака Паблика Морозова
Я не сомневаюсь в своей трактовке задачи топикстартера. А в вашей — сомневаюсь.
S>>Раз уж вы ссылаетесь на картинку в википедии в данной статье, то не сочтите за труд и прочитайте первый абзац о том что такое список (хинт: абстракция). Но да, таки один из наиболее частых способов реализации списка — односвязный список. Частый, но в стандарт C++ он попал лишь в 11-ом году.
J>при чем здесь стандарт С++, если это азы зарождения структурного программирования еще прошлого века.
не при чем. От темы список = абстракция вы опять ушли.
S>>а какие могут быть принципиальные различия между фразами "не требует дополнительной памяти с последовательным доступом" и "не требует дополнительной памяти с произвольным доступом"
J>это такой способ уйти от ответа, задав новый вопрос?
J>Хорошо, я отвечу сам на свой вопрос — вы не можете обратиться к конкретной записи на ленте, не считав предыдущие. Поэтому и памяти будет нужно больше, и времени будет нужно больше. Почитайте Кнута про сортировку, там есть глава в том числе и про выбор разных алгоритмов для памяти и ленты.
Для чтения предыдущих записей память не нужна (разве что под счетчик). А про время разговора не было, вы меня по дополнительной памяти пытаете. Я еще не забыл, о чем речь. На сортировку переходить не советую, у вас со списками еще проблемы.
J>>>Как вы возьмете tail от файла на ленте? S>>Наверное прочитаю одну очередную запись.
J>мне казалось что tail возвращает список... Получается он возвращает запись?
Нет, он вернет список, начинающийся с текущей позиции на ленте.
J>даже когда вы работаете с жестким диском, для него действуют те же ограничения что и для ленты. С него хоть и можно считать с произвольного места, но времени на это надо...
... куда меньше чем на ленте, но больше чем для "оперативной" памяти, с которой тоже случаются тормоза.
Что лента, что диск, что RAM, операция tail не требует дополнительной памяти в общем случае. А требует advance position. Что вы мне пытаетесь доказать?
Re[33]: PS. Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, samius, Вы писали:
S>>Нет, неправда. Разве что Вирта не читал (и не собираюсь). И знаю что можно развернуть список при помощи массива. Но вот то что вы на вопрос о развороте списка настаиваете на развороте массива — это меня смущает.
J>я, настаиваю? Где? Я привел массив как один из возможных способов реализации списка, на котором можно реализовать абсолютно все операции для работы со списком.
Да нет же, вы привели массив как решение, которое собеседующий должен проглотить не жуя и подавиться.
S>>Да, приводили. Но вы как-то избегаете соглашаться со мной в том факте что у Кнута список — тоже абстракция.
J>Вообще-то это я вам привел кнутовский список в качестве примера АТД, как доказательство того что ваша версия АТД с "базовыми" методами не единственно возможная
Кнутовский список не является доказательством того что (не моя версия) с АлгТД и базовым набором операций не единственно возможная. Все операции, перечисленные Кнутом (а это просто перечисление операций без претензии на полноту и минимальность), могут быть реализованы с помощью версии списка на АлгТД. Наоборот — нет.
J>не, это вы подменяете задачу "обращение списка" на задачу "обращение списка при помощи базовых операций из книжки для детей с желтой обложкой"
Вы походу так и не поняли, что подразумевается под списком у взрослых. Освежите Кнута еще разок. И википедию (русскую, английскую).
S>>Вот, вы уйдете, а я прокомментирую это термином "сдуло".
J>ну, хамство ХР — хорошо известный факт
а XP здесь в каком смысле?
S>>Мне не понравился ваш наезд "выдает узость мышления и незнание современных языков и библиотек у интервьюера" в отношении неопределенного круга лиц. Решил посмотреть на вашу узость мышления.
J>а, сладкая месть принимается
J>вот только "я бы подумал, что интервьюер не знаком с общепринятой терминологией в структурах данных", с которого вы начали, — это совершенно голословное утверждение
В случае с неопределенным интервьюером — возможно. В вашем случае я уверен до сих пор.
Re[30]: PS. Задача на собеседовании - обращение списка.
On 14.02.2013 21:16, samius wrote:
> Запылился у вас Кнут, мхом порос. > К сожалению, Кнут не рассматривает базовый набор операций над списками
Читайте правильные книжки: "Паскаль в картинках".
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Я тоже что там разворачивать? Там всего 13 строк:
template< typename Typelist, typename State = Null >
struct Reverse;
template< typename State >
struct Reverse< Null, State >
{
typedef State type;
};
template< typename Head, typename Tail, typename State, template<typename,typename> class Typelist >
struct Reverse< Typelist<Head,Tail>, State >
: Reverse< Tail, Typelist<Head,State> >
{};
Re[7]: Задача на собеседовании - обращение списка.
V>Это ни чем не лучше описанного тобой ниже. А что об особенностях V>кодеков? Или послали вы пакеты с запакованным звуком, а на приемном V>конце они пришли не в том порядке и с задержками или вообще не дошли.
Для этого есть Jitter и многие другие вещи... Для этого уже есть специалисты.
V>Поток, процесс, сокет, файл — это всего-лишь интсрументы такие же как V>контейнеры, стандартные алгоритмы и не более, уж не говорю о V>"велосипедах с квадратными колесами".
Все верно... инструментами нужно владеть...
V>В результете мы имеем фактически единственный интрумент в мире, которые V>обеспечивает приемлемое качество аудио и видео — Skype.
Мы даем качество гораздо лучше Skype по PSNR... Особенно в конференсинге... Лучше чем Google... и древний WEB-RTC...
Они на наших сотрудников охоту развернули х)
V>Все остальное — V>сплошные недоделки и в лучшем случае работают в локалке. Нет, я конечно V>могу нафантазировать, что у вас лучше, но об этом никто, кроме вас не V>знает — а это говорит о многом.
Знает 1 млд человек в Китае и Индии... Скайпу столько и не снилось... х)
А насчет Skype — сейчас работаем над Русским Скайпом с одним из крупных государственных операторов... Не все так быстро, работаем с одной из дизайнерских компаний...
Пока отлаживаем на B2B схеме... Как насытим рынок — так в B2C схему надеюсь перейдем...
Реально в мире существует только 4ре компании, что разрабатывают современные движки — это Google (с купленным старым GIPS в виде Web-RTC), Skype, Adobe (что сдает свой Flash постепенно) и мы... x)
Re[5]: Задача на собеседовании - обращение списка.
Здравствуйте, ishmakov, Вы писали: I>Мы даем качество гораздо лучше Skype по PSNR... Особенно в конференсинге... Лучше чем Google... и древний WEB-RTC... I>Они на наших сотрудников охоту развернули х)
да в плане технологий то Россия часто впереди всех бывает. а вот в плане бизнеса..
поэтому какой смысл покупать B2B российское решение, если может приехать кто-нить в газенвагене, вынести все сервера, директора посадить, а все два программиста запилившие мегасистему смоются по быстрому, пока и за них не взялись
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Vzhyk, Вы писали:
>>> Да я и не утверждаю, что это ненормально. Меня удивило, что, >>> оказывается, большое кол-во соискателей не в состоянии даже на такую >>> элементарщину ответить. V>>Ничего себе элементарщина...
L>Численно посчитать интеграл?! Вы в каком классе учетесь уважаемый? В моей далеко не самой продвинутой школе интегралы проходили в 9 классе.
все эти интегралы и производные большинством забываются сразу по факту сдачи соотвествующих экзаменов, и более никогда не вспоминаются. Кроме случаев, когда они реально по работе нужны.
Re[11]: Задача на собеседовании - обращение списка.
On 16.02.2013 10:08, Grizzli wrote:
> все эти интегралы и производные большинством забываются сразу по факту > сдачи соотвествующих экзаменов, и более никогда не вспоминаются. Кроме > случаев, когда они реально по работе нужны.
Да ладно, просто интегралы сильно разные бывают и о них тут уже все
давно забыли. Сейчас рулят задачки на простейший цикл и заполнения
боингов гомиками.
Ибо задачи бизнеса таковы: задачи бизнеса — "опердни", задачи
собеседователей — удержаться в теплом местечке.
Posted via RSDN NNTP Server 2.1 beta
Re[8]: Задача на собеседовании - обращение списка.
On 16.02.2013 1:22, ishmakov wrote:
> Мы даем качество гораздо лучше Skype по PSNR... Особенно в > конференсинге... Лучше чем Google... и древний WEB-RTC... > Они на наших сотрудников охоту развернули х)
Мне это так напомнило рекламные писульки от Спирита. Спирит, что-ли?
> Реально в мире существует только 4ре компании, что разрабатывают > современные движки — это Google (с купленным старым GIPS в виде > Web-RTC), Skype, Adobe (что сдает свой Flash постепенно) и мы... x)
Тут полагается встать и спеть гимн?
Posted via RSDN NNTP Server 2.1 beta
Re[9]: Задача на собеседовании - обращение списка.
On 16.02.2013 3:41, __kot2 wrote:
> да в плане технологий то Россия часто впереди всех бывает. а вот в плане > бизнеса..
Как легко все разводятся на сказки о "технологиях в России". Неужели
самим не смешно?
А вот в плане речевых технологий ни РФ ни СССР никогда впереди не были.
Все работы — это повторение европейских, американский и японских статей
в лучшем случае с задержкой пару лет в очень узких направлениях. Если же
взять по всем, то задержка лет 10. Причины надо объяснять?
Я бы не говорил, если бы не знал.
Возможно только в конце 50-х были впереди (Акинфиев Н.Н. с линейным
предсказанием) и то я сильно в историю исследований речи не вникал
Posted via RSDN NNTP Server 2.1 beta
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>Да ладно, просто интегралы сильно разные бывают и о них тут уже все V>давно забыли. Сейчас рулят задачки на простейший цикл и заполнения V>боингов гомиками. V>Ибо задачи бизнеса таковы: задачи бизнеса — "опердни", задачи V>собеседователей — удержаться в теплом местечке.
Ага, собеседователи удерживаются в теплом местечке благодаря задачкам на простейший цикл.
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали: >> да в плане технологий то Россия часто впереди всех бывает. а вот в плане >> бизнеса.. V>Как легко все разводятся на сказки о "технологиях в России". Неужели V>самим не смешно?
большого никакого секрета в этих технологиях нет. надо просто сесть и сделать. в Америке просто сесть и сделать не могут. в России могут.
Re[11]: Задача на собеседовании - обращение списка.
__>большого никакого секрета в этих технологиях нет. надо просто сесть и сделать. в Америке просто сесть и сделать не могут. в России могут.
Тем более — от статей до реально работающих технологий бооооольшой шаг... Как говорится было ровно на бумаге, да забыли про овраги х)
Тем более многие вещи патентованы в России и в мире... так что еще вопрос — чье и как...
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
V>>Причем отрицательным результатом будет как полное отсутствие уточнения (человек-экстрасенс), так и уточнение всех деталей, даже очевидных (человек-зануда). J>не логично. В реальной жизни специалисту вы будете казаться придурком-занудой в незнакомой для вас предметной области.
Не очень понял. Вы пишете дальше: J>Так что если человек понимает что постановка задачи может быть не полна и что нужно убедиться в том что он правильно ее понял, перед тем как бросаться программировать — это правильный человек.
С этим я согласен, это конечная цель. Но проверка на "например, он уже убедился что
интервьюируемый обладает навыком уточнения задач" как раз и осуществляется подобной
задачкой. Если проверка уже произведена — незачем ее давать (кстати, как эту проверку
делать? )
J>если для вас объяснить эквивалентно запрограммировать, то может вам стоит потренироваться в постановке задач?
Выбор алгоритмов и структур данных программист (опять же, инженер-программист или "сеньор")
должен делать самостоятельно. Задавая по необходимости вопросы вышестоящим людям. А вот он
уже может расписывать что и как закодить кодерам.
А нормально поставить задачу непросто, ибо это означает ее решить наполовину. А времени нет...
А цель компании часто именно "не дать вам попрограммировать в свое удовольствие, а решить в два
раза больше задачи за одно и тоже время". Поэтому и нужна автономность у программистов.
Re[27]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 12.02.2013 20:59, vshemm wrote:
>> На самом деле задачи из реального мира приходят в очень нечетких >> формулировках, именно "пойди туда, не знаю куда, принеси то, не знаю что". V>Если в таком виде она доходит до программистов, то от всей прослойки V>избавляются так или иначе, или увольнением прослойки или кончиной конторы.
А кто сказал, что она сразу программисту приходит? Это вы нафантазировали. Хотя,
в не чисто софтовых конторах это не редкость. Плюс, есть еще tier 3 техподдержка,
или откройте любой список рассылки/багтрекинг публичного проекта/технологии — там
как раз разработчики общаются с клиентами. Так что не все так однозначно.
>> Эти задачи на разных уровнях уточняются и декомпозируются на более >> мелкие задачи. В идеале, каждый начальник, передавая подзадачу вниз >> хочет сформулировать ее как "сделай зашибись, см. письмо [клиента]" и >> забыть о ней, а через разумный срок получить результат который он ожидал >> (как минимум). >> Но это в идеале. V>Понятная лень, но ему(начальнику) не за это зарплату платят.
Именно за это — за организацию такой работы и поддержание ее.
>> Цель собеседования — нанять хорошего работника. V>А характеристики не написшешь твоего понимания "хорошего работника"?
Общие я уже указал — "сделать зашибись (в хорошем смысле) в приемлемые сроки". Конкретнее
сказать не могу, т.к. это зависит от задач, от должности работника, от компании и т.д.
Но главное то, что любой нанимающий хочет нанять хорошего работника (пусть и в своем
понимании этого термина).
>> В итоге он собеседует за >> свой счет. И вы считаете, что многим хочется чесать ЧСВ такой ценой? V>Тем ни менее.
Тем не менее, впечатление будто вы берете априори инвалидов, отмечаете что они задают
задачи на собеседовании, и потом делаете вывод, мол, кто задает задачки — тот инвалид.
А это не так, ибо причина в правиле 95%
>> Наоборот, тимлид первый заинтересован в быстрейшем найме. С другой >> стороны, он понимает, что при найме дебила он будет страдать больше и >> дольше. V>Опять будем обсуждать неоего идельаного тимлида, которого не существует.
У программиста есть технический руководитель — тимлид, техлид, ведущий программист,
начальник отдела — неважно, называйте как хотите (даже если это одно лицо). И цимес
в том, что без него собеседование нельзя провести, а с другой стороны — это отвлекает
его от прямых обязанностей. И он заинтересован не в галочках, а в результате набора.
V>В реальности же у нас сильно странные собеседование на которых V>спрашивают все что угодно, но только не пытаются выяснить, будет ли V>человек делать дело.
В вашей реальности. Хотя согласен, это происходит чаще, чем хотелось бы.
>> А кодеров от инженеров отделять надо не задачками, а правильно >> построенным собеседованием (см. выше про подготовку). V>А только так и не понял, чем кодеры от инженеров отличаются.
В моем понимании инженер более самостоятельная единица. Он сам может принимать решения
и отвечать за них, поэтому спектр задач у него широк. А кодер — это типа техник, он делает
именно то и именно так как ему сказали. Соответственно, спектр задач уже, но и ответственности
меньше. Имхо, это главное отличие.
Еще раз, мой поинт в том, что задавание задачек на собеседовании является неплохим инструментом.
Нужно только уметь им правильно пользоваться.
З.Ы. Забавно. Vzhyk, вы в соседней ветке подняли вопрос как надо собеседовать — искать положительные
стороны или отсекать по отрицательным. Может, попытаетесь найти положительные стороны
в задавании задачек? Чтобы просто быть последовательным в своих действиях
Re[28]: Задача на собеседовании - обращение списка.
важно знать что надо сделать и где найти решение!
а уж откуда он его возьмет это дело десятое...
мне вот например при решении какой то реальной задачи было бы жалко
тратить время на этот алгортим и отладчик я бы его скопировал откуда нибудь
вовсе он не обязан дерджать в голове этот алгоритм тем более на практике ты его никогда сам не пишеш
все уже написано если только ты не на чистом си кодиш
ну и потом это решение очень языкозависимое покажите ваше решение для начала а то непонятно что вы ждете от собеседуемого
On 16.02.2013 19:48, ishmakov wrote:
> Кому интересна речь... Речь уже давно не проблема и давно задача уже > давно решена...
А можно ссылочки на решения этих проблем?
З.Ы. Мда, быстро ты скатился в толстый троллинг. Пичалька, а я уж
надеялся, что пообсуждать что можно будет.
Posted via RSDN NNTP Server 2.1 beta
Re[11]: Задача на собеседовании - обращение списка.
On 16.02.2013 19:51, __kot2 wrote:
> большого никакого секрета в этих технологиях нет. надо просто сесть и > сделать. в Америке просто сесть и сделать не могут. в России могут.
Ну и не говори. Вот только не хотят, на печи лежать лепей.
Posted via RSDN NNTP Server 2.1 beta
Re[12]: Задача на собеседовании - обращение списка.
On 16.02.2013 20:38, ishmakov wrote:
> Тем более многие вещи патентованы в России и в мире... так что еще > вопрос — чье и как...
Может сразу в Политику перейдем? Обычно там такой стиль срачей.
Posted via RSDN NNTP Server 2.1 beta
Re[28]: Задача на собеседовании - обращение списка.
On 16.02.2013 22:57, vshemm wrote:
> Выбор алгоритмов и структур данных программист (опять же, > инженер-программист или "сеньор") > должен делать самостоятельно. Задавая по необходимости вопросы > вышестоящим людям. А вот он > уже может расписывать что и как закодить кодерам.
А может проще выгнать всю эту толпу бездельников? А так это уже
напоминает такую картинку: есть каменьщик, у него толпа помощников, один
песок носит, один цемент, один воду, один мешает, один раствор подает,
один кирпичи подносит, один уровень прикладывает, один раствор кладет,
один кирпич на раствор и т.д.
> А цель компании часто именно "не дать вам попрограммировать в свое > удовольствие, а решить в два > раза больше задачи за одно и тоже время".
Тоже показательно. Чем больше задач в единицу времени сделаем, тем
больше заработаем. Но этот подход сразу приводит к тому, что чем проще
задачи, тем выгоднее. И в итоге приводит к работе на минимальной марже,
ибо конкурентов таких же море. И приходиться уже конкурировать ценой. А
дальше контора скатывается в аутсорс тестирования.
Posted via RSDN NNTP Server 2.1 beta
Re[28]: Задача на собеседовании - обращение списка.
On 16.02.2013 23:10, vshemm wrote: > V>Если в таком виде она доходит до программистов, то от всей прослойки > V>избавляются так или иначе, или увольнением прослойки или кончиной конторы. > > А кто сказал, что она сразу программисту приходит? Это вы > нафантазировали.
Не это ты нафантазировал. Вот моя формулировка: "Если в таком виде она
доходит до программистов", вот твоя: "она сразу программисту приходит".
Как грится, найди отличия.
> Именно за это — за организацию такой работы и поддержание ее.
А потом этот начальник или внезапно оказывается на улице или вместе с
конторой, подразделением. Но... пилить можно достаточно долго. Т.е. мы
пришли к "попильной" конторе, неважно какого бюджета госудасрвенного или
инвесторского.
> Общие я уже указал — "сделать зашибись (в хорошем смысле) в приемлемые > сроки".
Но в такой формулировке задачи решают в публичном доме обычно. Лучше в
этом случае набирать специалистов, а не пытаться из программистов их
сделать — очень сложно это.
> А это не так, ибо причина в правиле 95%
Нет, я говорю, только об инвалидах и о том, что количесвто их начало
увеличиваться из своих 5%. Что закономерно, если количество "попильных"
контор растет.
А это плохо для программистов — признаки пузыря и затем его лопания.
> И цимес > в том, что без него собеседование нельзя провести, а с другой стороны — > это отвлекает > его от прямых обязанностей. И он заинтересован не в галочках, а в > результате набора.
Твои 95% напомнить. Вопрос в чем он заинтересован.
> меньше. Имхо, это главное отличие.
Имхо, выгоднее уволить этого кодера, а оставить того инженера. Ничего, с
объемом работы справиться, ибо написать самому всегда быстрее, чем в
деталях объяснить задачу. Но, это в случае, если делают работу, а не
пилят бюджет.
> положительные стороны > в задавании задачек? Чтобы просто быть последовательным в своих действиях
Положительные стороны меня интересуют в людях, а не в задачках. Ибо
работать приходиться с людьми, а не с задачками. Понятно, если мне
ничего не надо делать, а только пилить, то я возьму человека, что будет
писать карсивые отчеты и красивую девку, что будет удовлетворять меня по
первому желанию, ну еще чтобы в глаза сильно не бросалось вышестоящим,
найму злобных собеседователей, что будут мне обеспечивать прикрытие
некоторым количеством ОП.
Posted via RSDN NNTP Server 2.1 beta
Re[28]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>С этим я согласен, это конечная цель. Но проверка на "например, он уже убедился что V>интервьюируемый обладает навыком уточнения задач" как раз и осуществляется подобной V>задачкой. Если проверка уже произведена — незачем ее давать (кстати, как эту проверку V>делать? )
а вы ровно одну задачу на собеседовании даете?
J>>если для вас объяснить эквивалентно запрограммировать, то может вам стоит потренироваться в постановке задач? V>Выбор алгоритмов и структур данных программист (опять же, инженер-программист или "сеньор") V>должен делать самостоятельно. Задавая по необходимости вопросы вышестоящим людям. А вот он V>уже может расписывать что и как закодить кодерам.
кто такие кодеры? Это такие автоматы, которые безошибочно пишут программы по абсолютно однозначным спецификациям? То есть вы написали программу на метаязыке, а они ее без ошибок закодировали на С++?
V>А нормально поставить задачу непросто, ибо это означает ее решить наполовину. А времени нет...
нет, решить включает запрограммировать, протестировать и отладить. А последние 2 пункта занимают наибольшее время.
Re[12]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали: V>On 16.02.2013 19:51, __kot2 wrote: >> большого никакого секрета в этих технологиях нет. надо просто сесть и >> сделать. в Америке просто сесть и сделать не могут. в России могут. V>Ну и не говори. Вот только не хотят, на печи лежать лепей.
в Росси проблема не с программистами, а с организацией бизнеса. созданное продать не могут. и даже что-то хорошее быстро забывается и теряется
Re[13]: Задача на собеседовании - обращение списка.
On 18.02.2013 20:07, __kot2 wrote:
> в Росси проблема не с программистами, а с организацией бизнеса. > созданное продать не могут. и даже что-то хорошее быстро забывается и > теряется
Во-первых, к озвученной теме программисты (в рамках обсуждения, или как
их еще тут называют кодеры, которые постигли дао O-большое от
стандартных алгоритмов) имеют мало отношения.
Во-вторых, то что есть успешно продается, когда нужно.
Posted via RSDN NNTP Server 2.1 beta
Re[14]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали: V>Во-вторых, то что есть успешно продается, когда нужно.
какая-то странная оговорка "когда нужно". из продающихся успешно продуктов-сервисов можно назвать только Касперского да Яндекс. И все.
Re[15]: Задача на собеседовании - обращение списка.
On 18.02.2013 22:14, __kot2 wrote:
> V>Во-вторых, то что есть успешно продается, когда нужно. > какая-то странная оговорка "когда нужно".
Не оговорка, а именно так и есть. При излишней явной прибыли могут и от
кормушки отлучить.
Posted via RSDN NNTP Server 2.1 beta
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 16.02.2013 22:57, vshemm wrote:
>> Выбор алгоритмов и структур данных программист (опять же, >> инженер-программист или "сеньор") >> должен делать самостоятельно. Задавая по необходимости вопросы >> вышестоящим людям. А вот он >> уже может расписывать что и как закодить кодерам. V>А может проще выгнать всю эту толпу бездельников? А так это уже V>напоминает такую картинку: есть каменьщик, у него толпа помощников, один V>песок носит, один цемент, один воду, один мешает, один раствор подает, V>один кирпичи подносит, один уровень прикладывает, один раствор кладет, V>один кирпич на раствор и т.д.
Это сарказм или вы серьезно? Если серьезно — ознакомтесь с такими понятиями как
разделение труда, конвеер и т.п. А лучше я приведу другой пример — минометный расчет,
где все именно так, как вы и описали. Сержант командует и выдет целеуказание,
солдаты носят-заряжают. Для крупнокалиберных (от 120мм) минометов расчет состоит
из ~10(!) человек. И это объективно оптимальное решение. Только не нужно апеллировать
к тому, что у программистов другая работа, каменщик намного дальше от инженера, чем
командир миномета (по ответственности, например).
>> А цель компании часто именно "не дать вам попрограммировать в свое >> удовольствие, а решить в два >> раза больше задачи за одно и тоже время". V>Тоже показательно. Чем больше задач в единицу времени сделаем, тем V>больше заработаем. Но этот подход сразу приводит к тому, что чем проще V>задачи, тем выгоднее. И в итоге приводит к работе на минимальной марже, V>ибо конкурентов таких же море. И приходиться уже конкурировать ценой. А V>дальше контора скатывается в аутсорс тестирования.
Заметьте, первая цитата — не моя. Но ваши выводы сильно расходятся с жизнью, особенно
в Москве. Здесь имхо минимальная маржа — от 100% в сфере не-продаж )))
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, Vzhyk, Вы писали:
V>On 16.02.2013 23:10, vshemm wrote: >> V>Если в таком виде она доходит до программистов, то от всей прослойки >> V>избавляются так или иначе, или увольнением прослойки или кончиной конторы. >> >> А кто сказал, что она сразу программисту приходит? Это вы >> нафантазировали. V>Не это ты нафантазировал. Вот моя формулировка: "Если в таком виде она V>доходит до программистов", вот твоя: "она сразу программисту приходит". V>Как грится, найди отличия.
Вашу формулировку я понял, но это и есть ваши предположения. Впрочем, на это
я уже ответил выше — не всегда это плохо, иногда необходимо и даже хорошо.
>> Именно за это — за организацию такой работы и поддержание ее. V>А потом этот начальник или внезапно оказывается на улице или вместе с V>конторой, подразделением. Но... пилить можно достаточно долго. Т.е. мы V>пришли к "попильной" конторе, неважно какого бюджета госудасрвенного или V>инвесторского.
Опять фантазируете.
>> Общие я уже указал — "сделать зашибись (в хорошем смысле) в приемлемые >> сроки". V>Но в такой формулировке задачи решают в публичном доме обычно. Лучше в V>этом случае набирать специалистов, а не пытаться из программистов их V>сделать — очень сложно это.
Извините, вам сколько лет-то, что вы ТАК трактуете ответ (пусть и неоднозначный)?
>> положительные стороны >> в задавании задачек? Чтобы просто быть последовательным в своих действиях V>Положительные стороны меня интересуют в людях, а не в задачках. Ибо V>работать приходиться с людьми, а не с задачками. V>...
Согласен, но одно другому не мешает. А ... опять фантазии.
>> А это не так, ибо причина в правиле 95% V>Нет, я говорю, только об инвалидах и о том, что количесвто их начало V>увеличиваться из своих 5%. Что закономерно, если количество "попильных" V>контор растет. V>А это плохо для программистов — признаки пузыря и затем его лопания.
Воот, моя догадка верна: V>Тем не менее, впечатление будто вы берете априори инвалидов, отмечаете что они задают V>задачи на собеседовании, и потом делаете вывод, мол, кто задает задачки — тот инвалид. V>А это не так, ибо причина в правиле 95%
Честно говоря, мне тоже субъективно кажется, что количество дебилов выросло. Но, во-первых,
это может быть чисто субъективным явлением (я сам тоже меняюсь + могу ошибаться), во-вторых,
нет причинно-следственной свзяи между задачками на собеседовании и инвалидностью (как раз
наоборот, злоупотребление задачками есть следствие падения уровня при условии что он падает),
и в-третьих, вы только и делаете, что ноете как все плохо, никакого конструктива. Предложите
что-нибудь, что может изменить такое положение дел (желательно в отдельной ветке).
Засим считаю все наши основные вопросы по данной теме закрытыми.
Re[29]: Задача на собеседовании - обращение списка.
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, vshemm, Вы писали:
V>>С этим я согласен, это конечная цель. Но проверка на "например, он уже убедился что V>>интервьюируемый обладает навыком уточнения задач" как раз и осуществляется подобной V>>задачкой. Если проверка уже произведена — незачем ее давать (кстати, как эту проверку V>>делать? )
J>а вы ровно одну задачу на собеседовании даете?
Честно говоря, я и одну задачу редко задаю
Примерно получается так: ~60-70% — 0 задач, ~30-40% — 1 задача, ~0% — >1 задачи (единичные случаи).
Но это мой опыт и в моей сфере.
А цимес в том, что вторая задача на собеседовании дает мало выхлопа даже в идеале, поэтому особого
смысла ее задавать нет. Лучше потратить эти 10-15 мин на другое (время собеседования ограничено — час,
максимум, полтора).
Так что я говорил именно про первую задачу, да.
J>кто такие кодеры? Это такие автоматы, которые безошибочно пишут программы по абсолютно однозначным спецификациям? То есть вы написали программу на метаязыке, а они ее без ошибок закодировали на С++?
Именно. Но мы даем определения, а они описывают не реальную жизнь, а некую модель. Степень
соответствия модели реальной жизни может варьироваться. Это нормально, особенно в такой грубой
классификации.
V>>А нормально поставить задачу непросто, ибо это означает ее решить наполовину. А времени нет... J>нет, решить включает запрограммировать, протестировать и отладить. А последние 2 пункта занимают наибольшее время.
Вот тут не согласен. Как раз для инженера-программиста тестирование и отладка занимают не большую
часть времени (<<50%). Я раньше тоже не понимал как может быть иначе, но спасибо хорошим людям
А для кодера так оно и есть. Он набирает из гугла куски кода, потом их начинает методом тыка педалить,
пытаясь заставить эту кучу говна выдавать приемлемый результат. Однако, подобный процесс начиная
с некоторой сложности задачи перестает сходиться. Ну, ТВ говорит, что он может сойтись, но бизнес
к вероятностям относится очень негативно. Это типичный пример, когда кодеру задают непосильную для него задачу.
Конечно, есть R&D, где итерационный процесс норма, и там тонны кода легко могут вылететь в корзину,
но для R&D код редко является выхлопом.
Есть и другие примеры. Я просто пытаюсь показать разные варианты
Re[30]: Задача на собеседовании - обращение списка.
On 22.02.2013 23:28, vshemm wrote:
> Это сарказм или вы серьезно? Если серьезно — ознакомтесь с такими > понятиями как > разделение труда, конвеер и т.п. А лучше я приведу другой пример — > минометный расчет, > где все именно так, как вы и описали. Сержант командует и выдет > целеуказание, > солдаты носят-заряжают. Для крупнокалиберных (от 120мм) минометов расчет > состоит > из ~10(!) человек. И это объективно оптимальное решение. Только не нужно > апеллировать > к тому, что у программистов другая работа, каменщик намного дальше от > инженера, чем > командир миномета (по ответственности, например).
Если вы у себя на конторе смогли свести работу программистов, к такому,
почем тот, кто это сделал еще не Форд?
> Заметьте, первая цитата — не моя. Но ваши выводы сильно расходятся с > жизнью, особенно в Москве. Здесь имхо минимальная маржа — от 100% в сфере не-продаж )))
Может 146?
Posted via RSDN NNTP Server 2.1 beta
Re[30]: Задача на собеседовании - обращение списка.
Здравствуйте, vshemm, Вы писали:
V>Честно говоря, я и одну задачу редко задаю V>Примерно получается так: ~60-70% — 0 задач, ~30-40% — 1 задача, ~0% — >1 задачи (единичные случаи). V>Но это мой опыт и в моей сфере. V>А цимес в том, что вторая задача на собеседовании дает мало выхлопа даже в идеале, поэтому особого V>смысла ее задавать нет. Лучше потратить эти 10-15 мин на другое (время собеседования ограничено — час, V>максимум, полтора). V>Так что я говорил именно про первую задачу, да.
это очень интересная метода — 60-70% вы отсеиваете ничего не спросив, оставшихся набираете по результатам 15 минутной задачи. Вы HR 45 минут беседующий с кандидатом на отвлеченные темы?
J>>кто такие кодеры? Это такие автоматы, которые безошибочно пишут программы по абсолютно однозначным спецификациям? То есть вы написали программу на метаязыке, а они ее без ошибок закодировали на С++? V>Именно. Но мы даем определения, а они описывают не реальную жизнь, а некую модель. Степень V>соответствия модели реальной жизни может варьироваться. Это нормально, особенно в такой грубой V>классификации.
по моим наблюдениям степень соответствия близка к 0. Люди которые только и умеют что переводить программу с одного языка на другой никому не нужны
V>>>А нормально поставить задачу непросто, ибо это означает ее решить наполовину. А времени нет... J>>нет, решить включает запрограммировать, протестировать и отладить. А последние 2 пункта занимают наибольшее время. V>Вот тут не согласен. Как раз для инженера-программиста тестирование и отладка занимают не большую V>часть времени (<<50%). Я раньше тоже не понимал как может быть иначе, но спасибо хорошим людям
это только для вашего кодера у которого есть спецификация покрытая кем-то тестами
V>А для кодера так оно и есть. Он набирает из гугла куски кода, потом их начинает методом тыка педалить, V>пытаясь заставить эту кучу говна выдавать приемлемый результат. Однако, подобный процесс начиная V>с некоторой сложности задачи перестает сходиться. Ну, ТВ говорит, что он может сойтись, но бизнес V>к вероятностям относится очень негативно. Это типичный пример, когда кодеру задают непосильную для него задачу.
ни разу с такими программистами не работал
V>Есть и другие примеры. Я просто пытаюсь показать разные варианты
какие-то они экзотические
Re[31]: Задача на собеседовании - обращение списка.
On 27.02.2013 9:44, jhfrek wrote:
> это очень интересная метода — 60-70% вы отсеиваете ничего не спросив, > оставшихся набираете по результатам 15 минутной задачи.
Это достаточно четко говорит о том, что поток кандидатов достаточно
большой и в общем все кандидаты в среднем одинаковы. Т.е. выбор можно
делать выбрасыванием монетки.
Posted via RSDN NNTP Server 2.1 beta
Re[30]: Задача на собеседовании - обращение списка.
On 23.02.2013 0:02, vshemm wrote:
> А для кодера так оно и есть. Он набирает из гугла куски кода, потом их > начинает методом тыка педалить, > пытаясь заставить эту кучу говна выдавать приемлемый результат. Однако, > подобный процесс начиная > с некоторой сложности задачи перестает сходиться. Ну, ТВ говорит, что он > может сойтись, но бизнес > к вероятностям относится очень негативно. Это типичный пример, когда > кодеру задают непосильную для него задачу. > > Конечно, есть R&D, где итерационный процесс норма, и там тонны кода > легко могут вылететь в корзину, > но для R&D код редко является выхлопом.
Круто. Теперь понятно, что за задачи вы делаете и каких людей набираете.
Но, не боитесь, что кто-то автоматизирует вашу деятельность и обойдет на
повороте? Хотя это вопрос не к тебе, это к владельцам, странно только
то, что ты так ратуешь за подобный подход — ты же не сможешь найти
работу через 5 лет.
Posted via RSDN NNTP Server 2.1 beta
Re[8]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).
Им религия не позволяет. Это же изобретение велосипеда. Настоящий профессионал должен найти и использовать готовый фреймворк.
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Pzz, Вы писали:
Pzz>Им религия не позволяет. Это же изобретение велосипеда. Настоящий профессионал должен найти и использовать готовый фреймворк.
Только ассемблер, только хардкор.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, mgu, Вы писали:
Pzz>>Им религия не позволяет. Это же изобретение велосипеда. Настоящий профессионал должен найти и использовать готовый фреймворк.
mgu>Только ассемблер, только хардкор.
Фи. Не люблю языки с динамической типизацией.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Код. Заодно смотрю как человек его пишет. Если у человека есть какая-то разумная система именования идентификаторов (пусть даже не общепринятая), если он использует табуляцию — это сразу плюс. Если зовёт переменные node1, node2 — то сразу минус. Если спеллит непривильно — еще один минус. Причем хорошего программиста сразу видно — назвал ноды prev, current, next — уже на полпути к успеху, скорее всего правильно напишет. Назвал node1, node2 — сам запутался в присваиваниях и слился.
А если пишит непроперно?
Re[10]: Задача на собеседовании - обращение списка.
Здравствуйте, Handie, Вы писали:
H>Знаменитая история. Джоел спольски любил задавать вопрос — нарисуйте дом. Вы рисуете квадратик с шапочкой, может даже окошком и дверцей. И когда закончили, Спольски говорил — да, совсем забыл. Домик-то для двуголовых жирафов. Что, размеры не те? чего не уточняли? все, до свиданья.
А на парковке компании, где работает этот жираф Спольски, несчастные случаи были?
Re[2]: Задача на собеседовании - обращение списка.
Здравствуйте, Сыроежка, Вы писали:
С>Все подобные задачи выдумывают люди, которые на самом деле не являются программистами, или по крайней мере очень слабые программисты, и наивно думают, что программисты решают какие-то заковыристные задачи на работе. С>Я вас разочарую, но в 99% работа программистов не связана с решение каких-либо логичесаких головоломок. Работа программистов вообще не в этом состоит! Работа программистов состоит в написании грамотного, легко читаемого кода! С>Поэтому напрашивается вопрос, что вы сами как раз очень слабый программист, если этого не понимаете! С>Меня вообще смешат такие интервьюиры, которые сами решили какую-то задачку и наивно считают, что дрругие обязаны знать решение этой задачии. То есть это крайне оограниченные люди, которые наивно думают, что все обязаны знать именно то, что этот ограниченный человек для себя открыл только вчера! С>Самое смешное, что интернет завален решением этой задачи, так как, похоже, горе-интервьюиры ничего другого не знают, о чем можно спросить программиста. С>Программистам просто на подобном собеседовании надо сразу же делать вывод, что на этйо фирме работают не профессиональные программисты, а дураки, кичащиеся знанием решения совершенно никчемной задачи!
Если вы такой умный, то попробуйте решить логическую задачу: с точки зрения работодателя, идеальным сотрудником будет тот, кто готов с горящими глазами делать унылую работу за миску супа. Назовите такого человека одним словом.
Re[3]: Задача на собеседовании - обращение списка.
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, Сыроежка, Вы писали:
С>>Программистам просто на подобном собеседовании надо сразу же делать вывод, что на этйо фирме работают не профессиональные программисты, а дураки, кичащиеся знанием решения совершенно никчемной задачи!
M>Мне тяжело представить , чем занимается програмист если не может решить задачу разворота списка. Может термины перепутали ?
Здравствуйте, mgu, Вы писали:
mgu>Если вы такой умный, то попробуйте решить логическую задачу: с точки зрения работодателя, идеальным сотрудником будет тот, кто готов с горящими глазами делать унылую работу за миску супа. Назовите такого человека одним словом.
Ловите некропостера!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Задача на собеседовании - обращение списка.
Здравствуйте, mgu, Вы писали:
M>>Мне тяжело представить , чем занимается програмист если не может решить задачу разворота списка. Может термины перепутали ? mgu>Вот список:
mgu>