Домашнее задание, написать эффективный TCP-сервер с определенными требованиями. Код должен быть покрыт юнит-тестами. Раньше TCP-сервера писать не приходилось, потратил три дня почти full-time, отослал результат. Ответили что стилистически код понравился, но сервер недостаточно эффективен, в частности имеются лишние копирования данных. Оценил что на исправление замечаний может уйти еще N часов. Забил.
Что бы вы ответили на предложение "написать эффективный TCP-сервер" в качестве тестового? Звучит как бред.
компания во главе с говнокодерами из Network Optix
не способа вообще ничего стоящего написать
юзают qt в еммедеде
вместе с кутешной тупой, медленной и не эффективной сетевой имплементацией
и подцепленным гстриммером
че там они реально кодят когда уже все накожено до них и все готово?
я всегда улыбался когда встречал отзывы о той бестолковой компании
и завышенным чсв их типа свиньёров
так что я улыбнулся когда очередной чел опять помянул ее
стилистика... лишнее копирование...
типичный отказ тех кто никого никогда не нанимает))
ps если че, я вообще никаким боком к нетоптикусу
просто реверсил как то их говнософт
гугля параллельно встречал отзывы
S>Домашнее задание, написать эффективный TCP-сервер с определенными требованиями. Код должен быть покрыт юнит-тестами. Раньше TCP-сервера писать не приходилось, потратил три дня почти full-time, отослал результат. Ответили что стилистически код понравился, но сервер недостаточно эффективен, в частности имеются лишние копирования данных. Оценил что на исправление замечаний может уйти еще N часов. Забил.
S>Что бы вы ответили на предложение "написать эффективный TCP-сервер" в качестве тестового? Звучит как бред.
Видимо, что-то поменялось у NO. У меня было всего три этапа, третий как раз system design. По первым двум этапам было адекватное впечатление, но system design смазало все откровенно. Задача была на построение архитектуры подобной торенту, что-то в этом роде. Я ее подзавалил, хотя не могу сказать, что полностью. Из уст собеседующего постоянно сквозило, что у него нет времени на разговоры, причем с какой-то злобой все произносилось.
Самое интересное, время они сами назначают.
Касаемо эффективности, вот судя по вопросам на первых двух этапах, не показалось, что там сильный уклон в эту сторону. Да, было разворачивание списка)
Здравствуйте, Shmj, Вы писали:
S>Что бы вы ответили на предложение "написать эффективный TCP-сервер" в качестве тестового? Звучит как бред.
В 22 году любое тестовое задание звучит как бред. Возможно, ради вот прямо компании мечты можно сделать исключение, но если это просто очередная компания из списка — зачем тратить свое время? Не лучше ли за это время пройти пару-тройку собеседований в более адекватных компаниях?
А уж эффективный сервер написать... а операционку им написать не надо?
Здравствуйте, Shmj, Вы писали:
S>Что бы вы ответили на предложение "написать эффективный TCP-сервер" в качестве тестового? Звучит как бред.
Вообще задание интересное, у меня у самого небольшой бзик к оптимизации. Не люблю кучу лишних копирований. В основном как раз по работе и пишу сервера, которые должны работать на слабом железе. Но давать такое задание на собеседовании даже в голову не придет, это перебор.
S>Домашнее задание, написать эффективный TCP-сервер с определенными требованиями. Код должен быть покрыт юнит-тестами. Раньше TCP-сервера писать не приходилось, потратил три дня почти full-time, отослал результат. Ответили что стилистически код понравился, но сервер недостаточно эффективен, в частности имеются лишние копирования данных. Оценил что на исправление замечаний может уйти еще N часов. Забил.
S>Что бы вы ответили на предложение "написать эффективный TCP-сервер" в качестве тестового? Звучит как бред.
Ну почему как бред. Надо просто немного повести диалог — уточнить, что конкретно там хотят видеть. Предложить решение — скажем, юзаем буст асио, корутины, тредов создаем по количеству ядер умножить на два. У всех разное ожидание "эффективного сервера", может там сразу скажут, что не любят лишнее копирование данных. Сказать им — тогда юзать смарт-поинтеры и не будет никакого копирования. Может и тестовое тогда не понадобится вообще, а можно намекнуть — зачем вам тестовое, если решение вот оно описано нами только что. Вот отказ от диалога с их стороны — косяк, нужно наверное тогда забить.
Здравствуйте, Denwer, Вы писали:
D>Вообще задание интересное, у меня у самого небольшой бзик к оптимизации. Не люблю кучу лишних копирований. В основном как раз по работе и пишу сервера, которые должны работать на слабом железе. Но давать такое задание на собеседовании даже в голову не придет, это перебор.
Здравствуйте, Shmj, Вы писали:
D>>Вообще задание интересное, у меня у самого небольшой бзик к оптимизации. Не люблю кучу лишних копирований. В основном как раз по работе и пишу сервера, которые должны работать на слабом железе. Но давать такое задание на собеседовании даже в голову не придет, это перебор.
S>Ок, приведите тут ваш "эффективный TCP-сервер".
Здравствуйте, reversecode, Вы писали:
R>и много вы написали эффективных серверов и вообще на тестовых заданиях ?
Ни одного, но задача интересная и при наличии стимула я бы повозился. Общее представление о том, как это делать, у меня имеется.
R>даю намёк R>на тестовом задании показывают общие знания R>а не на дурняк кому то делают работу за спасиба
Я не считаю, что написание эффективного hello world сервера это работа, которая чего-либо стоит в плане пользы. Вполне себе хорошее тестовое задание. И вполне себе бесполезный на практике код (т.к. любой адекватный проект будет использовать готовую библиотеку, а не велосипед).
R>ну и к тому же, та компания не написала и не пишет никаких эффективных серверов R>обычный говнокод
Ну говнокод, так говнокод. Я же не говорю, что для любой компании буду тратить 3 дня на тестовое задание. Всё зависит от числе собеседований, от офферов, от самой компании. Если это будет Гугл, который будет меня потенциально приглашать в Цюрих, я ему HTTPS-реализацию на ассемблере напишу. Ну или попытаюсь, по крайней мере.
R>так что я бы сказал любой кандидат там оверквалифай для той компании
R>ну и вообще та компания никого никогда не нанимает
Я уже понял, что у тебя личная вендетта к той компании. Мой ответ был без какой-либо специфики относительно конкретной компании. К примеру первую работу я получил, написав реализацию malloc и GUI к этой реализации, визуализирующий выделение памяти, на WinAPI. Я на это потратил выходные и не считаю это плохой задачей, мне это было интересно и работу я получил в итоге.
Здравствуйте, kaa.python, Вы писали:
Тё>>Взять готовую библиотеку. Но это же про C++, правда? Там у них своя атмосфэра.
KP>Ну вообще взять готовую библиотеку — это современный C++ путь. Но могут быть и исключения
Здравствуйте, Тёмчик, Вы писали:
Тё>>>Взять готовую библиотеку. Но это же про C++, правда? Там у них своя атмосфэра.
KP>>Ну вообще взять готовую библиотеку — это современный C++ путь. Но могут быть и исключения
Тё>Библиотека копирует буфер!
Да ладно. Даже на жаве netty ничего не копирует зазря, а напротив там куча приседаний, лишь бы не скопировать нечаянно.
S>Неужели вы, простой Вася из Урюпинска, сможете написать что-то более эффективное?
Ну конечно не сможет. Впрочем как и авторы подобных тестовых заданий.
П.С.
Вспомнил историю про лишнее копирование. Лет 7 назад писали для СХД небольшой модуль, который данные (без обработки) из диска в сеть передавал (или наоборот, не помню точно). В классическом подходе нужно прочитать данные с диска в userspace, а потом послать их в нужный сокет. То есть нужно дважды из userspace в kernelspace переходить. Казалось, что sendfile должен сильно помочь. Переписали, поймали несколько deadlock-ов из-за ошибок в ядре и после замеров стало понятно, что производительность лучше не стала, а код сильно усложнился. Возможно это произошло из-за того, что sendfile был сырой на тот момент. Все это я к тому рассказал, что все эти теоретические измышления про скорость работы не всегда работают. Нужно смотреть запуски программы на конкретном железе в реальном окружении.