Re[19]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 16:21
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Итого, расход памяти 2 х длинна строки, 3 прохода. При том что задача решается за один проход и без расхода памяти.


условие первоначальное было с оговоркой рекурсия толи непрочитали толи плохо прочитали

а вторая попытка на оценке не сказывается как и третья а здесь видно пошутить решили ну и ладно
Re[19]: C# - как проводить собеседование ?
От: Ромашка Украина  
Дата: 04.11.07 16:43
Оценка:
AndrewVK пишет:
> Итого, расход памяти 2 х длинна строки, 3 прохода. При том что задача
> решается за один проход и без расхода памяти.

Ужасть-то какая. Тогда поясните, почему данный конкретный пример у
меня работает быстрее


static void Main(string[] args)
         {
 
TestSymmetric("12345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321");
         }

         static void TestSymmetric(string testString)
         {
             Console.WriteLine(string.Format("Длина строки - {0}", 
testString.Length.ToString()));

             DateTime __startTime = DateTime.Now;
             for (int i = 0; i < 10000000; i++)
                 IsSymmetric(testString);
             DateTime __endTime = DateTime.Now;
             Console.WriteLine(string.Format("Ромашка:  {0}", 
TimeSpan.FromTicks(__endTime.Ticks - __startTime.Ticks).ToString()));

             __startTime = DateTime.Now;
             for (int i = 0; i < 10000000; i++)
                 IsSymmetric2(testString);
             __endTime = DateTime.Now;
             Console.WriteLine(string.Format("Классика: {0}", 
TimeSpan.FromTicks(__endTime.Ticks - __startTime.Ticks).ToString()));

         }

         static bool IsSymmetric(string str)
         {
             int n = str.Length;
             char[] __chrs = str.Substring(n - n / 2).ToCharArray();
             Array.Reverse(__chrs);
             return str.Substring(0, n / 2) == new string(__chrs);
         }
         static bool IsSymmetric2(string str)
         {
             int i = 0; int j = str.Length - 1;
             while (j - i > 0)
                 if (str[j--] != str[i++])
                     return false;
             return true;
         }
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[19]: C# - как проводить собеседование ?
От: Ромашка Украина  
Дата: 04.11.07 16:53
Оценка: +2
Dan Dare III пишет:
> условие ты не понял у тебя есть еще две попытки

Извини, мне лениво.

> даже то решение что ты привел далеко от идеала цикл for в строке не зря

> есть индексатор

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

Понимаешь в чем проблема? Ты пытаешься выяснить чего я не знаю, я
пытаюсь тебе показать, что я умею. Первое же нетривиальное решение и
каждый из нас уверен, что его собеседник идиот. ИМХО, очень плохая
тактика, пусть даже на собеседовании.
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[20]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 17:41
Оценка: :)
Здравствуйте, Ромашка, Вы писали:

Р>Понимаешь в чем проблема? Ты пытаешься выяснить чего я не знаю, я

Р>пытаюсь тебе показать, что я умею.

человек которые не понимает условие и настаивает на своей правоте не интересен в принципе

если рекурсию ты не умеешь извини нам нужны те кто её умеют

Р>каждый из нас уверен, что его собеседник идиот. ИМХО, очень плохая


не каждый а только ты в этом уверен
я не снижаю бал за твое решение если ты напишешь рекурсию хоть бы и с третьей попытки

показывать что ты умеешь нужно не только задачей а то вопрос про рекурсию а кандидат толкает про массивы
как я могу что либо оценивать в этом случае ?
Re[20]: C# - как проводить собеседование ?
От: The Lex Украина  
Дата: 04.11.07 17:45
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Понимаешь в чем проблема? Ты пытаешься выяснить чего я не знаю, я

Р>пытаюсь тебе показать, что я умею. Первое же нетривиальное решение и
Р>каждый из нас уверен, что его собеседник идиот. ИМХО, очень плохая
Р>тактика, пусть даже на собеседовании.

Но очень распространенная. Чаще всего описывается "популярным шоу": "вот вам вопрос, а теперь угадайте, какой правильный ответ я загадал." (к)
Голь на выдумку хитра, однако...
Re[20]: C# - как проводить собеседование ?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.11.07 17:59
Оценка: +1
Здравствуйте, Ромашка, Вы писали:

