Здравствуйте, dwebster, Вы писали:
D>Again, я потратил за задание два дня, разбираясь с boost asio, который до этого в глаза не видел.
Давайте и я вам еще раз: вы позволили себе высказать свою точку зрения на происходящие события. И тем самым спровоцировали негативные отзывы в адрес компании (кому-то не понравился сам факт наличия тестового, какой-то анонимный экспертный эксперт объявил разработчиков из этой компании в непрофессионализме, а продукты компании в низком качестве). При этом вы убеждены, что высказались объективно.
При этом компания не может себе позволить высказаться объективно по вашему поводу, а именно: пришел человек без нужных знаний, потратил кучу времени на простое тестовое, сделал абы как, важное обязательное требование вообще проигнорировал.
Здравствуйте, so5team, Вы писали:
Тё>>Помнится, кое-кто хранит обьекты в хеш мапе, ибо в подсчет ссылок нишмогла.
S>Тёмчик, ты опять ничего не понял, но щеки надул и авторитетно пукнул в лужу.
Ну конечно же ничего не понял, это ж сумрачный гений состима не мог укуренный дизайн выдать.
Тё>>алгоритмы 3 Тё>>оформление 5 Тё>>многопоточка 4.
S>На C++ с Asio в многопотоке давно программировал, экспертный ты наш?
Немного трогал асинхронный io в прошлом. А также, работал вместе с автором asio в одном отделе и ходил на пятничный beer.
S>PS. А что тема с алго-сложностью
Здравствуйте, Тёмчик, Вы писали:
S>>Тёмчик, ты опять ничего не понял, но щеки надул и авторитетно пукнул в лужу. Тё>Ну конечно же ничего не понял, это ж сумрачный гений состима не мог укуренный дизайн выдать.
А какой не укуренный? Только давай предметно.
S>>На C++ с Asio в многопотоке давно программировал, экспертный ты наш? Тё>Немного трогал асинхронный io в прошлом.
Т.е. ни строчки.
Тё>А также, работал вместе с автором asio в одном отделе и ходил на пятничный beer.
Т.е. ты оценки расставляешь просто потому, что квасил с Крисом? Прэлестно.
S>>PS. А что тема с алго-сложностью
Здравствуйте, scf, Вы писали:
scf>и потоки на каждый запрос не создает.
Такой теоретический вопрос. Если все запросы в одном потоке — то что делать, когда клиент медленный и ответ не передается за 1 пакет. Т.е. вы передали 1 TCP-пакет, потом как бы ждете подтверждения вроде, передаете второй пакет. Не помню уже теорию — вроде можно замедлить однопоточные сервера такими медленными клиентами, причем даже спец. атака была такая.
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, reversecode, Вы писали:
R>>вы уже отправили пуш реквест в репу asio examples по поводу фиксов таких ляпов ?
S>Нет. И придерживаюсь мнения, что в примерах не нужно отвлекаться на такие тонкости.
и это ваше мнение масштабируется на все библиотеки ?
тот же boost в который входит asio, итд
Здравствуйте, reversecode, Вы писали:
R>>>вы уже отправили пуш реквест в репу asio examples по поводу фиксов таких ляпов ?
S>>Нет. И придерживаюсь мнения, что в примерах не нужно отвлекаться на такие тонкости.
R>и это ваше мнение масштабируется на все библиотеки ?
Мое мнение базируется на том, что код вида:
std::vector<std::thread> workers;
for(std::size_t i = 0; i != workers_count; ++i) {
workers.push_back(std::thread{ []{ do_something(); } });
}
...
for(auto & w : workers) {
w.join();
}
содержит грабли, не имеющие отношения ни к Asio, ни к какой-либо другой библиотеке. Соответственно, примеры, которые призваны демонстрировать особенности конкретных библиотек не обязаны содержать код для обхода этих граблей.
Надеюсь, что я ответил на ваш вопрос. И жду, что вы таки ответите на мой, который вы проигнорировали. Хотя понимаю, что шансов на вменяемый ответ в вашем случае небольшой.
Здравствуйте, Shmj, Вы писали:
S>Такой теоретический вопрос. Если все запросы в одном потоке — то что делать, когда клиент медленный и ответ не передается за 1 пакет. Т.е. вы передали 1 TCP-пакет, потом как бы ждете подтверждения вроде, передаете второй пакет. Не помню уже теорию — вроде можно замедлить однопоточные сервера такими медленными клиентами, причем даже спец. атака была такая.
Упрощая, там event loop. Когда из сети приходит пакет данных на конкретное соединение,в поток-обработчик отправляется событие ip/port/указатель на массив данных. Обработчик должен не блокировать поток, при необходимости делегировать работу в другой поток. Примерно как это сделано в UI.
не беспокойтесь, я думаю сотрудники компании рано или поздно прибегут
если там не постоянная текучка кадров
сейчас говорят очень распространен тренд игнорировать любые вак где есть тестовые задания
и по отзывам, кандидаты находят очень достойные и адекватные места работы
касательно ваших опенсорс
видел один из них пару лет назад в продуктах streamlabs
как по мне притянуто за уши как не нужный элемент
поэтому вопрос, это вы им навязали/сотрудничаете или это их мало проф подход втянул избыточный функционал ?
Здравствуйте, reversecode, Вы писали:
R>не беспокойтесь
Я не беспокоюсь, я объясняю тов.dwebster свою точку зрения.
R>сейчас говорят очень распространен тренд игнорировать любые вак где есть тестовые задания
ИМХО, на рынке каждый имеет право придерживаться собственной стратегии: работодатели имеют право предлагать тестовые задания, соискатели имеют право таких работодателей игнорировать (или не игнорировать). В конце-концов каждый находит то, что ищет.
Другое дело, когда чью-то стратегию начинают поливать известной субстанцией.
R>видел один из них пару лет назад в продуктах streamlabs
Первый раз о таких слышу.
R>как по мне притянуто за уши как не нужный элемент
Что хоть за опенсорс?
R>поэтому вопрос, это вы им навязали
Очень бы хотелось научиться навязывать кому-нибудь бесплатный опенсорс, но пока что таким навыком не обладаю.
Здравствуйте, so5team, Вы писали:
S>Вы специально это требование проигнорировали в обоих реализациях?
Вместо выплёскивания токсичности было бы неплохо показать свою реализацию ведь судя по тому, что вы говорите такой сервер пишется за 2-3 часа. Можно даже юнит-тесты не писать.
Здравствуйте, Kernan, Вы писали:
K>Вместо выплёскивания токсичности
Я задал dwebster два простых прямых вопроса. Один про игнорирование одного из трех ключевых условий тестового, второй по поводу версии Ubuntu. Ни на один из простых вопросов ответа не получил. И при этом я выплескиваю токсичность? ok.jpg.
K>было бы неплохо показать свою реализацию
У dwebster был понятный стимул тратить время на такую задачу. Какой стимул должен быть у меня?
K>ведь судя по тому, что вы говорите такой сервер пишется за 2-3 часа.
Давайте вы покажите где я такое говорил?
K>Можно даже юнит-тесты не писать.
Как раз на нормальные юнит-тесты для такой задачи запросто может уйти часа 4. А если в решении озадачиться еще и контролем тайм-аутов, то и раза в два больше.
Здравствуйте, so5team, Вы писали:
S>Я задал dwebster два простых прямых вопроса. Один про игнорирование одного из трех ключевых условий тестового, второй по поводу версии Ubuntu. Ни на один из простых вопросов ответа не получил. И при этом я выплескиваю токсичность? ok.jpg.
1. Как я несколько раз писал ранее — что успел сделать за время, которое готов потратить на одно тестовое задание одной компании, то и сделал.
2. Версия Убунту написана в условии, которое я цитировал, и которое вы судя по всему прочитали. Убунту 16, минорная версия не указана, значит неважна.
Спасибо за ответы. Хочу еще пару вопросов задать, без всякой задней мысли, просто для лучшего понимания.
D>1. Как я несколько раз писал ранее — что успел сделать за время, которое готов потратить на одно тестовое задание одной компании, то и сделал.
Т.е. вы стали делать задание не продумав заранее принцип обработки входящих данных? Выглядит это так, что сперва попытались сделать то, что понимаете, в расчете на то, что в оставшееся время доведете до ума.
D>2. Версия Убунту написана в условии, которое я цитировал, и которое вы судя по всему прочитали. Убунту 16, минорная версия не указана, значит неважна.
Тут непонятно, если в условии 16.04/10, то почему тогда в README упоминается 20.10? Все-таки там по дефолту gcc в Ubuntu 16 и 20 сильно разных версий, в старых gcc, вроде как нормальной поддержки C++17 не было (std::optional в C++17 в стандарт только вошел, а у вас он используется).
Здравствуйте, so5team, Вы писали:
S>Т.е. вы стали делать задание не продумав заранее принцип обработки входящих данных? Выглядит это так, что сперва попытались сделать то, что понимаете, в расчете на то, что в оставшееся время доведете до ума.
Всё так. Сначала сделал способом, наиболее понятным для себя и наиболее удобным для покрытия юнит-тестами. Без оптимизаций.
После чего понял что потратил неадекватно много времени и отослал, с некоторой надеждой что ответят что-то вроде — да, вы сделали не все что требовалось, но ладно уж, сойдет.
S>Тут непонятно, если в условии 16.04/10, то почему тогда в README упоминается 20.10? Все-таки там по дефолту gcc в Ubuntu 16 и 20 сильно разных версий, в старых gcc, вроде как нормальной поддержки C++17 не было (std::optional в C++17 в стандарт только вошел, а у вас он используется.
20.10 у меня стояла на компе. Сделал на ней, ожидая что на 16 всё так же взлетит без проблем.
Потом поставил 16 на виртуалку, увидел что не взлетело, но.. см. выше. В ответном письме написал, что сорри, 20.10 не устроит ли? Зачем под старый компилятор переделывать.
Здравствуйте, Shmj, Вы писали:
S>Такой теоретический вопрос. Если все запросы в одном потоке — то что делать, когда клиент медленный и ответ не передается за 1 пакет.
Автор тестового задания использовал асинхронное чтение из сокета. Там при получении каких-то данных, они попадают в некий буфер, и сигнал в мутекс. Пользовательский поток ждет мутекса в цикле. По срабатыванию мутекса, пользовательский код выгребает данные и идентификатор конекшена. Таким образом, на чтение/запись по всем соединениям используется 1 поток.
Здравствуйте, scf, Вы писали: scf>Попробуй открыть мою домашнюю страницу — https://scf37.me держит тысячи запросов в секунду, и потоки на каждый запрос не создает.
Раз уж мы начали соревноваться, то мой многопоточный вэб-сервер на чистом Си работает на такой аппаратуре: . Можно возразить, что зачем я выбрал устаревший одноядерный процессор на 180 МГц и всего 32 МБ ОЗУ? Свой вэб-сервер я смогу запустить на табло автомобиля, перерисовывая внешний вид экранов "на лету" по желанию пользователя в полноэкранном режиме Интернет-обозревателя. Никакая ГУЙ-рисовалка вроде "Кьюта" и прочих такое не сможет. Моё преимущество в независимой обработке данных чистым Си и гибкости отрисовки экранов Джаваскриптом во время работы устройства по желанию пользователя.
Здравствуйте, Pitirimov, Вы писали:
P>Раз уж мы начали соревноваться, то мой многопоточный вэб-сервер на чистом Си работает на такой аппаратуре: . Можно возразить, что зачем я выбрал устаревший одноядерный процессор на 180 МГц и всего 32 МБ ОЗУ? Свой вэб-сервер я смогу запустить на табло автомобиля, перерисовывая внешний вид экранов "на лету" по желанию пользователя в полноэкранном режиме Интернет-обозревателя. Никакая ГУЙ-рисовалка вроде "Кьюта" и прочих такое не сможет. Моё преимущество в независимой обработке данных чистым Си и гибкости отрисовки экранов Джаваскриптом во время работы устройства по желанию пользователя.
Сервера сравнивать бессмысленно, это другая лига по ресурсам и по функционалу. Расскажите лучше, какие браузерные движки работают в embedded?
Здравствуйте, scf, Вы писали: scf>Расскажите лучше, какие браузерные движки работают в embedded?
Я пока ещё выбираю Интернет-обозреватель для сборки из доступных: . Может быть, народ подскажет какой легковесный вэб-движок и обозреватель лучше выбрать с поддержкой HTML5 и Джаваскрипта.