Re[2]: Оцените плс тестовое задание и результат
От: avpavlov  
Дата: 23.02.11 16:49
Оценка:
ГВ> как быстро посторонний сможет "въехать" в твоё решение.

Именно так у нас и происходит, это вообще самая важная характеристика кода.
Re: Оцените плс тестовое задание и результат
От: Synapse  
Дата: 28.02.11 15:36
Оценка:
Здравствуйте, Karn, Вы писали:

K>Привет всем. Читаю тут время от времени про то, что людям вот дают тестовые задания. Нет, не так начну..

K>Решил я тут сходить на собеседование в одну компанию. Позиция — ведущий .NET разработчик. Позвонили, говорят:
K>резюме неплохое у вас, но на эту позицию у нас предусмотрено тестовое задание небольшое, часов на 10-12. Не хотите?
K>Я подумал — 10 часов не убудет и согласился, задание было действительно небольшим, я его сделал, отправил, через 4(!) часа
K>после этого мне пришел ответ с отказом и комментариями тамошнего эксперта. Мне лично(наверное, больное самолюбие) комментарии
K>к отказу показались недостаточно существенными. Если вы посмотрите задание, решение и причины отказа, буду крайне благодарен.
K>Просто на мой взгляд задание я выполнил неплохо, и мне интересно насколько глубоко я ошибаюсь.
K>1. Задание
K>http://files.rsdn.ru/19230/task.txt
K>2. Решение
K>http://files.rsdn.ru/19230/HttpTraveller.zip
K>3. Причины отказа
K>http://files.rsdn.ru/19230/decline.txt

Запихивание в подобные утилиты юнит-тестов и тем более контейнеров мне кажется разновидностью онанизма. В тестах больше кода, чем в самой программе. Мне недавно дали задание сделать практически то же самое с веб-мордой, получилось двести строк на Питоне, включая свой тред-пул, пока, правда, не ответили.
Re[2]: Оцените плс тестовое задание и результат
От: avpavlov  
Дата: 28.02.11 16:54
Оценка: :)
S> В тестах больше кода, чем в самой программе.

В тестах всегда больше кода, чем в тестируемой ф-ции. Если у тебя не так, то ты пишешь неправильные тесты.
Re: Оцените плс тестовое задание и результат
От: Synapse  
Дата: 28.02.11 18:29
Оценка: 1 (1)
Здравствуйте, Karn, Вы писали:

K>Привет всем.

С точки зрения архитектуры я бы сделал как-то такЭ

    class Crawler
    {
        private HashSet<string> _visited;
        Func<Stream, IEnumerable<string>> _parse;
        Action<Stream> _store;
        
        public Crawler(Action<Stream> store, Func<Stream, IEnumerable<string>> parse) {}

        public void Enqueue(string url, int depth = 0) {
            /* короче, скачали */
            Stream stream = null;            
            _store(stream);
            if(depth > 0) {
                _parse(stream).Except(_visited).Each(link => Enqueue(link, depth - 1)); 
            }
        }
    }

    class FileStore
    {
        private long _total;
        private HashSet<Tuple<string, DateTime>> _files;
        public FileStore(long maxSize, Func<string, Stream> open, Action<string> delete) { }
        public void Save(Stream stream) { }
    }

    class ConsoleStore
    {
        public void Print(Stream stream) { }
    }

    class FileSystem
    {
        private string _root;
        public FileSystem(string root) { }
        
        public Stream Open(string fileName)
        {
            return new FileStream(Path.Combine(_root, fileName), FileMode.CreateNew);
        }

        public void Delete(string fileName)
        {
            File.Delete(Path.Combine(_root, fileName));
        }
    }

    class HtmlParser
    {
        public IEnumerable<string> Parse(Stream stream) {
            return Enumerable.Empty<string>();
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            var store = new ConsoleStore();
            var parser = new HtmlParser();
            var crawler = new Crawler(store.Print, parser.Parse);
            crawler.Enqueue(root);
        }
    }
Re[2]: угу
От: Философ Ад http://vk.com/id10256428
Дата: 28.02.11 20:45
Оценка:
_>P.S. — мое решение интересует кого-нибудь?