Р>Ужасть-то какая. Тогда поясните, почему данный конкретный пример у

Р>меня работает быстрее

Потому что подобные тесты надо запускать с включенной оптимизацией, в релизе, и не в студии.
Да и не важно все это, цель собеседования ведь не выяснить знания каких то тонкостей, а определить базовые умения. Если, как ты утверждаешь, основанием для подобного кода являлось не неумение написать "классический вариант", а стремление показать знание каких то тонкостей, то это быстро выяснится после одного-двух наводящих вопросов.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[21]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 18:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Потому что подобные тесты надо запускать с включенной оптимизацией, в релизе, и не в студии.

AVK>Да и не важно все это, цель собеседования ведь не выяснить знания каких то тонкостей, а определить базовые умения. Если, как ты утверждаешь, основанием для подобного кода являлось не неумение написать "классический вариант", а стремление показать знание каких то тонкостей, то это быстро выяснится после одного-двух наводящих вопросов.

конечно это самое главное — по самой маленькой задаче можно задать массы вопросов
Re[21]: C# - как проводить собеседование ?
От: The Lex Украина  
Дата: 04.11.07 18:08
Оценка:
Здравствуйте, Dan Dare III, Вы писали:

Р>>Понимаешь в чем проблема? Ты пытаешься выяснить чего я не знаю, я

Р>>пытаюсь тебе показать, что я умею.

DDI>человек которые не понимает условие и настаивает на своей правоте не интересен в принципе


результат решения задачи "собеседование" очевиден для обоих...

DDI>если рекурсию ты не умеешь извини нам нужны те кто её умеют


Р>>каждый из нас уверен, что его собеседник идиот. ИМХО, очень плохая


DDI>не каждый а только ты в этом уверен

DDI>я не снижаю бал за твое решение если ты напишешь рекурсию хоть бы и с третьей попытки

DDI>показывать что ты умеешь нужно не только задачей а то вопрос про рекурсию а кандидат толкает про массивы

DDI>как я могу что либо оценивать в этом случае ?

Основная проблема: Вы не можете внятно пояснить Ему чего Вы хотите — Он не может внятно понять Вас чего Вы хотите. Здесь "Он" и "Вы" — конкретные люди: конкретный кандидат и конкретный "потенциальный работодатель". Результат очевиден: какими бы навыками в действительности не обладали и первый и второй, понимания между ними нет. Кто в этом виновать — простите за выражение, пофиг — результат: вместе им не работать.

имхо, после 2-3-х собеседований с аналогичным результатом — точнее, с аналогичной причиной отрицательного результата — имеет смысл задуматься и первому, и второму. Но это так — имхо...
Голь на выдумку хитра, однако...
Re[22]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 18:22
Оценка:
Здравствуйте, The Lex, Вы писали:

DDI>>человек которые не понимает условие и настаивает на своей правоте не интересен в принципе


TL> результат решения задачи "собеседование" очевиден для обоих...


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

TL>Основная проблема: Вы не можете внятно пояснить Ему чего Вы хотите — Он не может внятно понять Вас чего Вы хотите.


здесь проблемы никакой Ромашка сначала хотел пошутить а потом полез на броневик
я не сомневаюсь что он напишет рекурсию а он вот про идиотов речь завел — нехорошо это

TL>Здесь "Он" и "Вы" — конкретные люди: конкретный кандидат и конкретный "потенциальный работодатель". Результат очевиден: какими бы навыками в действительности не обладали и первый и второй, понимания между ними нет. Кто в этом виновать — простите за выражение, пофиг — результат: вместе им не работать.


я с тобой согласен но здесь форум а не собеседование

TL>имхо, после 2-3-х собеседований с аналогичным результатом — точнее, с аналогичной причиной отрицательного результата — имеет смысл задуматься и первому, и второму. Но это так — имхо...


так и есть
Re[14]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 18:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

DDI>>это не хамство как раз, прочитай свое сообщение про продакшн код

DDI>>тебя посадить к нам на собеседование и ты зарежешь всех кандидатов что у меня за год были

AVK>Сочувствую.


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

AVK>>>Нет, констатация факта. Сейчас с теми терминами, что я перечислил, знакомы даже студенты.

