Re[2]: Слоник
От: sdf
Дата: 29.06.12 03:08
Оценка:
Здравствуйте, acDev, Вы писали:

D>Здравствуйте, Handie, Вы писали:


H>>Вот, предложили сделать забавное заданице

H>>Душевные ребята

D>Ребята из рэмблера?


Они-они. Это Слонег из Рампочты опять отжигает.
Re: Простенькая тестовая задачка
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 29.06.12 03:19
Оценка:
Только что понял, что ты не сказал самого главного. А сколько денег-то дают?
Re[4]: Простенькая тестовая задачка
От: sdf
Дата: 29.06.12 03:20
Оценка: 1 (1) +1
Здравствуйте, ML380, Вы писали:

V>>select и "большое количество одновременных запросов" "под Linux" — так себе идея.

ML>А как можно по-другому?
epoll, kqueue.
Re[2]: Простенькая тестовая задачка
От: Handie  
Дата: 29.06.12 06:10
Оценка:
AG>Судя по их ограничению 3 дня на выполнение- нормальное задание, действительно почитать API и написать, 8-15часов чистого времени на почитать, подумать, написать, отладить.

Сам про три дня придумал?
Re[3]: Простенькая тестовая задачка
От: ArtemGorikov Австралия жж
Дата: 29.06.12 07:00
Оценка:
Здравствуйте Handie, Вы писали:

H>Сам про три дня придумал?


Зачем же- ссылка на блог того нанимателя пробегала здесь в теме. С интересом почитал.
... Отправлено с помощью КЫВТ.андроид 0.1
Re[4]: Простенькая тестовая задачка
От: Handie  
Дата: 29.06.12 07:31
Оценка: +1
H>>Сам про три дня придумал?

AG>Зачем же- ссылка на блог того нанимателя пробегала здесь в теме. С интересом почитал.


Ссылка совсем не туда. И контора эта — не Рамблер.
лет пять назад я уже написал HTTP сервер в качестве тестового — с тех пор зарекся иметь дело с неадекватными работодателями и делать тестовые задания
Re: Простенькая тестовая задачка
От: sss1024 http://microforms.mobile-mir.com/
Дата: 29.06.12 08:03
Оценка: 1 (1) +1
Здравствуйте, 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://elonen.iki.fi/code/nanohttpd/#download

на жабе чуть больше 1000 строк. С++ по сравнению с жабой отстой, но эту тысячу строк можно переписать относительно быстро.
Re: Простенькая тестовая задачка
От: minorlogic Украина  
Дата: 29.06.12 09:03
Оценка:
Задача действительно простая. Но очень объемная. Это различные понятия.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: Простенькая тестовая задачка
От: vsb Казахстан  
Дата: 29.06.12 09:14
Оценка:
Здравствуйте, 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 сказать.
Re[3]: Простенькая тестовая задачка
От: okman Беларусь https://searchinform.ru/
Дата: 29.06.12 09:48
Оценка:
Здравствуйте, 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 коды ошибок и заголовки.

Re[2]: Простенькая тестовая задачка
От: antirest  
Дата: 29.06.12 09:55
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Только что понял, что ты не сказал самого главного. А сколько денег-то дают?


Автор не рассказал ещё и того, что в этой компании (не помню название) предлагают ещё и другое задание в качестве альтернативы — не такое масштабное, какой-то С++ контейнер. Или вообще какой-то собственный С++-код с многопоточностью.
Re: Простенькая тестовая задачка
От: justinian Мухосранск  
Дата: 29.06.12 09:59
Оценка:
Здравствуйте, 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>Душевные ребята


Сколько-то лет назад я делал именно такое тестовое задание. Задание получил в среду-четверг. Приступил в субботу утром, с перерывами потратил все выходные. Оффер получил, но так им и не воспользовался.
Re[4]: Простенькая тестовая задачка
От: vsb Казахстан  
Дата: 29.06.12 10:01
Оценка:
Здравствуйте, 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, останавливаемся на первой пустой строке. Потом по этому отображению при необходимости проверяем наличие интересующего заголовка и смотрим, чего от нас хотят.
Re[3]: Простенькая тестовая задачка
От: Handie  
Дата: 29.06.12 10:21
Оценка:
A>Автор не рассказал ещё и того, что в этой компании (не помню название) предлагают ещё и другое задание в качестве альтернативы — не такое масштабное, какой-то С++ контейнер. Или вообще какой-то собственный С++-код с многопоточностью.

Ну да, пришлите код который писали на прошлой или позапрошлой работе. Я на такие предложения всегда отвечал — NDA.
Я принципиально не делаю тестовые задания, просто в этот раз меня поразила масштабность задания
Re[4]: Простенькая тестовая задачка
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 29.06.12 10:27
Оценка:
Здравствуйте, Handie, Вы писали:

H>Ну да, пришлите код который писали на прошлой или позапрошлой работе. Я на такие предложения всегда отвечал — NDA.


А я просто даю линку на мой ГитХаб аккаунт. Все довольны
Re[5]: Простенькая тестовая задачка
От: Handie  
Дата: 29.06.12 10:40
Оценка: 1 (1)
KP>А я просто даю линку на мой ГитХаб аккаунт. Все довольны

А у меня все С++ репозитории — приватные
Re[5]: Простенькая тестовая задачка
От: okman Беларусь https://searchinform.ru/
Дата: 29.06.12 10:48
Оценка:
Здравствуйте, 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, может принести дополнительные баллы.

Все IMHO.
Re[2]: Простенькая тестовая задачка
От: Хон Гильдон Россия  
Дата: 29.06.12 10:54
Оценка: +1
Здравствуйте, redp, Вы писали:

R>бгг


Это типа подразумевается, что соискатель готов убить 3 дня на то, чтобы пройти собеседование в рамблер? Не удивительно, что никто не горит желанием
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Простенькая тестовая задачка
От: Donz Россия http://donz-ru.livejournal.com
Дата: 29.06.12 11:38
Оценка:
Здравствуйте, redp, Вы писали:

R>бгг


Для справедливости дал там ссылку на эту тему
Re[5]: Простенькая тестовая задачка
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.06.12 11:58
Оценка: +3
Здравствуйте, kaa.python, Вы писали:

Pzz>>Ну вроде речь о том, что надо с 793-го начинать, не шла


KP>А как ты реализуешь требования 1 и 3 хотя бы не проглядев RFC относящиеся в HTTP?


Ну я в нем свободно ориентируюсь, вообще-то. Это дает мне право утверждать в резюме, что я знаю протокол HTTP

Но в принципе, я не стал бы давать соискателю задачу, которая требует больше 1-2 часов на решение. Ну или если неймется, такая работа должна быть оплачена.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.