Чувак, возвращайся из мира фантазий в реальность? Какие, нах, меры? Речь идет о школьном алгоритме — равибваем ось 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 кандидатов с такой задачей справится не могут, их надо отсеивать и не тратить по полтора часа на собеседование каждого. Ведь тогда на работу времени не останется.
Отсеивать надо, если ты считаешь, что приобрести такой навык сложно. Если человека можно научить за пару часов решать подобные задачи — то стоит ли отсеивать людей по этому критерию?