DDI>>ты хочешь сказать что именно ко мне попадают люди которые этого не знают ?
AVK>Видимо да.

тогда смотри выше
Re[19]: C# - как проводить собеседование ?
От: Ravlyk Австралия http://stitcharteasy.com
Дата: 04.11.07 18:28
Оценка:
Здравствуйте, Dan Dare III, Вы писали:

DDI>используй индексатор его не зря в string сунули


А вы в курсе что индексатор на каждый вызов делает проверку на вхождение индекса в границы. И операция эта занимает время? (В результате чего предложенные варианты без индексатора, но с болшей памятью работают быстрее).
Re[21]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 18:29
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Я дождусь все-таки ответа Dan Dare III.


можно просто DDI или Семён

зы Dan Dare III потому что это моя первая игра на спектруме в которую играл
Re[23]: C# - как проводить собеседование ?
От: The Lex Украина  
Дата: 04.11.07 18:40
Оценка:
Здравствуйте, Dan Dare III, Вы писали:

DDI>Здравствуйте, The Lex, Вы писали:


DDI>>>человек которые не понимает условие и настаивает на своей правоте не интересен в принципе


TL>> результат решения задачи "собеседование" очевиден для обоих...


DDI>если за три попытки кандидат так и не дал рекурсии а бывает и так то дальше я говорю что больше разговаривать нет смысла

DDI>мои коллеги меня поддерживают в этом

TL>>Основная проблема: Вы не можете внятно пояснить Ему чего Вы хотите — Он не может внятно понять Вас чего Вы хотите.


DDI>здесь проблемы никакой Ромашка сначала хотел пошутить а потом полез на броневик

DDI>я не сомневаюсь что он напишет рекурсию а он вот про идиотов речь завел — нехорошо это

Если честно, то я тоже (хоть и читаю в пол-уха — у нас вечер воскресенья) не понял какую такую "рекурсию" ты (Вы?) имеешь в виду и почему ты после 1-й неправильной попытки сказал "пробуй еще", а не попытался объяснить задачу. В виду этого лично мне непонятно, зачем тратить твое и его время (мы о собеседовании — не про тебя и Ромашку здесь) на дальнейшие попытки. Я же говорю: в игру "я угадаю загаданный вами ответ с 3-х попыток!" играть неинтересно — по крайней мере, на собеседовании. К тому же это явно говорит о том, что есть непонимание между кандидатом и потенциальным менеджером или сложившейся системой — раз уж собеседующий в ней уже работает и, наверное, успешно. Раз так — какой смысл пытаться вникнуть в "черный ящик закрытой системы", если он "закрылся" еще до начала непосредственной работы? Деньги за это не платят, а вероятность "продолжить играть в загадки" и после собеседования крайне высока. И для первого, и для второго Ромашка выбрал, имхо, самый рациональный вариант: оба говорят другому "ты — идиот" — можно мысленно — и вежливо расходятся. Никому ни тепло, ни жарко — это просто собеседование. А вот когда таких "идиотов" становится много — "это Же неспроста!.." (к)

TL>>Здесь "Он" и "Вы" — конкретные люди: конкретный кандидат и конкретный "потенциальный работодатель". Результат очевиден: какими бы навыками в действительности не обладали и первый и второй, понимания между ними нет. Кто в этом виновать — простите за выражение, пофиг — результат: вместе им не работать.


DDI>я с тобой согласен но здесь форум а не собеседование


Я думал мы тута обсуждаем да?

TL>>имхо, после 2-3-х собеседований с аналогичным результатом — точнее, с аналогичной причиной отрицательного результата — имеет смысл задуматься и первому, и второму. Но это так — имхо...


DDI>так и есть


А как именно? Мы тута обсуждаем, да?
Голь на выдумку хитра, однако...
Re[20]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 18:56
Оценка:
Здравствуйте, Ravlyk, Вы писали:

R>А вы в курсе что индексатор на каждый вызов делает проверку на вхождение индекса в границы. И операция эта занимает время? (В результате чего предложенные варианты без индексатора, но с болшей памятью работают быстрее).


вариант с циклом
минимальное время выполнения — сравнение двух крайних символов

