Простенькая тестовая задачка
От: Handie  
Дата: 28.06.12 07:32
Оценка: :))) :))) :)
Вот, предложили сделать забавное заданице

Разработать простейший WEB server, отвечающий следующим требованиям:
1) Возвращает статический HTML контент (CGI не нужны).
2) Однопроцессный, но многопоточный.
3) Рассчитан на большое количество одновременных запросов.
4) Корректно возвращает HTTP коды ошибок и заголовки.
5) Никаких стронних библиотек — только STL, posix, glibc
6) Сервер должен компилироваться и запускаться под Linux. "

Душевные ребята
Re: Простенькая тестовая задачка
От: Ryoga  
Дата: 28.06.12 07:49
Оценка:
Здравствуйте, 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[2]: Простенькая тестовая задачка
От: Handie  
Дата: 28.06.12 07:56
Оценка:
R>Нескромный вопрос — что за вакансия? А если не секрет, то и что за контора?

Программист С++.
Контора — ее имя слишком хорошо известно в узких кругах
Re: Простенькая тестовая задачка
От: Yarik_L  
Дата: 28.06.12 08:06
Оценка: :))
Здравствуйте, 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) навыки рефакторинга (чтобы не спалили).

Контора часом не из Редмонда?
Re[3]: Простенькая тестовая задачка
От: void78  
Дата: 28.06.12 08:06
Оценка:
Ну да: лошадь кушает овёс, Волга впадает в Каспий, а некоторые конторы (типа mail.ru или рамблер-а) требуют выполнения тестового задания, похожего на это.

искренне Ваш К.О.


R>>Нескромный вопрос — что за вакансия? А если не секрет, то и что за контора?


H>Программист С++.

H>Контора — ее имя слишком хорошо известно в узких кругах
Re: Простенькая тестовая задачка
От: De-Bill  
Дата: 28.06.12 08:11
Оценка:
H>Душевные ребята

Реализация в простейшем виде не должна занять больше 500 строк кода.
Re[2]: Простенькая тестовая задачка
От: Handie  
Дата: 28.06.12 08:34
Оценка:
DB>Реализация в простейшем виде не должна занять больше 500 строк кода.

Так надо еще все коды ошибок возвращать Boost — низзя. libevent/libev/libuv — низзя. epoll напрямую
Re[2]: Простенькая тестовая задачка
От: const_volatile  
Дата: 28.06.12 08:43
Оценка: +2 -1
Здравствуйте, De-Bill, Вы писали:

DB>Реализация в простейшем виде не должна занять больше 500 строк кода.


2) многопоточный.
4) Корректно возвращает HTTP коды ошибок и заголовки.


одного из этих двух пунктов достаточно, чтобы не уложиться. 500 строк — это тупо select/accept/send/recv в одном потоке и никакого функционала.
Re[3]: Простенькая тестовая задачка
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 28.06.12 08:51
Оценка:
Здравствуйте, Handie, Вы писали:

DB>>Реализация в простейшем виде не должна занять больше 500 строк кода.


H>Так надо еще все коды ошибок возвращать Boost — низзя. libevent/libev/libuv — низзя. epoll напрямую

Звери.
Sic luceat lux!
Re: Простенькая тестовая задачка
От: okman Беларусь https://searchinform.ru/
Дата: 28.06.12 09:11
Оценка:
Здравствуйте, 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>Душевные ребята


Это точно. Душевные ребята, и задания у них душевные.
Re[2]: Простенькая тестовая задачка
От: okman Беларусь https://searchinform.ru/
Дата: 28.06.12 09:16
Оценка: +1
Здравствуйте, Yarik_L, Вы писали:

Y_L>Все правильно. Проверяют три вещи:

Y_L>1) умение пользоваться гуглом (задача — найти готовый опенсорсный проект с заданными характеристиками);

5) Никаких стронних библиотек — только STL, posix, glibc