да, интересует
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Оцените плс тестовое задание и результат
От: Synapse  
Дата: 28.02.11 21:41
Оценка:
Здравствуйте, avpavlov, Вы писали:
A>В тестах всегда больше кода, чем в тестируемой ф-ции. Если у тебя не так, то ты пишешь неправильные тесты.
Оно, конечно, понятно, что основной код должен быть выразительным, чтобы проще читать было, а тесты тупыми, чтобы не ломались, но блин.
Re: Оцените плс тестовое задание и результат
От: AlexFox  
Дата: 28.02.11 21:47
Оценка: -1
Здравствуйте, Karn, Вы писали:

K>...Позвонили, говорят:

K>резюме неплохое у вас, но на эту позицию у нас предусмотрено тестовое задание небольшое, часов на 10-12. Не хотите?
K>Я подумал — 10 часов не убудет и согласился, задание было действительно небольшим, я его сделал, отправил, через 4(!) часа
K>после этого мне пришел ответ с отказом и комментариями тамошнего эксперта. Мне лично(наверное, больное самолюбие) комментарии
K>к отказу показались недостаточно существенными.

Ну правильно, не надо было вообще делать это задание. Посыл таких существ на три буквы — самое правильное решение.

K>3. Причины отказа


Кидалово ИМХО.
Re[3]: Оцените плс тестовое задание и результат
От: StandAlone  
Дата: 28.02.11 22:37
Оценка:
Здравствуйте, _Raz_, Вы писали:


_R_> public override Stream GetResponseStream() {

_R_> if(Logging.On)Logging.Enter(Logging.Web, this, "GetResponseStream", "");
_R_> CheckDisposed();

_R_> if (!CanGetResponseStream())

_R_> {
_R_> // give a blank stream in the HEAD case, which = 0 bytes of data
_R_> if(Logging.On)Logging.Exit(Logging.Web, this, "GetResponseStream", Stream.Null);
_R_> return Stream.Null;
_R_> }
_R_> if(Logging.On)Logging.PrintInfo(Logging.Web, "ContentLength="+m_ContentLength);
_R_> if(Logging.On)Logging.Exit(Logging.Web, this, "GetResponseStream", m_ConnectStream);
_R_> return m_ConnectStream;


Влезу и тоже попинаю — все эти if(Logging.On) Enter и Exit выглядят крайне неприятно. Лаконичность — одно из основных достоинств программиста. Не надо заслонять логику решаемых задач семантической избыточностью.
Надо как-то так
using(var logger = GeneralFabrique.GetLogger())
{
    logger.LogMessage(...);
}
)
Re[2]: Оцените плс тестовое задание и результат
От: StandAlone  
Дата: 28.02.11 22:39
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Да и зачем вам собственные потоки? Чем стандартный пул не устроил? В нём достаточное количество потоков для работы на среднестатистическом компьютере. А, вообще, взяли бы таски, раз уж четвёртый фреймворк разрешили.


Иногда удобнее делать _secondaryThread.Join(), чем возиться с примитивами синхронизации в случае ThreadPool.QueueUserWorkItem
Re: Оцените плс тестовое задание и результат
От: TimurSPB Интернет  
Дата: 28.02.11 23:05
Оценка: 1 (1)

Создать консольное windows-приложение (не прототип), выполняющее следующие задачи:
• Поиск всех ссылок типа http:// с html-страницы, адрес которой передан в качестве аргумента командной строки, а также со всех связанных с ней страниц (рекурсивно). Количество ссылок может достигать миллионов и более. Глубина рекурсии должна конфигурироваться.
• Вывод найденных уникальных ссылок по мере их обнаружения на консоль
• В последовательность файлов размером не более N Мбайт (конфигурируется)
...
Обязательно:
• Использование OOD/OOP
...
• ...VS2008/2010

Ну конечно, OOD это обязательно для парсера ссылок. А без Visual Studio 2010 так и вообще абсурд, браться за решение этой грандиозной задачи.
Make flame.politics Great Again!
Re: Оцените плс тестовое задание и результат
От: alexeiz  
Дата: 01.03.11 01:37
Оценка:
Здравствуйте, Karn, Вы писали:

K>резюме неплохое у вас, но на эту позицию у нас предусмотрено тестовое задание небольшое, часов на 10-12. Не хотите?

K>Я подумал — 10 часов не убудет и согласился, задание было действительно небольшим, я его сделал, отправил, через 4(!) часа