вариант с копированием
минимальное время выполнения будет на порядки больше — это сабстринг + преобразование в массив + реверс + сабстринг + новая строка + сравнение

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

теперь открой какой нибудь файлик и посмотри как много там симметричных строк
Re[24]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 19:06
Оценка:
Здравствуйте, The Lex, Вы писали:

TL> Если честно, то я тоже (хоть и читаю в пол-уха — у нас вечер воскресенья) не понял какую такую "рекурсию" ты (Вы?) имеешь в виду и почему ты после 1-й неправильной попытки сказал "пробуй еще", а не попытался объяснить задачу.


я заметил тут многие на ты так что на ты

TL>В виду этого лично мне непонятно, зачем тратить твое и его время (мы о собеседовании — не про тебя и Ромашку здесь) на дальнейшие попытки.


собеседование это стрессовая обстановка и кандидат нервничает даже если серьезный профи это заметно
проколы бывают у всех
на собеседовании я стараюсь естественно показать ошибку и объяснить а не говорить пробуй еще
кроме того я оцениваю и свои усилия на получение информации и это тоже идет в рассчет

TL>>>имхо, после 2-3-х собеседований с аналогичным результатом — точнее, с аналогичной причиной отрицательного результата — имеет смысл задуматься и первому, и второму. Но это так — имхо...

DDI>>так и есть
TL> А как именно?

именно так как ты сказал в том сообщении
разборы полетов они всем помогают
Re[20]: C# - как проводить собеседование ?
От: Dan Dare III  
Дата: 04.11.07 19:12
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Ужасть-то какая. Тогда поясните, почему данный конкретный пример у

Р>меня работает быстрее

Р>

Р>TestSymmetric("12345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321123456789012345665432109876543211234567890123456654321098765432112345678901234566543210987654321");
Р>         }

Р>


ответил пользователю Ravlyk
смотри там
если не согласен пиши
Re[20]: C# - как проводить собеседование ?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.11.07 19:58
Оценка: 9 (1) :)
Здравствуйте, Ravlyk, Вы писали:

R>А вы в курсе что индексатор на каждый вызов делает проверку на вхождение индекса в границы. И операция эта занимает время? (В результате чего предложенные варианты без индексатора, но с болшей памятью работают быстрее).


А ты в курсе, что оптимизатор JIT такие проверки умеет устранять?
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[21]: C# - как проводить собеседование ?
От: Ravlyk Австралия http://stitcharteasy.com
Дата: 04.11.07 20:11
Оценка:
Здравствуйте, AndrewVK, Вы писали:

R>>А вы в курсе что индексатор на каждый вызов делает проверку на вхождение индекса в границы.

AVK>А ты в курсе, что оптимизатор JIT такие проверки умеет устранять?

Умеет, но не всегда, и надеятся на это безоговорочно не стОит. И в случае с рекурсией (и передачей индексирующих переменных через стек) он точно не справится.
Re[22]: C# - как проводить собеседование ?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.11.07 20:20
Оценка: +1
Здравствуйте, Ravlyk, Вы писали:

R>Умеет, но не всегда


В данном случае умеет.

R>, и надеятся на это безоговорочно не стОит.


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

R>И в случае с рекурсией (и передачей индексирующих переменных через стек) он точно не справится.


Если это будет критично, это быстро отловится при профилировании. А пока что я вижу хрестоматийный случай преждевременной оптимизации.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[19]: C# - как проводить собеседование ?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.11.07 20:43
Оценка:
Здравствуйте, Dan Dare III, Вы писали:

DDI>Здравствуйте, Ромашка, Вы писали:


DDI>

DDI>Задача(является ли строка симметричной, рекурсия) — 15 минут(не меньше) и три попытки


DDI>даже то решение что ты привел далеко от идеала цикл for в строке не зря есть индексатор



Первое решение, пришедшее в голову (предыдущий пост — прикол, хотел рассказ о себе услышать):
static bool IsSymmetric(string s)
{
    for (int i = 0; i < s.Length/2; i++)
    {
        if (s[i] != s[s.Length - 1 - i]) return false;
    }
    return true;
}

Работает в худшем случае в 2 раза быстрее (в релизе без студии), чем варианты в Array.Reverse.

Где тут применить РЕКУРСИЮ???
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.