Re: Простенькая тестовая задачка
От: Abyx Россия  
Дата: 28.06.12 09:16
Оценка: :)))
Здравствуйте, 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%
In Zen We Trust
Re: Простенькая тестовая задачка
От: vayerx  
Дата: 28.06.12 09:34
Оценка:
О, я кажется тоже общался с этими ребятами :)
правда, я нашел работу раньше, чем они проверили задание.
если писать в труъ-стиле, то в 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>Душевные ребята :-)
Re[2]: Простенькая тестовая задачка
От: vayerx  
Дата: 28.06.12 09:39
Оценка:
Здравствуйте, okman, Вы писали:

O>Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine,

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

Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :)
Re: Простенькая тестовая задачка
От: redp Ниоткуда redplait.blogspot.com
Дата: 28.06.12 09:48
Оценка: :)))
бгг
паранойя не болезнь, а критерий профпригодности
Re[3]: Простенькая тестовая задачка
От: Handie  
Дата: 28.06.12 09:52
Оценка:
Здравствуйте, 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 */

, s_start_req_or_res
, s_res_or_resp_H
, s_start_res
, s_res_H
, s_res_HT
, s_res_HTT
, s_res_HTTP
, s_res_first_http_major
, s_res_http_major
, s_res_first_http_minor
, s_res_http_minor
, s_res_first_status_code
, s_res_status_code
, s_res_status
, s_res_line_almost_done

, s_start_req

, s_req_method
, s_req_spaces_before_url
, s_req_schema
, s_req_schema_slash
, s_req_schema_slash_slash
, s_req_host_start
, s_req_host_v6_start
, s_req_host_v6
, s_req_host_v6_end
, s_req_host
, s_req_port_start
, s_req_port
, s_req_path
, s_req_query_string_start
, s_req_query_string
, s_req_fragment_start
, s_req_fragment
, s_req_http_start
, s_req_http_H
, s_req_http_HT
, s_req_http_HTT
, s_req_http_HTTP
, s_req_first_http_major
, s_req_http_major
, s_req_first_http_minor
, s_req_http_minor
, s_req_line_almost_done

, s_header_field_start
, s_header_field
, s_header_value_start
, s_header_value
, s_header_value_lws

, s_header_almost_done

, s_chunk_size_start
, s_chunk_size
, s_chunk_parameters
, s_chunk_size_almost_done

, s_headers_almost_done
, s_headers_done

/* 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.
*/

, s_chunk_data
, s_chunk_data_almost_done
, s_chunk_data_done

, s_body_identity
, s_body_identity_eof

, s_message_done
};
Re[2]: Простенькая тестовая задачка
От: Handie  
Дата: 28.06.12 09:56
Оценка:
A>отправьте им ссылку на http сервер из примеров к asio, и скажите что Вы выполнили задание на 83%

Зачем я буду подвергать себя стрессам при общении со столь одаренными людьми?
Re[4]: Простенькая тестовая задачка
От: vayerx  
Дата: 28.06.12 09:58
Оценка:
Здравствуйте, Handie, Вы писали:

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

V>>Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :)

H>Сысоев обошелся вот такой простенькой стейт-машиной (из node.js)


там состояния и для запроса и для ответа. кроме того, например, для разбора http-версии выделять состояние на каждую букву не обязательно — можно сделать функционально. ну а в целом — таки да, примерно так :)
Re[3]: Простенькая тестовая задачка
От: okman Беларусь https://searchinform.ru/
Дата: 28.06.12 10:06
Оценка:
Здравствуйте, vayerx, Вы писали:

V>Не так уж и много, как может показаться вначале.


Угу, вначале обычно так и кажется, что не много
Re: Простенькая тестовая задачка
От: acDev Россия  
Дата: 28.06.12 10:29
Оценка:
Здравствуйте, Handie, Вы писали:

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

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

Ребята из рэмблера?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.