Довольно показательный момент. Человек совершенно не умеет общаться — мат на мате в ЖЖ и при этом дает не менее отмороженные тестовые задания. Вообще, хорошо что есть публичные форумы, ЖЖ и прочее — можно отсеять полнейшего неадеквата на ранней стадии общения. Причем, при столь неадекватном поведении, уже глубоко попровну на его профессиональные навыки — с ним же каждый день видется.
Разработать простейший WEB server, отвечающий следующим требованиям:
1) Возвращает статический HTML контент (CGI не нужны).
2) Однопроцессный, но многопоточный.
3) Рассчитан на большое количество одновременных запросов.
4) Корректно возвращает HTTP коды ошибок и заголовки.
5) Никаких стронних библиотек — только STL, posix, glibc
6) Сервер должен компилироваться и запускаться под Linux. "
Здравствуйте, const_volatile, Вы писали:
_>человек вместо бана озалупливает тролля. можно только восторгаться его терпением.
Эээ.. вы все в рамблере матом разговариваете? _>какое отношение это имеет к его работе? (оставим за скобками то, что рамблер-почта вполне себе работает и нареканий с профессиональной точки зрения не вызывает)
Дык он начальник, общение с подчиненными входит в его работу.
Здравствуйте, 3R, Вы писали:
3R>То, что правду говорит, это хорошо. Но не любят его, имхо, скорее за немотивированные оскорбления и хамство на ровном месте.
Оскорбления и хамство у него как раз вполне мотивированные. Он просто с дураками не церемонится.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
отправьте им ссылку на http сервер из примеров к asio, и скажите что Вы выполнили задание на 83%
Здравствуйте, kaa.python, Вы писали:
Pzz>>Ну вроде речь о том, что надо с 793-го начинать, не шла
KP>А как ты реализуешь требования 1 и 3 хотя бы не проглядев RFC относящиеся в HTTP?
Ну я в нем свободно ориентируюсь, вообще-то. Это дает мне право утверждать в резюме, что я знаю протокол HTTP
Но в принципе, я не стал бы давать соискателю задачу, которая требует больше 1-2 часов на решение. Ну или если неймется, такая работа должна быть оплачена.
aik>Зная камрада и его проект лично, он должен сблевывать (и небезосновательно) каждый раз когда слышит "IBM" Хотя, бывает, на самом деле и хуже, и лучше.
Я благодарен IBM за жизненный опыт, IBM научила меня не покупаться на громкие имена и "крутизну". Так как круче IBM уже ничего быть не может, то теперь меня работа в крутых компаниях не интересует.
Здравствуйте, 3R, Вы писали:
3R>Здравствуйте, sdf, Вы писали: D>>>Ребята из рэмблера? sdf>>Они-они. Это Слонег из Рампочты опять отжигает.
3R>Посмотрел ЖЖ этого Андрея Шетухина (http://stellar.moikrug.ru/). Это неадекват — вот характерный диалог: http://slonik-v-domene.livejournal.com/107288.html?thread=1920792#t1920792 3R>И это начальник почтовой службы Рамблера. Есть кто из Рамблера, знакомый с ним? Как вы с таким человеком работаете?
Здравствуйте, ML380, Вы писали:
V>>select и "большое количество одновременных запросов" "под Linux" — так себе идея. ML>А как можно по-другому?
epoll, kqueue.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Все правильно. Проверяют три вещи:
1) умение пользоваться гуглом (задача — найти готовый опенсорсный проект с заданными характеристиками);
2) базовые знания svn/git/etc (найденный проект надо как-то скопипастить);
3) навыки рефакторинга (чтобы не спалили).
Здравствуйте, sdf, Вы писали: sdf>Не из Рамблера, но пару раз пересекался. Человек весьма экспрессивый и прямолинейный, но дело знает хорошо. Очень часто правду в глаза говорит и не лицемерит, за это его многие не любят. sdf>каково работать с таким начальником, может рассказать Южанинов, который от него сбежал
То, что правду говорит, это хорошо. Но не любят его, имхо, скорее за немотивированные оскорбления и хамство на ровном месте.
Здравствуйте, Yarik_L, Вы писали:
Y_L>Все правильно. Проверяют три вещи: Y_L>1) умение пользоваться гуглом (задача — найти готовый опенсорсный проект с заданными характеристиками);
5) Никаких стронних библиотек — только STL, posix, glibc
Здравствуйте, De-Bill, Вы писали:
H>>Душевные ребята
DB>Реализация в простейшем виде не должна занять больше 500 строк кода.
Реализация на 500 будет похожа на студенческую поделку. Кучу функционала там не будет. Да хотя бы "Корректно возвращает HTTP коды ошибок и заголовки.". В итоге откажут, т.к. слишком простенький сервер.
H>>Сам про три дня придумал?
AG>Зачем же- ссылка на блог того нанимателя пробегала здесь в теме. С интересом почитал.
Ссылка совсем не туда. И контора эта — не Рамблер.
лет пять назад я уже написал HTTP сервер в качестве тестового — с тех пор зарекся иметь дело с неадекватными работодателями и делать тестовые задания
Здравствуйте, vayerx, Вы писали:
V>Здравствуйте, okman, Вы писали:
V>Не так уж и много, как может показаться вначале. V>У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться
ща. хотя бы почитайте за обфускацию урлов -- и все это сервер должен поддерживать. и тут я скоромно промолчу, если у нас документ в Вынь-кодировке, а клиент понимает только KOI-8 или DOS -- сервер должен перекодировать. иначе, это неправильный такой сервер будет.
парсить запросы, чтобы нас не захачили -- это тема отдельного разговора и тут все намного сложнее.
если писать по уму, чтобы дурь каждого была (не)видна, нужно писать свой рантайм, чтобы не зависеть от окружения. нужно писать логгеры и средства профилировки. плюс нагрузочные тесты, дабы доказать, что сервер держит соединения. причем, нужно обрабатывать не только "не найден", "плохой запрос", но и "сервер недоступен", т.к. недоступность сервера отличается от недоступности документа.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Нескромный вопрос — что за вакансия? А если не секрет, то и что за контора?
Ну да: лошадь кушает овёс, Волга впадает в Каспий, а некоторые конторы (типа mail.ru или рамблер-а) требуют выполнения тестового задания, похожего на это.
искренне Ваш К.О.
R>>Нескромный вопрос — что за вакансия? А если не секрет, то и что за контора?
H>Программист С++. H>Контора — ее имя слишком хорошо известно в узких кругах
Здравствуйте, Handie, Вы писали:
DB>>Реализация в простейшем виде не должна занять больше 500 строк кода.
H>Так надо еще все коды ошибок возвращать Boost — низзя. libevent/libev/libuv — низзя. epoll напрямую
Звери.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям:
H>3) Рассчитан на большое количество одновременных запросов.
Большое — это сколько, интересно ? Сто, тысяча, много тысяч ?
H>4) Корректно возвращает HTTP коды ошибок и заголовки.
Фиг его знает, какое-то размытое требование. Они что, хотят полноценный HTTP-сервер с
content negotiation, accept-range и сжатием ? Наверное, можно на все штатные GET-запросы
возвращать HTTP/1.0 200 OK, Content-Length и body, а на все остальное 400 Bad Request.
И пускай потом только заикнутся о том, что это некорректно.
H>5) Никаких стронних библиотек — только STL, posix, glibc
М-да... Нет, я все понимаю, но без сторонних либ это ж сколько кода лишнего писать !
Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine,
которая парсит статусную строку, вытаскивает URL, заголовки и т.д.
Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже
предположить, сколько именно.
H>Душевные ребята
Это точно. Душевные ребята, и задания у них душевные.
О, я кажется тоже общался с этими ребятами :)
правда, я нашел работу раньше, чем они проверили задание.
если писать в труъ-стиле, то в 500 строк вписаться реально, но не факт, что они такое хотят увидеть.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята :-)
Здравствуйте, okman, Вы писали:
O>Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine, O>которая парсит статусную строку, вытаскивает URL, заголовки и т.д. O>Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже O>предположить, сколько именно.
Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :)
Здравствуйте, vayerx, Вы писали:
V>Здравствуйте, okman, Вы писали:
O>>Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine, O>>которая парсит статусную строку, вытаскивает URL, заголовки и т.д. O>>Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже O>>предположить, сколько именно.
V>Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться
Сысоев обошелся вот такой простенькой стейт-машиной (из node.js)
enum state
{ s_dead = 1 /* important that this is > 0 */
/* Important: 's_headers_done' must be the last 'header' state. All
* states beyond this must be 'body' states. It is used for overflow
* checking. See the PARSING_HEADER() macro.
*/
Здравствуйте, Handie, Вы писали:
H>Здравствуйте, vayerx, Вы писали: V>>Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :)
H>Сысоев обошелся вот такой простенькой стейт-машиной (из node.js)
там состояния и для запроса и для ответа. кроме того, например, для разбора http-версии выделять состояние на каждую букву не обязательно — можно сделать функционально. ну а в целом — таки да, примерно так :)
Вобщем-то, хотят они довольно простую штуку. Особенно с учетом того что не надо делать ничего асинхронного. Думаю что реально сделать за часов 20 чистого времени. Но, надо ли, если не компания мечты
KP>Вобщем-то, хотят они довольно простую штуку. Особенно с учетом того что не надо делать ничего асинхронного. Думаю что реально сделать за часов 20 чистого времени. Но, надо ли, если не компания мечты
У меня после работы в IBM нет компании мечты. За что большое спасибо компании IBM.
Здравствуйте, redp, Вы писали:
R>бгг
ну у всех разные задачи: кому-то нужны сугубо практики — чтоб код лабали, кому-то с теорией — что бы вначале поисследовать могли, а кому-то сугубо теоретики. странно, конечно, что теоретики и практики косо смотрят друг на друга, пошетухински как-то
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Душевные ребята
Вообще конечно такие тестовые задания уже давно наводят на мысль... В пень такие компании и задания! Как тут уже сказали, разве что это только не компания мечты!
Но я не об этом хотел сказать. Вот ведь интересная штука, ведь строителю не предлагают же при приёме на работу продемонстрировать построить тестовый дом, этажей так в 9 с подводом коммуникаций и установкой ТВ антены в качестве фичи, или врачу на собеседовании же не предлагают отрезать кусочек мозга циркуляркой в качестве демонстрации своих способностей с последуюшим размышлением и разбором тестового задания, и т.д.
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Во. Только адаптировать для запуска в многопоточной среде. Ну и ждущий сокет, при коннекте к которому плодились бы эти потоки.
Здравствуйте, ML380, Вы писали:
ML>Во. Только адаптировать для запуска в многопоточной среде. Ну и ждущий сокет, при коннекте к которому плодились бы эти потоки.
select и "большое количество одновременных запросов" "под Linux" — так себе идея. старт потока на каждый коннект — в общем-то тоже излишне.
Здравствуйте, Handie, Вы писали:
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Судя по их ограничению 3 дня на выполнение- нормальное задание, действительно почитать API и написать, 8-15часов чистого времени на почитать, подумать, написать, отладить.
Здравствуйте, vayerx, Вы писали: V>старт потока на каждый коннект — в общем-то тоже излишне.
Выбор из пула свободного потока. Или имеется ввиду что-то другое?
V>select и "большое количество одновременных запросов" "под Linux" — так себе идея.
А как можно по-другому?
Здравствуйте, Handie, Вы писали:
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
День работы, примерно. Если многопоточный, ОК, два дня работы (надо еще придумать, куда там потоки применить )
Здравствуйте, kaa.python, Вы писали:
Pzz>>День работы, примерно. Если многопоточный, ОК, два дня работы (надо еще придумать, куда там потоки применить )
KP>Ты только на быстрый просмотр соответствующих RFC потратишь пол дня.
Ну вроде речь о том, что надо с 793-го начинать, не шла
Здравствуйте, acDev, Вы писали:
D>Здравствуйте, Handie, Вы писали:
H>>Вот, предложили сделать забавное заданице H>>Душевные ребята
D>Ребята из рэмблера?
AG>Судя по их ограничению 3 дня на выполнение- нормальное задание, действительно почитать API и написать, 8-15часов чистого времени на почитать, подумать, написать, отладить.
Здравствуйте, okman, Вы писали:
H>>5) Никаких стронних библиотек — только STL, posix, glibc
O>М-да... Нет, я все понимаю, но без сторонних либ это ж сколько кода лишнего писать ! O>Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine, O>которая парсит статусную строку, вытаскивает URL, заголовки и т.д. O>Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже O>предположить, сколько именно.
Зачем его парсить? Надо пропарсить первую строку вида GET {url} HTTP/1.0, всё остальное парсить не надо, прочитать файл, соответствующий url-у и выплюнуть его клиенту. Если файла нет, выплюнуть 404. Если первая строка не подохдит под указанный шаблон, bad request сказать.
Здравствуйте, vsb, Вы писали:
vsb>Зачем его парсить? Надо пропарсить первую строку вида GET {url} HTTP/1.0, всё остальное парсить не надо, прочитать файл, соответствующий url-у и выплюнуть его клиенту. Если файла нет, выплюнуть 404. Если первая строка не подохдит под указанный шаблон, bad request сказать.
Про заголовки в запросе не забыли ? Если их проигнорировать, реализация HTTP-сервера
будет некорректной. Например, клиент хочет принимать только HTML в кодировке UTF-8, для
чего указывает заголовки "Accept: text/html, *;q=0" и "Accept-Charset: UTF-8, *;q=0", а
в файле у нас лежит text/plain в Windows-1251. По теории HTTP, здесь нужно вернуть
статус "406 Not Acceptable". Понятно, что задание тестовое и на такие "мелочи" вроде
как могут и глаза закрыть, но ведь топикстартер писал, что (цитата):
4) [сервер] корректно возвращает HTTP коды ошибок и заголовки.
Здравствуйте, kaa.python, Вы писали:
KP>Только что понял, что ты не сказал самого главного. А сколько денег-то дают?
Автор не рассказал ещё и того, что в этой компании (не помню название) предлагают ещё и другое задание в качестве альтернативы — не такое масштабное, какой-то С++ контейнер. Или вообще какой-то собственный С++-код с многопоточностью.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Сколько-то лет назад я делал именно такое тестовое задание. Задание получил в среду-четверг. Приступил в субботу утром, с перерывами потратил все выходные. Оффер получил, но так им и не воспользовался.
Здравствуйте, okman, Вы писали:
vsb>>Зачем его парсить? Надо пропарсить первую строку вида GET {url} HTTP/1.0, всё остальное парсить не надо, прочитать файл, соответствующий url-у и выплюнуть его клиенту. Если файла нет, выплюнуть 404. Если первая строка не подохдит под указанный шаблон, bad request сказать.
O>Про заголовки в запросе не забыли ? Если их проигнорировать, реализация HTTP-сервера O>будет некорректной. Например, клиент хочет принимать только HTML в кодировке UTF-8, для O>чего указывает заголовки "Accept: text/html, *;q=0" и "Accept-Charset: UTF-8, *;q=0", а O>в файле у нас лежит text/plain в Windows-1251. По теории HTTP, здесь нужно вернуть O>статус "406 Not Acceptable". Понятно, что задание тестовое и на такие "мелочи" вроде O>как могут и глаза закрыть, но ведь топикстартер писал, что (цитата): O>
O>4) [сервер] корректно возвращает HTTP коды ошибок и заголовки.
Имхо, без конкретной спецификации подобных ситуаций самому, конечно, можно и apache http server в итоге написать, но это явно не то, что хотят видеть от тестового задания. В тестовой задаче хотят видеть, как человек организует код, как пишет комментарии, обработку ошибок. В данном задании базовые навыки работы со строками, файлами, понимание принципов написания серверов, держащих большое число соединений. А как вы пишете — там придётся конфиг писать, чтобы задавать кодировку файлов (ведь каждый файл может быть в своей кодировке). Для конфига парсер А на практике браузеру по барабану, он любую кодировку покажет, ещё и сам определит, если неправильно будет указано.
И вообще
If an Accept header field is present,
and if the server cannot send a response which is acceptable
according to the combined Accept field value, then the server SHOULD
send a 406 (not acceptable) response.
А SHOULD это не MUST.
Ну а так — парсинг заголовков не намного сложнее. Читаем каждую строку, находим ':', что получилось складываем в отображение name->value, останавливаемся на первой пустой строке. Потом по этому отображению при необходимости проверяем наличие интересующего заголовка и смотрим, чего от нас хотят.
A>Автор не рассказал ещё и того, что в этой компании (не помню название) предлагают ещё и другое задание в качестве альтернативы — не такое масштабное, какой-то С++ контейнер. Или вообще какой-то собственный С++-код с многопоточностью.
Ну да, пришлите код который писали на прошлой или позапрошлой работе. Я на такие предложения всегда отвечал — NDA.
Я принципиально не делаю тестовые задания, просто в этот раз меня поразила масштабность задания
Здравствуйте, vsb, Вы писали:
vsb>Имхо, без конкретной спецификации подобных ситуаций самому, конечно, можно и apache http server в итоге написать, но это явно не то, что хотят видеть от тестового задания. В тестовой задаче хотят видеть, как человек организует код, как пишет комментарии, обработку ошибок. В данном задании базовые навыки работы со строками, файлами, понимание принципов написания серверов, держащих большое число соединений.
В том-то и дело, что из данных входных условий, которые приведены в тестовом задании,
совершенно непонятно, что именно будут проверять и что хотят видеть в итоге.
Возможно, это как раз тест на глубокое понимание TCP и HTTP. Может быть, сделанный
экзаменуемым сервер сразу же запустят в тестовой среде и начнут бомбить его искусно
подготовленными заранее HTTP-запросами с "изюминками", чтобы сразу отсеять слишком
наивные или некорректные реализации. Или натравят на сервер какой-нибудь peach и
будут решать в таком духе: "продержался его сервак более часа — берем на работу".
При таком раскладе, кстати, сразу становится понятно, почему нельзя использовать
сторонние реализации, такие как apache или nginx, так как они выдержат подобные
испытание, а наспех писанный за пару вечеров сервер — вряд ли.
vsb>А как вы пишете — там придётся конфиг писать, чтобы задавать кодировку файлов (ведь каждый файл может быть в своей кодировке). Для конфига парсер А на практике браузеру по барабану, он любую кодировку покажет, ещё и сам определит, если неправильно будет указано.
Браузерам-то по барабану, а для каких-то приложений поддерживать тучу кодировок, способов
сжатия и динамически определять тип контента — слишком обременительно. Неизвестно же, из браузера
там будут тестировать этот сервер или нет.
vsb>И вообще
vsb> If an Accept header field is present, vsb> and if the server cannot send a response which is acceptable vsb> according to the combined Accept field value, then the server SHOULD vsb> send a 406 (not acceptable) response.
vsb>А SHOULD это не MUST.
Можно забить на SHOULD, но это будет "conditionally compliant".
vsb>Ну а так — парсинг заголовков не намного сложнее. Читаем каждую строку, находим ':', что получилось складываем в отображение name->value, останавливаемся на первой пустой строке. Потом по этому отображению при необходимости проверяем наличие интересующего заголовка и смотрим, чего от нас хотят.
В целом, я с Вами согласен — ради тестового задания вряд ли стоит порождать такого
монстра, который бы выдерживал большие нагрузки, умело обрабатывал некорректные
запросы, работал через прокси, имел кэш и т.д. Но согласитесь, даже в таком простом
деле, как парсинг заголовков, даже для тестового задания придется учесть некоторые
моменты, иначе решение никакой критики не выдержит и свалится на первой же встряске.
Например, пришло два одинаковых заголовка с разными значениями, или где-то потерялись
закрывающие кавычки, или в запросе встретился заголовок Trailer, который нужно не
потерять после вычитки body, и т.д. Если речь идет про устройство в такую контору,
как Рамблер или Гугл, то все, что связано с работой сетей и, в частности, обработкой
HTTP, может принести дополнительные баллы.
Здравствуйте, antirest, Вы писали:
A>Автор не рассказал ещё и того, что в этой компании (не помню название) предлагают ещё и другое задание в качестве альтернативы — не такое масштабное, какой-то С++ контейнер. Или вообще какой-то собственный С++-код с многопоточностью.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Phorm чтоли? Там на выбор же дают две задачи, либо это, либо реализация класса бинарного буффера (по сути аналог QByteBuffer). Мне, если честно, лень стало делать.
de1>Phorm чтоли? Там на выбор же дают две задачи, либо это, либо реализация класса бинарного буффера (по сути аналог QByteBuffer). Мне, если честно, лень стало делать.
человек вместо бана озалупливает тролля. можно только восторгаться его терпением.
3R>И это начальник почтовой службы Рамблера. Есть кто из Рамблера, знакомый с ним? Как вы с таким человеком работаете?
какое отношение это имеет к его работе? (оставим за скобками то, что рамблер-почта вполне себе работает и нареканий с профессиональной точки зрения не вызывает)
Здравствуйте, 3R, Вы писали:
3R>Здравствуйте, sdf, Вы писали: D>>>Ребята из рэмблера? sdf>>Они-они. Это Слонег из Рампочты опять отжигает.
3R> Как вы с таким человеком работаете?
Не из Рамблера, но пару раз пересекался. Человек весьма экспрессивый и прямолинейный, но дело знает хорошо. Очень часто правду в глаза говорит и не лицемерит, за это его многие не любят.
каково работать с таким начальником, может рассказать Южанинов, который от него сбежал
Здравствуйте, const_volatile, Вы писали:
_>человек вместо бана озалупливает тролля. можно только восторгаться его терпением.
Когда еда заходится матерным визгом у троллей настаёт время десерта.
3R>>И это начальник почтовой службы Рамблера. Есть кто из Рамблера, знакомый с ним? Как вы с таким человеком работаете? _>какое отношение это имеет к его работе?
Ну как бы если он так легко срывается в неадекват то и в работе очень вероятно ведёт себя так же.
Здравствуйте, okman, Вы писали:
H>>У меня после работы в IBM нет компании мечты. За что большое спасибо компании IBM. O>Это должно звучать гордо, позитивно или как-то иначе ?
Зная камрада и его проект лично, он должен сблевывать (и небезосновательно) каждый раз когда слышит "IBM" Хотя, бывает, на самом деле и хуже, и лучше.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
На моей первой работе было такое задание, но под Java. 16 часов работы, фигня вопрос.
Здравствуйте, De-Bill, Вы писали:
H>>Душевные ребята DB>Реализация в простейшем виде не должна занять больше 500 строк кода.
что значит в простейшем виде? в простейшем виде достаточно возвращать одну ошибку -- сервер не доступен. в чуть более сложном виде -- это вполне полноценный продукт, с которым можно выходить на рынок. скажем, маленький и шустренький сервер для встраиваемых устройств типа там сливного бачка от унитаза.
хотя, стоп. они сказали за линух. ну дык на любом (мыслимом) линухе web сервер уже есть из коробки. осталось только его запустить.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, superman, Вы писали:
S>Бек-енд тим в конторе на С? Там было даже чуть покруче...
Кстати, не знаю как насчет топикстартера, а вообще мне тоже эта тестовая задачка напомнила ту же, что и Вам... Правда на нее 3 недели давали...
Я фигней прострадал 2 недели и 6 дней... вообще не притронулся... а потом с 19.00 воскресенья до 11.00 понедельника — сделал... 16 часов чистого времени... все как положено — много кофе, нервы, крики в 2 часа ночи — WTF?? переделывание архитектуры с нуля и т.д.
И взяли, в Праге сейчас. Даже недочетов не нашли...
Это я к тому что кто как работает... Кто-то по чуть-чуть каждый день... Кто-то как я — залпом... Когда реально надо и когда очень хочется, то можно и за ночь такое сделать... Но я второй раз такое не осилю... По уму конечно — 3 недели (если по вечерам делать)...
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, vayerx, Вы писали:
V>>Не так уж и много, как может показаться вначале. V>>У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :) М>ща. хотя бы почитайте за обфускацию урлов -- и все это сервер должен поддерживать. и тут я скоромно промолчу, если у нас документ в Вынь-кодировке, а клиент понимает только KOI-8 или DOS -- сервер должен перекодировать. иначе, это неправильный такой сервер будет.
М>парсить запросы, чтобы нас не захачили -- это тема отдельного разговора и тут все намного сложнее.
М>если писать по уму, чтобы дурь каждого была (не)видна, нужно писать свой рантайм, чтобы не зависеть от окружения. нужно писать логгеры и средства профилировки. плюс нагрузочные тесты, дабы доказать, что сервер держит соединения. причем, нужно обрабатывать не только "не найден", "плохой запрос", но и "сервер недоступен", т.к. недоступность сервера отличается от недоступности документа.
Y_L>>Все правильно. Проверяют три вещи: Y_L>>1) умение пользоваться гуглом (задача — найти готовый опенсорсный проект с заданными характеристиками);
O>
O>5) Никаких стронних библиотек — только STL, posix, glibc
Это входит в понятие "найти готовый опенсорсный проект с заданными характеристиками"
Здравствуйте, Handie, Вы писали:
DB>>Реализация в простейшем виде не должна занять больше 500 строк кода.
H>Так надо еще все коды ошибок возвращать
Кажется в таких условиях возможных кодов там примерно 4 штуки. ok, файл не найден, нет прав на чтения файла, и клиент прислал какую-то херню.
H>Boost — низзя. libevent/libev/libuv — низзя. epoll напрямую
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
A>Кажется в таких условиях возможных кодов там примерно 4 штуки. ok, файл не найден, нет прав на чтения файла, и клиент прислал какую-то херню.
А Вы перенимайте передовую технологию собеседований в Яндекс. Пусть кандидаты сначала докажут, что у них есть воля к победе. А то приходит всякий немотивированный народ на собеседования.
Здравствуйте, Handie, Вы писали:
DB>>Реализация в простейшем виде не должна занять больше 500 строк кода.
H>Так надо еще все коды ошибок возвращать Boost — низзя. libevent/libev/libuv — низзя. epoll напрямую
А киньте, пожалуйста, в личку их название и контакты. Как раз специализируюсь на таком.