2000 строк в 23-х .cs файлах. Извини меня, но за 4 часа такое сделать невозможно. Может быть, поэтому они тебе и отказали?
Re[3]: Оцените плс тестовое задание и результат
От: _FRED_ Черногория
Дата: 01.03.11 05:41
Оценка:
Здравствуйте, StandAlone, Вы писали:

_FR>>Да и зачем вам собственные потоки? Чем стандартный пул не устроил? В нём достаточное количество потоков для работы на среднестатистическом компьютере. А, вообще, взяли бы таски, раз уж четвёртый фреймворк разрешили.


SA>Иногда удобнее делать _secondaryThread.Join(), чем возиться с примитивами синхронизации в случае ThreadPool.QueueUserWorkItem


Это очень странный аргумент в пользу выбора того или иного инструмента: различия гораздо более фундаментальны, нежели простое "удобство" т ого или иного метода.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Оцените плс тестовое задание и результат
От: placement_new  
Дата: 01.03.11 05:48
Оценка:
Здравствуйте, TimurSPB, Вы писали:

TSP>Ну конечно, OOD это обязательно для парсера ссылок. А без Visual Studio 2010 так и вообще абсурд, браться за решение этой грандиозной задачи.


мысла тестового задания ты так и не понял.
Re[3]: Оцените плс тестовое задание и результат
От: TimurSPB Интернет  
Дата: 01.03.11 06:30
Оценка:
_>мысла тестового задания ты так и не понял.
И в чем же его глубинный смысл?
Make flame.politics Great Again!
Re[3]: угу
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 01.03.11 08:34
Оценка:
Здравствуйте, Философ, Вы писали:
Ф>да, интересует

код.
log4net, на всякий случай.
мои комментарии.
Re[2]: Оцените плс тестовое задание и результат
От: StandAlone  
Дата: 01.03.11 09:44
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>2000 строк в 23-х .cs файлах. Извини меня, но за 4 часа такое сделать невозможно. Может быть, поэтому они тебе и отказали?


за 10 часов. 3 строки в минуту
Re[2]: Оцените плс тестовое задание и результат
От: StandAlone  
Дата: 01.03.11 09:51
Оценка:
Здравствуйте, AlexFox, Вы писали:

AF>Ну правильно, не надо было вообще делать это задание. Посыл таких существ на три буквы — самое правильное решение.


Трудно не согласиться.
Вот у этих наверняка не надо сушить мозги над тестовыми заданиями в 2000 строк объемом с неизвестным результатом:

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

Компания, судя по всему, называется Маккинзи — следовательно, молодой человек получает от 200 до 300 тыс. рублей в месяц.

А, ему всего 24. Тогда его зарплата чуть ниже — около 150 тысяч. 200-300 — это уровень associate (после МБА или с опытом работы от 5 лет и выше).

скорее всего, он junior consultant

Если ему 24 и он начал работать сразу после окончания ВУЗа, то он уже не совсем junior. Начальная зарплата в Маккинзи — около 100 тысяч. Консультант со стажем 2 года (так называемый BA3) получает от 150 до 170.

Источник
Re[3]: Оцените плс тестовое задание и результат
От: Synapse  
Дата: 01.03.11 10:02
Оценка:
Здравствуйте, StandAlone, Вы писали:
SA>Трудно не согласиться.
SA>Вот у этих наверняка не надо сушить мозги над тестовыми заданиями в 2000 строк объемом с неизвестным результатом:
Сарказм? Консультантов на собеседованиях дрючат намного круче, чем программистов.
Re[4]: Оцените плс тестовое задание и результат
От: StandAlone  
Дата: 01.03.11 10:11
Оценка:
Здравствуйте, Synapse, Вы писали:

S>Сарказм? Консультантов на собеседованиях дрючат намного круче, чем программистов.


DI контейнерами и нейронными сетями?
Или заставляют брать поверхностные интегралы 2-го рода в уме?
Re[2]: Оцените плс тестовое задание и результат
От: avpavlov  
Дата: 01.03.11 10:40
Оценка:
AF>Ну правильно, не надо было вообще делать это задание. Посыл таких существ на три буквы — самое правильное решение.

Посыл кого-либо на три буквы в ответ на необязывающую просьбу (когда можно просто отказаться) гарантировано позволяет детектить сказочных чудаков на букву М.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.